## The short version

To deploy an Express app on Ample, run `ample deploy . --name <app-name> --public` in the project directory, or ask your coding agent to deploy it to Ample. Ample builds it on the `node-22` template, starts it with `npm run start` and returns a public HTTPS URL.

## STEP BY STEP

### Deploy Express

1. **Ask your coding agent**  
   Install the Ample CLI and create an account (no browser or card needed), then ask Claude Code, Codex, Cursor or any agent with a shell to deploy the project. See [Ample for coding agents](/content/agents/index.html).
   
   ```bash
   curl -fsSL https://get.ample.computer/install.sh | sh
   ample auth signup
   # then, in your agent:
   # "Deploy this Express app to Ample"
   ```

2. **Or deploy from the CLI**  
   Run the deploy once from the project directory. It waits until the app is live or failed and prints the URL; exit 0 is live, 1 failed, 2 needs input.
   
   ```bash
   ample deploy . --name <app-name> --public
   ```

3. **Or use MCP**  
   Agents connected to the Ample MCP server (`https://api.ample.computer/mcp`, or `ample mcp` over stdio) call `ample_deploy` with the same arguments.

4. **Verify**  
   Open the URL. If the deploy failed, read the build log, then the runtime log, fix the cause and deploy again.
   
   ```bash
   ample logs <deployment_id> --kind build
   ```

## TESTED CONFIGURATION

### What Ample runs

| Template | `node-22` |
| -------- | ---------- |
| Install  | `npm install` |
| Build    | `echo no build needed` |
| Start    | `npm run start` |
| Tested size | `s-1vcpu-1gb` |

Ample detects Node, runs npm install and npm run build --if-present, and starts the app with npm run start on the node-22 template; the app only has to bind 0.0.0.0 on PORT.

Last verification (September 19, 2026): Express app with npm install and npm run start deployed on the node-22 template; the public URL served the expected response.

## FIT CHECK

### Before you deploy

#### You need
- A package.json with a start script
- A server that listens on process.env.PORT and 0.0.0.0
- An Ample account token with servers:write

#### Know the limits
- Verified on the node-22 template at s-1vcpu-1gb; other templates and sizes are not verified by this recipe.
- A missing package-lock.json produces a warning and a slower, non-reproducible install.

## MOVING PLATFORMS

### Move a Express app to Ample
- [How to move an Express app from AWS EC2 to Ample](/content/migrate/aws-ec2-app/express/index.html)
- [How to move an Express app from DigitalOcean Droplet to Ample](/content/migrate/digitalocean-droplet-app/express/index.html)
- [How to move an Express app from Fly.io to Ample](/content/migrate/fly-io-app/express/index.html)
- [How to move an Express app from Heroku to Ample](/content/migrate/heroku-app/express/index.html)
- [How to move an Express app from Netlify to Ample](/content/migrate/netlify-web-app/express/index.html)
- [How to move an Express app from Railway to Ample](/content/migrate/railway-app/express/index.html)
- [How to move an Express app from Render web service to Ample](/content/migrate/render-web-service/express/index.html)
- [How to move an Express app from Vercel to Ample](/content/migrate/vercel-app/express/index.html)

## QUESTIONS

### Frequently asked questions

#### Do I need a Dockerfile to deploy Express?
No. Ample detects Express from the repository and builds it from source on the `node-22` template. Dockerfile build steps are not run.

#### How do I add a database to a Express app?
Leave DATABASE_URL unset and deploy: when the code needs Postgres, MySQL, Redis or MongoDB, Ample creates a managed database and passes its connection string to the app. See [Connect Postgres for Express](/content/guides/express/database-connection/index.html).

#### What does it cost to host a Express app on Ample?
The Free plan runs 2 apps at once with no card and a hard monthly budget, so it never bills you. Larger needs are priced on volume; see [pricing](/content/pricing/index.html).

#### What if the deploy fails?
`ample deploy` waits until the app is live or failed. A failure returns who must act, a diagnosis and a suggested fix; read the logs with `ample logs <deployment_id> --kind build`. See [Diagnose deployment failures for Express](/content/guides/express/deployment-diagnostics/index.html).

## NEXT STEPS

### More for Express
- [Express How to serve Express public assets through a CDN on Ample](/content/guides/express/cdn-assets/index.html) 
- [Express How to set environment variables and secrets for an Express app on Ample](/content/guides/express/configuration-secrets/index.html) 
- [Express How to connect an Express app to Postgres on Ample](/content/guides/express/database-connection/index.html) 
- [Express How to fix a failed Express deploy on Ample](/content/guides/express/deployment-diagnostics/index.html) 
- [Express How to use S3-compatible storage from an Express app on Ample](/content/guides/express/object-client/index.html) 
- [Express How to serve private files from an Express app on Ample](/content/guides/express/private-file-access/index.html) 
- [Express How to run database migrations for an Express app on Ample](/content/guides/express/schema-changes/index.html)
