what you get

What’s in the box

Running an app takes a dozen jobs besides the app. Here is each one, and the command that does it on Gagarin. Your agent types most of them.

An address, with a certificate

No load balancer to configure and no certificate to renew. A service is private until you give it an address; a name you own answers on the same service once its DNS record points at us.

gg domain add shop/web
gg domain add shop/web shop.example.com

Alerts on one switch

No alerting stack and no rules file. Open the project's Alerts tab in the console on your phone and turn on "Notify me about this project": you get a push when a service goes down, a deploy will not start, or a container keeps crashing. The same page sends a test. Each member opts in for their own devices. On an iPhone, add the console to the Home Screen first.

Logs you can search

Nothing to ship logs to. A week of what each service prints is kept, crashed and replaced containers included, and your agent reads the same lines from gg.

gg logs shop/api --grep "panic:" --since 2d
gg logs shop/api --previous

Backups, every night

Postgres, Qdrant and Iggy are backed up nightly and the backups are kept fourteen days. You can take one now, and restoring makes a new resource beside the old one, so the original stays as it was.

gg resource backup shop/db
gg resource restore shop/db-copy --source db

Rollback in one command

Every deploy is a revision you can list. Rolling back puts a previous image and its environment back.

gg history shop/web
gg rollback shop/web --to 3

Network policy you can read

No security groups. A service reaches only what it declares. An undeclared call does not connect, and the graph in the console is the policy itself rather than a diagram of it.

gg deps add shop/web api
gg deps ls shop/web

Secrets that are never copied

Declaring a dependency on a database hands the service its credentials; nobody pastes a password into an env file. A third-party key goes in once as an external resource. Rotating one restarts everything that holds it.

gg resource add shop/db postgres
gg resource add shop/stripe external --env-file .env.stripe
gg resource rotate shop/db

Databases, caches, queues and buckets

Postgres, Qdrant, Valkey, Iggy and S3-compatible buckets, each one command and each on the same meter as everything else.

gg resource add shop/vectors qdrant
gg resource add shop/cache valkey
gg resource add shop/files s3

Scheduled jobs

No cron server. A job is an image that runs to completion, now or on a schedule, and it is billed only while it runs.

gg run shop/migrate migrate:v3 --deps db
gg run shop/report report:v2 --schedule "0 3 * * *"

Deletes that wait for you

Your agent can ship. It cannot take anything away on its own: these wait for a person to approve them from an email, signed in as themselves.

  • Deleting a service, a database or a project
  • Taking an address off the internet
  • Withdrawing a route between two services
  • Handing a project, and its bill, to someone else
gg destroy
gg domain rm
gg deps rm
gg transfer

A credential for CI

One command mints a token for your pipeline, scoped so a leak costs you as little as possible.

  • It can deploy. It cannot destroy, and no flag turns that on.
  • It expires: 90 days by default, 365 at most, and there is no never.
  • It cannot mint another, so a leaked one cannot issue its own replacements.
  • It is shown once. Gagarin keeps a hash.
gg creds create --name "github actions: shop/web"

Project memory for your agent

Your agent writes down why things were built the way they were, and the next session starts from those notes instead of reading the whole repository again. It lives in the MCP server: memory_briefing to start, remember to add a fact.

A way out

gg eject writes the Kubernetes objects Gagarin runs for your project, so you can apply them to any cluster.

  • images: still in Gagarin’s registry: pull them, push them where you like
  • volume data: the claims come back empty; pg_dump works the way it always has
  • cluster, domain, billing: yours to sort out
gg eject shop -o project.yaml

Not in the box yet

Gagarin is young. These are the limits today:

  • One region: Paris (Scaleway, fr-par).
  • One replica per service. A node failure is a restart, not a failover.
  • No contractual SLA.
  • A public address serves HTTP and HTTPS only. There is no public TCP or UDP port.

Some things we have decided never to build. That list has its reasons attached: what we will never build. For how this compares with other platforms, read Gagarin vs Railway and Gagarin vs Render. Prices are on the pricing page.