Node.js Hosting
If your app starts with npm start on your computer, it starts here. Push to GitHub and Chajio Cloud installs, builds and runs two copies of your server, with free SSL and a managed database.
$ git push origin main
▸ Detected Node.js: package.json, package-lock.json
▸ Using Node.js 22, from package.json
▸ npm ci
▸ npm run build
▸ Starting the web process: npm start
✓ Live on 2 replicas: https://my-api.live.chajio.cloud
How it works
How we build and run your Node.js app
Detect
A
package.jsonmarks your repository as a Node.js app. Your lockfile (package-lock.json,yarn.lockorpnpm-lock.yaml) decides which package manager installs it.Install
Dependencies install exactly as your lockfile pins them, development dependencies included, so TypeScript and your bundler are there for the build.
Build
If
package.jsonhas abuildscript, it runs next:tsc, a bundler, or whatever your project uses.Run
Your
startscript starts the server. A new version only receives visitors once its health check passes, so a broken build never replaces a working one.
Get ready
Getting your Node.js app ready
const express = require("express");
const app = express();
app.get("/", (req, res) => res.json({ message: "Hello from Chajio Cloud" }));
app.get("/health", (req, res) => res.json({ ok: true }));
const port = process.env.PORT || 3000;
const server = app.listen(port, "0.0.0.0");
// Finish the requests in flight when a new version takes over.
process.on("SIGTERM", () => server.close(() => process.exit(0)));Listen on the port in PORT, on 0.0.0.0 rather than localhost. It is the one change most apps need. Fastify and NestJS take the same two values.
{
"engines": { "node": "22.x" },
"scripts": {
"build": "tsc",
"start": "node dist/index.js"
}
}engines picks the Node.js version: set the one you develop on. An .nvmrc file is not read. With TypeScript, compile in build and run the output in start: it starts faster and uses less memory than ts-node.
Works with
What you can run
Express
The classic. Nothing to change beyond PORT.
NestJS
Build with nest build, start with node dist/main.
Fastify
Pass host: "0.0.0.0"; it listens on localhost by default.
Koa
Same setup as Express.
Hono
With the Node.js adapter.
Socket.IO
Real-time apps over WebSockets.
In production
Running your Node.js app in production
No .env file in production
Set variables on the Environment tab. They are already in process.env when your app starts, so keep .env out of Git and don’t load it in production.
Two copies, shared state
Each replica has its own memory. Keep sessions in your database (with express-session, a store such as connect-pg-simple) and uploads in object storage.
WebSockets
Socket.IO works. Connect with transports: ["websocket"], and add an adapter backed by your database to reach users connected to the other copy.
Migrations on start
With Prisma, run prisma migrate deploy before your server starts: "start": "prisma migrate deploy && node dist/index.js".
Every plan
Included on every plan
2 replicas of every app
Two copies behind a load balancer, so a restart or a failed machine never takes you offline.
A managed database
PostgreSQL, MariaDB or MongoDB, with its own standby replica on another machine.
Deploy on every push
Connect GitHub once; every push to your branch builds and goes live.
One-click rollbacks
Go back to any earlier successful deployment from the Deployments tab.
Free SSL, your domain
Certificates issued and renewed for you, plus a free .live.chajio.cloud address.
Build and runtime logs
Watch builds as they run, and see what your app prints as it serves visitors.
CPU, memory and network
Metrics for every app, from the last 15 minutes to the last 30 days.
Zero-downtime deploys
A new version takes visitors only once its health check passes.
Pricing
Node.js hosting plans
Free Plan
5GB DB Storage · 2GB RAM
Then $3.50/mo
- 2 vCPU
- 2 Apps
- 1 Database
- 2 App Replicas (HA)
- 2 Database Replicas (HA)
- PostgreSQL, MariaDB or MongoDB
- Deploy from GitHub
- Auto-deploy on push
- One-click rollbacks
- Deployment history
- Build & runtime logs
- CPU, RAM, disk & network metrics
- Disk usage tracking
- Environment variables
- Custom domain
- Free SSL
Growth Plan
10GB DB Storage · 2GB RAM
- 3 vCPU
- 4 Apps
- 2 Databases
- 2 App Replicas (HA)
- 2 Database Replicas (HA)
- PostgreSQL, MariaDB or MongoDB
- Deploy from GitHub
- Auto-deploy on push
- One-click rollbacks
- Deployment history
- Build & runtime logs
- CPU, RAM, disk & network metrics
- Disk usage tracking
- Environment variables
- Custom domain
- Free SSL
Business Plan
20GB DB Storage · 4GB RAM
- 4 vCPU
- 6 Apps
- 3 Databases
- 2 App Replicas (HA)
- 2 Database Replicas (HA)
- PostgreSQL, MariaDB or MongoDB
- Deploy from GitHub
- Auto-deploy on push
- One-click rollbacks
- Deployment history
- Build & runtime logs
- CPU, RAM, disk & network metrics
- Disk usage tracking
- Environment variables
- Custom domain
- Free SSL
Pro Plan
30GB DB Storage · 8GB RAM
- 8 vCPU
- 10 Apps
- 5 Databases
- 2 App Replicas (HA)
- 2 Database Replicas (HA)
- PostgreSQL, MariaDB or MongoDB
- Deploy from GitHub
- Auto-deploy on push
- One-click rollbacks
- Deployment history
- Build & runtime logs
- CPU, RAM, disk & network metrics
- Disk usage tracking
- Environment variables
- Custom domain
- Free SSL
FAQ
Node.js hosting questions
The one you choose in the engines field of package.json, for example "node": "22.x". Without it, your app builds on the current long-term-support release of Node.js. An .nvmrc file is not read.
Yes. Commit the lockfile for the one you use (package-lock.json, yarn.lock or pnpm-lock.yaml) and every build installs exactly what it pins.
Yes. Compile it in your build script, for example with tsc, and run the compiled JavaScript in your start script. TypeScript stays in devDependencies; it is installed for the build.
Yes. Deploy each one as its own app: the React app as a static site and the API as a Node.js server. Point the frontend at the API’s address and allow the frontend’s domain in the API’s CORS settings.
Almost always because it listens on localhost or on a hard-coded port. Listen on the PORT variable, on 0.0.0.0, and make sure the health check path (/ by default) answers without a login.
You can start on the Free plan: free for your first month, then $3.50 a month, with 2 vCPU, 2GB RAM, 2 apps and a managed database. The Growth, Business and Pro plans add more CPU, memory, apps and databases as you grow.
Plans are priced and billed in US dollars, and you pay by card at checkout.
More App Hosting
Deploying something else?
Deploy your Node.js app today
Your first month is on us, with a managed database and two replicas from day one.