OneView for Confluence
Confluence v3.0.0 · Released
One viewer for every attachment on a Confluence page — with audit logging and SHA-256 integrity verification built in.
Overview
OneView gives teams a single, consistent viewer for all major attachment types directly inside Confluence pages. Instead of downloading files or switching to external tools, readers preview PDFs, images, media, code, structured data, Office documents and CSV tables in one unified workspace.
The app does one job: show the files attached to this page. It has no settings, no administration page and nothing to configure. v3.0.0 removed the file policy page along with everything it configured — blocked extensions, media-type filtering, size ceilings, the watermark and the audit toggle — because those controls hid files without protecting them, and worked against the point of the app.
OneView ships as a single, fully-featured edition. There is no Community/Enterprise split and no Marketplace licensing gate; nothing in the app reads context.license. Every install gets every feature.
Highlights
One viewer, every format
PDF, images, audio and video, Markdown, code and text, JSON/XML/YAML/TOML, CSV tables, Word documents and PowerPoint decks — rendered inline with real slide geometry, charts and SmartArt.
Nothing is filtered out
Every current attachment on the page is listed, whatever its type or size. Where a file cannot be previewed the viewer names the format and explains why, rather than quietly omitting it — a hidden file is not a protected file, and the page’s own attachment list still holds it either way.
View-only, on purpose
The macro offers no download and no open-in-new-tab link. Downloads happen in the page’s own attachment list, where Confluence re-authorizes every request at the moment it is made — which a link pointing at content already loaded into the browser could not do.
Integrity verification
A one-click SHA-256 digest of any attachment, computed server-side and shown in the viewer header. Useful as evidence of custody in regulated environments.
Pin a primary document
A page author can pin one attachment to a macro instance so the page opens on the document that matters. An explicit pin outranks every default ordering rule.
Duplicates stay out of the foreground
Files the page already displays inline are collected into a collapsed “Already shown on this page” group and skipped when choosing the default selection — listed and selectable, just not in front.
What the macro lists, and why
The viewer lists every current attachment on the page — including ones already inserted into the page body.
An earlier version excluded embedded files, on the theory that Confluence already previews them so a second viewer would be redundant. That was wrong in a way that mattered: audit logging and integrity verification only apply to a file opened through the macro. A reader who opened an embedded PDF via Confluence’s own inline preview bypassed both, silently. Hiding embedded files undermined the exact guarantees the app exists to provide.
A file is recognised as embedded by checking both Confluence body formats, because they reference attachments differently: atlas_doc_format (modern editor) carries a Media Services id on media/mediaInline nodes, while storage (classic editor) carries ri:filename on <ri:attachment>. A match on either the media file id or the file name counts.
Referenced is not the same as displayed. Ordering keys on whether the page actually renders the file’s content, never on whether it merely references it — so a PDF attached as a chip, or shown only as a first-page thumbnail, stays in its normal type group. Errors are deliberately biased toward the main list: a file wrongly left out of the collapsed group merely appears where everything used to appear; a file wrongly put in it gets buried when the macro is the only way to read it.
Fail-open by design. If no page body can be read, every attachment is flagged as not-embedded rather than guessed — a transient API failure loses the badge, never a file.
Screenshots
User guide
Who this is forAnyone who can read the page. Inserting the macro needs page-edit rights; nothing here needs an administrator.
OneView adds one Confluence macro — Page Attachments Content Viewer — and has no settings of any kind. Insert it on a page and it lists that page’s attachments.
| Surface | Where to find it |
|---|---|
| The viewer | Wherever the macro was inserted on a page — type / in the editor and search for Page Attachments Content Viewer |
| Downloads | The page’s own attachment list — the paperclip in the page header, or Page options → Attachments |
| Administration | None. v3.0.0 removed the file policy page; there is nothing to configure |
-
Add the macro to a page
Open the page in the editor, type
/(or use the insert-elements + button), search for Page Attachments Content Viewer, and place it where you want the viewer to appear. Publish or update the page.If more than one environment of the app is installed on your site — development and staging, say — the picker shows near-duplicate entries. The label under the inserted macro node tells you which one you actually placed.
-
Browse the files
The macro is a two-pane layout: a file list on the left, the active preview on the right. Files are grouped by type — PDF, Documents, Presentations, Spreadsheets, Images, Video, Audio, Markdown, Code & Text, Data, CSV, Other — and counted per group.
Search files… filters by name as you type, the sort dropdown reorders by name or size, and Load More appears when the page has more attachments than the first page of results.
-
Open a file
Click any file to load it. The viewer header shows the format, media type and size, plus any relevant badges — including “Also embedded in page” when the page already displays that file inline.
Files the viewer cannot render are never hidden: the card names the format and, where re-saving genuinely helps, the modern format to re-save as. Spreadsheets say plainly that there is no spreadsheet renderer in this release and that a CSV export of one sheet does preview.
-
Verify a file’s integrity
With a file selected, click Verify Integrity. OneView computes a SHA-256 digest server-side and displays it under the viewer header — useful as evidence of custody in regulated environments. This works for every listed file, including ones also embedded in the page body.
-
Pin a file, if the page should open on one document
Select the file and click Pin File. The macro switches to pinned mode for every reader of that page and hides the file browser; Unpin restores normal browsing.
Pinning changes what every viewer of the page sees, so it requires page-edit rights.
-
Download, when you need the file itself
Use the page’s own attachment list. That is not a workaround — it is the correct route. Confluence checks your permission on the attachment at the moment you download it, which a link inside the macro could not do.
Nothing about your access changes as a result: the macro has always read attachments as you, never with elevated app permissions, so no file was ever reachable through it that you could not already open in Confluence.
Good to know
- Formats rendered inline: PDF (with page navigation), images, audio and video, Markdown, code and plain text, JSON/XML/YAML/TOML, CSV (first 200 data rows, sticky header), DOCX and DOCM, PPTX and its slideshow/macro-enabled variants (PPSX, PPTM, PPSM) with layout, text, tables, bullets, images and charts.
- Macros are never executed. A macro-enabled Office file is the same ZIP-of-XML package as its plain equivalent; the renderers read XML parts in the browser and ignore the macro payload entirely.
- Not previewed, with an explanation instead: legacy Office formats (
.ppt,.doc,.pps,.rtf,.odp,.odt) — re-saving in the modern format genuinely makes them preview; spreadsheets (.xls,.xlsx,.xlsm,.ods) — no spreadsheet renderer exists in this release; and Office templates (.potx,.dotx) — templates hold layouts rather than content, so a preview would be blank. - Hide Files collapses the sidebar to give the preview the full width. It is a per-session UI toggle, not a saved setting.
- Opening a file through OneView is what writes the audit entry and enables the integrity check. Opening the same file through Confluence’s own inline preview does neither — which is why files already embedded in the page are still listed here.
If something looks wrong
“No attachments found on this page.”
The page genuinely has no current attachments, or they were only just added — refresh the page.
A specific file will not open.
The format may not be previewed inline, the file may be past the 5 MB inline-text limit, or you may lack read permission on that attachment in Confluence. The viewer names which of these applies rather than rendering an empty panel.
A file used to show a download link and now shows an explanation card.
Expected as of v2.6.0. The macro no longer offers download links for any format — download from the page’s attachment list instead.
A file that used to be hidden has reappeared in the list.
Expected as of v3.0.0, and the intended result. If a blocklist or size limit was withholding it, that policy is gone. Nothing new becomes reachable: the file was always one click away in the page’s own attachment list.
A text file used to show an empty panel and now shows content.
Also expected, as of v2.6.0. Text files Confluence had labelled application/octet-stream — common for .yml, .properties, .toml and .log — were fetched but never displayed.
What it does not do
- Offer any download or open-in-new-tab action, in any format.
- Create, edit or delete pages, attachments or comments — no write scope for Confluence content is requested.
- Render spreadsheets inline, compare attachment versions, or store annotations, bookmarks or highlights.
- Store any end-user identity. Audit events are written with
accountId,userId,userEmailandipAddressexplicitly nulled.
Permissions & scopes
| Scope | Why it's needed |
|---|---|
read:confluence-content.summary | List pages and attachments for the current macro’s page |
read:confluence-content.all | Read the page body in both atlas_doc_format and storage representations, to determine which attachments the page already displays |
read:attachment:confluence | Fetch attachment metadata and content for preview |
read:page:confluence | Resolve page context for the macro |
storage:app | Store the per-macro pinned-attachment setting and page-scoped audit events |
No write scopes are requested for Confluence content. OneView never creates, edits or deletes pages, attachments or comments. The scope set has shrunk over the last three releases rather than grown: read:user:confluence and read:confluence-user were briefly added while chasing the site-administrator check behind the admin policy page, and removing that page removed their only caller. The app now reads attachments and page bodies, and nothing about people. v3.0.0 requests no new permission, so no existing installation needs administrator re-consent.
External access
route tagged template or api.asUser().requestConfluence(...), both scoped to the installing site. The app contacts no third-party service, analytics provider or external API.Data stored
| Record | Key | Contents | Retention |
|---|---|---|---|
| Macro settings | macro-settings:* | The pinned attachment id for one macro instance | Until updated or removed |
| Audit events | page-scoped | Action type (pin / unpin / open / integrity check), a content id, a timestamp | Capped at 500 events per page; older events pruned |
No end-user identity is ever stored. The audit event writer explicitly nulls accountId, userId, userEmail and ipAddress before persisting. This is enforced in code, not policy, and is covered by an automated test. The legacy app-policy:v1 record written by v2.5.0–v2.7.0 is no longer read by anything; it is left in place rather than deleted, because deleting customer data on upgrade is a worse default than ignoring it.
Security notes
Platform and hosting
- Built entirely on Atlassian Forge. There is no app-operated server, database or third-party hosting anywhere in the architecture.
- All code executes as a Forge function inside Atlassian’s runtime; all data at rest lives in Forge storage, which Atlassian hosts and secures.
- All traffic runs over Atlassian’s own HTTPS-secured API surface. The app performs no TLS termination, proxying or certificate handling of its own.
Permission model
- OneView reads Confluence content exclusively through
api.asUser(). There is noasApp()call anywhere in the codebase. - Every read is therefore subject to the same page, space and attachment permissions the requesting user already has. The app cannot see or return anything the viewing user could not already access directly.
- A defect in the app’s own logic is bounded by the caller’s existing access; it cannot itself grant new access.
Authorization boundaries
getComplianceDigestandgetAuditEvents(page-scoped audit data) require a space administrator.setPinnedAttachment(changes what every reader of one page sees) requires page edit rights.- Both checks fail closed: if the user’s authorization level cannot be positively confirmed — an API error, an unreadable response, a permissions payload missing the required scope — the change is refused rather than allowed.
- The third check, the site-administrator gate on
setAppPolicy, is gone because the resolver is gone. It is worth recording why: it depended on a user-read scope the manifest had never requested, so it turned away genuine site administrators from the day it shipped. A fail-closed check that fails for everyone is not a working control, and the page it guarded was removed rather than patched.
View-only by design
- Download and open-in-new-tab links were removed in v2.6.0. They pointed at content already loaded into the reader’s browser, so nothing re-checked permission at the moment they were used and nothing was written to the audit trail — in an app whose reason to exist is recording access.
- No one lost access. The links could only ever hand someone a file they could already open in Confluence themselves, because every read runs as the signed-in user.
- The Allow direct download setting was removed with them. A checkbox that cannot withhold a file the reader can fetch from the page anyway is a security promise the app cannot keep.
Input validation
- Every resolver argument reaching a Confluence API call is validated against a narrow allow-list before use.
attachmentId,contentIdand paginationcursorvalues are checked against an explicit character allow-list and length limit before being interpolated into aroutetemplate. - Attachment download paths are additionally validated by
toTrustedWikiPath, which rejects absolute URLs, scheme-relative (//host) paths, unrooted paths,..traversal and CRLF injection. This guards the two code paths that useassumeTrustedRoute, a Forge API that deliberately bypasses the platform’s default URL-tampering protection.
Cross-site scripting and content rendering
- Markdown renders through
react-markdownwithoutrehype-raw, so raw HTML in a Markdown file is never executed; the defaulturlTransformneutralisesjavascript:links. - The single use of
dangerouslySetInnerHTML— the Word document renderer — sanitises output with DOMPurify under a restrictive tag/attribute allow-list plus a URI-scheme regex. - The PowerPoint renderer writes to the DOM directly rather than through React JSX. Its bundled code was read directly before adoption rather than assumed safe: the one path that sets
innerHTMLHTML-escapes its source text first, and hyperlink/media targets from the presentation file are validated against anhttp:/https:/mailto:allow-list usingnew URL(...).protocol, not a regex. - Legacy Office formats are identified by extension first, so a
.pptmislabelled by the uploading browser as a modern PowerPoint content type can no longer reach the deck renderer and have an OLE compound binary opened as a ZIP archive. - Every other renderer — code, JSON/XML/YAML, CSV, PDF, images, audio and video — renders through React text nodes or dedicated binary viewers, never raw HTML.
Abuse and availability
- Per-endpoint, per-instance in-memory rate limiting protects the resolver against a runaway loop in the browser client. This is a stability control, not a security boundary — it resets on cold start and does not coordinate across concurrent Forge instances, and is documented internally as such.
- Two duplicate resolvers were removed in v2.5.0.
getAttachmentTextduplicatedgetAttachmentViewDataunder a second rate-limit bucket, which meant the inline-text rate limit could be doubled by calling both. - Neither list operations nor the client’s three-minute refresh poll are audited. Persisting them created continuous write pressure on one shared storage key and — with 500 events retained per page — steadily evicted the pin, integrity-check and policy-change records the log exists to keep. The structured
listAttachmentsline inforge logsstill covers support diagnostics at no storage cost. - Files that cannot be previewed are no longer fetched at all. The bytes fed nothing but the removed download link, so a large archive was being pulled into the browser in full just to draw a card describing it.
Dependency management
npm run auditchecks the production dependency trees of both the resolver and the Custom UI in one command and exits non-zero on any advisory. It runs as the first step ofnpm run preflight— audit, then the full test suite, then the production build — so a release cannot be cut on a vulnerable tree.- Resolved in v2.3.0: a high-severity advisory in a transitive chain (
brace-expansion→minimatch→@forge/egress→@forge/api, a ReDoS/OOM-class denial of service) was fixed by upgrading@forge/apifrom v5 to v8. That upgrade had a side effect worth recording:@forge/api@8removes itsstorageexport entirely rather than deprecating it, and every stored-data feature depends on it. It was caught during the upgrade, before it reached any customer-facing environment, and fixed by migrating to@forge/kvs. - Resolved in v2.4.1: DOMPurify (GHSA-55q2-fjhq-7xh7),
fast-uriandnanoid. The DOMPurify flaw was not exploitable here — it requiresIN_PLACEmode with registered hooks, and the app uses neither — and was upgraded regardless. - Both trees currently report zero advisories, including development dependencies.
Internal review history
- The most recent full internal review found and closed four authorization findings before release — including an inert pin/unpin check that had degraded to an unconditional allow, and an app-scoped setting authorized at the wrong permission scope.
- A documented security incident response plan sets out severity classification against CVSS-tiered fix deadlines, the 24-hour notification obligation, six-hourly progress updates, and customer notification within 72 hours.
- Every finding from internal review is documented rather than hidden: a mature security posture is judged by how issues are found and fixed, not by whether any existed.
Known limitations
- Spreadsheets (
.xls,.xlsx,.xlsm,.ods) are not rendered inline. A CSV export of a single sheet does preview. - Office templates (
.potx,.dotx) are deliberately not previewed — they generally hold layouts with no content, so a preview would be blank. - The macro is view-only. It offers no download or open-in-new-tab action for any format; downloads go through the page’s own attachment list.
- There is no administration page and no configurable policy. Inline text preview is capped at a fixed 5 MB.
- Attachment version comparison and diff view are not available.
- Annotation storage — bookmarks, highlights, comments — is not implemented.
Release notes
Version history for OneView for Confluence. The most recent release is listed first.
-
v3.0.0 August 17, 2026 Current
One job, done plainly: show the files attached to this page.
- The file policy administration page has been removed, along with everything it configured — blocked extensions, blocked media types, the maximum attachment size, the watermark and the audit-trail toggle. Three reasons, and the first is the honest one: (1) it never worked — its size fields rejected every whole number, so the browser refused to save the values the page itself had loaded, and behind that the site-administrator check relied on a permission the app had never asked Confluence for, so it turned away genuine site administrators; (2) its main controls hid files without protecting them — a blocked
.exeor an oversized attachment stayed exactly where it was, one click away in the page’s own attachment list; (3) it worked against the point of the app, which exists to show what is attached to the page. - What changes for you. If a file on one of your pages was being withheld by the blocklist or the size limit, it will now appear in the list — the intended result. Nothing new becomes reachable: the macro has always read attachments as you, with your own Confluence permissions, and every file it now lists was already visible in the page’s own attachment list.
- Nothing to reconfigure, and no permission prompt. Any settings previously stored are simply ignored. This release requests no new permissions — two were dropped — so no administrator needs to approve anything.
- The watermark is gone with the page that configured it. It was a diagonal overlay drawn on the preview: a visual marker of provenance, never a protection mechanism, and impossible to switch on once the settings page went away.
- Files that cannot be previewed are still explained, never hidden. The viewer names the format and, where one exists, the modern format to re-save as. Very large text files say how much they exceed the inline limit instead of rendering blank.
- Slightly faster to open — the macro no longer reads a settings record on every load.
- The file policy administration page has been removed, along with everything it configured — blocked extensions, blocked media types, the maximum attachment size, the watermark and the audit-trail toggle. Three reasons, and the first is the honest one: (1) it never worked — its size fields rejected every whole number, so the browser refused to save the values the page itself had loaded, and behind that the site-administrator check relied on a permission the app had never asked Confluence for, so it turned away genuine site administrators; (2) its main controls hid files without protecting them — a blocked
-
v2.7.0 August 17, 2026
The file policy page is findable, and the app signs its own surfaces.
- A Configure link on Manage apps. The policy page previously had exactly one entry point: the very bottom of Confluence administration’s left sidebar, inside an Apps section that is collapsed by default. Admins who went to Manage apps first — which is most of them — found nothing at all and reasonably concluded the app had no settings.
- The app mark now appears on its own surfaces. Confluence supplies page chrome but nothing that says which app you are looking at, so a settings page reached from a sidebar of a dozen unrelated entries was unlabelled, and the macro read as part of the page body rather than as an app.
- Superseded by v3.0.0, which removed the policy page entirely. The app mark stayed.
-
v2.6.0 August 17, 2026
The viewer stops handing out files, and the formats that showed a blank panel show something true instead.
- Download and open-in-new-tab links are gone. The macro is view-only. Those links pointed at content already loaded into the reader’s browser, which means nothing re-checked their permission at the moment they used one, and nothing was written to the audit trail. Downloads now happen where they always should have: the page’s own attachment list, where Confluence re-authorizes every request. No one loses access — OneView has always read attachments as the signed-in user.
- Fixed: Excel files showed an empty white panel. The check that recognises XML documents used a substring match, and every Office Open XML media type contains “xml” inside “openxmlformats” — so
.xlsxwas treated as an XML document and, with no text to display, drew an empty box with no error..potxand.dotxdid the same. All three now get a card that names the format. - Fixed:
.xlsfiles were given advice that could not work. The viewer told readers to re-save as.xlsx— which lands on exactly the same “not previewed” card, because the gap is the renderer, not the format. Formats where re-saving genuinely helps still say so; spreadsheets and templates now get honest, separate explanations. - Fixed: text files Confluence had mislabelled showed nothing. The server decided whether a file was text from its media type while the viewer chose its renderer mainly from the file name — and for ordinary text Confluence very often stores
application/octet-stream, so.yml,.properties,.tomland.logfiles were fetched and then rendered as an empty panel. - Fixed: TypeScript files opened in a video player. Most MIME tables map
.tstovideo/mp2t. A text or code file extension now outranks a generic media-type family. - Fixed: a
.pptcould reach the PowerPoint renderer and produce a raw parser error — the deck renderer tried to open an OLE binary as a ZIP archive. Legacy formats are identified by extension first. - PowerPoint failures are explained rather than left as debug output. When a slide or a single shape cannot be drawn, the deck carries a short notice naming what was left out and confirming the rest is unaffected.
- Files that cannot be previewed are no longer downloaded. The bytes fed nothing but the removed download link.
-
v2.5.0 August 17, 2026
Watermarking can finally be switched on, and the audit log stops burying its own evidence.
- A file policy page in Confluence administration — watermark text, the direct download toggle, the audit-trail toggle, size ceilings and the blocked extension/media-type lists, site-wide and site-admin only. This closed a real gap rather than adding polish: watermarking had been advertised since v2.0.0 but defaulted to off with no way for any customer to turn it on. (Both the page and the watermark were removed in v3.0.0 — see above.)
- The audit log no longer records its own polling. An open macro re-checks for new attachments every three minutes, and each check was written to the page’s audit trail. With 500 events retained per page, routine polling steadily evicted the pin, integrity-check and policy-change records the log exists to keep.
- Stored policy is validated when it is read, not only when it is written. A policy value that reached storage without passing the sanitizer could previously break attachment listing for an entire installation.
- Blocked files are acknowledged instead of vanishing. When admin policy withheld a file, the list said how many were hidden — never naming the file or the rule.
- Presentations and spreadsheets get their own groups in the file list, instead of sharing one “Documents” heading with Word files.
- CSV previews count honestly. The row limit now means 200 data rows rather than 199 plus a header, the header is a real sticky table header, and the truncation note appears only when rows were actually dropped.
- Slideshow and macro-enabled Office files now render.
.ppsx,.pptm,.ppsmand.docmwere previously turned away even though they are the same ZIP-of-XML package as.pptx/.docx. Macros are never executed. - Legacy Office files explain themselves. A
.ppt,.docor.xlsused to produce a generic “Preview not available”, with the format shown as the implementation word “Fallback”. - Accessibility: the file search field has a proper accessible name, and the open file is marked with
aria-currentrather than relying on colour alone. - New app icon, redrawn for the 24–32px the macro picker actually renders it at.
- Removed two unused resolvers.
getAttachmentTextduplicatedgetAttachmentViewDataunder a second rate-limit bucket;getEditionInforeturned data already present ongetAppPolicy.
-
v2.4.1 August 10, 2026
Dependency security pass, and a release gate so it stays that way.
- DOMPurify upgraded to 3.4.13 (from 3.4.12), closing advisory GHSA-55q2-fjhq-7xh7 — a sanitizer bypass in which removing a hook during
IN_PLACEprocessing can leave a detached subtree executable. DOMPurify sits directly in the path that renders untrusted.docxfiles, so it is not somewhere to carry a known advisory. The flaw was not exploitable here — it requiresIN_PLACEmode with registered hooks, and OneView uses neither, passing a string in and a string out against a strict tag and attribute allow-list. It was upgraded regardless. - Two further advisories cleared:
fast-uri(high severity), reachable transitively through the Forge API package, andnanoid(high severity) in the build toolchain, which never ships in the deployed app. - A release gate now enforces this.
npm run auditchecks the production dependency trees of both the resolver and the Custom UI in a single command and exits non-zero on any advisory. It runs as the first step ofnpm run preflight— audit, then the full test suite, then the production build — so a release cannot be cut on a vulnerable tree. - A documented security incident response plan was added, setting out severity classification against the CVSS-tiered fix deadlines, the 24-hour notification obligation, six-hourly progress updates, and customer notification within 72 hours.
- No functional changes. No settings, permissions or macro changes are required, and nothing a reader can see or do has changed.
- DOMPurify upgraded to 3.4.13 (from 3.4.12), closing advisory GHSA-55q2-fjhq-7xh7 — a sanitizer bypass in which removing a hook during
-
v2.4.0 August 4, 2026
The viewer no longer opens onto a copy of something you just scrolled past.
- Images the page displays inline are no longer opened by default. OneView now opens on the first file whose content a reader cannot already see. Previously a page with an inline banner image would often open showing that same image again.
- A new “Already shown on this page” section collects those images at the bottom of the file list, collapsed, with a count. It expands on one click, and opens automatically when it is the only section or when a file inside it is being viewed.
- Only genuinely visible content is treated this way. A file attached to a page as a chip — the card showing a file name and a thumbnail — is referenced by the page but not displayed by it, so PDFs, slide decks and documents attached that way stay in their normal type groups.
- The viewer header now explains the duplicate instead of merely noting it: opening a file through OneView is what writes the audit entry and enables the SHA-256 integrity check. Confluence’s own inline preview does neither.
- Nothing is hidden. Every attachment remains listed and selectable — this release changes what is in front, not what is available. Pinned macros are unaffected.
-
v2.3.0 July 30, 2026
PowerPoint charts and SmartArt now render; dependency security hardening.
- The hand-written slide renderer was replaced with a maintained, visually regression-tested library. Charts and SmartArt now render, and fidelity improved across text, tables, bullets, images and gradients.
- Fixed an intermittent multi-second freeze when moving between slides, caused by a resize feedback loop between the renderer and the Confluence iframe.
- Resolved a high-severity vulnerability in a transitive dependency (
brace-expansion, reachable via the Forge API package), and migrated app storage to the current Forge KVS API in the same change. - No known vulnerabilities remain in the app’s production dependencies as of this release.
-
v2.2.0 – 2.2.2 July 30, 2026
PowerPoint attachments render as real slides rather than extracted text.
- PPTX previews gained real slide geometry: positioned text with correct size and styling, background colours, embedded images, grouped shapes and theme colours.
- Added tables, bullet and numbered lists, vertical text alignment, autofit scaling, shape borders and gradient fills.
- Fixed a defect where most slides rendered blank because placeholders inheriting their position from the slide layout were skipped.
-
v2.1.0 July 30, 2026
Every attachment is viewable through OneView, including files embedded in the page.
- Files inserted directly into the page body were previously excluded. That removed OneView’s compliance features — audit logging and integrity verification — from exactly the files most likely to be read, since those apply only to a file opened through the macro.
- Embedded files are now listed and flagged with an “Also on page” tag rather than hidden.
- Reliability fix: the underlying check now uses Confluence’s current v2 REST API. The previous implementation depended on an endpoint some sites have retired, which had silently disabled the check on those sites.
-
v2.0.0 July 23, 2026
Compliance and security release.
- Integrity verification — one-click SHA-256 digest of any attachment, computed server-side and shown in the viewer header.
- Compliance digest — an aggregated, non-identifying summary of recent activity for the current page, available to space administrators.
- Watermarking — a configurable diagonal overlay rendered over every preview. (Removed in v3.0.0; it had no way to be switched on until v2.5.0 and no protective effect once it was.)
- Custom blocklists and larger limits: inline text preview to 20 MB, attachment size to 5 GB, audit retention to 500 events per page.
- Hardening: every resolver validates its inputs against a strict allow-list, per-endpoint rate limiting was added, and the audit writer explicitly drops all user-identifying fields before anything is stored.
- OneView ships as a single, fully-featured edition — every install receives every feature, with no licensing gate.
-
v1.0.1 July 21, 2026
Presentation and documentation refinements.
- Improved information hierarchy, workspace framing and attachment-browsing states in the viewer.
- Clearer end-user documentation.
-
v1.0.0 July 19, 2026
Initial release.
- Attachment discovery and listing for the current Confluence page, with pagination, filtering and sorting.
- Inline viewer support for PDF, images, audio and video, Markdown, code and text, JSON, XML, YAML, TOML, and CSV table preview.
- Ability to pin one attachment to a macro instance so a page highlights a primary document.
- Policy-driven controls: maximum inline text size, maximum attachment size, download toggle, blocked extensions, blocked MIME prefixes and an optional watermark label.
- Server-side filtering of disallowed file types before any content reaches the browser.
Get it & contact
Vendor
AryonForge
Support
Security
App ID
ari:cloud:ecosystem::app/28233941-4ae9-42ab-b186-e5bb2eb60d11