contract-kit
v1.0.0
Published
Contract-first TypeScript framework for type-safe APIs and typed clients.
Downloads
672
Maintainers
Readme
contract-kit
Contract and client entrypoint for incremental Contract Kit adoption.
contract-kit gives existing apps the first Contract Kit boundary: define
contracts and call them from a typed client before adding the server runtime,
use cases, ports, and providers.
What's included
This package re-exports:
- @contract-kit/core - Contract definitions and builders
- @contract-kit/client - HTTP client for contract-based requests
What's not included
Install these separately when you need them:
- OpenAPI -
@contract-kit/openapi - Application layer -
@contract-kit/application - Domain modeling -
@contract-kit/domain - Error/catalog utilities -
@contract-kit/errors - Ports/providers -
@contract-kit/portsand@contract-kit/provider-* - Mail -
@contract-kit/mail - Server runtime/adapters -
@contract-kit/server,@contract-kit/next - Devtools -
@contract-kit/devtools - React integrations -
@contract-kit/react-query,@contract-kit/react-hook-form,@contract-kit/nuqs
Installation
npm install contract-kit
npm install zod # or valibot, arktype, etc.Add optional packages as needed:
npm install @contract-kit/openapi zod
npm install @contract-kit/next @contract-kit/ports next
npm install @contract-kit/mail
npm install @contract-kit/devtools
npm install @contract-kit/react-query @tanstack/react-query react
npm install @contract-kit/react-hook-form react-hook-form @hookform/resolvers
npm install @contract-kit/nuqs @contract-kit/react-query nuqs @tanstack/react-query reactQuick start
import { createContractGroup, createClient } from "contract-kit";
import { z } from "zod";
// Define a contract
const todos = createContractGroup()
.namespace("todos")
.prefix("/api/todos");
export const getTodo = todos
.get("/:id")
.pathParams(z.object({ id: z.string() }))
.responses({ 200: z.object({
id: z.string(),
title: z.string(),
completed: z.boolean(),
}) });
// Create a typed client
const client = createClient({
baseUrl: "https://api.example.com",
});
// Make type-safe requests
const getTodoEndpoint = client.endpoint(getTodo);
const result = await getTodoEndpoint.call({
path: { id: "123" },
});Optional add-ons
OpenAPI
npm install @contract-kit/openapi zodServer
npm install @contract-kit/next @contract-kit/ports nextReact
npm install @contract-kit/react-query @tanstack/react-query react
npm install @contract-kit/react-hook-form react-hook-form @hookform/resolvers
npm install @contract-kit/nuqs @contract-kit/react-query nuqs @tanstack/react-query reactDocumentation
For complete documentation, visit: https://contract-kit.dev
License
MIT
