// the find
vadimdemedes/pastel
🎨 Next.js-like framework for CLIs made with Ink
Pastel is a thin framework on top of Ink that gives React-based CLIs a Next.js-style file-based command structure: files in `commands/` become commands, folders become subcommands, and Zod schemas define options and arguments. It's for people already building or considering an Ink CLI who are tired of hand-wiring Commander and want typed args for free.
The file-based routing (index/default/nested commands, `alias` export) removes a real category of boilerplate compared to wiring up Commander subcommands by hand. Using a single Zod schema to drive both runtime parsing/validation and the TypeScript prop types is the actual killer feature here — no separate type definitions to keep in sync. It builds on Commander rather than reimplementing arg parsing, so edge cases in flag parsing are someone else's already-solved problem. Help text generation reads descriptions straight off the same Zod schema, so it can't drift from the real option set the way hand-written help strings do.
Option/argument types are limited to string, number, boolean, enum, array, and set — no nested objects, no zod refinements/transforms documented, no dates; anything more complex than flat scalars needs a workaround. There's no guidance in the README on testing commands (output assertions, mocking `options`/`args`), which matters more here than in a typical library since the whole point is command execution. It's a single-maintainer project (same author as Ink itself), so it inherits Ink's bus-factor risk rather than diversifying it. You're fully committed to Ink's terminal rendering model to use this at all, and Ink's flexbox-via-Yoga layout and redraw behavior on large output are known rough edges that this framework doesn't abstract away or mitigate.