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
- The build failed. Open the build log. The failing command and its error are the last lines. A missing dependency, a typo in a config file, or a build script that expects secrets is the usual cause.
- The app deployed but shows an error. It is probably crashing at start. Live logs shows the traceback. Check that it binds
0.0.0.0on the port inPORT, and that the variables it reads are set in Environment. - The first visit is slow. On Nap the app sleeps after 15 minutes idle and wakes on the next request in about 300 milliseconds. Waking is usually faster than the page would have loaded anyway.
- The database is unreachable. Use the connection string from the dashboard, not one you remembered from your laptop. It is loopback, so there is nothing to open in a firewall.
- My custom domain is not loading. Check the CNAME points at your dormhost.app address, that the domain sits in your own Cloudflare, and press Check in the Domains section. We do not sell domains, so the record stays with you.
- I need help. Write to [email protected]. The person who replies is the person who built the platform.
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.