JavaScript · Node.js 22.18.0
JavaScript hosting, 24/7
Ship a discord.js bot, an Express API or a queue worker and leave it running. The platform installs your package.json dependencies at build time, runs your start script in an isolated container and restarts the process on its own, on every plan, when it crashes.
Who designed JavaScript
Netscape needed a browser script that was not Java: something small to validate a form and poke the page. Brendan Eich wrote the first version in May 1995, in about ten days — first Mocha, then LiveScript, then JavaScript when marketing wanted the Sun name beside it. It shipped in Netscape Navigator 2.0 at the end of that year. In 1997 ECMA standardized the language; the narrow core from those ten days is still what the engine runs.

Brendan Eich
Jonas Strandell · CC BY 2.0
The browser’s glue
It was not meant to replace Java: it was meant to validate a form, react to a click and wire the page. A text file the browser engine runs.
The language the web picked
Once every browser spoke JavaScript, the same idiom left the client and went to the server, the app and the script. The original purpose was the document; the reach came later.
Dynamic, no compiler
Loose types, prototypes, first-class functions. Eich had ten days: the core stayed narrow on purpose, for an interpreter in the browser, not a build cycle.
What the platform does for a Node.js project
Almost all of it works with no configuration.
npm install at build time
Your package.json dependencies are installed while the image is built, not on every boot. An install failure shows up in the build log, inside the 5-minute build ceiling, instead of becoming a production crash.
Three Node.js versions
24.5.0, 22.18.0 (recommended) and 20.18.0. Switching means changing VERSION in vertracloud.config and deploying again — there is no image to pick and no Dockerfile to maintain.
MAIN and START decide the process
With no START, the platform runs the file MAIN points at. With START=npm start, it uses the package.json script — that is how projects with runtime flags or a bundling step start without workarounds.
Auto-restart with a brake
A process that crashes is restarted on its own, on every plan: an unhandled exception does not take the service down. If it breaks 5 times in 10 minutes, auto-restart is disabled for 24 hours, and the last stack trace is kept in the crash log.
What people run in Node.js here
Half of what lands here is a bot; the other half answers HTTP. It is package.json that decides which.
Discord and Telegram bots
discord.js, telegraf and whatsapp-web.js run as background processes, with no HTTP port. The token goes in the dashboard environment variables, never in a .env inside the zip.
Express, Fastify and Nest APIs
Publish the application to get a vertraweb.app subdomain with TLS. The server has to listen on 0.0.0.0 at the port declared in PORT — binding to localhost returns a timeout.
Queue workers and cron jobs
A BullMQ consumer, a node-cron schedule, a periodic sync: long-running processes that just need to stay up. Auto-restart covers the occasional network drop.
Automation with a managed database
Create a MongoDB 8.0.11 or a Redis 7 in the same dashboard and connect with mongoose or ioredis over the internal host. TLS is mandatory on every database, and the certificate and password are available to download in the dashboard.
Available Node.js versions
22.18.0 is the recommended one; 24.5.0 is the latest and 20.18.0 covers anyone still tied to an older native module. Declare VERSION in vertracloud.config to pin one.
| Version | vertracloud.config | Status |
|---|---|---|
| Node.js 24.5.0 | VERSION=24 | Latest |
| Node.js 22.18.0 | VERSION=22 | Recommended |
| Node.js 20.18.0 | VERSION=20 |
The whole configuration
vertracloud.config is an optional INI file at the project root. MAIN points at the entry file; START swaps it for a package.json script; BUILD runs once per deploy before the app starts (e.g. npm run build, for anyone using a framework like Next.js); VERSION picks the Node.js; MEMORY sets the RAM ceiling.
NAME=meu-bot
MAIN=index.js
START=npm start
VERSION=22
MEMORY=512A plan for every stage of the project
Memory and storage change with the plan; the language does not. Compare what each plan unlocks and pick the one that fits the project today.
Compare plansAlso runs here
Same platform, same deploy, a different stack.
Frequently asked questions about Node.js hosting
The errors that show up most on the first deploy of a Node.js project.
The app starts and crashes with Cannot find module. What happened?
The package is not in package.json dependencies — usually it was left in devDependencies, which is not installed at build time. Move the runtime dependency to dependencies and deploy again.
The log says missing script: start. How do I fix it?
You declared START=npm start, but package.json has no such script. Add "start": "node index.js" to scripts, or drop START and let MAIN point at the entry file.
I get Cannot use import statement outside a module, or ERR_REQUIRE_ESM.
Those are two sides of the same format conflict. To use import, add "type": "module" to package.json; if a package only ships ESM and your code is CommonJS, move to ESM or pin an older version, such as node-fetch@2.
The build fails with ERESOLVE, or with a native module error.
For ERESOLVE, add an .npmrc at the root with legacy-peer-deps=true. For a native module such as better-sqlite3, do not ship node_modules in the zip: the platform compiles for Linux, and your machine's binary will not do.
Does the platform read my project's .env?
No. The platform does not load .env files: variables are registered in the environment variables tab of the dashboard and injected into the container. That is what keeps bot tokens out of the zip.
Deploy your Node.js project today
Create an account, upload a zip without node_modules or connect your GitHub repository, and follow npm install in the dashboard terminal.
Create account