DEPLOYMENT GUIDE

Installing Prism on your own server.

Written for the person who has to actually do it. One Windows host, one inbound port, no database server and no agent on anyone's machine. Under an hour, start to finish - and the two things that most often go wrong are called out before you hit them rather than after.

HOSTS 1 INBOUND PORTS 1 DATABASE TO INSTALL NONE CLIENT SOFTWARE NONE
BEFORE YOU START

What you need in front of you

A Windows host Physical or virtual, that stays powered on. Windows 10/11 or Server 2019+. It does not need to be a big machine - see sizing at the end.
The build The .zip from phrizm.com/downloads. Verify it before you run it - see step 2.
Your licence key The license.key file emailed with your order.
Local admin on that host To create the folder and register the startup task. Nothing domain-wide.
A service account (recommended) A low-privilege local account to run Prism. It needs read/write on the Prism folder and nothing else.
READ THIS ONE FIRST

Two install profiles - pick one before step 1

Standard (self-updating). Prism updates itself by replacing its own program folder: it renames Prism\ to Prism.old\, moves the new build into place, and relaunches. That requires a dedicated root the service account can write to - not Program Files. Your data lives in a sibling folder that updates never touch:

C:\Prism\ ├── Prism\ <- the application. Replaced wholesale on update. │ └── Prism.exe └── PrismData\ <- yours. Never touched by an update. ├── prism.db the database ├── prism_config.json runtime settings ├── license.key your licence ├── uploads\ attachments and CAD files └── backups\ automatic 24h snapshots

Hardened (managed environments, Prism 1.97+). If AppLocker / WDAC policy is the reason you are reading this, run the opposite layout: the application goes under C:\Program Files\Prism, admin-owned and read-only to the service account (read + execute), and every writable path moves elsewhere via one environment variable:

setx PRISM_AUTO_UPDATE 0 /M setx PRISM_DATA_DIR "C:\ProgramData\Prism" /M

In this profile Prism cannot modify its own executable code: self-update is off, and the apply path detects the read-only program folder before it downloads anything and refuses with a clear "managed install" message rather than failing halfway. No AppLocker path exception or endpoint-protection exclusion is needed - Program Files is already covered by default allow rules. Updates become a change-controlled admin action: download the new build from phrizm.com/downloads, verify it against the SHA-256 published there for that release, replace the folder as admin, restart the service. The data folder never participates.

INSTALL

Seven steps

1

Create the folder

Make C:\Prism and grant your service account Modify on it. That single permission is what lets Prism update itself later.

2

Verify the download, then extract

Every release publishes the SHA-256 of its archive at phrizm.com/versions.json. Check it before you run anything - it takes ten seconds and it is the only way to know you have what we shipped.

Get-FileHash .\Prism-<version>.zip -Algorithm SHA256

Extract so that Prism.exe lands at C:\Prism\Prism\Prism.exe.

3

Expect a SmartScreen prompt, and allow the binary

Prism.exe is not yet code-signed. On a managed machine that means SmartScreen will warn, and in an AppLocker or WDAC default-deny estate it will be blocked until you allow it. We would rather you read that here than discover it at 5pm.

Allow it by path (C:\Prism\*) or by the published SHA-256, and add the same path as an exclusion in your endpoint protection - self-extracting Python bundles are a common heuristic false positive. Signed builds are on our roadmap; when they land, the publisher rule replaces the path rule.

4

Put the licence where Prism will look

Copy license.key into C:\Prism\PrismData\ and set the path explicitly. Prism otherwise looks in its working directory, which is not what you expect once it runs as a scheduled task.

setx /M PRISM_LICENSE_PATH "C:\Prism\PrismData\license.key"
5

Start it once, by hand

Confirm it runs before you automate it. It prints the LAN URL other machines should use.

C:\Prism\Prism\Prism.exe --server

Browse to http://localhost:8080 on the host and create the first account - that first user becomes the workspace admin. Then stop it with Ctrl+C.

6

Make it start with the machine

Register a scheduled task that runs at startup whether or not anyone is logged on. Run this elevated, once:

schtasks /Create /TN "Prism" /RU "DOMAIN\svc_prism" /RP * ^ /SC ONSTART /RL HIGHEST /F ^ /TR "C:\Prism\Prism\Prism.exe --server"

If you prefer a real Windows service with automatic restart, nssm install Prism C:\Prism\Prism\Prism.exe --server works and gives you recovery options. Either is fine; the scheduled task needs nothing extra installed.

7

Open one port, and give the host a name

Allow TCP 8080 inbound from your LAN (or 8443 if you enable HTTPS below). That is the only inbound rule Prism needs, ever.

New-NetFirewallRule -DisplayName "Prism" -Direction Inbound ^ -Protocol TCP -LocalPort 8080 -Action Allow -Profile Domain

Then add a DNS A-record - prism.yourcompany.local - pointing at the host. Prism also advertises itself as prism.local over mDNS, but that is multicast and does not cross VLANs or VPNs, so remote and multi-subnet users need real DNS.

Users now browse to the host. There is nothing to install on their machines.

NETWORK

Firewall, in and out

DirectionAllowWhy
Inbound TCP 8080 (or 8443) from the LAN Users reaching Prism. Prism never needs to be reachable from the internet - licensing and updates are both outbound-initiated.
OutboundSERVER ONLY licenses.reportil.com:443
the build CDN host
Licence validation and updates. This is the whole allowlist for a standard install.
OutboundOPTIONAL your AI provider
your mail server
your Jira
Only if you switch those on. All are off out of the box, and all point wherever you point them.

The complete per-destination inventory, including what each request carries, is on the network & egress reference.

WORTH DOING

Four settings to consider

HTTPS Prism serves plain HTTP by default. Point it at a cert and key and it serves HTTPS only on 8443 (with HSTS) instead - the HTTP listener does not stay up beside it. On a domain, the right cert is one from your own AD CS: request a Web Server certificate for Prism's DNS name from your enterprise CA, export the cert + key, and every domain machine trusts it with no prompts - a public CA cannot issue for internal hostnames anyway. There is no auto-renewal, so diary the expiry.
"tls": { "enabled": true, "cert_path": "C:\\Prism\\PrismData\\prism.crt", "key_path": "C:\\Prism\\PrismData\\prism.key", "https_port": 8443 }
Backups Prism snapshots its database every 24 hours and keeps the last 14, in PrismData\backups\. That is on the same disk, so point your existing backup job at C:\Prism\PrismData and you have a real off-machine copy. Nothing else to schedule.
Update policy Three choices, set in PrismData\prism_config.json under "update". Whichever you pick, since 1.97 no automatic path will install an archive that is not signed: every advertised build carries an Ed25519 statement binding the version to its SHA-256, verified before a byte is extracted.
"update": { "rollout": "auto" } install it at the next start "update": { "rollout": "notify_only" } tell me, I'll click "update": { "rollout": "manual_download" } tell me, I'll fetch it myself
auto is the default and applies a new build at start-up, before anyone is connected; your data folder is not part of the swap and the previous build is kept beside it for rollback. notify_only never installs on its own. manual_download goes further: the box fetches nothing on a click or at start-up - the download and the apply endpoint both refuse, so it is the server enforcing this and not a hidden button - and you take the archive from phrizm.com/downloads, check it against the published SHA-256, and unzip it over the install. notify_only also holds against a build we push, not only against one you are offered. The first two can be chosen in Settings → About; manual_download currently has to be written into the config file. PRISM_AUTO_UPDATE=0 removes the capability outright and is checked ahead of all three, so a hardened box cannot be talked back into updating from inside the app (see the hardened profile above).
A different port Set PRISM_PORT if 8080 is taken. Remember to move the firewall rule and the DNS entry with it.
NOT ON YOUR LIST

What you do not have to do

No database server to install, patch or tune - the database is a file. No IIS or nginx in front. No software on user machines; it is a browser. No scheduled jobs to create - backups, digests and updates are internal. No schema migration steps at upgrade time; it migrates itself on start. And no telemetry agent, because there is no telemetry.

One thing that is not yet on this list: Prism has its own user accounts, so today it is a separate directory to provision and offboard. SSO (SAML/OIDC, with LDAP for sites without an IdP) is on the roadmap - ask us where it sits before you plan around it.

SIZING

The host is smaller than you think

Seat count is not the driver. What matters, in order: write rate, CAD and attachment volume, how long the database has been accumulating, and bulk imports. A hundred seats is typically five to fifteen people active at once.

Up toCPU / RAMDiskNotes
20 seats6-8 cores, 32 GB1 TB NVMeA small-form-factor desktop is genuinely enough. Clock speed beats core count.
100 seats8-16 cores, 64 GB2 TB NVMeSize the disk for CAD, not for rows.
MoreTalk to usWrite rate is the ceiling, and it is worth a conversation rather than a guess.

If something is wrong

SymptomAlmost always
Blocked or quarantined on launchThe unsigned binary, step 3. Allow C:\Prism\* in AppLocker/WDAC and add the same path to your AV exclusions.
Updates never installEither the update policy is deliberately notify_only or manual_download - check Settings → About first - or the service account cannot write the program folder, which is almost always an install under Program Files. Move to C:\Prism.
The update banner runs and the version never changesOn Prism 1.125.0 and later this is fixed - the updater now stops a Prism that the service manager restarted underneath it, and reports the failure instead of going quiet. Getting to 1.125.0 from an earlier build needs one manual pass, because the update is driven by the swapper in the version you are updating from: stop the service (nssm stop Prism or schtasks /End /TN Prism), run Prism.exe directly, let it update, then start the service again. Every update after that applies on its own. The evidence, if you want it, is PrismData\_update\update.log - copy that folder aside first, each attempt overwrites it.
"This install is set to manual download"The rollout is manual_download and the server is refusing to fetch the archive, by design. Take it from the downloads page, or change the setting.
"License not found" as a servicePRISM_LICENSE_PATH is unset, so it looked in the task's working directory. Step 4.
Reachable on the host, not from desksThe inbound firewall rule, or the wrong profile on it (Domain vs Private).
prism.local does not resolvemDNS does not cross subnets or VPN. Use the DNS record.
STUCK?

Send us the step number.

We would rather spend twenty minutes on your install than have you work around something we could fix in a release. Support response times are in the Service & Guarantee plan.