Skip to content

CLI Reference

The airdress-operator binary is the single entry point for running the Airdress operator, managing DNS records, enrolling endpoints, installing apps, and inspecting system state. Every subcommand supports --help for inline usage.

Terminal window
airdress-operator --help
airdress-operator <command> --help

These flags apply to every subcommand.

FlagShortEnvDefaultDescription
--config <PATH>-cAIRDRESS_CONFIG/etc/airdress/operator.tomlPath to the TOML config file
--log-level <LEVEL>-lAIRDRESS_LOGinfoLog verbosity: trace, debug, info, warn, error
--format <FORMAT>humanOutput format: human or json

The --format json flag is useful for scripting. When set, every command that produces output emits newline-delimited JSON instead of human-readable text.

Start the operator relay server. This is the primary long-running process that establishes a WireGuard tunnel to the nearest Airdress relay PoP and listens for incoming connections.

Terminal window
airdress-operator serve [FLAGS]
FlagShortEnvDefaultDescription
--bind <ADDR>-bAIRDRESS_BIND127.0.0.1:8080HTTP listener address
--wg-port <PORT>-wAIRDRESS_WG_PORT51820WireGuard UDP port
Terminal window
# Start with defaults
airdress-operator serve
# Bind to all interfaces on a custom port
airdress-operator serve --bind 0.0.0.0:9090 --wg-port 51821
INFO operator ready bind=127.0.0.1:8080 wg_port=51820

Validate and display the resolved configuration. The output shows the final merged result of compiled defaults, config file values, and environment variable overrides.

Terminal window
airdress-operator config [FLAGS]
FlagShortEnvDefaultDescription
--checkValidate without printing. Exits 0 on success, non-zero on error.
Terminal window
# Print resolved config
airdress-operator config
# Validate only (useful in CI)
airdress-operator config --check && echo "OK"

Check whether the operator is running and its relay tunnel is established.

Terminal window
airdress-operator health [FLAGS]
FlagShortEnvDefaultDescription
--url <URL>-uAIRDRESS_URLhttp://127.0.0.1:8080Operator base URL to probe
Terminal window
airdress-operator health
OK operator healthy uptime=3h12m tunnel=established

Display operator status and runtime metrics. This includes tunnel state, connected endpoints, DNS record count, and resource usage.

Terminal window
airdress-operator status
Operator airdress-operator 0.x.y
Uptime 3h 12m 45s
Tunnel established (relay-ams, 12ms RTT)
Endpoints 2 enrolled
DNS records 4

Manage DNS records served by the operator’s built-in authoritative DNS server.

Add a DNS record.

Terminal window
airdress-operator dns add <NAME> <TYPE> <RDATA> [--ttl <SECS>]
Argument / FlagDefaultDescription
NAMERecord name (e.g. myapp.humans.airdress.co)
TYPERecord type: A, AAAA, CNAME, TXT, MX, SRV
RDATARecord data (e.g. 192.168.1.10)
--ttl <SECS>60Time to live in seconds
Terminal window
airdress-operator dns add myapp.humans.airdress.co A 192.168.1.10 --ttl 300

Remove DNS records. If TYPE is omitted, all records for the name are removed.

Terminal window
airdress-operator dns rm <NAME> [<TYPE>]
Terminal window
# Remove all records for the name
airdress-operator dns rm myapp.humans.airdress.co
# Remove only A records
airdress-operator dns rm myapp.humans.airdress.co A

List all DNS records managed by the operator.

Terminal window
airdress-operator dns list
NAME TYPE RDATA TTL
myapp.humans.airdress.co A 192.168.1.10 300
api.humans.airdress.co A 192.168.1.11 60

Reload DNS records from the configuration. Internally sends SIGHUP to the DNS subsystem.

Terminal window
airdress-operator dns reload

Manage the embedded PostgreSQL instance. When the operator runs without an external database.url, it manages a PostgreSQL child process automatically. These subcommands inspect that instance.

Print the PostgreSQL data directory.

Terminal window
airdress-operator postgres path
./var/postgres

Print the PostgreSQL version requirement.

Terminal window
airdress-operator postgres version
=18.3.0

Print the connection URL for the embedded or configured database.

Terminal window
airdress-operator postgres url

Open an interactive psql session against the operator database. This execs into psql with the correct connection parameters.

Terminal window
airdress-operator postgres psql

Manage the encrypted plugin database.

Generate a random 32-byte master encryption key, base64-encoded. Store this value securely; it is required to decrypt plugin data.

Terminal window
airdress-operator plugin-db init-key
dGhpcyBpcyBhIDMyLWJ5dGUga2V5IGZvciBkZW1v...

Manage device endpoints enrolled with the operator.

Enroll a new device endpoint.

Terminal window
airdress-operator endpoint enroll [FLAGS]
FlagShortEnvDefaultDescription
--airdress <NAME>Airdress name to enroll under
--bootstrap-token <TOKEN>AIRDRESS_BOOTSTRAP_TOKENOne-time bootstrap token
--device-label <LABEL>Human-readable device label
--transport-profile <PROFILE>Transport profile to use
Terminal window
airdress-operator endpoint enroll \
--airdress myname \
--bootstrap-token abc123 \
--device-label "dev-laptop"

List enrolled endpoints.

Terminal window
airdress-operator endpoint list --token <TOKEN>
FlagShortEnvDefaultDescription
--token <TOKEN>AIRDRESS_TOKENBearer token for authentication

Revoke an enrolled endpoint by ID.

Terminal window
airdress-operator endpoint revoke <ID> --token <TOKEN>
Argument / FlagEnvDescription
IDEndpoint ID to revoke
--token <TOKEN>AIRDRESS_TOKENBearer token for authentication

Manage the chat pairing flow.

Pair a device for chat federation.

Terminal window
airdress-operator chat pair [FLAGS]
FlagShortEnvDefaultDescription
--airdress <NAME>Airdress name to pair with
--bootstrap-token <TOKEN>AIRDRESS_BOOTSTRAP_TOKENBootstrap token
--device-label <LABEL>Device label

Manage inbound event endpoints (webhooks, callbacks).

List all registered inbound endpoints.

Terminal window
airdress-operator ingress list

Send a test event to an inbound endpoint.

Terminal window
airdress-operator ingress test <SLUG> [FLAGS]
Argument / FlagDefaultDescription
SLUGEndpoint slug to test
--url <URL>Override destination URL
--payload <JSON>JSON payload to send
Terminal window
airdress-operator ingress test github-webhook --payload '{"action":"ping"}'

Install, manage, and inspect mini-apps running under the operator.

Install a mini-app.

Terminal window
airdress-operator app install <AIRDRESS> <APP_TYPE> [--subdomain <SUB>]
Argument / FlagDescription
AIRDRESSAirdress name to install under
APP_TYPEApp type from the registry
--subdomain <SUB>Custom subdomain (auto-generated if omitted)

Uninstall a mini-app.

Terminal window
airdress-operator app uninstall <AIRDRESS> <SUBDOMAIN> --purge [--backup]
Argument / FlagDescription
AIRDRESSAirdress name
SUBDOMAINApp subdomain
--purgeRemove all data
--backupCreate a backup before purging

Enable or disable an installed app without uninstalling it.

Terminal window
airdress-operator app enable <AIRDRESS> <SUBDOMAIN>
airdress-operator app disable <AIRDRESS> <SUBDOMAIN>

List all installed apps for an airdress.

Terminal window
airdress-operator app list <AIRDRESS>

Show the status of a specific app.

Terminal window
airdress-operator app status <AIRDRESS> <SUBDOMAIN>

Open a database session for an app’s isolated database.

Terminal window
airdress-operator app db-access <AIRDRESS> [--subdomain <SUB>]

Inspect and manage chat federation state.

Show federation status.

Terminal window
airdress-operator federation status [--url <URL>]
FlagEnvDefaultDescription
--url <URL>AIRDRESS_URLhttp://127.0.0.1:8080Operator base URL

Print the DNS records required for federation discovery.

Terminal window
airdress-operator federation dns-records [--ttl <SECS>]
FlagDefaultDescription
--ttl <SECS>TTL for generated records

Rotate federation keys for an airdress.

Terminal window
airdress-operator federation rotate <AIRDRESS> [--confirm]
Argument / FlagDescription
AIRDRESSAirdress name to rotate keys for
--confirmSkip confirmation prompt

Every flag that accepts an environment variable is listed above with its corresponding command. This table collects all supported variables in one place.

VariableMaps toDescription
AIRDRESS_CONFIG--configConfig file path
AIRDRESS_LOG--log-levelLog level
AIRDRESS_BINDserve --bindHTTP bind address
AIRDRESS_WG_PORTserve --wg-portWireGuard UDP port
AIRDRESS_URLhealth --url, federation --urlOperator base URL
AIRDRESS_TOKENendpoint list/revoke --tokenBearer token
AIRDRESS_BOOTSTRAP_TOKENendpoint enroll --bootstrap-tokenBootstrap token
AIRDRESS_DATABASE_URLdatabase.url config fieldExternal PostgreSQL connection URL
AIRDRESS_AUTH__ISSUERauth.issuer config fieldOIDC issuer URL
AIRDRESS_AUTH__JWKS_URIauth.jwks_uri config fieldJWKS endpoint URL
AIRDRESS_AUTH__AUDIENCEauth.audience config fieldExpected JWT audience
AIRDRESS_ENROLLMENT__BOOTSTRAP_TOKENenrollment.bootstrap_token config fieldFirst enrollment secret
AIRDRESS_CHAT__FEDERATION__KEYSTORE_PASSPHRASEfederation keystoreKEK passphrase for federation keys
AIRDRESS_SECRETS_KEYplugin_db.secretsBase64-encoded 32-byte master encryption key

These variables control the behavior of the shell installer at https://get.airdress.co/operator.

VariableDefaultDescription
AIRDRESS_OPERATOR_VERSIONauto-detectedPin a specific version
AIRDRESS_OPERATOR_HOME$HOME/.localInstall prefix (bin/ is appended)
AIRDRESS_OPERATOR_VERIFYoptionalMinisign verification: required, optional, or skip
AIRDRESS_OPERATOR_PRERELEASE0Set to 1 to install the latest pre-release instead of latest stable
AIRDRESS_OPERATOR_KINDautoPackage format: binary, tar.gz, deb, rpm, or auto
AIRDRESS_OPERATOR_NO_SUDO0Set to 1 to force user-space install (no sudo)
Terminal window
# Install a specific version without sudo
AIRDRESS_OPERATOR_VERSION=0.4.2 AIRDRESS_OPERATOR_NO_SUDO=1 \
curl -fsSL https://get.airdress.co/operator | sh