CLI Reference

The wcl binary: parse, check, eval, set, fmt, repl, lsp, init, wdoc, and diff.

The wcl binary drives parsing, checking, evaluation, editing, formatting, the language server, and wdoc.

wcl parse

Parse a file and print the resulting document tree (forcing full evaluation). --profile writes a call-tree profile as JSON to stderr.

wcl parse site.wcl

wcl check

Parse and validate against the schema. Exit code 0 means valid, 1 a parse error, 2 a schema violation. System imports resolve against the embedded wdoc library, so this is the fast edit-loop checker for wdoc projects too.

wcl check site.wcl

wcl eval / wcl get

Resolve a dotted path from the document root and print the value. --json emits JSON; --profile writes a profile to stderr.

wcl eval site.wcl service.web.port
wcl get  site.wcl name --json

wcl set

Update the field at a dotted path with a new WCL expression, following the import chain to the declaring file. Quote shell-special values.

wcl set site.wcl name '"alpha"'
wcl set site.wcl service.web.port 9090u32
wcl set site.wcl accent :gold

wcl fmt

Reformat to canonical form (comments and blank-line groupings preserved). --in-place overwrites; --indent N sets indent width; --no-trailing-comma drops the trailing comma after match arms.

wcl fmt site.wcl                 # to stdout
wcl fmt site.wcl --in-place
wcl fmt site.wcl --indent 4

wcl repl

An interactive read-eval-print loop. Pass a file to resolve identifiers against its top-level fields. :quit or EOF exits.

wcl repl
wcl repl site.wcl

wcl lsp

Run the language server (diagnostics, formatting, symbols, go-to-definition, completion, hover, code actions). Defaults to stdio; --tcp ADDR listens on a socket and --log FILE writes trace logs.

wcl lsp
wcl lsp --tcp 127.0.0.1:9257 --log /tmp/wcl-lsp.log

wcl init

Scaffold a new project folder from a WCL template. The <template> is a built-in name (see wcl init --list), an installed user template, or a path to a template file or folder; [dest] is the destination directory. Built-in templates: minimal, plus three wdoc projects page, book, and presentation.

wcl init --list                                  # list built-in templates
wcl init minimal ./my-project                    # prompt for each property
wcl init minimal ./app -D name=app --defaults    # non-interactive, no prompts
wcl init minimal ./app --answers answers.json    # answers from a file
wcl init ./my-template.wcl ./out                 # a template of your own

wcl wdoc

Build or serve a wdoc documentation site. build renders HTML to --out; serve runs a live-reloading dev server; pdf renders one PDF per site; markdown renders a folder of .md files for AI consumers; skill renders a Claude skill folder (SKILL.md + references/ + assets/) from a :ai_skill site. --site NAME filters to one named site.

wcl wdoc build docs/main.wcl --out docs/_site
wcl wdoc serve docs/main.wcl --addr 127.0.0.1:8080
wcl wdoc pdf docs/main.wcl --out target/pdf --page-size letter
wcl wdoc markdown docs/main.wcl --out docs/_md
wcl wdoc skill docs/my-skill.wcl --out ./my-skill

wcl diff

Compare two documents and print the changed entities and fields. The comparison is over the evaluated document views (imports resolved), so a formatting-only edit yields an empty diff. The default output is a re-parseable WCL tree; --format json gives a flat array of change objects. Either side may be a <rev>:<path> git specifier.

wcl diff old.wcl new.wcl
wcl diff old.wcl new.wcl --format json
wcl diff HEAD~1:config.wcl config.wcl    # a committed version vs the working tree
wcl diff main:a.wcl feature:a.wcl        # across two branches

Related

- Schema & Decorators

- Imports & Modules