Getting started

From an invitation to a product answering at its own domain, in six steps.

1. Accept your invitation

scaledbox cloud is by invitation only. Your invitation is an email with a link, valid for a week and usable once: it opens the console, which creates your account with a passkey (Touch ID, Windows Hello, a security key or your phone). There are no passwords. To sign in on a new device, or if you lose your passkey, ask the console for an email link that adds one.

2. Install the CLI

The scaledbox CLI runs on macOS and Linux (amd64 and arm64):

curl -fsSL https://scaledbox.dev/install.sh | sh

It installs into ~/.local/bin without sudo and checks the download's SHA-256. If that directory isn't on your PATH, the installer says which line to add to your shell's profile. Run the same command again to update. scaledbox --version prints yours; to install a given version instead of the latest:

curl -fsSL https://scaledbox.dev/install.sh | SCALEDBOX_VERSION=v0.0.0-20261023120000-0123456789ab sh

3. Sign in

scaledbox login

The CLI shows a short code and opens the console in your browser (OAuth 2.0 device authorization, as fly auth login does): check that the code matches and confirm with your passkey. The CLI keeps a token, valid for a limited time and revocable, in your user configuration directory (~/.config/scaledbox/credentials.json on Linux, ~/Library/Application Support/scaledbox/ on macOS). scaledbox account shows who you are; scaledbox logout revokes the token.

4. Ask for a product

scaledbox products request shop --purpose "an online shop for ceramics"

scaledbox approves it with a monthly credit (see Spending) or declines it, and tells you by email. scaledbox products list shows your products. You own the products approved for you.

5. Describe it in scaledbox.toml

In your product's repository, scaledbox.toml says what it runs and needs. A web service with a database:

[app]
name = "shop"

[services.web]
dir = "dist/web"             # its built modules and box.toml (bindings: [bindings.DB] kind = "database")
health = "/healthz"          # answers 2xx when ready
memory = "256Mi"

[postgres.main]              # the database env.DB reaches, in every environment

[release]                    # its release() handler runs the migrations before each release goes live
service = "web"

[env.prod.services.web]
domains = ["shop.example"]
replicas = 2

[env.staging.services.web]
domains = ["staging.shop.example"]

[budget]
usd_month = 15               # the most it may spend a month

Every setting is in the scaledbox.toml reference.

6. Deploy

Build your services' JavaScript modules (any bundler: see Deploying), then deploy them:

scaledbox deploy --env prod

Only the files scaledbox lacks are uploaded; scaledbox compiles them and builds nothing. The first deploy creates the environment. The release handler runs, then a box of each service's new release must answer its health path before the release goes live; if not, the previous release keeps running and the deploy fails with the reason.

Your domains answer once their DNS records are in place:

scaledbox domains

lists each name with the two records to create at your DNS provider (see Domains).

Next