Concepts
The handful of nouns typeship uses, and how they relate: spec, project, platform, language, generation, destination, and the packages that come out.
Spec
Your API's contract: a Swagger 2.0, OpenAPI 3.0, or 3.1 document, or a GraphQL schema. typeship reads it and never writes to it. There are no vendor extensions to add. Everything typeship needs beyond the spec lives in the project.
Project
One spec and its lineage. A project holds where the spec lives, which languages and platforms to generate, package names and destinations, spec patches, config, and the history of every generation and every spec version. See Projects.
Platform
One thing a project generates from the spec, with a switch each in project settings:
| Platform | What it is |
|---|---|
sdk | A typed client, in TypeScript, Python, or Go. Each language is its own platform. At least one is on. |
cli | Every operation as a command. |
mcp | Every operation as a tool for coding agents. |
The CLI and MCP server are built on the TypeScript SDK and ship inside the TypeScript package, so they keep that SDK on. Pro is priced per platform. Turning a platform off stops generating it; nothing already delivered is removed.
Language
The ecosystem a package is generated for: TypeScript, Python, or Go. A project generates one package per language, each written in that language's idiom rather than translated from a template. Python and Go packages are SDK-only.
Package
What a generation produces for one language: a complete, publishable package with readable source and zero runtime dependencies. Its name derives from your API's title unless you set one. It carries api.md, a full surface reference, and AGENTS.md, context for coding agents.
Generation
One run of the generator for one language, recorded with its trigger, warnings, and files. A generation is reproducible from its spec version. Generations are triggered manually, by a push to the spec, by the URL poller, or as a preview on a pull request.
Spec version
The exact spec text a generation came from, content-addressed by hash and kept per project. Read them back through the typeship API for diffs and audits.
Destination
Where a language's package lands: a repository and, optionally, a directory. Regeneration opens pull requests there. Dedicated repositories per language (acme/acme-node, acme/acme-python, acme/acme-go) are the recommended shape.
Regeneration
The loop that keeps packages current: detect a spec change, generate every language, open one pull request per language with the API changes spelled out. See Regeneration.
Quickstart
Create a project, generate your first package, install it, and make a call. Then link the spec so it stays current.
Overview
A typed client for your API with zero runtime dependencies, in TypeScript, Python, or Go. Typed errors, auto-pagination, retries, hooks, and validation, generated from your spec.