Skip to content
sitesolide

Docs Reference

CLI reference

The sitesolide CLI is one executable. Commands that act on a project run from its folder, the one holding its sitesolide.json.

OptionEffect
--jsonPrints one JSON event per line, ending with a result or an error. Every command takes it but init and run: see Agents.
--dry-runShows what the command would do, and changes nothing. Taken by setup, upgrade, refresh, deploy, lock, unlock and remove.
--apiSends the command through the dashboard's API, even when a server is configured.
--helpAfter any command, prints help instead of running it.
SITESOLIDE_CONFIG_DIR=<dir>Before any command, reads that installation's configuration folder instead of ~/.config/sitesolide.
CommandEffect
sitesolide setup <user@host> --zone <dns.zone> --email <you@example.com>Installs a fresh Debian 13 server: hardening, DNS records and every component. Resumable, and a no-op once done.
sitesolide setup <user@host> --contact <you@example.com>Sets the address shown on the page that asks for a preview code.
sitesolide setup <user@host> --user <name>Names the account that deploys, deploy by default.
sitesolide setup <user@host> --skip-dnsLists the DNS records to create by hand, and waits for them.
sitesolide setup <user@host> --dns-replaceReplaces DNS records that point elsewhere, on your decision alone.
sitesolide setup <user@host> --cloudflare-token-stdinReads the Cloudflare token from standard input.
sitesolide setup <user@host> --minimalLeaves out backups, the installer and the egress proxy.
sitesolide setup <user@host> --any-osGoes on with a system other than Debian 13, at your own risk.
sitesolide setup <user@host> --config-dir <dir>Keeps a second installation's configuration in its own folder.
sitesolide upgradeBrings every installed component to this release's code, redeploying only what differs. Resumable.
sitesolide refresh <slug>Writes a project's units again from the manifest on the server, without sending code.
sitesolide refresh --allRefreshes every project, one at a time, stopping at the first that fails.
sitesolide init --server <user@host> --zone <dns.zone> --email <you@example.com>Writes ~/.config/sitesolide/config.json for a server already set up. Takes --contact too.
sitesolide init --sites <path>Names your sites repository, whose manifests may point source outside their own repository.
sitesolide helpPrints the list of commands, with or without a configuration.
sitesolide --versionPrints the release this binary was built from.

Each command reads the Hetzner token from HCLOUD_TOKEN, or from standard input with --token-stdin.

CommandEffect
sitesolide machine create --provider hetzner --name <name>Orders a VM with its firewall and your SSH key, ready for setup.
sitesolide machine create --provider hetzner --name <name> --type <type>Picks the server type, cx23 by default.
sitesolide machine create --provider hetzner --name <name> --location <location>Picks the location, fsn1 by default.
sitesolide machine create --provider hetzner --name <name> --image <image>Picks the image, debian-13 by default.
sitesolide machine create --provider hetzner --name <name> --backupsTurns on the provider's daily backups, about 20% on the price.
sitesolide machine create --provider hetzner --name <name> --ssh-key <path.pub>Uploads that public key instead of the default one in ~/.ssh.
sitesolide machine list --provider hetznerLists the machines sitesolide created, with their addresses and price.
sitesolide machine destroy <name> --provider hetznerDeletes the machine and its firewall, for good.
sitesolide machine destroy <name> --provider hetzner --confirm <name>Takes the name typed back, where no terminal can ask for it.
sitesolide machine destroy <name> --provider hetzner --delete-keyDeletes the SSH key uploaded for it too.
CommandEffect
sitesolide detectPrints the sitesolide.json this folder implies, and writes nothing.
sitesolide detect --writeWrites it, never over an existing one.
sitesolide detect --slug <name>Names the project, rather than after its folder.
sitesolide deployPrepares, builds, pushes, installs, restarts and verifies the project.
sitesolide deploy --dry-runShows the systemd unit and the Caddy block, and builds and installs nothing.
sitesolide deploy --dry-run --buildRuns the build too, on your workstation.
sitesolide deploy --dry-run --compareBuilds, then lists what would change on the server.
sitesolide deploy --forceSwitches a hand-written unit to the generated one.
sitesolide deploy --yes --slug <name>In a folder with no sitesolide.json, writes the inferred one, then deploys.
sitesolide statusShows what the server actually runs, one line per unit.
sitesolide logsShows the project's journal, every service interleaved by time.
sitesolide logs --followKeeps following the journal.
sitesolide logs --lines <n>Goes <n> lines back, 50 by default.
sitesolide backupsLists the project's data snapshots, read only.
sitesolide domainShows where the project's own domain stands.
sitesolide domain --activateSwitches the site onto its domain, then rebuilds the domain table. --force switches even before the DNS points at the server.
sitesolide domain --deactivatePuts the site back on its preview address.
sitesolide remove --confirm <slug>Takes the project off the server, for good.
sitesolide run -- <command>Loads the secret files the manifest declares from ~/.config/sitesolide/secrets/, then runs the command.

Warning

remove and machine destroy cannot be undone. Run remove with --dry-run first.

CommandEffect
sitesolide shareShows the project's general access, and its people with access with their roles.
sitesolide share <email>...Gives people access, Can open by default. A whole domain is written @example.com.
sitesolide share <email>... --role <role>Gives the role named: can-open, viewer, developer or admin.
sitesolide share <email> --expires 30dSets how long password access lasts: 24h, 7d (the default), 30d or never.
sitesolide share --remove <email>...Takes their access away, from their next request. Takes a @domain too.
sitesolide peopleLists everyone with access, their roles, and who may create projects.
sitesolide people <email> --may-createLets them create projects, as Admin of what they create.
sitesolide people <email> --no-createTakes that right back.
sitesolide people --migrate-without-portalCarries access over without the portal's database, when it does not read.
sitesolide lockSets the site to Anyone with the code, and prints the code once. On a site with a code, prints the one in force.
sitesolide lock --statusShows the lock wanted, installed and measured, without touching it.
sitesolide lock --new-codeDraws a new code: the old link stops opening the site.
sitesolide unlockMakes the site Public again, its code dropped.

Restricted is set from the dashboard's Access section only.

A workstation with a token and no server goes through the dashboard, never SSH. deploy, status, logs (500 lines at most) and share work there too; share gives Can open alone, and deploy takes no --dry-run.

CommandEffect
sitesolide login --url https://dashboard.<zone>Keeps the token, typed at a prompt that does not echo it, and checks it.
sitesolide login --url https://dashboard.<zone> --token-stdinReads the token from standard input.
sitesolide secretsLists the project's secret files and variable names, never a value.
sitesolide secrets set <NAME>Sets a variable of <slug>.env, typed at a prompt that does not echo it.
sitesolide secrets set <NAME> --stdinReads the value from standard input, one trailing line break dropped.
sitesolide secrets remove <NAME>...Takes variables out of <slug>.env.
sitesolide secrets set <NAME> --restartWith set or remove, restarts the service afterwards and says whether it holds.
sitesolide restartRestarts the project's service, and says whether it holds.

The secrets commands need a token minted with Manage secrets. SITESOLIDE_API and SITESOLIDE_TOKEN, both in the environment, win over the files.

CommandEffect
sitesolide mcpServes the commands to an agent, over MCP on standard input and output.

See Agents for the --json events and the MCP tools.