Show HN: Crust – A CLI framework for TypeScript and Bun

  • Thread starter Thread starter jellyotsiro
  • Start date Start date
J

jellyotsiro

We've been building Crust (CrustJS - TypeScript CLI Framework for Bun), a TypeScript-first, Bun-native CLI framework with zero dependencies. It's been powering our core product internally for a while, and we're now open-sourcing it.
The problem we kept running into: existing CLI frameworks in the JS ecosystem are either minimal arg parsers where you wire everything yourself, or heavyweight frameworks with large dependency trees and Node-era assumptions. We wanted something in between.
What Crust does differently:
  • Full type inference from definitions — args and flags are inferred automatically. No manual type annotations, no generics to wrangle. You define a flag as type: "string" and it flows through to your handler.
  • Compile-time validation — catches flag alias collisions and variadic arg mistakes before your code runs, not at runtime.
  • Zero runtime dependencies — @crustjs/core is ~3.6kB gzipped (21kB install). For comparison: yargs is 509kB, oclif is 411kB.
  • Composable modules — core, plugins, prompts, styling, validation, and build tooling are all separate packages. Install only what you need.
  • Plugin system — middleware-based with lifecycle hooks (preRun/postRun). Official plugins for help, version, and shell autocompletion.
  • Built for Bun — no Node compatibility layers, no legacy baggage.
Quick example:

Code:
  import { Crust } from "@crustjs/core";
  import { helpPlugin, versionPlugin } from "@crustjs/plugins";

  const main = new Crust("greet")
    .args([{ name: "name", type: "string", default: "world" }])
    .flags({ shout: { type: "boolean", short: "s" } })
    .use(helpPlugin())
    .use(versionPlugin("1.0.0"))
    .run(({ args, flags }) => {
      const msg = `Hello, ${args.name}!`;
      console.log(flags.shout ? msg.toUpperCase() : msg);
    });

  await main.execute();
Scaffold a new project:

Code:
  bun create crust my-cli
Site: CrustJS - TypeScript CLI Framework for Bun GitHub: GitHub - chenxin-yan/crust: A TypeScript-first, Bun-native CLI framework with composable modules.
Happy to answer any questions about the design decisions or internals.



Comments URL: Show HN: Crust – A CLI framework for TypeScript and Bun | Hacker News

Points: 34

# Comments: 15

Continue reading...
 
Back
Top