Back to Blog
Tutorial10 min read2026-08-14

Deploy an Express App for Free (What Free Tiers Really Get You, Cold Starts Included)

Free hosting for Express APIs — what you get, what you give up, and when you need to upgrade to avoid cold starts and connection limits.

Ajay Kumar
Ajay Kumar
Founder & DevOps, PandaStack

Free tiers make it possible to deploy an Express API without paying upfront, but they come with limits that break production workloads. Apps scale to zero when idle, databases cap connections at 50, and bandwidth runs out after 100 GB. Understanding the constraints prevents surprises.

What a free tier actually includes

PandaStack's free tier includes:

  • 5 container apps (Express APIs, Python backends, Go services)
  • 1 managed database (PostgreSQL or MySQL)
  • 100 GB bandwidth per month
  • 300 build pipeline minutes per month
  • 50 database connections (total across all apps)
  • 7 days backup retention
  • Apps scale to zero after idle (cold start on next request)

This is enough for hobby projects, internal tools, and development staging environments. It is not enough for customer-facing production APIs with uptime SLAs.

Cold starts and scale-to-zero

Free-tier container apps scale to zero after 15 minutes of inactivity. The platform shuts down the pod to save resources. When the next request arrives, the platform spins up a new pod, which takes a few hundred milliseconds. Subsequent requests hit the warm instance and return instantly.

For a personal blog backend or a weekend side project, cold starts are tolerable. For a user-facing API where every request must respond in under 100ms, they are not.

Deploy a free-tier Express API with the CLI:

panda login
panda projects create \
  --name express-free \
  --repo yourorg/express-api \
  --branch main \
  --auto-deploy

The platform detects the Node.js runtime, installs dependencies, and starts the app. The first request after 15 minutes of idle triggers a cold start. Upgrade to Pro ($15/mo) to keep pods running on stable nodes with no scale-to-zero.

Database connection limits

A free-tier managed PostgreSQL database allows 50 concurrent connections. If you run 3 replicas of your Express API and each holds a connection pool of 10, you consume 30 connections. Add a background worker and a cronjob that query the database, and you approach the limit.

When the connection pool is exhausted, new requests fail with connection pool timeout errors. Either reduce the pool size per replica:

const { Sequelize } = require('sequelize');

const sequelize = new Sequelize(process.env.DATABASE_URL, {
  pool: {
    max: 5,   // lower than default to stay under the 50-connection limit
    min: 1
  }
});

Or upgrade to Pro (300 connection limit).

Bandwidth limits

The free tier includes 100 GB of bandwidth per month. An API serving JSON responses averages 5 KB per request. 100 GB covers roughly 20 million requests per month, or about 7,700 requests per hour continuously.

If your API serves file downloads or returns large JSON payloads, you hit the limit faster. The platform does not hard-cut traffic when you exceed the limit on the free tier, but repeated overages trigger a prompt to upgrade.

Build minutes

The free tier includes 300 build pipeline minutes per month. A typical Express API build (install dependencies, run the start command) takes 1–2 minutes. 300 minutes covers roughly 150 deploys per month — more than enough for continuous deployment on every push.

If your build runs integration tests, compiles TypeScript, or processes assets, build times increase. Monitor usage in the dashboard and upgrade if you run out of minutes mid-month.

Deploy via the deploy button

Make your Express API one-click deployable for free:

[![Deploy to PandaStack](https://dashboard.pandastack.io/deploy-button.svg)](https://dashboard.pandastack.io/deploy?repo=yourorg/express-api&type=container)

When someone clicks the button, PandaStack clones the repo, detects Node.js, installs dependencies, and starts the app on the free tier. If your repo includes a pandastack.json with required environment variables, the deploy screen prompts for them:

{
  "type": "container",
  "env": [
    { "name": "DATABASE_URL", "description": "PostgreSQL connection string" },
    { "name": "JWT_SECRET", "description": "Secret for signing tokens" }
  ]
}

This prevents the app from booting with missing configuration.

When to upgrade

Upgrade from free to Pro ($15/mo) when:

  • Cold starts break user experience — Pro tier runs on stable nodes with no scale-to-zero
  • Database connection pool exhaustion — Pro allows 300 connections vs 50 on free
  • Bandwidth exceeds 100 GB/month — Pro includes 500 GB
  • Build minutes run out — Pro includes 1,000 minutes/month

The free tier is genuinely free — no credit card required, no time limit, no surprise charges. Use it to validate an idea, build a prototype, or run internal tools. Upgrade when you need guaranteed uptime.

Deploy via the API

For CI pipelines, use the API with a psk_ token:

curl -X POST https://api.pandastack.io/v1/projects \
  -H "Authorization: Bearer $PANDASTACK_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "slug": "container",
    "name": "express-free",
    "repositoryName": "yourorg/express-api",
    "branch": "main",
    "autoDeploy": true,
    "env": [{ "name": "NODE_ENV", "value": "production" }]
  }'

The API works the same on free and paid tiers. The only difference is the infrastructure behind it (preemptible nodes with scale-to-zero vs stable nodes with guaranteed uptime).

What you give up on free

Free-tier apps run on preemptible nodes (Google Cloud spot instances). The platform can evict them with 30 seconds' notice, triggering a pod restart. Paid tiers run on stable nodes with no evictions.

Free-tier databases get a small storage volume (10 GB included). If your database grows beyond that, upgrade or connect to an external database (like a managed PostgreSQL instance on another provider).

Free hosting is real. The limits are documented upfront. Use it for what it is: a zero-cost option for non-production workloads.

References

  • [PandaStack pricing](https://pandastack.io/pricing)
  • [PandaStack free tier limits](https://docs.pandastack.io)
  • [Express production best practices](https://expressjs.com/en/advanced/best-practice-performance.html)

Ready to deploy?

Start free on PandaStack.

Start free on PandaStack

More in Tutorial

Browse all Tutorial articles →

See also