Back to the vitrínavitrinkaYour building · Enterprise

Your building

Runs inside your company.

Your identity, your storage, your network. Nothing about this needs to leave your infrastructure, including the parts that usually do.

01

Your IdP

Sign-in goes through the directory you already run. The connection is configured per organisation and the mapping from groups to roles is reapplied every time somebody logs in, so revoking access in the directory revokes it here.

  • OIDCagainst Entra, Keycloak or Okta — one connection per organisation, with its own health check.
  • Reapplied at logingroup-to-role mapping is not a one-off import that drifts; it is recomputed on every sign-in.
  • The issuer is dialled carefullyan org-supplied issuer URL is a URL a stranger chose, so it is refused unless it resolves to a public address — the same table that lets an air-gapped install reach its own internal Jira, read in the opposite direction.

02

Four roles, in a ladder

Roles are workspace-level and ordered, so a higher one covers everything the ones below it can do. There is no matrix of checkboxes to get wrong.

  • Owner, admin, member, viewerin that order — every permission check asks whether your role is at least the one required.
  • Seats are organisation-leveland a seat is a membership, whatever the role. A viewer you invite occupies one.
  • Reviewers on a link do nota board is a URL: the tester who opens it, draws a region and types a sentence never becomes a member, so they never take a seat.

03

Your bucket

A single Go binary with SQLite inside it for metadata, and your own storage for the files. One compose file, one volume, and the schema migrates itself at boot.

  • Any S3 storeHetzner, MinIO, AWS — or plain local disk. A read-through NVMe cache sits in front of the S3 backend and is skipped entirely for local disk, which is already local.
  • You hold the keysnothing leaves your storage unless you decide it does.
  • One binarySQLite is inside it, so the metadata store is not another thing to operate, back up and page someone about.

04

Air-gapped

One environment variable is the master kill switch for every call the product would otherwise make to the public internet. It is a switch rather than a promise, so the list of what it cuts is short enough to read.

  • AIR_GAP=1turns off breach-checking against Have I Been Pwned, outbound email, Telegram, api.github.com, and the agent and issue-tracker integrations.
  • Your own endpoints stay yoursS3 and capture are internal services, so they keep working — an air-gapped install may reach its own network and nothing beyond it.
  • Nothing to explain to the firewallthe point of the switch is an audited log with no unexplained egress in it.

05

The licence is a file

Entitlement is a signed file on disk, not a call home. There is no licence server to be unreachable at three in the morning.

  • Signed, not phonedan Ed25519 signature over the payload — customer, tier, seats, entitlements, issue and expiry dates, and whether the install is air-gapped.
  • Absent means unrestrictedno file is not a locked product. A file that is present but does not verify fails the boot loudly instead of quietly degrading.
  • Fourteen days of gracepast expiry the deployment keeps working behind a banner before any write restriction applies.

06

What gets recorded

The events an auditor asks about are written as they happen, with the actor and the thing acted on.

  • Accesssign-ins, members joining, and members being removed.
  • CredentialsAPI tokens minted and revoked.
  • Structureworkspaces created and suspended, plan changes, and test sends of the org's email settings.