Skip to content

What you need

Windows Server, Linux and macOS, on both Intel and ARM. The portable bundle ships per-platform archives:

PlatformArchive
Windows, any recent Server or desktopplugboard-win32-x64.zip
Linux, Intel or AMDplugboard-linux-x64.tar.gz
Linux, ARMplugboard-linux-arm64.tar.gz
macOS, Apple siliconplugboard-darwin-arm64.tar.gz
macOS, Intelplugboard-darwin-x64.tar.gz
RequirementNotes
Node.js20.9 or laterOnly needed for a source install. The bundle can carry its own
pnpmAny recent versionSource installs only. npm i -g pnpm
PostgreSQL14 or later16 is what CI tests against. The bundle carries its own
RedisOptionalOnly the legacy people-sync and digest worker use it
Object storageOptionalS3-compatible. MinIO locally, S3 in cloud. Only for logos, photos and exports
DockerOptionalOnly for the Compose route

If you are running the bundle, none of the above needs to exist on the machine. That is the point of it.

PortProcessExposure
3000WebBehind your proxy, or direct on a trusted LAN
4000APIBehind your proxy, or direct on a trusted LAN
443Reverse proxyThe only one that should face users
5432PostgreSQLNever exposed beyond the host or the container network

Both application ports are configurable with WEB_PORT and API_PORT.

The Compose stack publishes nothing by default. It listens on the internal network only, and you attach an ingress profile or your own proxy.

The application itself needs no outbound access to run. Connectors do, and only the ones you enable.

If you enableIt reaches
Jamf Prohttps://yourorg.jamfcloud.com
Microsoft Intunelogin.microsoftonline.com, graph.microsoft.com
Kandjihttps://yourorg.api.kandji.io
Mosylemanagerapi.mosyle.com or businessapi.mosyle.com
Chrome Enterpriseoauth2.googleapis.com, admin.googleapis.com
Google Workspace or Sheetsoauth2.googleapis.com, gmail.googleapis.com, sheets.googleapis.com
Zendeskhttps://yourorg.zendesk.com
Twilioapi.twilio.com
Salesforcehttps://yourorg.my.salesforce.com
ThreatLockerYour ThreatLocker portal API
Stripeapi.stripe.com
Apple GSX, CompNow, DellThe vendor endpoint you configure
Automatic updatesThe release endpoint and GitHub Releases
Usage telemetryYour telemetry endpoint, if licensed and not disabled

Connectors that reach systems on your own network instead of the internet are LDAP and Active Directory, Synergetic, Web Help Desk, PaperCut and printers over SNMP. A self-hosted install on the same network reaches them directly.

Plugboard blocks outbound requests to private, loopback and link-local addresses by default, so a tenant-supplied URL (a service monitor target, a webhook endpoint) cannot be used to reach internal hosts or a cloud metadata service.

An on-premises install that legitimately monitors LAN addresses needs to opt out:

Terminal window
ALLOW_PRIVATE_EGRESS=1

Leave it off for anything multi-tenant. See the security model.

Nothing emails anyone until an email connector exists. Repair tracking links, ready-for-collection notices, purchase receipts, monitor alerts, backup failure alerts and scheduled reports all go through it.

You need either an SMTP server you can authenticate to, or a Google Workspace service account with domain-wide delegation. See SMTP and Google Workspace.

HTTPS is expected. The application will start without it and tell you so, which is fine for a first look on the machine itself and not fine for anything a staff member reaches.

Any of these work:

  • A public certificate from Let’s Encrypt, issued automatically by the bundled Caddy profile.
  • A wildcard you already own.
  • A certificate from your school’s internal CA, including Active Directory Certificate Services.
  • A PKCS#12 file, which is what most Windows tooling produces.

See HTTPS and certificates.

The machine’s clock matters more than it looks. SLA calculations, scheduled backups, the overnight update check, TOTP two-factor codes and licence expiry all read it. Run NTP.

The overnight update check uses the machine’s own local time, so a server set to UTC in a school in Sydney will update at 1am UTC, which is the middle of the school day. Either fix the timezone or set AUTO_UPDATE_HOUR.

Endpoint protection that scans every file write will make the database slow. Exclude the data directory (.pgdata for the bundle, the Docker volume otherwise) if you can.