Privacy-first AI infrastructure.

Atlassian Forge app · Jira and Confluence

The personal data is already in your tickets.

Velum Privacy scans Jira and Confluence for personal data that is already sitting there, masks it in place without breaking the page it was on, and leaves an administrator a record of every change. It runs on Forge, inside Atlassian’s own runtime.

Install

On the Atlassian Marketplace

Jira required, Confluence optionalLive on the Marketplace since 24 July 2026

Scan at rest, scan on write, mask in place.

01

At rest

A sweep across the whole instance.

Driven hourly and queued through an async consumer, so a large site does not walk into a function timeout. A second scan cannot stack on a running one.

02

On write

Every new and edited issue and page.

Triggers on Jira issue created and updated, and on Confluence page created and updated. Comments and attachments are included, subject to policy. A fresh install queues its first scan straight away, so a new site is not looking at an empty dashboard.

03

In place

Masking that does not break the page.

It walks the live ADF or storage document and rewrites text nodes only, so headings, lists, tables, panels, links and macros survive intact. The placeholder is ⟦TYPE_N⟧ and it is reversible.

04

Three modes

Off, Monitor, Protect. Monitor is the default.

A tool that starts rewriting your instance before you have looked at what it found is the wrong default, so it does not do that.

05

GDPR Article 17

Find a subject, see every location, remediate.

A lookup by name or email lists everywhere that person appears, with a generated PDF report for the file. It is a lookup and remediate flow, not an automatic hard delete.

06

Record

An audit log, labels, and a policy you control.

Every scan and action is logged. High-severity findings get native labels on the issues and pages that carry them. Auto-masking is a policy you turn on when you are ready.

What it finds, and what it still misses.

Tier-0 regex plus a Tier-1 distilbert model for people, organisations and places. Both run inside Forge, on onnxruntime-web under WASM, scored against a corpus of nine languages by 200 examples each.

precision
86.9%
recall
96.5%
F1
91.4%

Combined, as shipped, with the precision filter in place.

What is not shipped yet

In-place masking currently covers the regex and structured findings: emails, IBANs, cards, national IDs, secrets. Names found by the model are detected, scored and reported, and masking them in place is still to come. The product marks those findings REPORT ONLY rather than leaving you to discover it.

It declares egress, so it does not carry the badge.

app/manifest.ymlverbatim
permissions:
  external:
    fetch:
      backend:
        - address: https://huggingface.co
        - address: https://us.aws.cdn.hf.co

Two outbound addresses, declared in the manifest where anyone reviewing the app can read them. They pull about 129 MB of model weights in. Nothing goes out: no issue, no page, no attachment, no finding.

An app that declares any egress at all cannot hold Atlassian’s badge for apps that make none, so Velum Privacy does not have it. We took the model over the badge, and this is where we say so.

Two scopes worth explaining

read:audit-log:confluence
Used only to tell a Confluence administrator from an ordinary user, so a Confluence admin can manage Confluence findings without also holding Jira admin. The app reads one record from an endpoint that requires the Confluence Administrator permission, then discards it.
read:attachment:confluence
PDF and text only, capped at 12 MB and 20 files per page, read-only. An attachment is never rewritten, and the extracted text is not stored. Only the findings are.
  • Runtime nodejs22.x, with Forge licensing enabled.
  • One admin page in Jira, one global settings page in Confluence. Jira is required, Confluence optional.
  • Six functions, an async-events consumer on the velum-scans queue, five triggers and two hourly scheduled triggers.
  • The mapping that makes masking reversible is encrypted with AES-256-GCM under the Forge encrypted variable VELUM_MAPPING_KEY, stored through kvs.setSecret. De-anonymizing is gated on an administrator.
Request a demo

See it work on your own data.

Tell us what you are working with and we will walk you through it on your own data. Nothing leaves your hands.

Your details mask themselves as you go. That is Velum, running in this page. Press the eye to unmask. We still receive them in full.

We respect your privacy. Your details are only used to reach you.