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
- Install Evergreen from the Atlassian Marketplace.
- Accept the defaults: pages turn Aging after 90 days and Stale after 180. Site admins can change both under Confluence administration → Evergreen.
- 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.
- 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 activity | Status |
|---|---|
| Less than the aging threshold | Fresh |
| Between the two thresholds | Aging |
| Past the stale threshold | Stale |
“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 — records who confirmed and when. It writes a content property beside the page: no new version, no entry in page history, no watcher notified.
- Exclude from tracking — takes this one page out of freshness tracking (and back in, with the same button). The byline says who excluded it and when; a page excluded by its label says so, and comes back when the label is removed.
- Set page thresholds — overrides the aging/stale days for this page alone.
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:
- Overview — fresh/aging/stale/exempt counts, the thresholds in force, when the space was last scanned, and buttons to scan for changes, rebuild from scratch, or recalculate statuses after a threshold change.
- Needs attention — every aging and stale page (up to a 10,000-row list ceiling), worst first, with filters by status and owner, paging, and multi-select for bulk actions.
- Review list — pages someone was asked to look at: who was assigned, when, with a way to take entries off the list once dealt with.
- Settings — space-level threshold overrides and a switch to turn tracking off for this space entirely.
Bulk actions and the review list
Select pages in the “Needs attention” list and act on up to 200 at once:
- Mark as fresh — confirm a whole section in one go.
- Exclude from tracking — behind a confirmation dialog, because it changes what the app tracks rather than just recording a date.
- Add to review list — pick a person and put the selected pages on the space's review list for them to judge.
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:
| Layer | Set by | Where |
|---|---|---|
| Site defaults (90 / 180) | Site admins | Confluence administration → Evergreen |
| Space override | Space admins | Space settings → Evergreen → Settings |
| Page override | Anyone who can edit the page | The 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
-
By label — pages carrying
evergreen-exempt(the default; site admins can change the list). - By space — from the global excluded list, or a space turning itself off.
- By page — the byline's “Exclude from tracking”.
- Templates — never tracked at all.
- Blog posts — excluded unless “Also track blog posts” is on.
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
| Scope | Why |
|---|---|
read:page:confluence | list pages per space; page titles, versions and owners |
read:space:confluence | enumerate spaces for the daily scan |
read:label:confluence | resolve exempt labels to the pages carrying them |
read:content.property:confluence | read each page's confirmation record |
write:content.property:confluence | write who confirmed and when |
write:page:confluence | required 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:confluence | show “Confirmed by Jane Doe” instead of a bare account id |
storage:app | the 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
- Archiving, moving or deleting pages — deliberately, and permanently.
- Approval workflows.
- Email or Slack notifications.
- Filtering the dashboard by label.
- Cross-site reporting.
Support
Questions, bug reports and feature requests: raise a support request. Security issues: report privately.