finds.dev← search

// the find

vadimdemedes/pastel

★ 2,408 · TypeScript · MIT · updated Mar 2026

🎨 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.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →