# SDKs

On Pro and up, your CI asks the registry API for an SDK made from a registry version and your `latitude10.sdk.json`, and gets the package back as a `.tgz`. It then publishes it to your own npm or PyPI account. We never publish for you, and the generated code is yours, under the MIT licence.

- **TypeScript:** an ESM package with no runtime dependencies, for Node.js 20+, Deno, Bun, Workers and browsers.
- **Python:** a package for Python 3.11+, with `httpx` as its one dependency.

Each package's version follows the registry's breaking-change diff, and the same config and registry version give the same package again.

### 1. Add the config

Commit a `latitude10.sdk.json` naming your package: see [The config](config).

### 2. Generate the package

```sh
curl -sS -X POST "$BASE/sdks/typescript?version=latest" -H "Authorization: Bearer $LATITUDE10_KEY" -H "Content-Type: application/json" --data-binary @latitude10.sdk.json -o sdk.tgz
```

`version` is `latest`, the default, or a registry version number.

Members can also download a preview of the package from the SDK panel on the project's page.

How many endpoints an SDK may have, and how many builds a project gets a day, depend on the plan: see [Plans and limits](../get-started/plans-and-limits#sdks).

## In this section

- [The config](config): every field of `latitude10.sdk.json`.
- [The TypeScript package](typescript): its files, retries, errors and pagination.
- [The Python package](python): its clients, types and errors.
- [The publishing workflow](workflow): from a push to npm and PyPI.
- [SDK versioning](versioning): how each version is worked out.
- [OpenAPI extensions](openapi-extensions): naming, grouping and pagination.
- [Coverage](coverage): what's left out or typed as unknown.

## Where this comes from

- `app/sdk/_lib/builds.ts`
- `app/sdk/_lib/config.ts`
- `app/api/registry/v1/sdks/typescript/route.ts`
- `app/sdk/_lib/typescript/emit.ts`
