Command line
The jant command ships with @jant/core. In a Jant project directory, run it with npx jant <command>; in the Docker image, jant is on the path. jant --help lists the commands, and jant <command> --help lists a command's options.
The commands and options on this page change only in a major release. jant also runs a few build and operations commands that --help leaves out; those are internal and can change in any release.
How a command reaches the site
A command works in one of two ways.
Through the database. migrate, reset-password, db export, and the site snapshot commands read or write the database directly. They choose the database this way:
| Option | Use |
|---|---|
--local |
Local D1, the database npm run dev uses |
--remote |
The D1 database in wrangler.toml |
--node |
The Node runtime's database, from DATABASE_URL or DATA_DIR |
--config |
Wrangler config file (default: wrangler.toml) |
--env |
Wrangler environment name |
--database |
D1 binding name (default: DB) |
--persist-to |
Local D1 state directory |
With no runtime flag, a command uses the Node runtime when DATABASE_URL or DATA_DIR is set, and local D1 otherwise. .env.node in the project directory is read first.
A database that holds several sites (the hosted setup) needs the site named: --site takes a site key or ID, --host a host (with --path-prefix for a site under a subpath), and --url the site's URL.
Over HTTP. site export, site import, and the maintenance commands call the site's API, so they run from any machine that can reach it. --url names the site. site export and site import take an API token from Settings → API Tokens, in JANT_API_TOKEN or --token. The maintenance commands take the server's INTERNAL_ADMIN_TOKEN, in that variable or --token, and fall back to SITE_ORIGIN and SITE_PATH_PREFIX from the environment or wrangler.toml when --url is left out.
Set up and run
jant setup
Creates the owner account and the site without a browser, the same as the two /setup screens. It reads the password from standard input. An install that has finished setup is left unchanged, so running it on every start is safe. Node runtime in single-site mode only.
printf '%s' "$OWNER_PASSWORD" | npx jant setup --email [email protected] --password-stdin
| Option | Use |
|---|---|
--email |
The owner's sign-in address (required) |
--password-stdin |
Read the owner's password from standard input (required) |
--site-name |
The site's name |
--language |
Language the site publishes in, as a BCP 47 tag (default: en) |
--time-zone |
The site's IANA time zone (default: UTC) |
--site-id |
Create the site with this ID instead of a random one |
--node |
Use the Node runtime even if DATABASE_URL is unset |
jant start
Starts the Node.js server. It takes no options; everything comes from the environment, described in Configuration.
jant migrate
Applies database migrations and data backfills. jant deploy and the Docker Compose setup run it for you.
| Option | Use |
|---|---|
--local, --remote, --node, --config, --env, --database, --persist-to |
Which database, see above |
jant deploy
Applies remote migrations, then deploys to Cloudflare Workers with the right static asset directory. Arguments after -- go to wrangler deploy.
| Option | Use |
|---|---|
--config, -c |
Wrangler config file (default: wrangler.toml) |
--env, -e |
Wrangler environment name |
--output, -o |
Publish directory for a site under a subpath (default: dist/public) |
--path-prefix |
Use this subpath instead of SITE_PATH_PREFIX from the config |
--database |
D1 binding name for migrations (default: DB) |
--skip-migrate |
Deploy without running migrations |
jant reset-password
Prints a password reset token that expires in 15 minutes.
| Option | Use |
|---|---|
--local, --remote, --node, --config, --env, --database, --persist-to |
Which database, see above |
--site, --host, --path-prefix, --url |
Which site, when the database holds several |
Move and back up content
Export and import explains when to use each of these.
jant site export
Exports a site as a Hugo site, to a ZIP archive or a directory.
npx jant site export --url https://your-site.example --output ./jant-site-export.zip
| Option | Use |
|---|---|
--url |
The site's URL (required) |
--output, -o |
A .zip path, or an empty directory to export into (default: jant-site-export.zip) |
--pull-media |
Download the media the export refers to into static/media/ (default: on) |
--no-pull-media |
Keep the original media URLs |
--token |
API token, instead of JANT_API_TOKEN |
jant site import
Imports a Hugo site export, a directory or a ZIP, into a site. The target site has to be empty.
npx jant site import --url https://your-site.example --path ./jant-site-export.zip --dry-run
| Option | Use |
|---|---|
--url |
The site's URL (required) |
--path |
The export directory or ZIP (default: the current directory) |
--dry-run |
Read and check the export without calling the site |
--skip-remote-media |
Leave absolute image URLs in post bodies as they are, instead of uploading the images |
--token |
API token, instead of JANT_API_TOKEN |
jant site pull-media
Downloads the media an existing export refers to, and rewrites the export to use the local copies.
| Option | Use |
|---|---|
--path |
The export ZIP or directory (default: jant-site-export.zip) |
--output |
Where to write the result when --path is a ZIP (default: overwrite the input) |
jant site snapshot export
Exports a snapshot: the database content with its IDs and storage keys, and the files they point to. It restores a site; it doesn't migrate content between setups.
| Option | Use |
|---|---|
--output, -o |
A directory or a .zip path (default: jant-site-snapshot) |
--force |
Overwrite an existing output path |
--skip-objects |
Leave the files out, for a target that already has the same storage keys |
--bucket, --bucket-binding |
The R2 bucket to read files from, by name or by Wrangler binding (default binding: R2) |
--local, --remote, --node, --config, --env, --database, --persist-to |
Which database, see above |
--site, --host, --path-prefix, --url |
Which site, when the database holds several |
jant site snapshot import
Restores a snapshot into a site, replacing its posts, collections, navigation, media, and custom URLs. Accounts and API tokens stay.
npx jant site snapshot import --path ./jant-site-snapshot.zip --replace
| Option | Use |
|---|---|
--path |
The snapshot directory or ZIP (default: the current directory) |
--replace |
Replace the site's content (required) |
--remap-site |
Rewrite the snapshot's site ID and storage keys to the target site |
--allow-missing-objects |
Import even when files the database refers to are missing from the snapshot |
--bucket, --bucket-binding |
The R2 bucket to write files to, by name or by Wrangler binding (default binding: R2) |
--local, --remote, --node, --config, --env, --database, --persist-to |
Which database, see above |
--site, --host, --path-prefix, --url |
Which site, when the database holds several |
jant db export
Writes the whole database to a SQL file.
| Option | Use |
|---|---|
--output, -o |
The SQL file (default: jant-export.sql) |
--local, --remote, --node, --config, --env, --database, --persist-to |
Which database, see above |
Maintenance
These commands call the site with INTERNAL_ADMIN_TOKEN. Each works in batches and can be run again safely.
jant search reindex
Rebuilds the search index from the stored post bodies.
| Option | Use |
|---|---|
--url |
The site's URL |
--limit |
Posts per batch (default: 50, at most 500) |
--once |
Run one batch and stop |
--token |
Internal admin token, instead of INTERNAL_ADMIN_TOKEN |
--config, --env |
The Wrangler config to read SITE_ORIGIN from |
jant posts rebuild-html
Rebuilds the stored HTML of every post at the current HTML format. Pages render stale posts correctly without it; the rebuild saves the work on every read.
| Option | Use |
|---|---|
--url |
The site's URL |
--site |
The site's ID, for a server that hosts several sites |
--limit |
Posts per batch (default: 50, at most 100) |
--dry-run |
Report what would change without writing |
--once |
Run one batch and stop |
--token |
Internal admin token, instead of INTERNAL_ADMIN_TOKEN |
--config, --env |
The Wrangler config to read SITE_ORIGIN from |
jant uploads cleanup
Clears upload sessions that expired, and purges deleted media whose recycle window has passed.
| Option | Use |
|---|---|
--url |
The site's URL |
--limit |
Sessions per batch (default: 20, at most 500) |
--token |
Internal admin token, instead of INTERNAL_ADMIN_TOKEN |
--config, --env |
The Wrangler config to read SITE_ORIGIN from |
jant telegram register-webhooks
Registers a webhook for every bot in TELEGRAM_BOT_TOKENS. See Telegram for when you need it.
| Option | Use |
|---|---|
--url |
The site's public URL (default: SITE_ORIGIN and SITE_PATH_PREFIX from the environment) |