Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| v0.21.0 | Direct document editing in annotate mode, live git-status file tree, in-app agent terminal, open files in external apps, HTML renders as HTML |
| v0.20.3 | Annotations no longer lost when clicking away, off-screen indicator for open comments |
| v0.20.2 | Pierre CodeView all-files review, large-PR pipeline and instant-open checkout, unified agent engine selection, Pi programmatic plan mode |
| v0.20.1 | Pi extension install hotfix (pinned @pierre/diffs after a broken upstream release) |
| v0.20.0 | Multi-repo workspace reviews, semantic diff overview, UI 2.0 themes and plan look chooser, leaner single-source skill install |
| v0.19.27 | Kiro CLI integration, Glimpse native window, annotate-last message picker |
| v0.19.26 | Amp plugin production fixes, Mermaid rendering fix, Settings flicker fix, update notification toast and shimmer |
| v0.19.24 | Amp integration, configurable data directory, Auto Mode permission option, Pi plan approval fix |
| v0.19.23 | Droid integration, Windows Pi AI fix, quieter update indicator |
| v0.19.22 | Safari copy fix in plan viewer, CLAUDE_CONFIG_DIR support for session logs |
| v0.19.21 | Ask AI in plan review and annotate mode, shared AI runtime, origin-aware provider defaults |
What's New in v0.21.1
A single-fix patch release. Annotating the last assistant message could open a blank page in any conversation with more than one response. This release fixes that.
Annotate-Last No Longer Blanks on Multi-Message Sessions
Running /plannotator-last (or plannotator last) opened a blank page whenever the session had two or more recent assistant messages. With zero or one message it worked, so it looked intermittent, but it was deterministic: the failure tracked message count. It was most visible on the Pi extension, where multi-turn sessions are the norm.
The cause was a React rendering bug. When the annotate UI assembled the feedback payload during render, it reached a helper that wrote component state as a side effect. Because that state was a freshly built map on each pass, React never settled, hit its re-render limit, and threw before drawing anything, leaving an empty page. The fix makes that render-path helper a pure read of the same data, so the work that belongs at submit time no longer fires during render. The exported feedback is unchanged; the page renders.
PR #950 closing #949, reported, diagnosed, and fixed by @emmaneugene.
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows:
irm https://plannotator.ai/install.ps1 | iexExtra skills (compound, setup-goal, visual-explainer), opt-in:
npx skills add backnotprop/plannotator/apps/skills/extraClaude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".
OpenCode: Clear cache and restart:
rm -rf ~/.bun/install/cache/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionDroid: Install via the plugin marketplace:
droid plugin marketplace add backnotprop/plannotator
droid plugin install plannotator@plannotator
Amp: Install the CLI first, then copy the plugin:
mkdir -p ~/.config/amp/plugins
curl -fsSL https://raw.githubusercontent.com/backnotprop/plannotator/main/apps/amp-plugin/plannotator.ts \
-o ~/.config/amp/plugins/plannotator.tsKiro CLI: The installer auto-detects Kiro and installs skills automatically. After installing the CLI, launch with:
kiro-cli chat --agent plannotatorUpgrading from before v0.20.0? Read the v0.20.0 release notes first; that release changed how skills install.
What's Changed
- fix(editor): stop setState-during-render loop in multi-message annotate by @backnotprop in #950
Community
Thanks to @emmaneugene, who reported the blank-page regression in #949, traced it to the exact render-path state write, and supplied the fix that this release ships.
Full Changelog: v0.21.0...v0.21.1