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.

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'.
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.
npm install trpc-cli
yarn add trpc-cli
pnpm add trpc-cli

Creates a tRPC router with a 'greet' procedure and maps it to a CLI using trpc-cli. Run with 'node cli.js greet --name World' to see output.

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!