Connect a repository once; every deploy after that is a push.

1. Connect the repository

  1. Projects → New Deployment.
  2. Authorize GitHub access and pick the repository.
  3. Pick the branch to deploy — usually main.

2. Review the proposed setup

The platform analyzes the repository — typically under a minute — detects your stack, and proposes the resources your app needs, with an estimated monthly cost per resource.

On the review screen:

  • Environment variables. The analysis lists what your app expects. Required values must be filled before deploying; some are set for you automatically.
  • Database (optional). Attach a serverless database; connection details are injected into your app’s environment automatically. See managed databases.

3. Deploy

Confirm and click Deploy. Build logs stream live: dependency install, build output, image creation, health checks. When health checks pass, the app is live at its URL with HTTPS already configured.

After the first deploy

Pushes to the connected branch build and deploy automatically. A failed build never replaces the running version — the previous deployment stays live.

What it costs

  • Compute: allocated CPU and memory × running time × instance count, including idle time; traffic routing and HTTPS included. See current rates.
  • Build time: the current build-minute rate, rounded up to whole minutes and then to cents per job.
  • Optional database: billed for activity and stored data; storage continues while idle.

All rates: /pricing.

When something breaks

  • Build fails — read the build log. Usual suspects: missing dependencies, broken package.json scripts.
  • Crashes at startup — check the application logs and your environment variables.
  • Slow under load — raise CPU/memory from the service’s detail page, or run more copies: manage a running service.
  • HTTPS pending — DNS has to point at the app first; certificates are issued automatically once it propagates.
  • Database connection refused — confirm your app reads the injected connection variables rather than hardcoded values.

First time? The Deployments quickstart walks the whole flow.