Docs

Get your first project online.

Five steps, none of them a terminal, and every one of them names a control that is in the dashboard today. If you get stuck, Live logs says what happened and the troubleshooting section below covers the usual suspects.

Quickstart

Five steps from a repository to a live address.

Sign in with GitHub

Go to the dashboard and sign in. Your first sign-in puts 30 days of Nap credit in your balance, with no card and nothing to cancel.

Create an application

Press New app and give it a name: three characters or more, letters, numbers and hyphens. The address is shown under the field as you type, and it is yourapp-yourlogin.dormhost.app.

Pick the plan

Nap sleeps when nobody is using it. Awake never sleeps, which is what a bot, a worker or a scheduled job needs. Either way, you choose Mumbai, London or Ashburn.

Point it at your repository

Paste the GitHub URL and the branch. Press Connect GitHub to pick from a list instead, which is also how a private repository is deployed. Then press Create and deploy.

Watch the build log

The application opens on Overview, and Live logs streams the build. Listen on the port in the PORT variable we set, or EXPOSE one port in your Dockerfile, and the address answers as soon as the build finishes.

Then, when you need it

Each of these is a section in the rail on your application's page.

Add a database

Open the Database section, choose PostgreSQL with pgvector, MongoDB or MySQL, and press Add a database. The connection string arrives in your app as DATABASE_URL, or MONGODB_URI on MongoDB, so there is nothing to copy.

Set environment variables

The Environment section takes both variables and whole files, for a service-account JSON or a certificate. Saving restarts the app, which takes a few seconds.

Deploy on every push

The Deploy card on Overview has a Deploy on push switch. Turn it on, then copy the payload URL and secret it shows into your repository on GitHub, under Settings, Webhooks, Add webhook. Content type application/json, and only the push event.

Point your own domain at it

In Domains, add the name, then add your domain to your own Cloudflare, add a CNAME to your dormhost.app address, and press Check. Your app answers on both addresses.

Or run WordPress instead

Choose WordPress on the create form and there is no repository at all. We run it, create its MySQL, finish the install and show you the admin password on the app page, where you can also reset it.

Roll back, and take a backup

Images keeps the build you are running and the one before it, so a bad deploy is one click from the working one. Backups takes one on demand, and Awake also takes one every night.

Deployments

Creating an application deploys it. After that, the Deploy card on the application's Overview builds the branch again on demand, and the Deploy on push switch on that same card gives you a payload URL and a secret. Add them on GitHub under Settings, Webhooks, Add webhook, with the content type set to application/json and only the push event selected. Until that webhook exists, a push does nothing on its own.

A build runs your package manager, then whatever your build script says, and a Dockerfile in the repository root replaces both. Images keeps the build you are running and the one before it, so rolling back a bad deploy is one click; the storage allowance goes to your application rather than to build history.

Ports

We set PORT in your application's environment and route HTTPS to it. Read it and bind 0.0.0.0, because a hard-coded port builds perfectly and then answers nothing. A Dockerfile that EXPOSEs exactly one port works too: we read the port out of the built image.

Databases

MongoDB, PostgreSQL or MySQL. Open the Database section, pick the engine, and press Add a database. Pick whichever your project needs. It runs on the same machine as your application, so a query is a loopback call and never crosses the internet.

The connection string is set in your application for you, as DATABASE_URL, or MONGODB_URI on MongoDB. There is nothing to copy and nothing to commit. Vector search is included. PostgreSQL ships with pgvector switched on.

Configuration

The Environment section takes variables and whole files, for a service-account JSON or a certificate that does not fit in a variable. Saving restarts the application, which takes a few seconds. We read your repository and work out how to build it. If your language is not on that list, or you want the build done your way, add a Dockerfile and we build that instead. Rust, Elixir, Deno, Bun, C++, anything that starts and listens on a port.

Anything your application writes to /data stays there through a deploy. Anything your application writes to /data stays there through a deploy. Files it writes anywhere else are part of the container and go when you next push.

Domains

Your application answers on its dormhost.app address from the moment it deploys. To add your own: put the domain in the Domains section, add it to your own Cloudflare, point a CNAME at your dormhost.app address, then press Check. Cloudflare terminates HTTPS for the name you own, which is why the domain has to sit in your account rather than ours.

Troubleshooting

Still on the fence? You get 30 days of credit when you sign in with GitHub, no card required. Enough time to deploy your real project and see it work.

Start the quickstart Guides by stack