Versions
Every release of the redlining package, newest first, as published on
npm. Generated from the package
changelog; dates are the release tags. Upgrade with
npm i -D redlining@latest (or your package manager's equivalent): a caret
range does not pick up a new minor on its own.
0.10.1 2026-11-09
Patch Changes
- The annotations panel shows the installed version next to its title.
- Settings use toggle switches instead of checkboxes, and every dropdown in the overlay has the same flat field with a chevron; the styling dropdown spans the popover so its label is no longer cut off.
0.10.0 2026-11-09
Minor Changes
-
Every note carries an intent: Do now (the default), Plan first, To-do or Question,
chosen in the note popover or per row in the list. The export adds an
Intent:line to every note that is not "do now" and states the matching rule once in the footer: answer without changing code, present a plan and wait for approval, or record it in the project's to-do list without implementing it. -
Copying marks notes as sent. Sent notes dim in the list and the next Copy all leaves
them out until they are edited, so a batch that already went to the agent is not sent
again; a row's copy icon always copies. When the agent's
reply.mdmarks sent notes done, the list offers to archive them, matched by the number each note had when it was copied. -
The footer of every export asks the agent to commit
.redlining/state.jsonalong with the change. -
redlining initturns onendpoint: truein a Vite project's config, points out a proxy or middleware that would intercept/api/redliningand names the exemption, and only prints the remaining setup step when the layout and config are not wired yet.
0.9.1 2026-09-26
Patch Changes
- A page without annotations still points at the ones on other pages: the list button's badge shows their count in an outline style, and the empty panel says how many there are on how many pages, with a "Show all pages" button that switches the scope.
0.9.0 2026-09-15
Minor Changes
-
Sessions and the archive live in the project:
.redlining/state.json, read and written through the same save endpoint, so every browser and every origin on the machine sees one history and the file travels with the repo. The first time the endpoint answers, the browser's history moves into the file.redlining initnow ignores.redlining/*and commits the state file (an old.redlining/line is upgraded). Without an answering endpoint, or with the new "Keep sessions in the project" setting off, sessions stay in the browser as before.
0.8.0 2026-09-13
Minor Changes
- The list panel has a scope: This page (default) or All pages, which lists every route's open annotations under its own heading, this page first. Headings link to their page and their × archives that session; other pages' rows can be copied and archived from here. Copy and Save follow the scope, so the "Include other routes" setting is gone and the history view is the archive only.
0.7.10 2026-09-13
Patch Changes
-
The overlay works inside a native modal dialog (
showModal()): while one is open, the host moves into it, so the toolbar is clickable above the backdrop, elements in the dialog can be annotated, and a click on the toolbar no longer lands on the backdrop and closes the dialog.
0.7.9 2026-09-13
Patch Changes
- Clicking or focusing anything in the overlay no longer counts as an outside click for the page's own dismissable UI: a dialog or menu that closes on pointer-down or focus outside stays open when you open Redlining.
0.7.8 2026-09-12
Patch Changes
- A note popover placed above an element near the bottom edge stays clear of the toolbar band.
0.7.7 2026-09-12
Patch Changes
- Draw mode works on pages without the loader (standalone, Angular, Vue, plain HTML): a drawn box now resolves to the deepest element covering it, with a selector anchor, instead of ending silently.
0.7.6 2026-09-12
Patch Changes
-
Annotating inside a form that has a field named
idno longer throws; the selector walk now checks that an element's id is a string.
0.7.5 2026-09-10
Patch Changes
- Archive rows show their state as an icon with a tooltip (box: archived by hand; check: applied per verify) instead of a clipped text chip.
0.7.4 2026-09-10
Patch Changes
- Confirmations (Archive session, Delete all archived) use the overlay's own dialog instead of the browser's alert box; Enter confirms, Escape cancels.
0.7.3 2026-09-10
Patch Changes
- The list panel shows only the current page's annotations. Sessions still open on other pages moved into the history view (clock icon), listed above the archive with their counts and an × that archives them, so an annotation is always either visible, open on another page, or archived.
0.7.2 2026-09-10
Patch Changes
- Copy and Save carry exactly what the list panel shows. "Include other routes" is now off by default; when it is on, the panel footer says so. The × beside another route moves its annotations to the archive instead of deleting them.
- The note popover stays on screen: for an element near the bottom it opens above it (or beside, or clamped), clear of the toolbar, like the Inspector already did; on very small windows it scrolls inside.
0.7.1 2026-09-10
Patch Changes
- The archive toggle in the list panel uses a history icon; it looked identical to Archive session next to it.
0.7.0 2026-09-10
Minor Changes
- Archive. Annotations are no longer deleted from a session: the × on a row, Archive session and Remove applied after a verify move them to an archive that keeps the route, the day, the anchor, the note, the tweak changes, the verdict and the agent's reply line. The archive button in the list panel header opens it: restore an item into the session of its own route, copy it as a prompt of its own, or delete it for good (also all at once). It lives in the browser next to the sessions, without reference images, and keeps the newest 300 items.
0.6.5 2026-09-10
Patch Changes
- Settings show the installed version and, once a day, whether a newer one is on npm (a toast the first time a new version appears; the check sends nothing and can be switched off).
- The list panel has a Copy button in its header (the whole prompt, like ⌘⇧C) and one per annotation that copies that annotation alone as a complete prompt with header and footer.
0.6.4 2026-09-10
Patch Changes
- Sessions no longer leak across routes. The overlay lives in the root layout and survives client-side navigation; it used to keep the previous page's annotations in memory and save them under every route it was navigated to, so pins from one page appeared on others and the export repeated them per route. Navigation now swaps to the new route's session (and back), previews included.
-
The export header and the help popover show the package version (
# Redlining 0.6.4 — /route), andannotations.jsoncarries it asversion.
0.6.3 2026-09-10
Patch Changes
-
A keydown event without a
key(dispatched by an extension or test tooling) no longer throws inside the overlay's hotkey handler, the window listener or the tweak layer; it is ignored.
0.6.2 2026-09-08
Patch Changes
-
Vite endpoint: the request body is capped while it streams (413 past
maxBytes, now a plugin option) and adapter errors become a 500 instead of an unhandled rejection; the Next.js route counts UTF-8 bytes, not string length. - A failing screenshot no longer aborts the save or leaves the before/after previews reset; the export continues without the image.
-
Nudges are previewed on the CSS
translateproperty, so an element's owntransform(rotation, scale) is kept; older sessions withtranslate(x, y)values still load. - Two tweak annotations on one element now show together: previews are grouped per element and applied from one snapshot; deleting one keeps the other.
-
The overlay restores the page's own inline
cursoranduser-selectafter an interaction instead of clearing them. - A blocked clipboard shows a toast instead of failing silently.
-
withRedlining()appends to a consumer's existing*.tsx/*.jsxTurbopack rule instead of replacing it. -
Provenance: a stylesheet
!importantnow wins over a normal inline style, and among!importantdeclarations a layered one wins over an unlayered one. -
react-domis a declared peer dependency andnextis optional, so Vite and standalone consumers no longer pull Next. -
Tests: the packed CLI's usage exit and
redlining initare asserted in the smoke test; the anchor and save scenarios also run undernext dev --webpack; a Vite fixture exercises the transform and the dev-server endpoint.SECURITY.mddescribes the reporting process.
0.6.1 2026-09-08
Patch Changes
-
Security. The save endpoint validates the whole session before anything
reaches the filesystem: every annotation index must be a positive integer, crop keys
likewise, and every asset file name is checked to stay inside
outDir. A crafted index could previously write an image outside.redlining/. -
Security. Cross-origin browser requests to the save endpoint are
refused (
Originmust be this server,Sec-Fetch-Sitemust be same-origin), in the Next.js route and the Vite middleware alike; requests without those headers (curl, tests) still pass. A hostile page could previously post a forged export to a running dev server. -
The in-package help links to the docs at
https://redlining.deep-thought.rocks
(was the never-enabled GitHub Pages URL); the package
homepagefollows.
0.6.0 2026-09-08
Minor Changes
-
Snap to scale (on by default): the Inspector's plus and minus buttons
step through the classes your stylesheet offers for that property (
text-sm→text-base→text-lg) instead of by 1px, so a tweak lands on a real class; turn it off for free values. -
Styling settings. The overlay detects the page's styling idiom
(Tailwind 4 from its theme tokens, Tailwind 3 from the preflight variables, CSS Modules
from hashed class names, else plain CSS), shows it in a new Settings popover (gear in
the toolbar) where you can override it, and the
<Redlining framework>prop sets it in code. The export header statesStyling: Tailwind 4 (detected: …)and the footer tells the agent the matching idiom. Under Tailwind, values map through the theme even when the utility is not emitted yet:padding-left: 12px → 24px (from class btn; add class pl-6),text-[17px]for off-scale values,bg-brand-500for a--color-*token; steppers snap to the theme scale (pl-3 → pl-3.5,text-sm → text-base). The settings also hold the Snap-to-scale default. -
Multi-route export. Sessions stay per route, but Save and Copy now
include every other route that has annotations in this browser, each under its own
# Redlining — /routeheading with one footer, andannotations.jsoncarries them asothers. The list panel shows those routes with a per-route Clear; the setting "Include other routes" turns it off. The/redlinecommand template says the file may hold several routes. -
Reference images and crops. Paste or drop a mockup into a note (up to
three, shrunk to 1600px); it shows as a thumbnail, persists with the session, and Save
writes it as
ref-N-i.jpgwith aReference:line telling the agent to match it. With the camera on, Save also writescrop-N.pngper annotation (the element with a margin, no pins) and aCrop:line. The route prunes stale images, accepts 16 MB bodies (was 8), and the/redlinetemplate asks the agent to view both. -
Verify loop. The
/redlinecommand now ends by writing.redlining/reply.md(## N · done | partial | skipped — what changed). The route gainedGET(createHandlers()returns{ GET, POST };redlining initwritesexport { GET, POST }and points out routes and commands that predate this). When the overlay opens and the reply is newer than the last save, it checks every annotation against the page with its previews removed and opens the list:applied,differs · font-size is 15px, expected 16px,missing, orcheck by eye, beside the agent's line. The panel has a Verify button and Remove applied. -
Beyond Next.js.
redlining/standalonebundles React and mounts from a script tag (data-redlining data-endpoint="off") ormount(), so the overlay runs on Angular, Vue and plain pages with selector anchors; component names come from Angular'sng.getComponent(dev mode) and Vue 3's instance chain, React's owner chain as before.endpoint: false, a 404 or an unreachable endpoint make Save downloadannotations.md,annotations.jsonand the images instead.redlining/vitecan serve the save endpoint from the dev server (redlining({ endpoint: true })); the handler moved tosrc/server/handler.tsandredlining/next/routere-exports it unchanged. -
Red. The accent is now a redline red (
#9e2018fills,#b92b22/#66150ftext), a recorded divergence from the design canon; pins in screenshots and the docs site follow. -
Toolbar. Grouped as modes · list · frame and camera · copy and save ·
help, settings, corner, close. Clear session moved into the list panel's header. A
?key and a help button open an in-package help popover with the keys, the loop and links to the docs. - Copy speaks to any coding agent: the save toast, the help popover and the package description say "run /redline, or hand .redlining/ to your agent"; Claude Code stays the first-class path.
-
class A → Bis printed only when B is on A's scale (text-sm → text-lg); a utility from another family isadd class pl-6, so component classes are never told to be replaced.
0.5.0 2026-09-07
Minor Changes
-
Value provenance in tweak mode: every Inspector field says where its
value comes from (
from .text-lg,var(--leading) · .prose,inherited from <section>,inline style), and sizes nobody sets are labelledauto · from grid|flex|block. The export carries it:font-size: 15px → 17px (class text-base → text-lg)when a single-class rule in your stylesheet matches the new value,(from class btn)otherwise, andwidth: auto (180px, laid out by the parent grid) → 220px — … prefer changing the layoutfor layout-derived sizes.Changegainssourceandsuggestion. -
Inspector sections (Type, Box, Padding, Margin, Colour, Layout) are collapsed by default
and show their values in one line, e.g.
margin 10 0 20 0; click the heading to open one. Displayed values round to one decimal.
0.4.0 2026-09-07
Minor Changes
-
The viewport preset is now a device frame: the width select (375 / 768
/ 1280) opens the same page in an iframe of that width, so media queries, fixed bars and
mobile layouts behave as on a device. The overlay inside the frame opens by itself, its
annotations sync into the same session, and each carries
Applies at: ≤ 375px (made in a 375px device frame). The earlier max-width approximation is gone. - The toolbar and pen button can be moved between corners (button in the toolbar); the position is remembered.
0.3.1
Patch Changes
- A move saves without a note (its From/To carry the intent). For change, add and remove, the Save button is disabled until a note exists and Enter shows "Write what should change first" instead of silently doing nothing. Choosing a chip hands focus back to the textarea so Enter saves right after.
0.3.0 2026-09-07
Minor Changes
-
Tweak mode (
T): change values directly in the running page and export the numbers. An Inspector with steppers for type, box, padding and margin, weight chips, a text field, colour pickers with your:roottokens, and gap/justify/align chips on flex and grid containers; resize handles, Alt-drag spacing, drag and arrow-key nudging (exported as an honest visual nudge), Alt-hover rulers, Undo and Reset. Every change is recorded as computed before → after beside the element's class list (Classes:), previews survive reload and hot reload, and a footer tells the agent to implement values in the project's idiom, never inline styles. Viewport presets (375 / 768 / 1280) stampApplies aton annotations; the camera can also save ascreenshot-before.png. Anchors gainclassesanddisplay; annotations gainchangesandappliesAt.
0.2.0 2026-09-07
Minor Changes
-
Anchors carry a usage site (
context): the nearest decorated ancestor from another file and the branch's position among its children. The Markdown prints it asinstance 2 of 3 in<section>· app/page.tsx:41, and theToline of a move adds the target's text, so instances of one reusable component are no longer ambiguous. The list panel rows expand to the full anchor, owners, usage site, target or box, and the complete note.
0.1.1 2026-09-07
Patch Changes
-
1a4994b:
redlining/nextnow importsnext/constants.jswith its extension, so an ESMnext.config.mjs(plain Node resolution, no bundler) loadswithRedliningagain. A packed-tarball smoke test in CI now imports every entry with plain Node.
0.1.0 2026-09-07
Minor Changes
- First release. Figma-style comments on a running Next.js app, exported as a file-anchored spec for Claude Code.