Command Reference

The complete surge command surface. Run surge --help for the built-in overview, and surge <command> --help for one command's usage.

Project commands are written here as surge <domain> <verb>, but the target slot takes three forms: a domain, a path to a project directory, or nothing at all—in which case the current directory's project is the target. surge example.com rollback, surge ./dist rollback, and surge rollback are the same command. Account commands take no target.

Commands typed in the older, verb-first order (surge rollback example.com) keep working forever, silently—both orders are first-class. A few commands don't appear on the --help overview—zone, token—power tools it doesn't spend lines on; this page documents everything. surge account <verb> also dispatches to the flat identity commands (surge account whoami = surge whoami).

Global flags

Flag Alias Description
--project <path> -p The directory to publish. Also settable as the first positional argument.
--domain <domain> -d The domain to act on. Also settable as a positional argument or via the CNAME file.
--preview --stage, -s Publish a preview instead of cutting over production.
--message <msg> -m Attach a message to the revision (or to a token at tokens add).
--force <protocol> https (or http) redirects all traffic to that protocol. Sticks as configuration.
--private / --public Lock the domain to the people who can publish it, or open it again. See private domains.
--token <token> Authenticate with a token instead of the stored login. The SURGE_TOKEN environment variable does the same.
--endpoint <url> -e Target a different Surge API endpoint.
--version -V Print the CLI version.
--help -h Print the command listing, adapted to the target—or one command's usage after a verb.

Publish-intent flags carry their own routing: surge ./dist -d example.com and bare surge --preview are publishes, no verb needed.

Environment

Variable Description
SURGE_TOKEN A token to authenticate with—no login, no prompt. --token wins when both are set.
HTTPS_PROXY / HTTP_PROXY / ALL_PROXY Send API traffic through a proxy (lowercase spellings work too).
NO_PROXY Hosts that bypass the proxy.

With no stored login, no token, and no terminal to prompt on, a command that needs an account aborts on stderr—Aborted - not logged in and no terminal to ask. Run `surge login` in a terminal, or set SURGE_TOKEN.—and exits 1. See CI & Automation.

Publishing

surge <path> <domain>

Publish a directory to a domain—or a single HTML file, published as the domain's index.html. Pass _ as the domain for a freshly generated .surge.sh subdomain, no prompt. Pass --force https to redirect all HTTP traffic to HTTPS; the setting sticks across publishes. Respects .surgeignore. → Publishing

surge [path] publish

Publish using the project's own domain—from its CNAME file when present, prompting with a generated suggestion otherwise (enter _ at the prompt for a fresh one). This is the everyday form once a project knows where it lives. deploy is accepted as a silent alias.

surge <domain> teardown

Remove the project from the domain and the CDN. → Revisions

Revisions

Surge keeps the last 100 revisions of each domain.

surge list [--all] [<org>:]

Your domains and your orgs' domains, newest publish first: owner (an email or an org), age, last publisher, and on a wide terminal file count and size. Shows the newest 50; --all shows every one. surge list acme: shows only the domains the org acme owns.

surge <domain> revs

The project's revisions—preview URL, age, author, size, and message—with the live revision highlighted. surge <domain> list is the same command. → Revisions

surge <domain> rollback

Serve the previous revision.

surge <domain> rollfore

Serve the next revision (the inverse of rollback).

surge <domain> cutover [revision]

Serve the given revision, or the latest one when omitted. Ships previews.

surge <domain> discard [revision]

Remove a revision from the system. If it was live, production moves to a neighboring revision; discarding the last revision takes the project offline.

Domains & DNS

surge <domain> dns list

List the domain's custom DNS records. Bare dns prints the available subcommands and Surge's name servers. → Domains & DNS

surge <domain> dns add <type> <name> <value>

Add a DNS record. MX records take a priority: dns add MX <priority> <value> (host defaults to @) or dns add MX <name> <priority> <value>.

surge <domain> dns rem <id>

Remove a DNS record by the id shown in the listing.

surge <domain> zone

Print the domain's complete zone in BIND format, including records Surge manages automatically. Supports the same add/rem subcommands as dns.

Debug

surge <domain> debug status

The domain's state: waiting on dns (with the records to add), securing, ready (published, serving once the account's email is verified), or live. surge <domain> status is the same command. → Analytics & Diagnostics

surge <domain> debug files

List every file in the live revision with its size, as served by the CDN.

surge <domain> debug audit

Report each edge node's state for the domain: revision, file count, size, certificate validity.

surge <domain> debug bust

Purge the project from the cache on all edge nodes.

surge <domain> debug certs

Show the certificates installed for the domain: subject, issuer, alt names, expiry, auto-renewal. → SSL Certificates

surge <domain> debug encrypt

Provision the domain's managed SSL certificate manually. Certificates normally provision and renew automatically.

Stats

surge <domain> stats traffic

Visits, uniques, connections, encryption share, cache hit rates, top pages, 404s, redirects, and sources for the past two weeks. → Analytics & Diagnostics

surge <domain> stats audience

Browsers, operating systems, and devices of your visitors.

surge <domain> stats usage

Per-file bandwidth served, with a projected monthly total.

surge <domain> stats load

Connection volume per datacenter across the network.

Configuration

surge <domain> config

View the project's platform settings; pass flags to change them: --force http|https, --redirect <domain>, --cors <domain>|*, --hsts <seconds>, --private / --public, any value null to clear. Changes apply across the edge immediately. → Project Configuration

Collaborators

Orgs are how people share domains. Collaborator invites are closed. → Teams

surge <domain> revoke <emails…>

Remove a collaborator invited before orgs, immediately.

Orgs

surge orgs

Every org you belong to, each with its members, their roles and pending invites. surge orgs <org> shows one. → Orgs

surge orgs <org> create [--name <name>]

Create an org with the slug <org>; you become its admin. Needs a verified email.

surge orgs <org> rename <slug> [--name <name>]

Change the slug, the display name, or both. The old slug keeps resolving for 30 days.

surge orgs <org> remove

Remove the org. Refused while it holds any domains: transfer or tear them down first.

surge orgs <org> invite [--admin]

Print a one-time invite code to send to someone yourself; nothing is emailed. --admin invites an admin. → Inviting someone

surge orgs <org> leave

Leave the org. The last admin can't leave until someone else is an admin; the last member leaving removes the org, as remove does. → Members

surge orgs <org> members [<email> [revoke|mkadmin|rmadmin]]

List members and pending invites, show one, remove a member, or change a role. Members are equal, except that only admins make, demote or remove an admin. → Orgs

surge orgs <org> tokens [add [--domain <domain>] [-m <msg>] | rem <id>]

List, add or remove the org's tokens. An org token publishes as the org and keeps working whoever leaves; any member manages them. → Org tokens

surge <path> <org>:<domain>

Publish a new domain owned by the org; any member can. → Publishing to an org

surge <domain> transfer [<org> | <your email>]

Move the domain into an org you're in, or out to your own account. With nothing after it, print a transfer code for giving the domain to someone else. Serving is unchanged. → Moving a domain

surge claim <code> [--yes]

Join the org an invite code is for, or take the domain a transfer code names into your account. In a terminal it shows what the code does and asks first; --yes doesn't ask. In a browser, https://auth.surge.sh/claim/<code> does the same.

surge scrap <code>

Cancel an invite or transfer code. It stops working at once.

Account

surge login

Authenticate (or create an account) and store a token in ~/.netrc. → Account, Plans & Tokens

surge logout

Remove the stored token and expire it.

surge whoami

Show the logged-in email and plan—or, when authenticating with a token, the token's id and scope. Exits 1 when not authenticated.

surge verify

Send an email verification link to your address.

surge login --browser

Sign in via the browser—any provider, approve with a code match. → Account, Plans & Tokens

surge mfa

Open the browser page that sets up or manages two-factor auth—passkeys and authenticator apps. → Account, Plans & Tokens

surge tokens list

Every token on the account: id, scope, message, uses, created, last used. → Tokens

surge tokens add [--domain <domain>] [-m <msg>]

Mint a token—shown once, at mint time. --domain scopes it to one domain or a pattern like *.previews.example.com (repeat the flag for several); -m labels it.

surge tokens rem <id>

Expire a token by its tok- id.

surge tokens transfer <id> <org>

Hand one of your tokens to an org you're in. Its value doesn't change; from then on it publishes as the org. → Org tokens

surge token

Print the token the CLI is currently authenticating with.

surge plan [--web | --manage]

Change your account plan interactively, or print a private browser link for checkout (--web) or full billing management (--manage).

surge card

Update the payment card on file.

surge nuke

Permanently delete your account. Refuses while any project remains or while you are an org's only admin. See Account for what it removes.