Rebase Cloud
Rebase Cloud runs the same open-source Rebase you would self-host — the same
published rebasepro/server image, the same bundle, the same Postgres. The
difference is who operates it.
What it is
Section intitulée « What it is »A Cloud project is three things the platform operates for you:
| What you get | |
|---|---|
| App | Your bundle, running on the published runtime image. Deploys are a bundle upload, not a container build |
| Database | A managed PostgreSQL, with automated backups and point-in-time recovery |
| Storage | A bucket of your own, if your project uses file storage |
Each is provisioned when you first deploy, and each is billed for what it reserves rather than per seat.
Nothing about your project changes to run there. The same repository
self-hosts with docker compose, and the escape hatch is real: rebase build
produces a bundle that boots anywhere the runtime image runs.
Link a project
Section intitulée « Link a project »From a project directory:
rebase cloud loginrebase cloud billing setuprebase cloud projects create --name "My app" --subdomain my-app --linkprojects create takes no positional argument. The name and the subdomain are
flags, and both are required — on a terminal they are prompted for, and a
headless run that omits either exits with input_required rather than inventing
one. The subdomain is not editable afterwards: it is the
<slug>.rebase.website host the project answers on, so pick it deliberately.
--link binds this directory to the project in the same call, so there is no
separate link step. It writes .rebase/cloud.json, which records the project id
and slug. That file is not a secret and it is not your credentials — those live
in ~/.rebase/credentials.json, written by login.
billing setup attaches a card to the organization, once. It is first in the
sequence on purpose: the first deploy of a project is refused without one, and
finding that out after a bundle has finished uploading is the worse order.
An existing project links without creating one:
rebase cloud projects listrebase cloud link --project my-apprebase cloud deployOne command, and no flag to remember. A scaffold’s rebase.json declares
runtime: "managed" for its backend, and deploy reads that declaration — it
says so on the way past (rebase.json declares runtime: managed — deploying a bundle), builds the app into dist-bundle, uploads the bundle, runs it on the
published runtime image, and follows the deployment to a terminal state. The exit
code is the verdict, so the same line works unattended in CI.
To ship an artefact that was built earlier — a CI job that builds once and deploys twice, say — point at the directory instead of rebuilding:
rebase buildrebase cloud deploy --bundle-dir dist-bundleLeaving the managed runtime is its own flag, --eject, and nothing else asks
for it: a build that would move a managed project onto a container image it then
owns is refused until you say so. --force used to mean this, which put the
least reversible thing the CLI can do under the same word as “overwrite this
file”; it is an unknown option now rather than an alias, so a script carrying it
stops instead.
Watch it:
rebase cloud logs # the build logrebase cloud logs --runtime # what the running container is printingrebase cloud status # what the platform thinks the project is doingstatus reports blockedOn and nextAction. When blockedOn is null the
platform is genuinely working and polling is the right thing to do; when it names
something, that something is waiting for you.
Roll back
Section intitulée « Roll back »rebase cloud deploymentsrebase cloud rollbackA rollback re-points the project at what a previous successful deployment shipped, and never rebuilds — the value of a rollback is that it ships an artefact that has already run.
Which deployments qualify depends on how the project deploys, and both kinds work:
| How it deployed | What is restored |
|---|---|
rebase cloud deploy (a source build) |
The image that build published |
rebase cloud deploy --bundle (the platform runtime) |
The bundle that deploy shipped, on the runtime version the project is running now |
So a rollback needs a deployment that recorded one of the two, which means a
project that has deployed successfully at least twice. rebase cloud deployments
marks the ones that qualify, and --json reports rollbackable per row along
with the image or bundle it would restore.
Two deployments are refused, and the CLI says which: one that did not succeed, and one from before the platform recorded its artefact. There is nothing to guess at in either case — guessing would ship whatever was built or uploaded most recently while claiming to restore this one — so deploy the version you want instead.
A rollback appends a new deployment rather than rewinding history, and waits for
the restored version to serve before reporting success. Follow it with
rebase cloud logs -f.
Compute, and what it costs
Section intitulée « Compute, and what it costs »A project is priced from what it reserves, not from a tier. compute prints
every dial and the control plane’s own itemised quote for them. (rebase cloud resources is a different thing: the databases and buckets the code declares,
and whether each is provisioned — see the CLI reference.)
rebase cloud computerebase cloud compute set --cpu 500m --memory 2Gi| Dial | Unit, and what it means |
|---|---|
--cpu, --memory |
App request per instance, e.g. 500m and 2Gi. Empty means the platform default — 250m and 512Mi |
--replicas |
Instances that always exist: the autoscaler’s floor, and what the project is billed for at rest |
--autoscale-max |
1–16. The ceiling it may reach, and the worst case it may be billed. --no-autoscale turns it off |
--autoscale-cpu-target |
10–95. The CPU utilisation the autoscaler holds, against the request rather than the limit. Empty means 70 |
--spot |
true or false. Preemptible capacity: cheaper, and restarted without notice |
--scale-to-zero |
true or false. Request-billed compute that stops when idle, at the cost of a cold start |
--db-mode |
shared (the pooled cluster) or dedicated (one of this project’s own) |
--db-instances |
1–3. 1 is a single instance with no failover; 2 adds an automatic standby |
--db-cpu, --db-memory, --storage |
Per database instance. Empty means 500m, 2Gi and the default volume |
An empty dial is not the same as one pinned to the same number: an empty dial follows the platform default and moves when it moves.
Nothing is validated by the CLI, on purpose — the limits belong to the cluster a
project runs on, and they differ between providers. The control plane refuses a
value it cannot honour and names the field. Run rebase cloud compute to see
the €/month before and after; a change applies immediately, prorated from today,
except one that restarts the database, which waits for a maintenance window.
The rest of the surface
Section intitulée « The rest of the surface »| Command group | What it covers |
|---|---|
login, logout, whoami |
Your session |
link, unlink, use, open |
Binding this directory to a project, selecting an organization, opening the console |
projects |
Create, list, inspect, delete |
deploy, logs, deployments, rollback, cancel |
Shipping and watching |
start, stop, restart |
Pausing a project and bringing it back |
status, metrics, debug |
What it is doing, and why it is not |
env |
Environment variables. list never prints values; --secret is write-only |
domains |
Custom domains, the DNS records to add, and verification |
db |
Attach or create a database, backups, restore, and point-in-time recovery |
extensions |
The Postgres extension allowlist |
storage |
The project’s bucket |
resources |
Which databases and buckets the platform holds, against what the code declares |
compute |
What this project reserves, what it costs, and how to change it |
clusters |
The clusters tenants run on. Platform-admin only |
settings, orgs, webhooks, billing |
Project settings, organizations, deploy hooks, payment |
Every group in that table answers --help with a page of its own — a usage line,
its flags, and examples — and --help never runs the command. A test holds the
index to the pages, so a group added without one fails the build rather than
answering with the table of contents. verify:docs holds the table itself to
that index: every group the CLI dispatches appears here exactly once, so a group
added without a row fails the build too.
Piped, --help answers in JSON instead: the same usage line, flags and examples
as a structure to read rather than sixty lines of terminal escapes.
What the beta does not include
Section intitulée « What the beta does not include »Stated plainly, because finding out later is worse:
- No region choice. Everything runs in one region today. The placement model
exists in the platform, but a project cannot pick a region.
projects create --providerand--regionare not the exception they look like: they record which of the control plane’s registered deploy targets a project belongs to, and there is one, so both default to it and neither moves a project anywhere else.rebase cloud projects create --helpsays the same. - Not self-serve. Access is granted in batches; there is no sign-up-and-pay.
- No published SLA, and no SOC 2. If you need either, say so when you request access rather than assuming.
- No preview or branch deploys, and no first-party GitHub App. Deploy hooks — secret URLs you point a repository webhook at — are the supported automation.
- CI needs a human’s credentials. There is no machine token yet;
rebase cloud logintakes an email and a password. Pass them asREBASE_CLOUD_EMAILandREBASE_CLOUD_PASSWORDfrom a secret store —--passwordputs the password in your shell history and in the process table, and says so before it signs you in. - Point-in-time recovery is CLI-only. The console shows backups; the staged
PITR workflow is
rebase cloud db pitr.
Self-hosting instead
Section intitulée « Self-hosting instead »Nothing here is a lock-in. The self-hosting guide
runs the identical image and bundle with docker compose, and the
Kubernetes guide renders the same topology from
the Helm chart.
