saiken35 downloadsScore every note's staleness from edits, opens, and inbound links, then work through a decay-ranked review queue.
Find the notes that are quietly rotting.
Every vault accumulates notes that were true when you wrote them and are not true now. Nothing tells you which ones. Patina scores every note's staleness from four signals, ranks them, and gives you a worklist.
Patina never edits your notes. The only thing it ever writes is a
decay:line in a note's frontmatter — and only when you explicitly run "Set decay profile for this note".
A note decays on a half-life. One half-life of neglect halves how fresh a signal is; two half-lives quarter it. Three signals feed the score:
| Signal | Weight | Where it comes from |
|---|---|---|
| Last edited | 0.5 | The file's modification time. |
| Last opened | 0.3 | Obsidian does not record this. Patina does — see the activity log below. |
| Inbound-link recency | 0.2 | The newest note that still links here. |
The score is 0–100, higher is more decayed, and it lands in a band: fresh (< 30), aging (30–59), stale (60–84), decayed (≥ 85).
A note with no inbound links is never punished for it. The weights renormalize over the signals that actually exist. An orphan note is not a stale note, and treating a missing signal as a zero would mark half the vault as decayed on day one.
Set a note's decay profile in its frontmatter:
---
decay: fast # 14-day half-life — meeting notes, inbox captures
---
| Profile | Half-life | For |
|---|---|---|
fast |
14 days | Notes that are stale the moment they are cold. |
slow |
90 days (default) | Reference notes that age, but not quickly. |
evergreen |
never | Exempt. Never enters the queue, at any age. |
Half-lives, weights, band thresholds, the frontmatter key, and the excluded folders are all configurable. A typo in the profile (decay: evergreeen) falls back to the default — it never silently exempts the note.
Second Read Pro — $29 one-time. One key unlocks Pro in all five Second Read add-ons (Note Decay, Standing Questions, Effort Index, Prior Art, Unwritten). Buy here: https://buymeacoffee.com/vaultspotlight/e/560213 — the key is emailed to you automatically, within seconds (delivery is fully automated); paste it into Settings → Patina → License. It is verified offline.
Pro adds the two features that need to compare notes by meaning rather than by metadata:
Both need the local semantic engine (see below), which runs on your computer and sends nothing anywhere. The engine has no published build as of this release, so both features are switched off and say so when you reach for them. They do not show you an empty list — an empty list would look like a clean vault, and that would be a lie.
One key unlocks Pro in all five Second Read add-ons: Patina, Standing Questions, Effort Index, Prior Art, and Unwritten. Licenses are verified offline with an Ed25519 signature built into the add-on. No account, no server, no network request.
Please read these before installing. They are the things this add-on does that you cannot see.
Obsidian does not track when a note was last opened, so Patina logs it itself. Without that, "last opened" is not a signal anyone could compute.
This add-on records, on your device only, which notes you open. The log lives in
<vault>/.obsidian/second-read/signals/and never leaves your machine. Delete the folder to erase it; there is a Clear activity log button in settings.
The log is a plain append-only text file. It records the note path and a timestamp — nothing about the note's contents. It is shared with the other Second Read add-ons (Effort Index writes editing time into the same log), which is why installing a second one is instantly useful instead of starting from zero history.
The two Pro features need a local semantic engine: a self-contained program that runs on your computer, embeds your notes locally, and opens no network connections.
%LOCALAPPDATA%\second-read-engine on Windows). It is never written into your notes folder.noexec mount, Flatpak), you can point the add-on at an engine binary you installed yourself. The download is a convenience, not the mechanism.This means the add-on accesses files outside your vault, and that is exactly what the two bullets above describe.
The stale-note dimming decorates Obsidian's own file list, which has no public API for it. If a future Obsidian release changes the file explorer, the dimming stops working and nothing else does. It is a toggle in settings.
| Command | What it does |
|---|---|
| Open review queue | The ranked worklist, in the right sidebar. |
| Show decay score for this note | The score and why. |
| Snooze this note | Keeps it out of the queue for a while. |
| Set decay profile for this note | Writes decay: into the note's frontmatter. |
| Export decay scores as CSV | Writes Decay Scores.csv into the vault. |
| Group the review queue by topic | Pro + engine. Hidden from the palette when unavailable. |
| Find superseded notes | Pro + engine. Hidden from the palette when unavailable. |
No default hotkeys — bind your own in Settings → Hotkeys.
Community plugins (recommended): open Settings → Community plugins, search Patina, and install it — one click, auto-updates.
Manual install: copy main.js, manifest.json, and styles.css into <vault>/.obsidian/plugins/patina/ and enable it in Settings → Community plugins.
npm install
npm run sync:shared # vendor the shared Second Read core
npm run lint # typecheck + the review bot's own eslint ruleset
npm test # lint + drift check + the whole suite
npm run build # production bundle
npm run install:vault -- <path to a vault>
src/shared/ is vendored from obsidian-plugin-core and must never be edited here — npm test fails on drift.
MIT. See LICENSE.