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 descriptioncommand— Named subcommand with description and action handlerarg— Positional argument with name, required flag, and descriptionflag— 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