Deploy a Node.js Express App
Push your Express project to GitHub and Faable builds and runs it β no Dockerfile, no YAML. The builder detects Node.js from your package.json, installs your dependencies, runs your build step if you have one, and serves the app behind automatic SSL at https://<app>.faable.link, hosted 100% in Europe. Supported Node.js versions: 20, 22 and 24.
Give your app a start script
Make sure your app has a start script inside package.json
{
"name": "app_name",
"scripts": {
"start": "<your start script here>"
}
}Serve your app at $PORT
Start a server that listens on 0.0.0.0 and serves http traffic using environment variable PORT to configure its port binding. This variable will be automatically configured in Faable Cloud when routing requests to your app.
const express = require('express')
const app = express()
// NOTE: To work on Faable Cloud, use the $PORT environment variable
const port = process.env.PORT
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.listen('0.0.0.0', port, () => {
console.log(`Example app listening on port ${port}`)
})Deploy
From the dashboard β the normal path:
- Create a Project and an App in the Faable DashboardΒ .
- Click Link repository and pick your Express repo.
- Push to your release branch. Faable builds and takes it live.
Or from your laptop, for an ad-hoc deploy:
npm i -g @faable/faable
faable login
faable deployYour app is ready at https://<app>.faable.link, with automatic SSL and the WAF already inspecting traffic.
Environment variables
Read configuration from process.env and set it with the CLI or the dashboard:
faable deploy secrets set DATABASE_URL=postgres://β¦ NODE_ENV=productionFaable also injects PORT, FAABLE_APP_ID, FAABLE_RELEASE and FAABLE_GIT_COMMIT. See Environment & Releases.
Troubleshooting
- Requests time out β the server binds a hardcoded port instead of
process.env.PORT, or it listens on127.0.0.1instead of0.0.0.0. - Build fails on
npm ciβpackage-lock.jsonis out of sync withpackage.json. Commit an updated lockfile. - The app exits right after boot β a missing environment variable usually throws at startup; check the deployment logs in the dashboard.
Related
- What the Builder Expects β detection rules, Node.js versions, the
$PORTcontract - Deploy Django Β· Deploy FastAPI Β· Deploy Flask
- Custom domains Β· WAF
- Add authentication to your app β Faable Auth is included in the same subscription
Last updated on