Skip to content

Frontend CLI

This guide explains how to use the Zova CLI in the Cabloy monorepo.

Why the CLI matters

Zova provides a large number of CLI commands for generating code skeletons and running frontend workflows.

For AI-assisted development, the CLI should be the default starting point whenever a generator or refactor command already exists.

Example

Create a component named test in module training-student:

bash
npm run zova :create:component test -- --module=training-student

Command discovery pattern

Zova commands follow a consistent discovery model.

1. List all command groups and commands

bash
npm run zova :

2. List commands for a specific group

bash
npm run zova :create

3. Inspect help for one command

bash
npm run zova :create:component --help

High-value command families

From the current source tree, the most useful Zova command families for day-to-day development are:

  • bin:*
  • create:*
  • init:*
  • refactor:*
  • tools:*
  • openapi:*

Typical use cases include:

  • scaffold suites, modules, pages, components, mocks, and beans
  • initialize frontend config, locale, constants, assets, and typing helpers
  • run focused refactors such as page query, page params, component props, generic component updates, and related migrations
  • generate OpenAPI-related output
  • refresh metadata and dependency-related output

VS Code menus and the CLI

In practice, Zova workflows can be reached from two surfaces:

  • VS Code menus for discovery and ergonomics
  • the CLI for explicit, scriptable command execution

A practical rule is:

  • use menus when you want to discover the available workflow quickly in the editor
  • use the CLI when you want reproducible automation, explicit command history, or terminal-first documentation

These are not competing workflow systems. They are two entrypoints to the same underlying Zova command families.

Bean boilerplate variants

Some frontend bean scenes also expose named boilerplate variants.

A practical rule is:

  • the default scene template comes from the scene metadata boilerplate
  • a named variant such as --boilerplate=commandRow maps to a metadata key such as boilerplateCommandRow
  • supported variants are scene-defined, so do not assume every scene exposes them

The built-in command scene is the clearest current example:

bash
npm run zova :create:bean command test -- --module=training-student
npm run zova :create:bean command test -- --module=training-student --boilerplate=commandBulk
npm run zova :create:bean command test -- --module=training-student --boilerplate=commandRow
npm run zova :create:bean command test -- --module=training-student --boilerplate=commandDetailsRow

Use the default template for the command shape without helper bases, commandBulk for resource-oriented bulk commands, commandRow for table-row commands that need resource and id, and commandDetailsRow for detail-row commands that run against ICommandDetailsRowOptionsBase.

The same naming rule also applies to :create:component. For example, the built-in component variants now include detailsActionBulk, alongside variants such as formField, formActionRow, tableActionBulk, blockPage, and blockPageEntry.

Representative component example:

bash
npm run zova :create:component actionCreate -- --module=training-student --boilerplate=detailsActionBulk

Use detailsActionBulk when you need a detail-page bulk action controller scaffold that registers into IResourceDetailsActionBulkRecord and receives IJsxRenderContextDetails through host injection.

For the command-scene runtime model and source-reading path, see Command Scene Authoring.

For the current cross-stack lookup table, see Bean Scene Boilerplate Variants.

Practical workflow rule

When creating or refactoring frontend code, inspect npm run zova : or the relevant command family first, prefer the matching generator or refactor command, inspect the generated or transformed output, and only then make minimal follow-up edits.

This keeps frontend work aligned with Zova conventions and avoids avoidable manual scaffolding.

Released under the MIT License.