đĻ @simbo/clirk
A utility that makes creating Node.js CLIs easier by providing common functionality out of the box, with excellent performance and a minimal footprint.
âī¸ Parses command-line arguments with
minimist
âšī¸ Auto-handles --help
and --version
flags (unless overridden)
đ Provides formatted help and version messages
đ Handles SIGINT
(Ctrl+C) gracefully with
customizable messages
đ Exposes structured metadata (title, description, parameters, options, examples)
đī¸ Optimized for performance with a minimal dependency footprint
đ Fully typed with TypeScript
Install @simbo/clirk
from the npm registry:
npm i [-D] @simbo/clirk
For a complete API reference, see the documentation.
The
ClirkOptions
interface provides flexible configuration for parsing arguments, generating help
and version output, and customizing overall CLI behavior.
đ ./cli-config.ts
import type { ClirkOptions } from '@simbo/clirk';
export const CLI_CONFIG: ClirkOptions = {
importMetaDirname: import.meta.dirname, // required for CLI module context
argsOptions: {
// minimist options for parsing command line arguments
},
name: 'my-cli',
title: 'My CLI Tool',
description: 'An awesome CLI tool.',
// Add more details here for better --help output.
};
If your environment does not support import.meta.dirname
, use another way to
resolve the absolute directory path of your CLI module, such as
dirname(fileURLToPath(import.meta.url))
.
The
ClirkContext
returned by
clirk()
contains the parsed arguments and relevant CLI metadata.
đ ./main.ts
import { clirk } from '@simbo/clirk';
import { CLI_CONFIG } from './cli-config.js';
export async function main() {
const { args } = await clirk(CLI_CONFIG);
// Arguments are parsed.
// --help and --version flags are handled automatically.
// SIGINT handling is set up.
}
clitch
In your entrypoint script, wrap the main function with
clitch()
to log errors consistently and exit the process gracefully.
đ ./cli.ts
(set as bin
in package.json
)
#!/usr/bin/env node
import { clitch } from '@simbo/clirk/clitch';
import { main } from './main.js';
await clitch(main);