# SDKs
URL: /docs/sdks

Official, fully-typed client libraries for TypeScript, Python, and C#.



Tachyon's SDKs are thin, fully-typed wrappers over the JSON/HTTP API — same
resources, same error codes, same defaults as [talking to the API
directly](/api), just idiomatic bindings for your language. Source lives in
[`adikeshri/tachyon-sdk`](https://github.com/adikeshri/tachyon-sdk) under the
Apache 2.0 license.

| SDK                                              | Package                                                           | Install                         | Requirements       |
| ------------------------------------------------ | ----------------------------------------------------------------- | ------------------------------- | ------------------ |
| [TypeScript / JavaScript](/docs/sdks/typescript) | [`tachyon-sdk`](https://www.npmjs.com/package/tachyon-sdk) (npm)  | `npm install tachyon-sdk`       | Node 18+, ESM only |
| [Python](/docs/sdks/python)                      | [`tachyon-sdk`](https://pypi.org/project/tachyon-sdk/) (PyPI)     | `pip install tachyon-sdk`       | Python 3.8+        |
| [C# / .NET](/docs/sdks/csharp)                   | [`TachyonSdk`](https://www.nuget.org/packages/TachyonSdk) (NuGet) | `dotnet add package TachyonSdk` | .NET 8+            |

## Quickstart [#quickstart]

Each SDK follows the same shape: construct a client, create a collection,
index documents, search.

<Tabs items="['TypeScript', 'Python', 'C#']">
  <Tab value="TypeScript">
    ```ts
    import { Tachyon } from 'tachyon-sdk';

    const client = new Tachyon({ url: 'http://localhost:8108', apiKey: 'my-admin-key' });

    await client.collections.create({
      name: 'products',
      fields: [{ name: 'title', type: 'text' }],
    });

    await client.collection('products').documents.index({ id: '1', title: 'Wireless Mouse' });

    const results = await client.collection('products').search({ q: 'wireless mouse' });
    ```
  </Tab>

  <Tab value="Python">
    ```python
    from tachyon_sdk import Tachyon

    client = Tachyon(url="http://localhost:8108", api_key="my-admin-key")

    client.collections.create({"name": "products", "fields": [{"name": "title", "type": "text"}]})

    client.collection("products").documents.index({"id": "1", "title": "Wireless Mouse"})

    results = client.collection("products").search(q="wireless mouse")
    ```
  </Tab>

  <Tab value="C#">
    ```csharp
    using Tachyon.Sdk;

    var client = new TachyonClient(new TachyonClientOptions
    {
        Url = "http://localhost:8108",
        ApiKey = "my-admin-key",
    });

    await client.Collections.CreateAsync(new CollectionSchema
    {
        Name = "products",
        Fields = [new FieldSchema { Name = "title", Type = FieldType.Text }],
    });

    await client.Collection("products").Documents.IndexAsync(
        new Document { ["id"] = "1", ["title"] = "Wireless Mouse" });

    var results = await client.Collection("products").SearchAsync(new SearchParams { Q = "wireless mouse" });
    ```
  </Tab>
</Tabs>

## What every SDK covers [#what-every-sdk-covers]

* **Collections** — create, list, retrieve, delete
* **Documents** — index (single or batch upsert), retrieve, delete
* **Search** — full parameter set: `filter`, `sort`, `facet`, pagination, prefix, typo tolerance, match mode
* **Autocomplete** — `suggest`
* **Analytics** — top queries, zero-result queries, latency (in-memory, reset on server restart)
* **Operations** — `health` (no API key required) and `metrics` (Prometheus exposition format)
* **Typed errors** — one exception/error class per HTTP status, carrying the server's stable error `code` — see each SDK's page for the full table

All three accept an admin key (read/write) or a search key (read-only) the
same way the REST API does — see [Configuration](/docs/configuration#authentication).

## Choose an SDK [#choose-an-sdk]

* [TypeScript / JavaScript](/docs/sdks/typescript)
* [Python](/docs/sdks/python)
* [C# / .NET](/docs/sdks/csharp)
