Skyline web hosting now runs Node.js 22 apps. Upload your code, choose the startup file, press Run npm install and then Start. S Panel keeps the app running in the background, restarts it if it crashes, shows you its logs and serves it at your own domain with free SSL — on servers in the Kingdom.
Start your free 14-day trial — no credit card
Up to 3 apps on every plan from 49 SAR a month. Node.js 22 LTS.
Most Node.js projects that small teams in Saudi Arabia build are not huge. A REST API for a mobile app. A webhook that receives payment or delivery notifications. The backend of a WhatsApp or Telegram bot for a restaurant chain. A booking widget that a clinic in Khobar embeds on its website. The code takes a week; putting it online used to take a server.
A server means choosing a Linux image, installing Node, writing a process-manager config, setting up a reverse proxy, issuing a certificate, remembering to renew it, and watching memory at two in the morning. For an agency that delivers dozens of such projects a year, that administration costs more than the hosting itself. Hosting that runs Node.js removes that layer: you bring the app, the panel does the plumbing.
Your app has one rule to follow: listen on the address the platform gives it, which arrives as process.env.PORT. Pass it to listen() unchanged — not wrapped in Number(), and not replaced by a fixed port such as 3000.
// app.js (npm install express)
const express = require('express');
const app = express();
app.get('/health', (req, res) => res.json({ ok: true, city: 'Riyadh' }));
app.listen(process.env.PORT, () => {
console.log('listening on', process.env.PORT);
});
Create .env in the app folder. Each line becomes an environment variable for the app, so there is no need for an extra package to load it.
NODE_ENV=production DATABASE_URL=postgres://acme_api:the-password-shown-once@127.0.0.1:5432/acme_api PAYMENT_WEBHOOK_SECRET=change-me
// npm install pg
const { Pool } = require('pg');
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
app.get('/orders/:id', async (req, res) => {
const { rows } = await pool.query('SELECT * FROM orders WHERE id = $1', [req.params.id]);
res.json(rows[0] ?? null);
});
The database lives on the same server, so the host is always 127.0.0.1. PostgreSQL 16 and MySQL are both on every plan — see PostgreSQL hosting in Saudi Arabia for the one-click setup.
| Good fit on hosting | Better on a cloud server |
|---|---|
| REST or GraphQL APIs for a website or mobile app | Docker or docker compose stacks |
| Webhook receivers for payments, couriers and forms | A Node.js version other than 22 |
| Bot backends and notification services | Workloads that need more than 512 MB or a full CPU core per process |
| Express apps and other Node.js HTTP servers that call listen(process.env.PORT) | Software that needs root access, system packages or its own fixed port — including next start |
| An app at /api beside a WordPress or Laravel site | GPU or machine-learning workloads |
One practical tip for front-end frameworks: build your production bundle on your own computer or in your CI, and upload the built output with the server code. The hosting side then only has to install dependencies and start the app, which keeps memory use inside the per-app limit.
When your project outgrows these limits, the next step is a VPS in Riyadh or a cloud server, where you have root and choose everything yourself.
| Item | Limit |
|---|---|
| Node.js version | 22 LTS |
| Apps per hosting account | Up to 3 |
| Memory per app | Up to 512 MB |
| CPU per app | Up to half a CPU core |
| Address | The whole website (/) or one path such as /api |
| Crash handling | Automatic restart; logs in S Panel |
| Settings and secrets | .env file in the app folder |
| HTTPS | Free auto-renewing SSL, as for every site |
| Location | Hosting servers in Riyadh, Saudi Arabia |
A Riyadh agency hosts a client's Arabic-English company site on WordPress. The client now wants a branch-locator API for its new app. The agency adds a Node.js app at /api on the same website, stores the branches in a PostgreSQL database on the same plan, and puts the map provider's key in .env. No new server, no new invoice line, and the client's data stays in the Kingdom.
| Shared | Dedicated | Cloud | Cloud Pro | |
|---|---|---|---|---|
| Monthly price (SAR, excl. VAT) | 49 | 119 | 199 (149 for the first 3 months) | 249 (199 for the first 3 months) |
| Websites | 1 | 5 | 25 | 50 |
| Node.js 22 apps | Up to 3 | Up to 3 | Up to 3 | Up to 3 |
| PostgreSQL 16 databases | Up to 5 | Up to 5 | Up to 5 | Up to 5 |
| Plan memory | 512 MB | 1 GB | 4 GB | 8 GB |
Compare everything on the web hosting plans page or the full Skyline price list. Charges come from a prepaid SAR wallet with a ZATCA e-invoice for each, and support answers in Arabic or English.
Related: PostgreSQL hosting in Saudi Arabia, Cloud hosting plan, and data residency in Saudi Arabia.
Node.js 22, the long-term-support release. Every app on the platform runs on it, so develop and test locally on Node 22 as well.
Up to three apps per hosting account. Each app can use up to 512 MB of memory and half of one CPU core. That is comfortable for an API, a webhook receiver, a bot backend or a modest web app.
Whatever arrives in process.env.PORT. The platform supplies that address and sends visitors from your website to it, so write app.listen(process.env.PORT) exactly — pass the value unchanged, do not convert it to a number and do not hard-code 3000.
Yes. When you set up the app you choose its address path: "/" makes the app the whole website, while a path such as /api runs the app at that path and leaves the rest of the site — WordPress, for example — as it is.
It is restarted automatically. The logs are one click away in S Panel, so you can see what went wrong, fix it and press Restart.
In a .env file inside the app folder. Its values are given to the app as environment variables, so your code reads process.env.DATABASE_URL and the secret never has to be committed to Git.
Yes. Every hosting plan includes PostgreSQL 16 and MySQL/MariaDB on the same server. Create the database in S Panel and connect to 127.0.0.1 from your app.
Yes. The app is served through your website address, and every website on Skyline hosting gets a free SSL certificate that renews automatically.
Not on hosting. Hosting runs Node.js 22 apps managed by S Panel. For containers, other runtimes or root access, use a self-managed cloud server in Riyadh.
Open an account, add your website, and start a Node.js 22 app from S Panel today. Fourteen days free, no card, hosted in Riyadh.
SAR 50 free credit — code SKY30 at signup
No card to start. Enter code SKY30 when you sign up and your wallet opens with SAR 50 of credit.