Installation
Install SayKit and its supporting packages
SayKit is split into a small core runtime and a set of optional packages for configuration, formatters, transformers, and framework integrations. Pick the pieces you need.
What to install
Every SayKit project needs the same set of pieces:
| Package | Why |
|---|---|
saykit | The core runtime, the Say class and ICU formatting |
@saykit/config | The config schema (defineConfig) and the saykit CLI |
| One formatter | Reads and writes your translation files (e.g. @saykit/format-po) |
| One or more transformers | Extracts and rewrites macros from your source files |
| One build-tool plugin | Wires the transformer into your bundler |
The build-tool plugin and the transformers do different jobs: the transformer knows how to
parse and rewrite .ts/.tsx source, the plugin knows how to hook your bundler. You usually
install both.
Quick install
For a React + Vite project, including TanStack Start (or any other unplugin-compatible bundler):
pnpm add saykit @saykit/react pnpm add -D @saykit/config @saykit/format-po
@saykit/transform-js @saykit/transform-jsx unplugin-saykitnpm install saykit @saykit/react npm install -D @saykit/config @saykit/format-po
@saykit/transform-js @saykit/transform-jsx unplugin-saykityarn add saykit @saykit/react yarn add -D @saykit/config @saykit/format-po
@saykit/transform-js @saykit/transform-jsx unplugin-saykitbun add saykit @saykit/react bun add -D @saykit/config @saykit/format-po
@saykit/transform-js @saykit/transform-jsx unplugin-saykitFor a Next.js, React Native, Expo, or other Babel-driven project:
pnpm add saykit @saykit/react pnpm add -D @saykit/config @saykit/format-po
@saykit/transform-js @saykit/transform-jsx babel-plugin-saykitnpm install saykit @saykit/react npm install -D @saykit/config @saykit/format-po
@saykit/transform-js @saykit/transform-jsx babel-plugin-saykityarn add saykit @saykit/react yarn add -D @saykit/config @saykit/format-po
@saykit/transform-js @saykit/transform-jsx babel-plugin-saykitbun add saykit @saykit/react bun add -D @saykit/config @saykit/format-po
@saykit/transform-js @saykit/transform-jsx babel-plugin-saykitFor a Carbon Discord bot (with tsdown + Cloudflare Workers):
pnpm add saykit @saykit/carbon pnpm add -D @saykit/config @saykit/format-po
@saykit/transform-js unplugin-saykitnpm install saykit @saykit/carbon npm install -D @saykit/config @saykit/format-po
@saykit/transform-js unplugin-saykityarn add saykit @saykit/carbon yarn add -D @saykit/config @saykit/format-po
@saykit/transform-js unplugin-saykitbun add saykit @saykit/carbon bun add -D @saykit/config @saykit/format-po
@saykit/transform-js unplugin-saykitPackage directory
saykit
The core runtime. Exports the Say class. Almost every SayKit app depends on it.
@saykit/config
The config schema, the saykit CLI, and shared building blocks used by plugins and custom
transformers.
@saykit/react
React integration. <Say>, SayProvider, useSay, server runtime helpers.
@saykit/carbon
Carbon Discord-bot integration. SayPlugin, withSay, locale-aware
interaction.say.
unplugin-saykit
Universal bundler plugin: Vite, Rollup, Rolldown, Webpack, Rspack, esbuild, Farm, Bun.
babel-plugin-saykit
Babel plugin. Use this for Next.js, React Native, Metro, Expo, or any Babel-driven pipeline.
@saykit/format-po
Gettext PO formatter, the default for SayKit examples.
@saykit/transform-js / -jsx
The macro transformers for .js/.ts and .jsx/.tsx. Used by the build-tool plugins.
Peer dependencies
A few packages have peer requirements worth knowing about:
@saykit/reactpeersreactandsaykit. The package uses thereact-serverexport condition for server rendering, so React 18+ is required and React 19+ is recommended.@saykit/carbonpeers@buape/carbonandsaykit.babel-plugin-saykitexpects@babel/core(you almost certainly already have it).
Next: quickstart
If this is your first SayKit project, the quickstart walks through the whole loop (config, source, extraction, and runtime) in a few minutes.