CLI Apps Target
Compile KERN to Commander.js CLI applications. Define commands, positional arguments, and typed flags — the compiler generates a complete CLI entry point.
What it generates
KERN input:
cli name=deploy version=1.0.0 description="Deploy tool"
command name=push description="Push to production"
arg name=service required=true description="Service name"
flag name=force short=f type=boolean description="Skip confirmation"
flag name=region short=r type=string default=us-east-1
command name=rollback description="Rollback last deploy"
arg name=service required=true description="Service name"
flag name=steps type=number default=1Compiled output:
#!/usr/bin/env node
import { Command } from 'commander';
const program = new Command()
.name('deploy')
.version('1.0.0')
.description('Deploy tool');
program
.command('push <service>')
.description('Push to production')
.option('-f, --force', 'Skip confirmation')
.option('-r, --region <string>', 'Region', 'us-east-1')
.action((service, opts) => {
// handler: push
});
program
.command('rollback <service>')
.description('Rollback last deploy')
.option('--steps <number>', 'Steps', '1')
.action((service, opts) => {
// handler: rollback
});
program.parse();Target-specific nodes
These nodes define the structure of a CLI application:
- cli — Application root with name, version, and description
- command — Named subcommand with description and action handler
- arg — Positional argument with name, required flag, and description
- flag — Named option with short alias, type (boolean, string, number), and default value
Configuration
The CLI target uses the default KERN configuration. The generated entry point includes a shebang line and is ready to be linked as a bin script in package.json.
import { defineConfig } from '@kernlang/cli';
export default defineConfig({
target: 'cli',
outdir: 'src/',
});Quick start
kern dev tool.kern --target=cli