The same platform running inside your own network, and the handful of things that behave differently there.
Haiyz Enclave is the same platform, running inside your own network.
There is no fork, no cut-down edition and no licence file. The three services that run the public platform — the API and its worker, the GIS engine, and the web app — are the ones you install, from the same build. One environment variable switches the instance into Enclave mode.
That is the point of it: data that may not leave your network does not, and you still get the product everyone else gets.
Set INSTANCE_MODE=enclave on the API, and NEXT_PUBLIC_INSTANCE_MODE=enclave
on the web app.
| Cloud | Enclave | |
|---|---|---|
| Plan limits | per tier, tunable by an administrator | the licence's; every key unlimited during the evaluation |
| Every account's tier | resolved from membership and seats | the licensed edition (Enterprise during the evaluation) |
| Pricing, upgrade prompts, billing pages | shown | hidden |
| Telemetry | on | nothing leaves the network unless you configure it |
Nothing else differs. The admin console, dashboards, field campaigns, data items, maps and the GIS engine behave exactly as documented elsewhere. The limits table still exists and is still shown — read-only, all unlimited — so an operator who wants internal caps can switch the instance back to cloud mode and set them.
Payments and membership checkout are hidden, not disabled-with-a-message. Seats are managed by your own administrators in the admin console instead.
An Enclave instance runs under a licence document issued by Haiyz and verified
by keys built into the release — nothing to configure, nothing to fetch. Until a
licence is activated the instance is in evaluation for 30 days from its first
start, with every extension on. Activation is a code (a connected host) or a
request file and a licence file (an air-gapped host), from the Console under
Platform › Licensing or with haiyzctl license.
| State | What people see |
|---|---|
| Evaluation | a notice with the days left; everything works |
| Active | nothing; the licensed edition, extensions, limits and seats apply |
| Grace period | a warning with the expiry and the read-only date; everything still works for 30 days |
| Read-only | an alert: viewing, downloading and exporting work; creating and editing wait for a licence |
Seats follow roles: editors and contributors take an editor seat, publishers and
content managers a publisher seat, administrators an admin seat; viewers take
none. When no seat of a kind is left, a role change is refused with
SEAT_LIMIT_REACHED and a person arriving through a directory acts as a viewer
until a seat frees up — the Members page shows the seats per kind and each
member's seat.
Nothing leaves the network for licensing. A usage report (quantities only — seats, limits used, extensions in use, versions) can be exported as a file for a renewal, and is posted daily only if an administrator turns that on under Platform › Configuration › Licensing.
| Component | Role |
|---|---|
| Node.js 20+ | the API and its worker |
| MongoDB 6+ | data |
| Redis 7 | queues, bound to localhost |
| Python 3.11 + the GIS engine | geoprocessing and PDF, internal only |
| A Next.js build | the web app |
| S3-compatible object storage | files — MinIO is fine, no Cloudflare needed |
| Nginx | TLS and routing |
Private objects — map layers, workspace layers, thumbnails, invoices — are served by token from the API itself. The CDN edge worker is a cloud optimisation and is not part of an Enclave deployment.
The first administrator is made by hand: sign in once through your configured mail transport, then raise that account to super-administrator directly in the database. On an air-gapped host, use the development code transport for that one sign-in.
Be aware of the honest gaps before you plan a rollout:
enclave behaves as the public platform does, so check both variables.