Last updated 5 July 2026
Runs on AtlassianZero egressRead-onlyPure Forge · nodejs22.x
This page describes how Keyring is built and what that means for your data, in plain terms — no marketing language, no rounding up.
Keyring has no infrastructure of its own. Every function runs inside Atlassian Forge, on Atlassian's infrastructure, and every byte of data it reads or writes stays inside Atlassian's platform: Forge SQL and the Forge key-value store. There is no Worqflow server, no external database, no analytics beacon, no outbound network call of any kind. This is what makes Keyring eligible for Atlassian's "Runs on Atlassian" designation.
Keyring holds no write scopes on either product. It cannot create, edit, or delete a permission scheme, project role, group, or space permission. Its Jira and Confluence API scopes are all read-scoped:
| Product | Scope area | Why it's needed |
|---|---|---|
| Jira | Permission schemes, permissions, project roles, projects, issue-security levels, groups, users | Resolve who holds which permission on each project, including via role and group actors |
| Confluence | Spaces, space permissions, groups, users | Resolve who holds which permission on each space |
| Both | storage:app, report:personal-data | Store findings in Forge storage; support Atlassian's Personal Data Reporting API |
In Jira's classic scope model this shows up to installers as the broader read:jira-work and read:jira-user scopes, because Jira's permission-scheme and project-role APIs are only exposed at that grant granularity — not because Keyring needs issue content. In practice, Keyring reads and stores only permission and directory configuration. It never reads issue summaries, descriptions, comments, attachments, worklogs, or Confluence page bodies, and none of what it reads is ever transmitted anywhere outside Atlassian.
Scan results (permission grants, resolved group membership) and campaign records (attestations, exceptions, completeness affirmations, countersign statements, evidence packs) are stored in Forge SQL, attached to your installation. Settings, scan cursors, and progress markers live in the Forge key-value store. Both are Atlassian-hosted and logically isolated per installation — Worqflow has no standing access to either.
Scan and campaign records are append-only: corrections are recorded as new entries superseding the old one, never as edits or deletes. Each record carries a per-record integrity hash chained to the ones before it, and a snapshot- or evidence-level checksum lets you verify the chain hasn't been altered after the fact.
We describe this deliberately as "append-only with per-record integrity hashes" rather than "tamper-proof" or "cryptographically guaranteed" — the hash chain detects alteration within Keyring's own storage, it is not a cryptographic guarantee against every possible actor, and we don't market it as one.
Keyring implements Atlassian's Personal Data Reporting API, reporting every account-id field it stores about a user across scans, campaigns, and evidence packs. Where Atlassian's erasure workflow is invoked, Keyring anonymizes that user's display name across all of its records — including previously frozen evidence packs — while preserving the underlying decision history.
If you believe you've found a security issue in Keyring, please email briano@worqflow.org or open a ticket via our support portal. We'll acknowledge reports promptly.
See also our Privacy Policy and Terms of Service.
← Back to Keyring