S365 On-Premise Manual
S365 on-premise runs the whole system on the client's own computer, with no internet needed. A new client takes three moves: get the server's fingerprint, issue the licence in S365 Control, run the installer with it.
S365-XXXXX-…..s365lic file.1. Getting the kit
There is no public download. S365 builds each kit on its own machine because the kit is signed with S365's key, then hands it over on a USB stick or through a private link.
| Kit | Folder | Contains |
|---|---|---|
| Windows | s365-onprem-windows-<version>\ | INSTALL.bat, install.ps1, the release, and vendor\ with Node, PostgreSQL 17, PostgREST and Deno |
| Linux | s365-onprem-linux-<version>/ | install.sh, the release, and vendor/ (with vendor/debs for a server with no internet) |
Windows and Linux are installed differently, so there are always two kits, never one shared.
Building the kits (S365 only)
node scripts/onprem/export-seed.mjs node scripts/onprem/build-bundle.mjs --platform windows --vendor node scripts/onprem/build-bundle.mjs --platform linux --vendor
The kits land in ~/s365-onprem/. --vendor puts every program inside the kit, so the shop installs with no internet. The same build makes the update file s365-onprem-<platform>-<version>.s365 that existing clients install with s365 update.
2. What you need
Pick the layout first. Single PC: the checkout and the server are the same Windows PC. Server + checkouts: one PC or server runs S365, and every checkout and office PC opens it in Chrome or Edge, with nothing installed on them.
| Machine | Minimum |
|---|---|
| Server for a supermarket (up to about 10 checkouts) | 4-core CPU (Core i5 / Ryzen 5, 2020 or newer), 16 GB RAM, 512 GB NVMe SSD, a second drive or USB disk for backup copies, wired gigabit Ethernet with a fixed address (DHCP reservation), a UPS. Windows 11 Pro, Windows Server 2022 or Ubuntu Server 24.04 LTS. BIOS: "Restore on AC power loss" = On. |
| Single PC (one checkout) | 4 cores, 8 GB RAM (16 GB better), 256 GB SSD, Windows 10/11 64-bit, a UPS. |
| Each checkout PC | 2–4 cores, 8 GB RAM, SSD, Windows 10/11 with Chrome or Edge, wired network where possible. |
| At each checkout | A USB barcode scanner (keyboard mode, Enter after the code), a network receipt printer (ESC/POS, port 9100) with the cash drawer on it. |
3. The licence, start to finish
The licence is a signed file that names the client, the modules, the number of checkout stations and logins, the end date, and what happens after it. It is bound to one server's fingerprint.
- Get the fingerprint at the shop. Windows: double-click
INSTALL.batwith no licence file in the kit folder. Linux:sudo ./install.sh --fingerprint. It printsS365-XXXXX-XXXXX-XXXXX-XXXXX. Send it to S365. - Issue the licence in S365 Control. Open S365 Control → On-premise → New licence. Fill in:
- the cloud client, if they have one, or the business name;
- the modules (Shop, Inventory, Accounting… — WhatsApp, AI and Omega never run offline);
- checkout stations, logins and the maintenance end date;
- the server fingerprint from step 1.
- Download. Issue & download signs the file on S365's licence server and saves
OP-2026-XXXXXXXX.s365licto your downloads. The licence then appears in the On-premise list. - Install with it. Put the file in the kit folder and run the installer again (sections 4 and 5). On a server that is already installed, use
s365 licence install <file>instead.
4. Installing on Windows
Windows 10/11 Pro or Windows Server 2019 and later, 64-bit. The program goes to C:\S365, the data to C:\S365\data.
- Copy the kit folder to the server (for example to the desktop).
- Get the fingerprint: double-click
INSTALL.bat. It asks for administrator rights, finds no licence and prints the PC's fingerprint. Send it to S365 (section 3). - Put the licence file you get back (
*.s365lic) in the kit folder, next toINSTALL.bat. - Run
INSTALL.batagain. Answer 1 for this PC only, or 2 for a server for the shop network. It asks once for the owner's password. - Open the app at the address it prints at the end (
http://localhost, orhttp://<server name>on the network). Sign in asowner.
The installer sets up PostgreSQL as the Windows service S365 Database (this machine only), the scheduled task S365 (runs as SYSTEM at boot and restarts itself on failure), the firewall rule for the private network (network layout only), and the s365 command. Running it again on a finished install changes nothing.
All the options, from an administrator PowerShell
.\install.ps1 -Licence .\shop.s365lic -Layout Lan -Port 80 -Owner owner ` -Currency USD -Currency2 LBP -CountryCode 961 -Vat 11 -DayRoll 5 -TimeZone Asia/Beirut
| Option | Meaning |
|---|---|
-Layout Single | Lan | This PC only, or a server for the shop network |
-Port 80 | The app's port |
-Owner owner | The first login's name |
-Currency / -Currency2 | Main and second currency (USD, LBP…) |
-CountryCode 961 | Phone country code |
-Vat 11 | off | VAT rate, or no VAT |
-DayRoll 5 | The hour the business day changes (05:00) |
-TimeZone Asia/Beirut | The business's time zone |
-BusinessName "…" | The name on receipts |
-Chart LB | Lebanese chart of accounts instead of the general one |
-Fingerprint | Only print this PC's fingerprint |
5. Installing on Ubuntu Linux
Ubuntu Server 24.04 LTS. The program goes to /opt/s365, the data to /var/lib/s365; it runs as the system user s365 under the systemd service s365.
- Copy and unpack the kit on the server, then
cdinto it. - Get the fingerprint and send it to S365 (section 3):
sudo ./install.sh --fingerprint
- Install with the licence you get back:
sudo ./install.sh --licence shop.s365lic --layout lan --currency USD --currency2 LBP \ --country-code 961 --vat 11 --day-roll 5 --timezone Asia/Beirut - Open the app at
http://<server>from any checkout or office PC, and sign in asowner.
The options are the PowerShell ones in lower case with dashes: --layout single|lan, --port, --owner, --stations, --currency, --currency2, --country-code, --vat, --day-roll, --business-name, --timezone, --chart LB.
PostgreSQL 17 comes from the PostgreSQL apt repository, or from the .deb files in vendor/debs on a server without internet. It listens on this machine only.
6. After installing: first steps in the app
The installer already made the database, the owner login, the chart of accounts, one warehouse "Shop", the checkout stations (as many as the licence allows), the payment methods (cash in each currency, card) and the cash boxes. The owner then:
- Starts the stock: Warehouse settings → Start (
/inventory/settings). - Types today's exchange rate (second currency only): Accounting → Settings → Exchange rate. Nothing fetches it offline, so it is typed in every day it changes.
- Adds the users: one login per person, a checkout account per cashier.
- Binds each checkout PC: open the address, sign in, Sell. The first time it asks to bind the PC to a checkout station; a manager does it once.
- Connects the printers: run the print bridge on the PC the printer is on, pointed at
http://<server>/functions/v1/print-agentwith the key in<data>/secrets/print-agent-key.
7. Managing a licence later
Every licence is in S365 Control → On-premise, with its status (active, ending within 30 days, in grace, expired, revoked), its last check-in, the version it runs, and stations and users in use against what was bought. The Overview page shows the same in one tile and lists problems under "Needs attention".
| To… | Do this | Reaches the server |
|---|---|---|
| Renew / move the end date | Open the licence → End date → Save | At its next check-in (every 6 hours with internet) |
| Stop a stolen or unpaid licence | Reason → Revoke (the server goes read only). Undo revoke reverses it. | At its next check-in |
| Force degraded or read only | Forced mode → degraded / read only | At its next check-in |
| A server with no internet | Issue again (same licence id), copy the file over, s365 licence install <file> | When the file is installed |
| Move to a new server | s365 backup on the old one, issue again with the new fingerprint, install, s365 restore <file> | When installed |
After the end date
- 14 days of grace: everything works, with a "renew" notice.
- Then degraded: selling and taking payment, printing the receipt and viewing everything keep working, so the shop never stops. Purchasing and receiving, items, prices, stock counts, users and permissions, settings, exports and backup settings stop, with a red "licence expired — renew" notice. Nightly backups never stop.
- Updates released after the end date are refused.
A licence can set another grace, another list of what keeps working, updates_stop (only updates stop) or read_only. No internet never degrades anything: a server that cannot check in keeps running on its licence file and tries again later. A licence can be offline (never checks in) or strict (must check in every N days).
8. Every day: the s365 command
On the server, in an administrator command window (Windows) or a terminal (Linux).
| Command | What it does |
|---|---|
s365 status | Service, database, licence, stations, last backup |
s365 backup | A backup now (the nightly one is automatic) |
s365 backups | The backups kept |
s365 restore <file> | Puts a backup back; the data from before is kept aside until s365 drop-old |
s365 update <file.s365> | Installs an update: backup first, rolls itself back if anything fails |
s365 licence | Shows the installed licence and its status |
s365 licence install <file> | Installs a new or renewed licence file |
s365 create-user <name> --role admin | A login, from the server |
s365 set-password <name> | A forgotten password (signs the person out everywhere) |
s365 backup-config --usb E:\S365-backups | A copy of every backup to a second drive or USB disk |
s365 backup-config --rclone gdrive:S365 | A copy to Google Drive (rclone) |
s365 start / stop / restart | The service |
s365 fingerprint | The server's id for the licence |
Backups
Every night at 03:30 (change it with s365 backup-config --time 02:00) the whole database and every stored file go into one file, s365-backup-<date>-<time>.s365bak, in <data>\backups; 14 are kept. With a USB or second drive set, a copy goes there too. For Google Drive: install rclone, run rclone config once to connect the shop's Google account (remote name e.g. gdrive), then s365 backup-config --rclone gdrive:S365.
Updates
S365 sends an update file s365-onprem-<platform>-<version>.s365. On the server: s365 update <file>. It checks S365's signature and every file, takes a backup, applies the database changes, switches to the new version and checks it started. If anything fails it puts back the previous version and the backup by itself.
9. Maintenance checklist
| When | What |
|---|---|
| Daily | The exchange rate (second currency only) |
| Weekly | s365 status: last backup "ok", copies "copied". Swap the USB disk if two are rotated. |
| Monthly | Restore last night's backup on a spare PC or test install to prove it works; check free disk space; Windows updates outside opening hours (the service restarts by itself after a reboot) |
| Yearly | Renew maintenance before the end date |
| Every 3–4 years | Replace the UPS battery (test it regularly) |
10. What is not available offline
WhatsApp (Lama, campaigns, reminders), the AI assistant, Meta ads and Instagram, the Omega POS link, the group of companies, delivery apps and cloud power meters. Their pages say "not available offline". Watching the shop live from outside needs a VPN to the shop's network, which is not part of this edition.
Not done yet: HTTPS on the shop network (the shop network uses plain HTTP), automatic exchange rates.