LogoRobo.js

Subcommands

Create nested command hierarchies with directories.

Subcommands

Nested directories in src/cli/ automatically become subcommands. This lets you organize related commands into groups like db migrate, config set, or auth login.

Directory mapping

FileCommand
db/migrate.tsmycli db migrate
db/seed.tsmycli db seed
config/get.tsmycli config get
config/set.tsmycli config set
auth/login.tsmycli auth login
auth/logout.tsmycli auth logout
migrate.tsmycli db migrate
seed.tsmycli db seed
get.tsmycli config get
set.tsmycli config set

Nesting depth

Subcommands support up to 3 levels of nesting. Parent groups are created automatically when the plugin encounters nested files — you only need to create the leaf command files.

src/cli/
├── cloud/
│   └── deploy/
│       └── staging.ts    # mycli cloud deploy staging (3 levels)

Example subcommand

src/cli/db/migrate.ts
import { createCliCommandConfig, type CliContext } from 'robo.js/cli.js'

export const config = createCliCommandConfig({
  description: 'Run database migrations',
  options: [
    { alias: '-t', name: '--target', description: 'Target version', type: 'string', default: 'latest' },
    { alias: '-f', name: '--force', description: 'Force migration', type: 'boolean' }
  ]
} as const)

export default async (ctx: CliContext<typeof config>) => {
  console.log(`Migrating to ${ctx.options.target}...`)
  if (ctx.options.force) {
    console.log('Force mode enabled')
  }
  // Migration logic here
  console.log('Migration complete!')
}
src/cli/db/migrate.js
export const config = {
  description: 'Run database migrations',
  options: [
    { alias: '-t', name: '--target', description: 'Target version', type: 'string', default: 'latest' },
    { alias: '-f', name: '--force', description: 'Force migration', type: 'boolean' }
  ]
}

export default async (ctx) => {
  console.log(`Migrating to ${ctx.options.target}...`)
  if (ctx.options.force) {
    console.log('Force mode enabled')
  }
  // Migration logic here
  console.log('Migration complete!')
}
mycli db migrate --target v2 --force
# Migrating to v2...
# Force mode enabled
# Migration complete!

Auto-generated help

Running a parent command without a subcommand shows available subcommands:

mycli db --help
# Usage: mycli db <command>
#
# Commands:
#   migrate  Run database migrations
#   seed     Seed the database

Next steps

On this page