trpc-cli
raw JSON → 0.14.0 verified Sat Apr 25 auth: no javascript
trpc-cli transforms a tRPC (or oRPC) router into a type-safe, documented CLI with zero boilerplate. Current stable version is 0.14.0, released frequently (multiple releases per month). It automatically generates positional arguments, options, help text, and shell completions from Zod/Valibot/Arktype schemas. Unlike general-purpose CLI frameworks like Commander or yargs, trpc-cli leverages tRPC's type system for end-to-end type safety and reuse of router logic across CLI, HTTP server, and programmatic APIs. It depends only on Commander as a runtime dependency (peer deps for validation libraries). Supports tRPC v10/v11, oRPC, and experimental standalone mode. ESM-only since v0.12.0.
Common errors
error Error [ERR_REQUIRE_ESM]: require() of ES Module .../node_modules/trpc-cli/index.js not supported. ↓
cause trpc-cli is ESM-only since v0.12.0, but the project uses CommonJS require.
fix
Switch to ESM (type: 'module' in package.json) or use dynamic import: const { cli } = await import('trpc-cli').
error Cannot find module '@trpc/server' or its corresponding type declarations. ↓
cause Missing peer dependency @trpc/server.
fix
Run 'npm install @trpc/server' (v10.45.2+ or v11.0.1+).
error TypeError: cli is not a function ↓
cause Default import used incorrectly (import cli from 'trpc-cli') instead of named import.
fix
Use named import: import { cli } from 'trpc-cli'.
Warnings
breaking trpc-cli v0.12.0 switched to ESM-only. CommonJS require() will throw. ↓
fix Convert your project to ESM (type: 'module' in package.json) or use dynamic import: const { cli } = await import('trpc-cli').
breaking v0.11.0 introduced peer dependencies for all packages except commander. Missing peer deps will cause runtime errors. ↓
fix Install peer dependencies: @trpc/server, @valibot/to-json-schema, effect, valibot, zod as needed.
deprecated Standalone mode (norpc) is experimental and may be removed in future versions. ↓
fix Avoid relying on standalone mode for production; use with @trpc/server or @orpc/server.
Install
npm install trpc-cli yarn add trpc-cli pnpm add trpc-cli Imports
- cli wrong
const { cli } = require('trpc-cli')correctimport { cli } from 'trpc-cli' - parseRouter
import { parseRouter } from 'trpc-cli' - proxify
import { proxify } from 'trpc-cli'
Quickstart
import { initTRPC } from '@trpc/server';
import { z } from 'zod';
import { cli } from 'trpc-cli';
const t = initTRPC.create();
const appRouter = t.router({
greet: t.procedure
.input(z.object({ name: z.string(), greeting: z.string().default('Hello') }))
.query(({ input }) => `${input.greeting}, ${input.name}!`),
});
const program = cli({ router: appRouter });
program.parse(process.argv);
// Usage: node greet.js greet --name World
// Output: Hello, World!