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=1

Compiled 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