OSS-first docs
These docs teach the open system first: contracts, generated surfaces, runtimes, governance, and incremental adoption. Studio shows up as the operating layer on top, not as the source of truth.
OpenAPI alternative
A spec-first approach that goes beyond OpenAPI with executable contracts and code generation.
OpenAPI Limitations
- OpenAPI is documentation-only
- No type safety from OpenAPI specs
- Manual SDK generation is complex
- Cannot validate implementations against OpenAPI
ContractSpec Advantages
- Executable contracts with validation
- Generate multiple outputs from one spec
- Type-safe by default
- Built-in testing and validation
Comparison: OpenAPI vs ContractSpec
Key differences between OpenAPI documentation and ContractSpec executable contracts.
OpenAPI
- • Documentation specification only
- • No runtime validation
- • Manual code generation
- • Type safety requires tools
- • Separate schemas from documentation
ContractSpec
- • Executable contracts
- • Built-in runtime validation
- • Automatic code generation
- • Type-safe by default
- • Unified spec and implementation
Export from Contracts
Generate OpenAPI documentation from ContractSpec for existing tooling.
# From ContractSpec contracts
contractspec openapi export \
--registry ./src/contracts/registry.ts \
--format yaml \
--out ./openapi.yaml
# Compare: Manual OpenAPI vs Generated
# Manual: Write OpenAPI by hand, maintain separately
# Generated: Single source of truth, always in syncBeyond Documentation
ContractSpec provides more than just API documentation.
// One contract, multiple outputs
import { UserApiContract } from './contracts/user-api.contract';
// Generated outputs
export const outputs = {
// API documentation (OpenAPI)
openapi: UserApiContract.toOpenAPI(),
// Client SDKs (TypeScript, Python, etc.)
clients: UserApiContract.generateClients({
languages: ['typescript', 'python', 'go'],
}),
// Database schemas (Prisma, Drizzle)
database: UserApiContract.toDatabase({
adapter: 'prisma',
}),
// API handlers (Express, Fastify, Next.js)
handlers: UserApiContract.toHandlers({
framework: 'express',
}),
// Validation middleware
validation: UserApiContract.toValidation({
library: 'zod',
}),
// Type definitions
types: UserApiContract.toTypescript(),
};Why ContractSpec
Keep educational and comparison content reachable without letting it define the primary OSS learning path.