keelapps Evergreen for Confluence

keelapps/Evergreen/Documentation

Evergreen for Confluence — documentation

Evergreen gives every Confluence page a freshness status — Fresh, Aging or Stale — based on when it was last edited and when someone last confirmed it was still correct. Confirming takes one click and never modifies the page. That is the whole product: no archiving, no approval workflow, no email.

Evergreen is built on Atlassian Forge and declares no external network access — no data leaves Atlassian's infrastructure, so there is nothing extra for a vendor security review to look at.

Getting started

  1. Install Evergreen from the Atlassian Marketplace.
  2. Accept the defaults: pages turn Aging after 90 days and Stale after 180. Site admins can change both under Confluence administration → Evergreen.
  3. The daily scan indexes every team space. To see results immediately, open Space settings → Evergreen and hit Rebuild from scratch, or trigger every space at once from the admin page.
  4. From then on, every page shows its status in the byline, and each space's dashboard lists what needs attention.

The freshness model

One rule decides everything:

Age of last activityStatus
Less than the aging thresholdFresh
Between the two thresholdsAging
Past the stale thresholdStale

“Last activity” is whichever is more recent: the page's last edit, or the last time someone hit Mark as fresh. A confirmation counts as activity — that is what lets a page stay Fresh for years without anyone touching its content.

A page whose edit date Confluence will not reveal is shown as Stale with an explicit “no edit date available” note — not silently hidden, and not presented as Fresh, because nobody has vouched for it.

Exempt is a fourth state, not a threshold: a page excluded by label, by space rule or individually still has its age computed and shown, but is left out of the Needs-attention list and the fresh/aging/stale counts; exempt pages are counted separately in their own tile.

The page byline

Under every page title, Evergreen shows the status badge. Opening it reveals when the page was last confirmed and by whom, the thresholds in force, and three actions:

Mark as fresh is available to everyone who can view the page, deliberately: the person best placed to say “this is still correct” is often a reader, not an editor. Every confirmation is attributed by name and can be corrected by anyone else with one more click. Exclude from tracking and Set page thresholds change what the space is told about the page, so they are for people who can edit it: Evergreen asks Confluence, as you, before it writes, and readers don't see those two buttons.

On a page whose restrictions leave the app out, the byline says Evergreen can't read it. Blog posts work like pages when “Also track blog posts” is on; while it is off, their byline says blog posts aren't tracked.

The space dashboard

Space settings → Evergreen, visible to space admins. Four tabs:

Bulk actions and the review list

Select pages in the “Needs attention” list and act on up to 200 at once:

Bulk actions run in the background; when a job finishes the dashboard reports how many pages succeeded and how many could not be updated. A selection larger than 200 pages is processed for its first 200 and the overflow is reported, never silently dropped. The per-space review list holds at most 2,000 assignments; pages that would exceed it are reported as skipped.

Thresholds and overrides

Three layers, most specific wins, each value inheritable separately:

LayerSet byWhere
Site defaults (90 / 180)Site adminsConfluence administration → Evergreen
Space overrideSpace adminsSpace settings → Evergreen → Settings
Page overrideAnyone who can edit the pageThe page byline

A partial override that would flip the pair (aging ≥ stale) is clamped rather than producing a status nobody can explain. Threshold changes take effect with Recalculate statuses — a local recomputation that reads no page content; its only API call is a bulk user-name lookup, and only when owner names are still unresolved.

Exclusions

Scanning

A daily scan finds what changed in each space; a weekly full rebuild reconciles what an incremental scan cannot see (deleted pages, new restrictions). Long scans split themselves into resumable chunks, so a very large space is simply a longer chain (indexing caps at 100,000 pages per space, and scans at that scale have not yet been exercised on a production-size site) — and the dashboard keeps serving the previous scan's numbers until the new ones are complete. Statuses are recomputed locally after every scan, which is what keeps the API footprint small enough for large sites.

Restricted pages

Evergreen reads Confluence as itself, not as any user. A page restricted away from the app is invisible to it and left out of every count. Confluence answers the app the same way for a restricted page as for a deleted one, so the dashboard cannot say how many there are. On such a page, the byline says Evergreen can't read it.

Administration

Confluence administration → Evergreen, visible to site admins: site-default thresholds, the site-wide exempt label list, excluded space keys, the blog-post switch, and Rescan every space now. Pages that go stale are listed on each space dashboard's Overview tab, in a “N pages went stale” banner. Evergreen sends no email and no notifications, ever.

Permissions the app requests

ScopeWhy
read:page:confluencelist pages per space; page titles, versions and owners
read:space:confluenceenumerate spaces for the daily scan
read:label:confluenceresolve exempt labels to the pages carrying them
read:content.property:confluenceread each page's confirmation record
write:content.property:confluencewrite who confirmed and when
write:page:confluencerequired by Confluence's v2 API to create or update a content property — the app never writes page content, and a page's version history proves it
read:user:confluenceshow “Confirmed by Jane Doe” instead of a bare account id
storage:appthe page index, thresholds and scan state, in Atlassian-hosted storage

There is no permissions.external block: the app cannot make an outbound call even if it tried to, which Atlassian enforces at the platform level.

Not in this release

Support

Questions, bug reports and feature requests: raise a support request. Security issues: report privately.