Node.js hosting in Saudi Arabia — your app running in Riyadh, without running a server

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.

The gap between "it works on my laptop" and "it is live"

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.

How it works, in three steps

  1. Upload the app. Using File Manager or FTP, put your project in a folder in your website's home — for example nodeapp, next to public_html rather than inside it, so the source is never served as files.
  2. Set it up in S Panel. Open Node.js apps, choose the website, the app folder and the startup file (such as app.js or server.js), and the address path: / for the whole site, or one word such as /api to run beside an existing site.
  3. Install and start. Press Run npm install to fetch your dependencies from package.json, then Start. Stop, Restart and the logs sit on the same screen.

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.

A minimal app that is ready to deploy

Express, listening on the right port

// 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);
});

Settings in a .env file

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

Talking to the database

// 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.

What fits, and what does not

Good fit on hostingBetter on a cloud server
REST or GraphQL APIs for a website or mobile appDocker or docker compose stacks
Webhook receivers for payments, couriers and formsA Node.js version other than 22
Bot backends and notification servicesWorkloads 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 siteGPU 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.

The limits, in one table

ItemLimit
Node.js version22 LTS
Apps per hosting accountUp to 3
Memory per appUp to 512 MB
CPU per appUp to half a CPU core
AddressThe whole website (/) or one path such as /api
Crash handlingAutomatic restart; logs in S Panel
Settings and secrets.env file in the app folder
HTTPSFree auto-renewing SSL, as for every site
LocationHosting servers in Riyadh, Saudi Arabia

An agency example

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.

Plans that run Node.js

SharedDedicatedCloudCloud Pro
Monthly price (SAR, excl. VAT)49119199 (149 for the first 3 months)249 (199 for the first 3 months)
Websites152550
Node.js 22 appsUp to 3Up to 3Up to 3Up to 3
PostgreSQL 16 databasesUp to 5Up to 5Up to 5Up to 5
Plan memory512 MB1 GB4 GB8 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.

Frequently asked questions

Which Node.js version is available?

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.

How many Node.js apps can I run, and how big can they be?

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.

Which port should my app listen on?

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.

Can a Node.js app run next to my WordPress site?

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.

What happens if my app crashes?

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.

Where do I put API keys and database passwords?

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.

Can my app use a database?

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.

Do I get HTTPS?

Yes. The app is served through your website address, and every website on Skyline hosting gets a free SSL certificate that renews automatically.

Can I run Docker, a different Node version or a GPU workload?

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.

Ship the app, skip the server

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

Start your free 14-day trial

No card to start. Enter code SKY30 when you sign up and your wallet opens with SAR 50 of credit.