Skip to main content
Version: 1.0.7

Installation

QUBIQ ships as one installer per operating system. It places the application, registers it with the operating system's service manager so it starts on boot, opens the firewall for the web interface and the REST gateway (Windows), and takes you to the first-run setup screen.

There is nothing to install alongside it. No database server, no message broker, no web server — and no Python. The Python runtime that powers scripting is bundled inside QUBIQ's own folder.

Before you start​

  • Check system requirements.
  • Have administrator rights. QUBIQ installs as a machine-wide service on every platform, which is the only mode that makes sense for a plant: a login-start install would stop the moment the operator logged out, taking the historian and every device connection with it.
  • QUBIQ is 64-bit only. The Windows installer refuses a 32-bit host rather than installing cleanly and failing to start, which is far harder to diagnose.
Code signing

Installers are not yet code-signed. Windows SmartScreen and macOS Gatekeeper will show a one-time "unrecognised publisher" prompt — choose More info → Run anyway (Windows) or right-click → Open (macOS). Nothing else is affected.

Windows​

  1. Run QUBIQ-<version>-setup.exe.
  2. Accept or change the install folder — C:\Program Files\QUBIQ.
  3. Finish. The installer starts the service and opens http://localhost:8182.

It registers the Windows service with the Service Control Manager, sets it to Automatic start with a restart-on-failure policy, opens the firewall for ports 8182 and 8090, and grants the data directory only to SYSTEM and the local Administrators group.

Upgrading over a running installation is supported: the installer stops the service through the SCM and waits for it, rather than assuming. It also refuses to install over a newer version — the database schema guard would refuse to open app.db anyway, and failing before anything is replaced is easier to understand than failing on first boot with the old binary already gone.

qubiq.exe is hidden, and refuses to run on its own

Running the engine by hand boots the whole platform outside the service — a plant that dies with your session and never returns after a reboot, with nothing about the double-click to suggest it. So the installer hides the executable, and the binary itself refuses to start unless it was installed. Use the service, or qubiqctl.

Linux​

Install the package for your distribution:

sudo apt install ./qubiq_<version>_amd64.deb # Debian, Ubuntu
sudo dnf install ./qubiq-<version>.x86_64.rpm # RHEL, Rocky, Fedora

The package unpacks the bundled Python runtime, creates a dedicated qubiq system account that owns the data directory, installs a systemd unit and enables it without starting it — an unattended package install must not bring a plant up at a moment nobody chose. An upgrade of a QUBIQ that was running starts it again; on a first install, start it yourself:

sudo systemctl start qubiq
systemctl status qubiq

Then open http://<host>:8182.

macOS​

  1. Run QUBIQ-<version>-<arch>.pkg.
  2. Follow the installer.

The package installs to /usr/local/qubiq and registers a LaunchDaemon, com.qubiq. Like the Linux package it does not start QUBIQ on a first install; an upgrade of a QUBIQ that was running starts it again. Start it yourself:

sudo launchctl load /Library/LaunchDaemons/com.qubiq.plist

Then open http://localhost:8182.


Where things are installed​

Windows (all users)LinuxmacOS
ApplicationC:\Program Files\QUBIQ/opt/qubiq/usr/local/qubiq
Data directoryC:\ProgramData\QUBIQ/var/lib/qubiq/Library/Application Support/QUBIQ
Bundled Python…\QUBIQ\python/opt/qubiq/python/usr/local/qubiq/python
Its bundled packages…\QUBIQ\python-packages-bundled/opt/qubiq/python-packages-bundled/usr/local/qubiq/python-packages-bundled
Service unitWindows service QUBIQ/lib/systemd/system/qubiq.service/Library/LaunchDaemons/com.qubiq.plist
Open-source notices…\QUBIQ\THIRD-PARTY-NOTICES.md/usr/share/doc/qubiq//usr/local/qubiq/THIRD-PARTY-NOTICES.md

The installer pins the data directory with the QUBIQ_DATA_DIR environment variable, so a service account with no user profile still finds it.

Inside the data directory:

.env JWT_SECRET and ENCRYPTION_KEY — generated on first boot
projects/ per-project view, script and asset trees
user-databases/ sandbox for user-created SQLite connections
python-packages/ admin-installed Python modules for the script sandbox
mibs/ uploaded SNMP vendor MIBs
log/ rotated diagnostic reports

The directory also holds the configuration database, encrypted at rest.

The directory is created with restrictive permissions — a locked ACL on Windows, owner-only on Unix — because it holds the configuration database, .env and every connection credential.

Back up .env separately

It holds ENCRYPTION_KEY. Lose it and the configuration database and every stored credential are unrecoverable — a backup of the data directory alone will not save you. → Backup & restore


Python is bundled — do not install your own​

QUBIQ ships a private, version-pinned Python runtime inside its install folder, with the two things the platform needs already in it:

BundledFor
Python runtimePipeline Python nodes and Gateway scripts
Transport libraryHow the worker reaches the platform
ruffThe in-editor Python linter

The installer points PYTHON_PATH at it. That runtime is not added to your system PATH, does not register as "the system Python", cannot collide with a Python you already have, and is removed when you uninstall.

So: scripting works out of the box. You do not need to install Python, create a virtual environment, or run pip install to get started.

To add extra modules for your scripts — pandas, a vendor SDK — use Settings → Script Sandbox → Add & install in the interface. Packages land in python-packages/ inside the data directory, which keeps them separate from the bundled runtime and means they survive a QUBIQ upgrade. → The script sandbox

If scripting is unavailable

QUBIQ boots degraded rather than failing: the interface works, connections poll, screens render — only Python script nodes and Gateway scripts fail. If that happens after an install, the bundled runtime did not land; reinstall rather than pointing PYTHON_PATH at a system Python.


Ports and the firewall​

On Windows the installer adds firewall rules for two ports.

PortServiceOpened by the installerNotes
8182Web interface and APIYesThe port engineers and operators connect to.
8090REST gateway — API-key data ingress/egressYesThe intended door for third-party systems. Remove the rule if nothing outside the host uses it.
8183Telemetry WebSocketNoThe browser reaches it from the same origin as 8182, so it needs no rule of its own.
8091Script gatewayNoLoopback only. Never exposed.

The internal message bus is not in this table and never will be: it binds to loopback on a random port, so there is nothing to open, firewall or authenticate. → The gateway

TLS on 8090

Port 8090 carries API keys over the network. Enable TLS, or put the gateway behind a TLS-terminating reverse proxy, before you issue keys to anything. → API keys


After installing​

  1. Open http://localhost:8182 and complete the first-run setup — QUBIQ ships with no default account, and the wizard is reachable only until you create the first one.
  2. Point the historian at a QuestDB store → Historian configuration.
  3. Point the audit journal at an external database → Audit journal.
  4. Take a baseline backup → Backup & restore.

Managing the service​

Day to day, use your platform's service manager, or the bundled qubiqctl control utility, which detects the installed service manager and delegates to it so shutdown is always graceful.

Linux / macOS
qubiqctl start | stop | restart | status
Windows (elevated)
qubiqctl.bat start | stop | restart | status

→ Services & system settings

Serving over HTTPS​

Terminate TLS at QUBIQ or at a reverse proxy.

At QUBIQ — set in .env inside the data directory:

TLS_ENABLED=true
TLS_CERT_FILE=/etc/qubiq/tls/fullchain.pem
TLS_KEY_FILE=/etc/qubiq/tls/privkey.pem

Behind a proxy — proxy 8182 (HTTP + WebSocket upgrade) and 8183, and declare the proxy so client addresses are attributed correctly in the audit journal:

TRUSTED_PROXIES=10.0.0.0/8,192.168.0.0/16
ALLOWED_ORIGINS=https://qubiq.example.com
QUBIQ_COOKIE_SECURE=true

→ Environment variables

Upgrading​

Run the new installer over the existing installation. It stops the service, replaces the application and the bundled runtime, and starts it again. It never touches the data directory or .env.

The database schema is migrated once at boot, before any service starts, so there is no separate migration step.

Take a backup first — schema migrations are not reversible.

Uninstalling​

Use the platform's normal uninstall route: Add/Remove Programs, apt remove qubiq / dnf remove qubiq, or the macOS uninstall script.

The uninstaller stops and deregisters the service, removes the firewall rules and the bundled runtime, and leaves your data directory in place — it never deletes it, because it holds the configuration database and the encryption key.

To remove everything, delete the data directory afterwards. Export a backup first if there is any chance you will want the configuration back.

Next​

→ First-run setup