Conformiti
ProductEditionsPricing ConsultingSelf-hostDocs Security GitHub Book a demo

Installing Pro

It installs on your Conformiti, and checks itself first.

Pro is a signed package you unpack beside the Conformiti you already run. It adds a Python package, the extra screens and a licence file. It forks nothing, replaces no core file and sends nothing anywhere.

At a glance

NeedsConformiti 0.9.5mg or later, below 0.11
InstallerPython 3.11 or later, standard library only
Runs onDocker (the usual case), or bare metal on Linux or Windows
LicenceOne signed file, checked offline
Phones homeNever. No telemetry, no check-in, no callback
Air-gappedSupported, with the images and the build prepared first

Four steps

Verify, rehearse, install, look.

Take a backup first. The installer applies database migrations, and although nothing is lost if you change your mind, a backup takes minutes.

01: VERIFY

Check what you were sent

Every file is checked against a manifest, and the manifest against an Ed25519 signature made with the vendor key pinned inside the package. Compare the key id with the one on your invoice, once.

02: REHEARSE

Run it with --check

It prints the files it would copy, a diff of every core file it would edit, the migrations it would apply and the deployment mode it found, and writes nothing. Give it your licence file too: that is the one step that can refuse it.

03: INSTALL

One command

It verifies the package again, checks your core is supported, copies the code in, builds and starts the stack, applies the migrations and seeds the packs your licence covers. A failure stops it with a message, and an install is safe to repeat.

04: LOOK

Let the doctor and your eyes check

pro_doctor runs at the end and the install fails on a problem. Then sign in: the menu names your edition, and the Licence screen names your organisation and plan.

Docker · from the unpacked package
$ python3 verify_package.py
$ python install.py --check --target /srv/conformiti --docker --license acme.json
$ python install.py --target /srv/conformiti --docker --license acme.json

The package, the installer and the full guide arrive together. The guide covers bare metal on Linux and Windows, air-gapped installs, backups and the restore drill.

What it touches

A short list, and it prints the list.

Pro adds files beside yours and edits three front-end files by adding a marked block to each. install.py verify checks all of it against what was recorded at install time, and the blocks come out cleanly if you disable or remove Pro.

  • Two new folders: the Pro backend package and the Pro screens.
  • A pro/ folder: your licence, the environment helpers, the install record and the signed checksums of the package.
  • Three small edits: one block each in the front end's app, navigation and icon files, between markers.
  • On Docker: a Dockerfile and a compose override for Pro, and one marked block in .env.
  • Previous versions are kept so an upgrade can be rolled back.

The licence

A signed file on your server. Nothing contacts us.

The licence is one JSON file signed with an Ed25519 key. Your installation checks the signature against a public key compiled into the package, and that is the whole mechanism.

It is not DRM, and we do not pretend it is: you have the source of the overlay you paid for. The licence exists so that your installation, your auditor and we agree on what you bought, and so that it can be checked offline. There is no telemetry, no check-in and no usage report.

When it ends

  • Past the date, 14 days of grace by default, and everything still works. The Licence screen says how many days are left.
  • After grace, Pro is read-only. Everything you produced stays readable: findings, workpapers, attestations, generated packs, installed libraries.
  • What pauses is new work: new scans, new AI calls, new signature requests, new pack installs.
  • Nothing is deleted on expiry, now or later.

Per workspace

A licence can cover every workspace, a named list, or give each client its own entitlement, which is how a consultancy licenses clients differently on one installation.

Bound, if you ask

On request a licence can name your installation's own signing key and read as invalid anywhere else. An unbound licence, the default, is accepted anywhere.

Renewal is a file

The installer refuses a renewal that expires earlier than the licence it replaces, keeps the outgoing file, and prints what is going out and what is coming in.

After the install

Upgrading and leaving are both commands.

Upgrading Pro

Run the new package's installer. The last three versions are parked, each with its signed record, and install.py rollback puts one back.

Upgrading the core

upgrade-core --check fetches without merging, reads the incoming version, checks it against this release's supported range and dry-runs the three edits against the incoming files.

Removing Pro

disable boots core-only and keeps everything. uninstall.py removes the code and keeps Pro's data, and --purge-data drops it after you type purge. Installed libraries stay either way: they are ordinary core rows.

Next

Ask before you buy.

If your setup is unusual, a proxy in front, an older core, no outbound network, tell us and we will say what to expect.