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 nightly 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 stale list and the counts.
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).
- Set page thresholds — overrides the aging/stale days for this page alone.
These actions are 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.
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, 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, space-level exempt labels, 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; the dashboard reports progress, how many pages succeeded, and names the ones that failed. Selections beyond 200 pages are refused loudly, never silently truncated.
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 view the page | The page byline |
A partial override that would flip the pair (aging ≥ stale) is clamped and reported rather than silently producing a status nobody can explain. Threshold changes take effect with Recalculate statuses — a local recomputation that makes no API calls at all.
Exclusions
-
By label — pages carrying
evergreen-exempt(the default; site and space 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 nightly 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 fifty-thousand-page space is simply a longer chain — 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 — such pages are excluded from all counts, and the dashboard states how many it found rather than quietly omitting them. The count is a floor: Confluence answers identically for a deleted page and a restricted one in most cases, so Evergreen only claims what it can prove.
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 “Newly stale” section — Confluence exposes no API for apps to send in-product notifications, and Evergreen sends no email, 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 nightly 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.