Eris
Early alpha

Your hardware.
Our control plane.

Eris builds your repository, ships the image to a server you own and keeps it answering over HTTPS. Your server runs one agent, and there is nothing else to keep running.

Requests go straight to your server. Eris builds the image and stores it.

Three steps, then every push deploys.

  1. Connect a machine

    Run one command on a fresh Ubuntu, Debian, RHEL, Rocky Linux or AlmaLinux server. It installs Docker and Traefik and links the server to Eris.

  2. Point Eris at a repository

    Pick a repository, a branch and a name. Your app goes live at <name>.eris.page, with an HTTPS certificate issued for you.

  3. Push

    Every push to that branch deploys. Eris builds the image, starts it beside the running app, and moves traffic over only once the new container accepts connections, or answers a health check path you set.

A deploy in the Dashboard: the commit it built and its seven steps, from Queued to Route and hand over A deploy in the Dashboard: the commit it built and its seven steps, from Queued to Route and hand over

Runs on Eris

One screen per app: its state, address and deploys.

Logs stream straight from your server while you watch. CPU, memory, restarts and requests are kept by the hour for seven days.

An app in the Dashboard: its address, its current state, thirty days of availability and its deploys An app in the Dashboard: its address, its current state, thirty days of availability and its deploys

Runs on Eris

Every name you serve, checked from six regions.

Every ten minutes Eris requests each of your app's names from both coasts of North America, both halves of Europe, Asia-Pacific and Oceania. The Dashboard shows each answer, how long it took and which city it came from.

Any HTTP answer counts, a 500 included: Eris checks that the route to your app works, not your code. The requests carry User-Agent: Eris-Reach/1, so you can find them in your own logs.

The Reach tab of an app: two names, each reached from five or six regions, with the latency and the city of each answer The Reach tab of an app: two names, each reached from five or six regions, with the latency and the city of each answer

Runs on your server

Postgres, MySQL, MariaDB or Redis, next to your app.

Eris runs the database as a container on the same server, on a network of its own. It lives on your disk, and one database can serve several apps.

Attach an app, and its next deploy finds DATABASE_URL or REDIS_URL in the environment. You pick the version once, and Eris never changes it.

Name an S3-compatible bucket you own, and Eris dumps Postgres, MySQL or MariaDB into it once a day. The dump goes from your server straight to the bucket.

A database in the Dashboard: Postgres 17, running for two days, its connection string, and the two apps attached to it A database in the Dashboard: Postgres 17, running for two days, its connection string, and the two apps attached to it

Runs on your server

Cron jobs, each run in a container of its own.

Give a task a name, a schedule and a command, like php artisan schedule:run every minute. Each run starts a fresh container from the image and variables your app runs with, on its networks, so it reaches your database and your volume.

Pick a schedule from a list or type five cron fields, in UTC. The agent on your server fires each run on its own clock, so tasks keep running while Eris is down. A run is stopped after an hour.

Run a task now, pause it, or read its output. Eris records how each of the last 50 runs ended. Output is read from your server while you look, and only the last run's is kept.

An app's scheduled tasks: a scheduler every minute that just succeeded, and a nightly report that failed and is paused An app's scheduled tasks: a scheduler every minute that just succeeded, and a nightly report that failed and is paused

Runs on Eris

Everything that happened, newest first.

Activity lists deploys, failed task runs, backups, outages and a filling disk, across every app and server, for 30 days. Each row says what set it off, whether you, a push, a schedule, Eris or Claude Code, and opens the screen where it happened.

Filter to one app or to problems only. A deploy still running turns into its result without a reload.

Activity in the Dashboard: a deploy that went live, a disk filling up, nightly backups, a failed deploy and a failed scheduled task Activity in the Dashboard: a deploy that went live, a disk filling up, nightly backups, a failed deploy and a failed scheduled task

Runs on Eris

One email when something needs you.

Eris checks every minute. When a server, an app or a deploy needs you, it sends one email. When the problem clears, it sends nothing: the Dashboard already shows that.

Turn any of them off in the Dashboard, or stop all email with one click from any message.

  • A server goes quiet

    Eris hasn't heard from it for five minutes, or Docker, Traefik, the firewall or port 80 has been blocking it that long.

  • An app keeps crashing

    Its container died three times in fifteen minutes, or has been down for five. A database counts the same way.

  • A disk fills up

    The disk that holds Docker's data is 80% full.

  • A certificate stops renewing

    One of your names has 14 days left and hasn't renewed. A reminder follows at three.

  • Your app stops answering

    Two regions can't reach one of its names twice in a row while its container runs.

  • A scheduled task keeps failing

    Two runs in a row failed, hit the hour limit, or didn't start.

  • A deploy fails

    From a push or from the Deploy button, whether the fault was yours or ours.

  • A push wasn't deployed

    Because of something only you can fix: a branch that is gone, or one Eris can't read.

Notifications in the Dashboard: the email address, a switch for every email, and one per alert Notifications in the Dashboard: the email address, a switch for every email, and one per alert

Runs on your server

Every port closed except the ones you open.

Turn the firewall on, and the server accepts only what your rules open, plus 80 and 443. Each change runs on trial: if Eris loses the server or port 80 stops answering, the agent puts the previous rules back.

Lock yourself out of SSH, and the Dashboard is still your way back in. Once the firewall holds, Eris turns off the ufw or firewalld it replaced.

A server's firewall in the Dashboard: each listening port, the rule that opens it, and past revisions A server's firewall in the Dashboard: each listening port, the rule that opens it, and past revisions

Runs on Eris

Ask Claude why the last deploy failed.

Eris speaks MCP. Connect Claude Code or claude.ai, and it reads your servers, your apps, their last ten deploys and a deploy's log.

It only reads: no tool deploys, changes or deletes. You allow each assistant in the browser and revoke it in the Dashboard. Eris disconnects one that goes unused for 30 days.

Claude Code
claude mcp add --transport http eris https://mcp.erisdeploy.com/mcp

What an app needs once it's running.

Each one lives in the Dashboard, on the app or the server it belongs to.

  • Custom domains

    Point a CNAME at the target Eris gives you. Eris proves it and issues the certificate. Up to five per app, apex included.

  • Volumes

    A directory that outlives the container: uploads or a SQLite file survive a redeploy, a reboot, and even deleting the app.

  • Variables

    Environment for the container, with secrets nothing shows again once saved. An edit reaches the app with its next deploy.

  • Shell

    A bash or sh inside the running container, from the Dashboard. Nothing you type is kept.

  • Rollback

    Put back the image an earlier deploy ran, with nothing rebuilt. Eris keeps the images of the last three deploys that went live.

  • Your own image

    Build in your own CI and push the image to Eris's registry. The push starts the deploy.

We run the control plane, so you don't.

Coolify and Dokploy install theirs on your server: you update it, you fix it, and when the server dies, it dies too. With Eris, your server runs an agent and your containers. If Eris goes down, your apps keep answering.

Wiring a VPS by hand, the Dockerfile and the nginx config take an afternoon. Certificates that renew and deploys that fail safely take years. Here, a failed deploy leaves the running app untouched.

Your app runs on your hardware, and its traffic never passes through Eris. Its image is built on Eris's builders and stored in Eris's registry.

A server in the Dashboard: the Linux it runs and every check it passed, from its link to Eris to its firewall A server in the Dashboard: the Linux it runs and every check it passed, from its link to Eris to its firewall

Connect a server and push.

Free while Eris is young, up to five servers and ten apps per account.

Eris is an early alpha under active development. Expect breaking changes.

Sign in with GitHub