Push to main. Your cluster never blinks.

Hangar Nine is managed hosting for Elixir and Phoenix. Deploy from git with zero-downtime releases, run clustered nodes across regions, and let us operate your Postgres.

checkout_web· production rolling v42 · 0 of 6 nodesv42 0/6
~/checkout_web $ git push hangar main remote: Building release checkout_web 0.42.0 remote: mix deps.get, compile, assets.deploy done remote: mix release done remote: Running migrations on primary done remote: Rolling release across fra, iad, sin
Cluster · 6 nodes · 3 regionslibcluster · private mesh
v41 serving draining v42 serving

Deploy from git. Keep every socket open.

Each push builds a Mix release and rolls it one node at a time. LiveView sessions reconnect to a healthy node before the old one stops, so users stay on the page.

  1. 1

    Push

    git push hangar main or merge a pull request. Branches get their own preview app.

  2. 2

    Build

    We compile your release and assets on a builder with your Elixir and OTP versions from .tool-versions.

  3. 3

    Migrate

    Ecto migrations run once, against the primary, before any node switches over.

  4. 4

    Roll

    New nodes join the cluster, pass health checks, then old nodes drain. A failed check rolls back on its own.

Nodes that find each other.

Every app runs as one BEAM cluster over a private network. Distributed Erlang just works, across regions, with nothing to configure.

  • Phoenix.PubSub and Presence broadcast across every node and region.
  • Run nodes near your users and scale each region on its own.
  • Release cookies and node names are set for you on every deploy.

checkout_web

Node.list() · 6 connected
Frankfurtfra
web@fra-1web@fra-2
primary db
Ashburniad
web@iad-1web@iad-2
replica
Singaporesin
web@sin-1web@sin-2
replica
iex(web@fra-1)1> Phoenix.PubSub.broadcast(App.PubSub, "orders", :refresh) :ok # delivered on all 6 nodes
checkout-dbHealthy

Point-in-time restore

Pick any minute from the WAL archive. The copy comes up as a new database.

$ hangar pg restore checkout-db --to "2026-09-30 14:05 UTC"

PostgreSQL 17 · primary fra · replicas iad, sin
DATABASE_URL set on every node · daily snapshots + WAL

Postgres, operated for you.

A managed database that lives next to your nodes. We handle failover, patching and backups; you keep using Ecto the way you already do.

  • Point-in-time restore to a new database, without touching production.
  • Read replicas in each region for Repo.replica() style reads.
  • Private networking only. The database is never on the public internet.

Live logs. A console on any node.

Tail every node at once from the dashboard or the CLI, then open a remote IEx session on the node that needs a closer look.

hangar logs checkout_web --tail

One stream, every node

Lines carry the node and region, so a slow request in Singapore is easy to find.

Console with an audit trail

Every remote session is recorded with who opened it and on which node.

Ship logs elsewhere

Forward to your own log drain when your team already has a home for them.

Your first $10 of compute is on us.

Connect a repository, push, and watch your Phoenix app come up across regions.

$10 credit on sign-up · deploy from GitHub or GitLab · built for the BEAM

Start deploying

Create your account. $10 of free compute is added as soon as you sign up.

or with email

Talk to us

Moving a cluster, need a dedicated region, or have a question about pricing? An engineer on our team will reply.