# Quickstart

End-to-end: create a dataset, append a few records with CLIP-style embeddings, query the top-K, then read one back.

## Read a live public dataset

The fastest way to see the SDK working — no ingest required. There's a 10K ImageNet dataset with CLIP-512 embeddings at a public-read S3 ref:

```ts

const space = await Space.fromUri(
  "https://vortex-test-20260518.s3.us-east-1.amazonaws.com/refs/imagenet-10k-clip",
);

console.log(space.tracks().map(t => `${t.key} (${t.modality})`));
// → ["image (image.jpeg)", "embedding (embedding.f32.dim=512.bucketed)", "label (...)"]

const { samples } = await space.samples();
console.log(`${samples.length} samples, anchor[0] = ${samples[0].anchor}`);
```

No credentials needed — the bucket policy grants anonymous read.

## Create your own dataset

```ts

const backend = new S3Backend("http://localhost:9000/demo");

// 1. Declare the shape.
const schema = new Schema()
  .addImage("image", { mime: "jpeg" })
  .addEmbedding("embedding", { dim: 512, algorithm: "dreamdb.ivf-cosine", rerank: true })
  .addScalarCategorical("label");

// 2. Create the dataset.
const ds = await Dataset.create("my-dataset", schema, backend);

// 3. Append records.
await ds.appendMany([
  { image: jpegBytesA, embedding: vecA, label: "cat" },
  { image: jpegBytesB, embedding: vecB, label: "dog" },
]);

// 4. Query.
for (const batch of await ds.iterVector({ field: "embedding", query: vecQ, topK: 5 })) {
  console.log(batch._time_anchors, batch.label);
}
```

That's it — 1 backend, 1 schema, 1 dataset, 1 query.

## Re-open later

```ts
const ds = await Dataset.open("my-dataset", { backend });
// Schema is recovered from the Manifest. No need to re-declare.
```

## Time-travel

Every write produces an immutable Manifest. Walk the DAG:

```ts
const history = await ds.history(50);
for (const entry of history) {
  console.log(entry.manifest, new Date(Number(entry.ts) / 1e6), entry.writer);
}
```

Open any prior Manifest as a read-only `Space`:

```ts
const past = await Space.fromUri(
  `${backend.baseUrl}/manifests/${history[10].manifest}`,
);
```

## Where to go next

- [API reference](/typescript-sdk-api.md) — every method with full signatures
- [Browser usage](/typescript-sdk-browser.md) — rendering blob fields as `<img src>`
- [Semantic search](/typescript-sdk-semantic-search.md) — text → embedding → top-K with CLIP
