Command-line reference

Every command and option.

One executable, crisptastic, does everything: scaffolding, the development server, builds, deployment, and the production host. A second tool, crispc, is described at the end.

crisptastic --version          # crisptastic 0.1.0+build-0
crisptastic --help             # list commands
crisptastic help <command>     # help for one command

Every failure prints error: ... to standard error and exits with status 1. Success exits with 0. The global option --color auto|always|never controls colour; auto honours NO_COLOR and TERM=dumb.

Command map

CommandPurposeChapter
initCreate a new siteQuickstart
devDevelopment server: watch, recompile, live-reloadQuickstart
runSame server without live-reloadbelow
serveLow-level server that ignores crisptastic.tomlbelow
check, routesCompile and inspect without servingbelow
deployBuild, sign and encrypt a deployment CapsuleDeploying
capsule keygen|publish|pullSigning keys and Capsule storageDeploying
notifyAsk a host to activate a published CapsuleDeploying
hostProduction server for CapsulesRunning a host
fabric status|issue-joinCluster operationClustering
assets plan|publishDeploy-time asset publication (preview)Deploying
build cbor|capsule, artifact ...Internal Site Artifacts (not deployable)below
completions, manShell completion scripts and man pagesbelow

There is no status, logs, rollback, new, test, or fmt command. Some older design documents list them; they do not exist.

Development commands

init

crisptastic init [ROOT] [--force]

Creates (in ROOT, default the current folder) exactly three files: crisptastic.toml, index.html.crisp and assets/site.scss. It refuses to overwrite an existing one unless you pass --force.

dev

crisptastic dev [ROOT] [--config FILE | --no-config] [options]

Compiles the site, serves it, watches for changes and live-reloads the browser. Default address: http://127.0.0.1:6174/.

  • Edits to .crisp files and assets are picked up within about a second.
  • If a change fails to compile, the previous good version keeps serving, the error is printed in the terminal and shown in the browser.
  • Edits to crisptastic.toml are not picked up; restart.
  • A compile error at startup exits with status 1.
  • HTML responses are sent with no-store caching headers.
  • It listens on loopback by default, but --bind 0.0.0.0:6174 is accepted without warning.

dev runs your pages through the same engine as production, but it is not the production profile. These production behaviours are not active in dev: Secure cookies, the ban on state changes during GET, and the sealing of [env] values. CSRF checks are. See Sessions and forms and Configuration.

run

crisptastic run [ROOT] [--config FILE | --no-config] [--watch | --no-watch] [options]

Like dev without live-reload, the development namespace and the no-store headers. run watches for changes by default; pass --no-watch to disable that.

serve

crisptastic serve ROOT [--watch] [options]

A lower-level server. ROOT is required, crisptastic.toml is not used for runtime settings (only [security] and [cors] are applied), and it does not watch unless you pass --watch. A sessions folder is used only if you pass --sessions, and it must already exist. Prefer run.

Options shared by dev, run and serve

OptionMeaning
--bind ADDRHOST:PORT to listen on (default 127.0.0.1:6174)
--assets DIRStatic assets folder
--sass-load-path DIRExtra Sass search folder (repeatable)
--sessions DIRWhere to keep session files
--env NAME[=VALUE]Add a context.env value (repeatable). A bare NAME copies the variable from your shell
--debugPrint request telemetry to the terminal
--debug-file PATHWrite telemetry as JSON lines to a file
--trace-httpAdd per-request trace events
--telemetry-endpoint URL, --telemetry-token, --telemetry-token-env, --telemetry-filter, --telemetry-app, --telemetry-where, --telemetry-instance, --telemetry-flush-msTelemetry sink settings; see Configuration

Environment variables CRISPTASTIC_FETCH_API_KEY, _SCOPE, _CACHE_TTL_MS, _MAX_CONCURRENT_REQUESTS and _HEADERS_JSON override the [fetch] table.

check and routes

crisptastic check ./my-site      # ok: 5 routes, 3 partials
crisptastic routes ./my-site     # one route pattern per line

check compiles every page and partial, validates the crisptastic.toml in the site folder exactly as run would (unknown keys, wrong types, [security] and [cors]), and reports the first error with its file, line and column. It does not compile Sass or check for clashes between integration endpoints and pages (those are caught at startup). The path argument is required. routes prints dynamic segments as :name.

Build and deployment commands

These are explained in Deploying; the exact syntax is:

crisptastic capsule keygen --private release.pk8 --public release.pub

crisptastic deploy ROOT \
  --recipient AGE_RECIPIENT [--recipient ...] \
  --signing-key release.pk8 \
  --out ../site.capsule.age \
  [--publish-store-dir DIR | --publish-s3] \
  [--peer HOST:PORT --client-cert F --client-key F --server-ca F] \
  [--application-id 32_HEX] \
  [--desired-replicas N] [--minimum-ready-replicas N] [--sleepable]

crisptastic capsule publish CAPSULE (--store-dir DIR | --s3)
crisptastic capsule pull DIGEST --out FILE (--store-dir DIR | --s3)

crisptastic notify --peer HOST:PORT --digest SHA256 \
  --client-cert F --client-key F --server-ca F

--out must be outside the project folder. --desired-replicas, --minimum-ready-replicas and --sleepable apply only with --peer; without --peer they are silently ignored.

Host and cluster commands

See Running a host for host (it has many options) and Clustering for:

crisptastic fabric status --peer HOST:PORT --client-cert F --client-key F --server-ca F [--domain D]
crisptastic fabric issue-join --cluster-id 32HEX --boot-id 32HEX --credential-serial N \
  --endpoint quic://IP:PORT --certificate-der FILE --request-id 32HEX

Internal build commands

crisptastic build cbor ROOT --out site.cbor
crisptastic build capsule ROOT --out site.capsule
crisptastic artifact check|routes FILE
crisptastic artifact serve FILE

These produce a Site Artifact: the compiled routes and programs of a site, without signing, encryption, secrets or assets. It is useful for testing and embedding. It cannot be deployed to a host, and build capsule does not make the thing deploy makes, despite the name. Use deploy.

Shell completion and manual pages

crisptastic completions zsh > ~/.zfunc/_crisptastic     # bash, elvish, fish, powershell, zsh
crisptastic man --out ./man                             # writes crisptastic.1 and one page per command

Environment variables

VariableUsed by
NO_COLOR, TERMColour output
PORThost: default bind becomes 0.0.0.0:$PORT
CRISPTASTIC_FETCH_*[fetch] overrides
CRISPTASTIC_CAPSULE_S3_*, AWS_*S3 Capsule storage
CRISPTASTIC_LLM_ENDPOINTS_FILEOperator catalogue for the experimental [llm] capability
CRISPTASTIC_FABRIC_ADMISSION_AUTHORITYCluster join grants
Any name you list under [env_from_process] or in a provider's *_env settingSecrets and settings

crispc

crispc is a separate, portable compiler for Crisp templates. It generates source code in JavaScript, C, Rust or Java and is used to embed templates in other programs. It is not the web framework, and it implements a different dialect: it accepts @code { ... } blocks and host-language expressions, and rejects the web-only directives (@fetch, @shape, @session, @cookie, @redirect). Pages written for crisptastic should be checked with crisptastic check, not crispc.

crispc compile page.html.crisp --dialect js
crispc dialects        # js c rust java
crispc emitters

crispc build is an alias for compile.