We’re working on bringing Naji — the horse behind the name — home to Jacksonville.Bringing Naji home to Jacksonville.Meet Naji

Trail Log · 289 releases, newest first

Every release, in the open.

What shipped, when, and the commits behind it. Pick a month to narrow the log; the year pill brings it all back.

All of 2026

289 releases · 1304 commits · 135 active days

Commits per dayLessMore

  • v9.41Resize a whole gallery in one pass.
  • v9.17Thirty diagram shapes, a bar that duplicates and connects them, and fast drags that always land.
  • v9.6A triangle, a star with as many points as you want, a handle to turn any shape, and a door for plugins.
  • v8.99Every page says where to go next, and the .ora viewer saves.
  • v8.75Shapes duplicate in any direction, the Stroke Stabilizer steadies every brush, and the lists stop disagreeing with each other
  • v0.9.12Review panel, 360° bubble tails, dev tier switcher
  • v0.9.8Smart export, batch text, and a unified button system
  • v0.9.10June optimization pass — faster Rust, smaller WASM, Squoosh-style resize, shape edit boxes

1–15 of 289 releases · all time

October 202635 releases

v9.41latest

Resize a whole gallery in one pass.

  • Batch › Resize & Compress resizes every photo from its full-size original and shows each one's size before and after. A photo that would get bigger is left alone.

  • Select ▾ in the gallery ticks photos by rule: portrait, landscape, square, larger than a size, edited, unedited, or the opposite of what's ticked.

  • Download All has recipes: Instagram 1080×1350, Web 1600, Email small, or one you save. A recipe shapes the ZIP and leaves the gallery alone, and saved ones sync when you're signed in.

  • Create showed two Arrows & Diagram Shapes tiles. The second was Select objects, and it has its own panel now.

v9.40

Shrinking a PNG makes it smaller now.

  • A PNG is saved in the smallest form that loses nothing. A 66-color logo that exported bigger than its upload now saves at half the size.

  • Compress works on PNG: Quality below 100 trims a PNG to 256 colors or fewer, the way TinyPNG does. A logo shrunk and compressed went from 46% bigger than the upload to 64% smaller.

  • The Google PageSpeed box measures what the button will actually write, so the size before Apply is the size after.

v9.39

Five library updates, and the notes catch up.

  • framer-motion, the Radix tooltip and right-click menu, Playwright and the lucide icons all moved up in one update. Tooltips and the gallery's right-click menu were tested on the new versions.

  • The backend notes list all nine Convex tables and say plainly that no cleanup job runs on a schedule yet.

  • Four finished items in the parking lot are marked fixed, each with the PR that fixed it.

v9.38

Undo stops losing your shapes.

  • Undo or redo with a text open in its editor closes the text first, the way Esc does. Before, it broke the fast undo history, and after a reload a callout could come back without its pin and leader.

  • Leaving the Text tool without changing anything no longer adds an undo step that does nothing.

  • Compare no longer reports changes in a JPEG re-save of bright colored text, and Mark changes puts each pin just outside its box instead of over the first letter.

  • Alt+0 resets the pan as well as the zoom.

  • The Trail Log counts a squash-merged PR on the days its commits were written, from a cache checked into the repo.

  • Compare checks brightness and color separately. Engine 935,825 to 936,626 B (+801).

v9.37

Compare two screenshots and pin every change.

  • Screenshot compare: right-click a gallery photo and pick Compare with this. Every changed pixel is tinted, with Overlay, Side by side, Blink and Slider views and a list that zooms to each change.

  • Mark changes puts a box and a numbered pin on every change, and one Ctrl+Z takes them all back, even after a reload.

  • Ctrl+Y (Cmd+Y on a Mac) redoes, next to Ctrl+Shift+Z.

  • A callout's leader can be a plain line or an arrow, and it follows the callout through Align, Placement and arrow-key nudges.

  • Shift-click in the Shapes tool adds to the pick, an unfilled shape is picked by its outline, and deleting any part of a callout deletes all of it.

  • Two flaky tests now wait on state instead of timing.

  • The Trail Log credits Friday's night work to Friday instead of the day it was merged.

  • Two new engine calls for the screenshot diff, 15.3 ms at 2880 × 1800. Engine 923,141 to 935,825 B (+12,684).

v9.36

Pick several annotations and move them as one.

  • Multi-select: Shift-click annotations or drag a box with Create › Select objects, then move, nudge, align, distribute, duplicate or delete them together. Each is one Ctrl+Z, even after a reload.

  • A callout's pin, leader and label move as one, a connector between picked boxes follows them, and the Reselect list takes Shift-click.

  • A shape's edit box no longer draws over the side panels; dragging a shape into a panel closes it, as a pasted image does.

  • Five dependency bumps in one lockfile change, plus the CodeQL action.

  • Five new engine calls, no format change. Engine 904,742 to 923,141 B (+18,399).

v9.35

Shape drags keep up, pins renumber themselves, and Smart Callouts.

  • Dragging a shape's edit box takes about 6 ms from pointer to screen, down from 21. The editor no longer re-renders on every move.

  • Numbered pins close the gap when one is deleted. The Pins panel's Next field inserts a step anywhere, and Renumber tidies the sequence. Each is one undo step.

  • Smart Callout: a pin, a label and a leader in one click and one Ctrl+Z. The leader follows the pin or the label and survives a reload.

  • Four new engine calls, no format change. Engine 901,943 to 904,742 B (+2,799).

v9.34

Annotation benchmarks and an opt-in rendering prototype.

  • Repeatable benchmarks cover 10, 100 and 500 annotations, including browser drag timing, rasterization, recomposition and memory.

  • An experimental dirty-region renderer is compared with full-frame and tiled paths, with pixel-parity tests and recorded scratch-buffer costs. It is disabled in the production editor.

v9.33

Adjustments undo survives a reload. The status bar trims itself near compact.

  • Adjustments sessions are recorded in the operation log. All seven controls and their exact resets come back through undo, redo and reload.

  • The status bar drops hints in steps as the window narrows, tool hints first, so it never reaches compact overfull. The two pinned shortcuts stay put.

  • Operation log format v14. Engine 901,221 to 901,943 B (+722); no pixel kernel change.

v9.32

Saves keep their files. AI reference uploads get cleaned up.

  • Retrying a cloud save keeps its archive. Cleanup checks references through indexes, so files stay protected beyond the first 2,000 rows.

  • Create AI Image keeps reference uploads while a job runs and cleans them up when it finishes. Files used by another record stay put.

  • Backend regression tests run in CI without deployment credentials. Eight additive indexes; deployment checks distinguish test files from live functions. The orphan-sweep cron stays off.

v9.31

Preset sliders respond to every arrow press.

  • In Shapes, one Right or Up arrow moves Points from 5 to 6; Left or Down moves it back to 5. Preset sliders now change the setting by one, within their allowed range.

  • Sliders that commit changes on release now commit the final value when you release an arrow key, once after a held key finishes repeating.

v9.30

The freezes are gone.

  • Autosave no longer re-encodes your whole undo history after every edit. The fifth paste into a big photo went from a 4.1 second freeze to 0.6 seconds, and the editor no longer slows down the longer you work.

  • Autosave re-encodes only the layers whose pixels changed. With five big screenshots stacked, a save went from 909 ms to 284 ms.

  • Dragging a layer's opacity on big screenshots draws once per burst instead of once per tick. The screen catches up about 1 second after you let go, down from 9.

  • A shape stays on screen when you press Apply, Cancel or Duplicate, instead of vanishing until the engine catches up.

  • The Diagnostics window is gone. Feature flags and current image info moved to Settings, and telemetry prints to the browser console.

v9.29

Paste stays out of your way, and undo takes back one thing at a time.

  • Pasting an image asks one question: stack it as a layer, or make a new gallery image. The pasted box sits under the Tools, Gallery and Review panels, and pushing it into a panel closes that panel.

  • A Resize & Compress bar under a pasted image shows its pixel size and shrinks a huge screenshot before you place it.

  • One Ctrl+Z undoes one thing you did. A rounded rectangle or a star no longer needs several presses, and the first one isn't a dud.

  • Presets are recorded in the op log, so undo after a preset steps back exactly, even after a reload, instead of falling back to whole-image snapshots.

  • Picking an object from Review's list while Perspective, Skew or Distort is open points the tool at that object, instead of opening the Shapes editor.

  • Switching photos keeps your unsaved edits and waits until the next photo is ready.

  • A cloud backup, AI upload or share that times out is cancelled, so it no longer leaves a file behind in storage.

  • The import preview, the EXIF readout and the menu bar on a narrow window hold their place while they load.

  • Screen readers pick up 15 things they missed before, including the histogram and placement-grid choices and whether Move and the menu-bar tabs are on.

  • Seven dependency updates, including three.js 0.186 on this site.

v9.28

Things that load now hold their place instead of popping in.

  • The sign-in button and Settings › AI Usage keep their space while you sign in. Signed-in users no longer see "Sign in" first.

  • Plan & Billing shows the shape of your plan while it loads, instead of a spinner.

  • Compare shows the original only once it's ready, and says "Original unavailable" if it can't load.

  • On a phone, a photo you open shows a gray box its own shape until it arrives. A missing photo says so instead of spinning forever.

v9.27

The gallery loads steadily, Settings works from the keyboard, and a pen stroke selects on its ink.

  • Settings has named tabs you can move through with Up, Down, Home and End. Its help text is readable in both themes. If a section disappears while Settings is open, its pane and keyboard entry point return to General.

  • Gallery rows scroll without overlapping. Hover one photo and only its controls appear. The count shows your loaded photos and the 12-photo demo limit.

  • Welcome Back, Shared and Batch wait for previews to decode, keep the last good picture during an update, and show when an image fails. A shared image can be retried.

  • Enter and Space work on a gallery photo's Remove and Select buttons. Remove asks before deleting; Select keeps the photo you're editing open.

  • A freehand pen stroke selects where the ink is. Clicking empty space inside its bounds no longer picks it up.

  • Every browser test that can run in CI now runs on each pull request, split across two jobs.