CLI reference

The Deloc CLI ships every capability of the platform: deploy, manage apps, configure Actions, store OAuth credentials, and mint API tokens. One binary, one token, no surprises.

Install

Install globally, or invoke on-demand with npx. Requires Node 18 or newer; no other system dependencies.

shell
# Global install (recommended for daily use)
npm i -g @deloc/cli

# Or invoke without installing
npx @deloc/cli deploy
Config location
Authenticated state lives in ~/.deloc/config.json (mode 0o600, readable only by you). Remove the file to fully reset. Override with DELOC_TOKEN (token) and DELOC_API_URL (API base) environment variables.
On Windows
Install Node 18+ from nodejs.org and open PowerShell, Windows Terminal, or cmd. The commands above work as-is. If PowerShell blocks npx with a script-execution error, run this once per user: Set-ExecutionPolicy -Scope CurrentUser RemoteSigned. The config path is %USERPROFILE%\.deloc\config.json. Behind a corporate TLS-inspecting proxy, set HTTPS_PROXY and point NODE_EXTRA_CA_CERTS at your org's CA bundle before running npx.

Authentication

deloc login opens a browser for a Google or Microsoft OAuth sign-in (PKCE flow, tokens never leave your machine). The CLI spins up a localhost callback, receives the token, and stores it.

shell
deloc login                          # Browser picker
deloc login --provider google        # Skip picker
deloc login --email                  # Email/password
deloc login --org my-company         # Sign into a specific org

deloc logout                         # Clear credentials
deloc whoami                         # Who am I + tier + usage
deloc register                       # Create an account

deploy

Build and deploy the current project, or a specified directory. Auto-detects your framework, runs the build if needed, zips the output, uploads, and prints a URL.

shell
deloc deploy                                     # Current directory
deloc deploy ./dist                              # Specific folder
deloc deploy --name "Q3 Revenue Dashboard"       # Set a name
deloc deploy --no-build                          # Skip the build
deloc deploy --password                          # Auto-generate password
deloc deploy --password "secret123"              # Set a password
deloc deploy --public                            # Remove password on re-deploy
deloc deploy --domain-restrict company.com       # Restrict viewers by email domain
Flags
--name <name>App name. Same name = update in place. Defaults to folder/package name.
--dir <dir>Path to a build output containing index.html.
--no-buildSkip the build step and upload what's already there.
--password [value]Password-protect the app. Omit value to auto-generate.
--publicMake public and strip any existing password.
--domain-restrict <csv>Restrict viewers to one or more email domains. Pro Unlimited and above.
Deeper dive
Deploy has more nuance than a single flag list — framework auto-detection, OG images, zip rules, size limits. See Deploying.

Managing apps

list

shell
deloc list                       # First 25 active apps
deloc list --status disabled     # Only disabled apps
deloc list --status expired      # Apps past their 30-day window
deloc list --status all          # Every app regardless of status
deloc list --all                 # Page through everything

status, open

shell
deloc status my-dashboard        # URL, status, size, bandwidth, expiry
deloc open my-dashboard          # Open in your default browser

disable, enable, delete

shell
deloc disable my-dashboard       # Take offline (keeps files)
deloc enable my-dashboard        # Bring back online
deloc delete my-dashboard        # Permanent — confirms first

renew (free tier)

Free-tier apps auto-expire 30 days after their last deploy. Renew resets the clock. Paid plans never expire.

shell
deloc renew my-dashboard

password

shell
deloc password my-dashboard              # Set or change
deloc password my-dashboard --remove     # Make public

Customization

og — link preview image

Sets a custom OG image for link unfurls (Slack, Twitter, iMessage). PNG, max 2MB. Recommended size: 1200×630.

shell
deloc og my-dashboard ./preview.png

upload-data — refresh data files

Replaces or adds static data files on a deployed app without re-deploying the HTML. Your app fetches the file via fetch('./filename.json'). Supported: CSV, JSON, TSV, XML, TXT. Max 10MB per file.

shell
deloc upload-data my-dashboard ./data.json
deloc upload-data my-dashboard ./sales.csv ./forecast.csv
deloc upload-data my-dashboard ./latest.json --filename data.json
Scheduling refreshes
To refresh data from BigQuery / Snowflake / Postgres on a schedule, use the setup_data_refresh MCP tool (or hand-roll a cron job). See Data & refresh.

Actions

Actions are server-side HTTP endpoints your deployed app can call without leaking secrets. Each action is a templated request with rate limits, audit logs, and optional OAuth credentials.

Querying

shell
deloc actions list my-dashboard
deloc actions logs my-dashboard --status error --limit 100
deloc actions logs my-dashboard --action send-slack --external-id order-42
deloc actions test my-dashboard send-slack --body '{"message":"hello"}'

create

shell
deloc actions create my-dashboard send-slack \
  --display-name "Send Slack alert" \
  --method POST \
  --target-url "https://hooks.slack.com/services/T.../B.../..." \
  --header "Content-Type=application/json" \
  --body '{"text":"{message}"}' \
  --allowed-variables message \
  --external-id-variable message

See the Actions guide for the full flag list and template syntax reference.

update, delete, enable, disable

shell
deloc actions update my-dashboard send-slack --rate-viewer 10
deloc actions disable my-dashboard send-slack
deloc actions enable my-dashboard send-slack
deloc actions delete my-dashboard send-slack

secret (for $${UPPERCASE} templates)

shell
deloc actions secret list my-dashboard send-slack
deloc actions secret set my-dashboard send-slack API_KEY --value "sk_live_..."
deloc actions secret set my-dashboard send-slack API_KEY   # prompts
deloc actions secret delete my-dashboard send-slack API_KEY

OAuth credentials

Store OAuth credentials once at the account level, then attach them to any action with --credential <name>. The platform mints a fresh access token on each invocation and injects it into your templates as $${OAUTH_ACCESS_TOKEN}.

shell
deloc credentials list
deloc credentials test salesforce-prod
deloc credentials delete salesforce-prod

Creating — client_credentials (most OAuth APIs)

shell
deloc credentials create salesforce-prod \
  --display-name "Salesforce production" \
  --grant client_credentials \
  --token-url "https://login.salesforce.com/services/oauth2/token" \
  --client-id "3MVG9..." \
  --client-secret "XYZ..." \
  --scopes "api refresh_token"

Creating — Google service account (BigQuery, GCP APIs)

shell
deloc credentials create gcp-analytics \
  --display-name "GCP analytics SA" \
  --type google-service-account \
  --file ./sa-key.json

Creating — password grant (legacy APIs)

shell
deloc credentials create legacy-erp \
  --display-name "Legacy ERP" \
  --grant password \
  --token-url "https://erp.example.com/oauth/token" \
  --client-id "webapp" \
  --client-secret "..." \
  --username "svc.deloc" \
  --password "..."

API tokens

Tokens authenticate the CLI and MCP server. They carry your user or org identity and can be named per machine or per CI pipeline.

shell
deloc tokens list                          # See active tokens
deloc tokens create "GitHub Actions CI"    # Mint a new one (prints once)
deloc tokens revoke tok_abc123             # Revoke by ID
Tokens are shown once
When you run tokens create, the token is printed to stdout once. Store it immediately in a password manager or CI secret — the server only retains a hash.

Account & billing

shell
deloc whoami                  # Email, username, tier, usage, limits
deloc upgrade                 # Open Stripe checkout (pro / pro_unlimited / team)
deloc upgrade pro_unlimited   # Jump straight to a plan
deloc billing                 # Manage your subscription

Installing the MCP server

If you use an AI coding tool, install-mcp auto-detects Claude Code, Cursor, Windsurf, and Codex and adds the Deloc MCP server to each.

shell
deloc install-mcp

For manual setup or the config format, see MCP server.


Environment variables

  • DELOC_TOKEN — API token. Overrides ~/.deloc/config.json. Best for CI.
  • DELOC_API_URL — API base URL. Defaults to https://api.deloc.dev. Useful for self-hosted or staging environments.