With a Node.js Apps plan you run Node apps (Express, Fastify, NestJS, Next.js and more) straight from your GitHub, GitLab or Bitbucket repository. We clone the code, install dependencies, run the build and start the app with HTTPS.
1. Get your app ready
It needs three things:
- Listen on the port in the PORT variable.
- Have a start command: the start script in package.json (or the one you set in the dashboard).
- Respond on the health check path (/ by default): before sending traffic to a new version we check that it answers.
A minimal Express example:
const express = require("express");
const app = express();
app.get("/", (req, res) => res.send("Hello from Fodenflow!"));
app.listen(process.env.PORT || 3000);And in package.json:
"scripts": {
"start": "node index.js"
}2. Create the app in the dashboard
- Go to Node.js Apps and click Create app on your plan.
- Choose Git repository, paste the HTTPS URL (for example https://github.com/user/my-api) and the branch (usually main).
- If the repository is private, check It's a private repository and paste a read-only token. On GitHub you create it in Settings → Developer settings → Personal access tokens → Fine-grained tokens, with access to that repository only and Contents: Read-only.
- Pick the Node version (20, 22 or 24). The install and build commands are optional: if you leave them empty, we detect them from your package.json and package manager (npm, pnpm or yarn).
- Add your environment variables and choose the address: your app will live at https://your-app.apps.fodenflow.com.
- Click Create and deploy and watch the build log live.
Not using Git? You can also upload a ZIP of the project (up to 200 MB, without node_modules) or start from a template.
3. Environment variables
API keys and passwords go in your app → Variables (they're stored encrypted; secret ones are never shown again). You can paste a whole .env file. We set three for you:
PORT the port your app has to listen on
DATA_DIR a folder that persists between deployments
NODE_ENV production (you can change it)Heads up: the rest of the app's disk is rebuilt from scratch on every deployment. Anything that has to stay (uploaded files, for example) belongs in DATA_DIR.
4. Automatic deploys on every push
In your app → Settings → Automatic deploys, copy the webhook URL (and the secret) and add it on GitHub under Settings → Webhooks → Add webhook, with Content type application/json and the Just the push event option. From then on, every push to the configured branch ships a new version.
The new version starts next to the live one and traffic only switches over once the health check path responds: no downtime. If something goes wrong, open Deployments and click Roll back to this version on an earlier one.
5. Your domain, with SSL
In your app → Domains, add your domain and we'll show you the record to create: a CNAME to your app's free address for a subdomain (www, api), or an A record to our IP for the root domain. Once DNS points correctly, we issue the Let's Encrypt certificate automatically.