Project
Feature roadmap
Where Red Pen is going - what landed recently, what is queued next across every surface and the Hub, and the exploratory ideas that are further out and less certain.
How to read this
Red Pen is a family of five surfaces (WordPress, Express, the static drop-in, Ableton Live, and the Blender add-on) plus the Red Pen Hub. The surfaces share one note model but evolve on independent version numbers - they are at different maturity levels, so the project tracks capabilities across surfaces rather than forcing version numbers to line up. WordPress is the flagship and sets the feature bar; whichever surface is in active feature-development at a given moment is the "lead" that a new capability is built in first, after which the others follow. The colour of each band below signals its state:
- Shipped - done and in use today (green).
- Now - the current focus, actively being built or next up (red).
- Next - planned and reasonably well-defined, but not started (amber).
- Later / exploratory - directional ideas, not committed (grey).
Recently shipped
The most recent work, newest first. These are live in the versions documented on the surface pages.
WordPress - reviewer links fail closed v0.26.0
A security fix worth calling out rather than burying. Any note that was open, on a public page and not aimed at an agent used to be readable by anyone holding a reviewer link - including a developer's own working notes. Notes are now internal by default and reach a reviewer only when their author ticks Visible to client reviewers. The check fails closed, every reviewer read path runs through one server-side gate, and a note records which link filed it so one client cannot see another's history. In the other direction, reviewers can now see their own reports at any status, with the date each was marked fixed - a client's Resolved tab could never fill before. See the WordPress page.
Express - shareable notes v0.3.0 + v0.3.1
The release that admits a second person, and the pass that made it true. An append-only JSONL store shipped with merge=union, so two branches of notes merge instead of corrupting each other; an author on every note and reply, seeded from git config user.name; the three-state lifecycle; and a real localhost gate that checks the connection's remote address rather than trusting NODE_ENV. The git advice reversed with it: commit your notes. v0.3.1 fixed the four defects that were quietly stopping the headline from happening, including a store that now tells you when your own .gitignore is hiding it. See the Express page.
Static drop-in - phones, orphans, and a name on the note v0.1.0 + v0.1.1
The file had no media query at all, so a 344px panel overflowed a 360px screen. Narrow viewports now get a bottom sheet, and touch pin mode means a tap pins while a drag scrolls. Orphaned pins are surfaced in a counted bar and a filter instead of being detected and silently discarded, a MutationObserver keeps pins accurate through SPA re-renders, notes carry an author, and a full localStorage now reports the failed save with an Export shortcut rather than swallowing it. v0.1.1 fixed an import that downgraded an in-progress note to open. See the static page.
Blender - data integrity and the cross-surface contract v0.4.0
Notes scoped to one .blend rather than to the whole folder; notes stranded by a renamed or deleted file made reachable again; snapshots taken before the first save no longer orphaned; pins drawn where you clicked rather than at the object origin; and timestamps stamped in UTC, which is what stopped the Hub overriding newer changes made in Blender. Quick capture now carries type and priority, Save As asks what happens to the notes, and the Hub push carries a thumbnail reference. See the Blender page.
Hub - correctness, portability, and visible degradation v0.9.0 + v0.9.1
--doctor checks the whole install and exits non-zero from a script. Configurable web roots mean the Hub is no longer guessing where your local server serves from. The board renders Blender's viewport snapshots, gained an Age column, and refreshes itself off an event stream. Underneath, the hold logic was corrected: whether a hold is blind is decided per note rather than per source, status timestamps are compared as instants rather than as text, and every hold now expires after seven days - the whole point of a time-bounded hold is to make a degraded case visible, and it was being hidden. See the Hub page.
Ableton - notes that follow the timeline v0.9.5
Insert eight bars of intro and every arrangement note used to point eight bars early, silently. The SDK has no observers to react to, but Live moves its own locators - so the RP: locator is now treated as the real anchor and the note follows it. Plus a Save As prompt (Live copies the identity marker into the new file, so two Sets claimed one identity), a time signature setting because the API exposes none and every bar number outside 4/4 was wrong, and "Locate" renamed to Flash, because a colour blink is what the SDK actually allows. The Settings tab now lists everything Red Pen writes into your Set. See the Ableton page.
Docs - the surface matrix 2026-08
The per-feature grid this roadmap promised in June. Every cell in the Surface matrix was read out of the shipping code, and where an older marketing claim disagreed with the code, the claim was corrected. It exists because "free on every surface" was being read as "identical on every surface", which it has never been.
Open source pivot - everything free, no gate 2026
Red Pen went fully free and open. The planned license gate and the Hub's project cap are retired - every surface and the Hub work in full, for every project, with no key, no account, no phone-home, and no kill switch. The white-label client report is free too. The project is sustained by optional one-time support rather than a paid tier: Buy Me a Coffee and GitHub Sponsors, with supporters listed on the wall.
WordPress - white-label client report v0.21.0
The freelancer's deliverable: a clean, printable report of a site's notes grouped by status - open items and what has been resolved - with summary counts, type and severity, the page each note sits on, screenshots, and resolve dates. Generate it from the panel under Tools and use the browser's Print / Save as PDF to hand it to a client. Both the plain report and the branded layer - your logo, an accent colour, a custom title, and hiding the Red Pen credit, so the report goes out as your own deliverable - are free. See the WordPress page.
Hub - durable, two-way write-back for connected sources v0.5.9 + v0.5.11
The last gap in write-back is closed. Resolving, reopening, or starting a note on the board for a connected / push source used to be local-only and got overwritten on the next push. Now it is merged on ingest so it survives future pushes (v0.5.9) and handed back to the origin site so the source updates locally too (v0.5.11). WordPress pull sources were always two-way over REST. On the site side, the static drop-in and the Ableton extension read these hand-backs and apply them, and Blender has a Pull button; a push-connected WordPress site does not read the reply, so a board-side change there is held on the board only. See the Hub page.
Hub - board QoL, accessibility, and security batch v0.5.5 - v0.5.11
A wide polish pass on the board. The "When" column was split into Created and Resolved and "Where" renamed Location; each row gained a byline (author / assignee / reply count), the resolver's name on resolved notes, and a severity marker when present. Saved named views plus persistence of the active tab, sort, and filters across reloads. A CSV export alongside the Markdown one. A Start control that moves an open note to in-progress, making the three-state workflow fully reachable from the board. An accessibility pass (keyboard-operable aria-sort headers, announced tabs, dialog-role focus-trapped modals with Esc, a real light/dark switch). And a documented security posture - loopback-only bind, a DNS-rebinding Host guard, constant-time token checks, bounded re-validated outbound redirects, and a 0600 credential file. See the Hub page.
WordPress - severity field v0.20.0
Notes gained an optional Severity (Blocker / Critical / Major / Minor / Trivial) - the impact axis, distinct from priority's scheduling axis. Set it under "More" next to Priority; it is dev-only (client reviewers never see it) and shows on the note, in the CSV export, and on the Hub board. WordPress authors it today; the shared model carries it for other surfaces to adopt later. See Severities.
WordPress - every note reaches the Hub v0.19.0
The plugin's REST /notes endpoint now accepts ?scope=all, so the Hub can pull every note on the site - page- and post-attached notes were previously missing from the combined board, which only saw site-wide (target=0) notes. Notes also expose an ISO createdAt and, once resolved, resolvedAt + resolvedBy, which is what feeds the Hub's Created and Resolved columns and the resolver byline. See the WordPress page.
WordPress - client reviewer link v0.13.0
The first build from the "client feedback and handoff" theme, and the audit's most-requested capability. A non-technical client can now leave pinned notes on a WordPress site through a tokenized, shareable link - no login or account - in a restricted reviewer mode that cannot resolve, edit, delete, assign, or reach the admin repository. Generate and revoke links from a panel under Tools; reviewer feedback is badged "Client" and filterable in the repository. Free core, with the security boundary enforced on the server and a per-visitor rate limit plus instant revoke for abuse control. See the WordPress page.
Red Pen Hub - refocus on tracking v0.5.0
The Hub's old "Agent Dispatch" feature - which let you select notes and generate a paste-ready LLM work-order - was deliberately removed. Assembling and handing out prompts for language models is not the Hub's job; the Hub is a note tracker. Removing it cut a large amount of surface area (the selection mode, the batch-prompt builder, and a git "safety gate" modal) and refocused the app on what it is for. Kept: manual write-back, the markdown export, and a passive read-only git clean/dirty indicator. This item appears here only so the record is clear - it is a removal, and it is not coming back.
Red Pen Hub - two-way write-back v0.4.0
The Hub stopped being read-only. A per-row Resolve / Reopen control on the board now writes the status change back to the note's real source - editing a file store, flipping a connected store, or posting to the WordPress plugin's status route with an Application Password. This is the feature that turned the Hub from a viewer into a control surface. See the Hub page for the durability caveats around connected (push) stores.
Express middleware - notes UX parity v0.2.0
The "daily-use polish" milestone: an add-reply UI with thread rendering in the overlay; editing a note after adding it (body, type, priority, and re-pinning or clearing the anchor); Open / Resolved tabs with live counts; error toasts on failed saves; persistent add-form preferences; and an undo toast when resolving. Details on the Express page.
Ableton Live - external-file storage fix v0.9.3 and earlier
Clarified and fixed how the Live extension persists: note text is written to an external notes.json file, never inside the .als project, with a home-directory fallback for development mode. This was the storage fix that unblocked the surface; it has since reached v0.9.5, gated on the Live SDK's public release - see the Ableton page.
Static drop-in - Connect to Hub v0.0.2
The client-only drop-in gained a "Connect to Hub" panel: open the All-notes board, paste the Hub URL and shared token, and the browser-local notes push to the Red Pen Hub. This is what lets a purely static site appear on the aggregation board.
The next big theme: client feedback and handoff
A recent round of buyer-perspective review made one thing clear. Red Pen is excellent at organizing the developer's own notes, but the highest-value requests are all about a second person entering the loop - a client leaving feedback, a teammate sharing a board, a client receiving a finished report. That is where the next wave of work points. The guiding line is deliberately simple:
Planned - free core
- Review-snapshot handoff Free core - export a self-contained review bundle a collaborator opens, adds notes to, and sends back, like a merge. Pure local-first, no server - the way to bring a second person into a review on any surface.
- Anchor durability Free core - pins that survive a re-render, a theme change, or a responsive reflow, via a stable-attribute and text-content fallback. Quality work that protects the core promise of pinning to the thing itself.
- Text-range anchoring Free core - pin a note to a sentence, not just an element, so copy and content can be reviewed as precisely as layout.
- Markdown export on every surface Free core - bringing the markdown digest down from the Hub to all surfaces. It lives only on the Hub today; export stays free wherever it lands.
- One free export-to-issue path Free core - send a note straight to a GitHub issue, so notes flow out to where the work actually happens.
Planned - further out
- Markup studio - rich screenshot annotation (pen, arrows, blur) on top of the basic capture.
- Multi-destination export bridges - configurable export to several issue trackers and services beyond the one built-in path.
- Shared multi-user Hub - a self-hosted board with real per-user identity, so a team or agency sees one board and knows who resolved what. Self-hosted, no subscription, no phone-home.
Cross-cutting: assignees and automated work
Treat Claude and other agents as assignable users decided, pinned
Another cross-cutting theme, alongside the client-feedback work above. A note should be assignable to a person or to an AI agent, so the board can tell manual work apart from automated work at a glance. This is decided as a direction but currently pinned (intentionally parked) because the WordPress surface already has the assignee and agent model fully built - so the work is about extending it, not inventing it.
The plan, when it is picked back up:
- Adopt the existing WordPress assignee/agent model rather than design a new one.
- Make assigning settable from the Hub by writing back to the source, the same way Resolve / Reopen already works.
- Bring the assignee field to the other surfaces (Express, static, Blender, Ableton) after the Hub, since none of them have it yet.
Red Pen Hub
Near-term Hub work next
- Per-user Hub identity - real accounts on a shared/team Hub so the board knows who resolved what (the shipped resolver byline records a name only where the source has identity, e.g. WordPress).
- Assignee on the board - surface and set assignees from the Hub (the cross-cutting theme above).
- "What changed since" digest - a quick view of what moved since you last looked.
- Per-source open/resolved split - show each source's open versus resolved counts in the Sources tab.
Express middleware
Express is the surface in active feature-development, marching toward v1.0 (declared parity with WordPress) and an npm publish. The sequence after the shipped v0.3.1:
The road to v1.0 next
| Version | Theme |
|---|---|
| v0.3.0 shipped | Shareable notes - an author on every note and reply resolved from git config user.name, an append-only JSONL store with merge=union so two people on one branch cannot corrupt each other's notes, a real localhost gate, and the three-state lifecycle. This release was re-ordered ahead of screenshots on purpose: a screenshot's value is showing someone else, and until notes carried a name there was no someone else. |
| v0.4.0 | Screenshots - drag-to-snip region capture (client-side), saved alongside the note and shown in the repository. |
| v0.5.0 | Repository power-tools and assignee - type/priority/text filters, bulk actions (resolve/reopen/delete), per-page grouping, and a free-text assignee field with filter. |
| v0.6.0 | Display and accessibility - custom pin colour, a small settings surface, a focus/ARIA/keyboard/reduced-motion pass, and a resizable panel. |
| v0.7.0 | Agent feedback and export - target a note at an agent, a REST ?agent= filter, an auto JSON brief, and lossless JSON export/import. |
| v0.8.0 | Hardening for release - input validation, a dev-only enforcement audit, a light security review, and docs polish. The localhost gate shipped early in v0.3.0. |
| v1.0.0 | Parity declared and publishable to npm. |
Static drop-in
Track the Express feature line next
The static surface is close to feature-complete for what a server-less drop-in can do - replies, edit-after-add, three-state status, custom types, an author name, phone support and the full JSON round trip all ship today. What is left mirrors the Express line where it makes sense in a browser-only context: screenshots, an agent lane, a priority filter in the repository view, and switching the stored middle-state string from progress to the spec's in_progress. Because there is no server, anything that needs server-side storage stays out of scope here by design.
Ableton Live
Feature-complete - awaiting the SDK's general availability gated
The Live extension is feature-complete at v0.9.5, including the locator / cue-point layer (a note's captured anchor is mirrored as a real Live locator) and per-Live-Set scoping (notes are organized by project rather than one global store). The only thing holding the release is the platform: the Ableton Live Extensions SDK is still in beta and not publicly shippable. When the SDK reaches general availability, the extension ships as a release candidate as-is; until then it is maintained and used daily on real production work. See the Ableton page for the current state.
Later and exploratory
An event and integration system
A possible future direction for the Hub: an event-driven layer where the application emits business events (a note created, a status changed, a project updated) and optional, independently enabled integrations subscribe to them - without the core ever containing platform-specific logic. The guiding principles would be self-hosted first, no dependency on SaaS automation platforms, and events that describe what happened rather than dictate an action.
- Phase 1 - one-way, application to external. Push activity outward: append to a Markdown vault (Obsidian, Logseq, plain folders), post to Discord or Slack, or fire generic outbound webhooks. The Markdown-vault target is the most interesting - turning notes and activity into a durable, human-readable knowledge archive that outlives the app.
- Phase 2 - bidirectional. Read the other way too: create a task from a Markdown checkbox, detect completed items in vault files, and synchronize status changes back. Considerably more involved, and firmly in the "maybe someday" bucket.
A generic outbound webhook system would underpin most of this - exposing internal events to any external service without a dedicated integration module for each one.
Supporting the project
For completeness, since people ask how a free tool sustains itself. Red Pen is free and open source, and it stays that way - there is no paid tier and no gate to remove later.
- Free and open, forever, on every surface and the Hub. Leaving notes, pinning, the workflow, the shared repository, client feedback intake, the white-label report, the Hub across every project, and export are all free, with no account, no key, and no cap.
- Support is optional and one-time. If Red Pen saves you time, you can back the next release through Buy Me a Coffee or GitHub Sponsors. One-time is the lead ask, not a subscription. Supporters are listed on the wall.
- Export is never gated. Wherever it ships it is free, and it is never the thing held back to sell you something. It is not uniform yet, and pretending otherwise would be the kind of claim this project exists to avoid: full JSON export and import on the static drop-in, JSON and CSV in Ableton, CSV on WordPress and the Hub, a Markdown digest on the Hub, and no export command at all on Express or Blender - where the store is already plain text on your own disk. The Core concepts table is the current state; bringing Markdown export down to every surface is a tracked commitment above, not a paid extra.
- Free means free on the surface where it ships. The surfaces are at different maturity levels, so a feature that is free on WordPress today may still be on the way elsewhere. The Surface matrix is that promise delivered - every feature against every surface, read out of the shipping code, so it is always clear which surface has what and nothing implies "everywhere" when it means "WordPress first".
- No phone-home. No telemetry, no kill switch, nothing leaves your machine.