Caxton
Features Benchmarks Pricing Docs Changelog Support Download

Changelog

Every Caxton release, newest first. Updates install automatically through the app (Caxton ▸ Check for Updates…), signed and notarized.

1.1.1 latest July 27, 2026

A Table Mode and editor-feel batch: one advanced filter that follows your mode, numbered columns for headerless files, whole-column operations, a caret you can find, and windows that open ready to work.

Table Mode

  • One Advanced Filter, everywhere. The filter bar’s expand button and the menus now open a single advanced filter that matches your mode: in the text view, multi-condition line filtering as before; in the grid, row filtering where each condition targets the whole line, any column, or one specific column, with Contains/Equals, match case, ≠ exclude, and and/or chaining (AND binds tighter than OR). Whole-line conditions test the raw record — a query containing a comma can match across fields, which per-column filtering can’t. The panel keeps your conditions between opens so a filter can be tweaked and re-run.
  • Numbered columns without a header row. With First Row Is Header off, the grid now shows a frozen numbered band (1, 2, 3… — EmEditor-style): click it to select a column, drag to select several, resize and sort on it exactly like a real header. Dialogs use the same numbers, so “column 3” means the same thing everywhere.
  • Whole-column selection enables column operations. Clicking a column header no longer greys out the CSV menu: Insert/Delete/Move/Split/Combine Column, Extract Column, and Count Frequent all work from a column selection, and the sort and filter dialogs preselect that column. Row operations still ask for a cell — a column has no anchor row.

Editor feel

  • The caret blinks. Standard cadence, solid the instant you type or move, steady when a pane isn’t focused — and much easier to find in a wall of text.
  • Option+Shift+Click places cursors on every line between. Click one spot, Option+Shift+Click another: the column selection sweeps the whole span — the click version of the Option+Drag you already have.
  • Line numbers are readable in Dark. Near-white, matching the status bar — no more squinting at slate-on-slate.
  • Tabs show the whole filename. No more mid-name cutoff; tabs only compress when the strip truly runs out of room.
  • Documents open filling the screen (the regular kind of full — menu bar and Dock stay). The welcome window keeps its compact size.

1.1.0 July 26, 2026

Word wrap, finally — plus a full text toolbox: structural selection, line surgery, case and whitespace tools, numeric editing, escapes and hashes, and honest statistics. Four feature waves, each gate-checked against the release before it.

Word wrap

  • Soft wrap is here. View ▸ Word Wrap (⌥⌘W) wraps at the window edge or a fixed column (80/100/120, with a guide line), with ↪ continuation markers in the gutter, visual indent on wrapped rows, and full syntax color, selection, marker, and input-method overlays under wrap.
  • Built for big files. Wrap stays responsive on multi-gigabyte documents; a pathologically long line (hundreds of KB without a break) opts out with an ↔ marker instead of stalling the window.
  • Arrows, Home/End, clicks, and the caret think in visual rows when wrap is on — including under filters and in split view, where each pane wraps to its own width.
  • Large grid fills got faster along the way — building wrap surfaced a shipped double-refresh in the CSV grid, now removed.

Selection & navigation

  • Expand / Contract Selection (⌃⇧⌘→ / ⌃⇧⌘←) grows the selection structurally — word, dotted token, quoted string, brackets, line, paragraph — and steps back exactly.
  • Word-wise everything: ⌥←/→ moves by word, ⌥-deletes remove a word at a time, and ⌘-deletes clear to the ends of the visual row — all multi-cursor aware.
  • Empty files show their caret. A 0-byte document now has a line 1 like every other file.

Lines & paragraphs

  • Text ▸ Lines: duplicate (⇧⌘D), delete (⇧⌘K), copy, move up/down (⌥⌘↑↓), join (⌃J), split at a delimiter, shuffle, remove empty, keep only duplicates, indent/outdent (⌘] / ⌘[), number lines, add prefix/suffix. Duplicates and moves are byte-exact — even on lines containing invalid UTF-8.
  • Text ▸ Paragraphs: hard wrap to a column, reflow paragraphs, unwrap paragraphs — quote and comment prefixes are kept on every wrapped line, and a list dash isn’t multiplied into new bullets.

Case, whitespace & numbers

  • Case: Sentence case, Toggle case, and identifier conversions — camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, dot.case, space case.
  • Whitespace: trims, collapse repeated spaces, convert non-breaking spaces, tabs ↔ spaces, normalize indentation, detect mixed indentation — plus a configurable tab width (2/3/4/8) the editor actually renders with.
  • Show Invisibles (View menu): faint marks for spaces, tabs, and line ends, with non-breaking and zero-width characters highlighted — the classic invisible-diff culprits from PDFs and web copy-paste.
  • Numbers: increment/decrement every number in a selection, arithmetic on all of them, zero-padding, base conversion (2/8/10/16), and a sum / count / average readout. Padded columns keep their shape — 007 + 1 is 008.

Escapes, hashes & dates

  • Escapes: HTML entities, XML, JSON strings (full surrogate handling — malformed input is refused, never mangled), hex, \uXXXX Unicode escapes, ROT13, and Unicode normalization (NFC/NFD/NFKC/NFKD).
  • Hash a selection — SHA-256, SHA-512, SHA-1, MD5 — shown in a panel with a Copy button, never replacing your text.
  • Insert Date/Time: six stable formats (ISO 8601 local and UTC, epoch seconds, and friends) that never depend on the display locale — inserted at every cursor.

Statistics & fixes

  • Text ▸ Statistics: bytes, characters, Unicode scalars, words, lines, paragraphs, sentences, blank and unique lines, longest and average line, reading time, and an indentation report — for the document or the selection.
  • Word Count now counts CRLF files correctly. Windows-style documents reported one line no matter their size.
  • A bulk edit that grows the file no longer truncates line tracking. A growing Replace All or a large multi-cursor edit could leave line numbers and navigation stuck at the old file size until the next save.
  • Text transforms refused during a save say so — instead of reporting “applied” for an edit that never landed.

1.0.7 July 25, 2026

A trust release: what Caxton tells you is now always what actually happened. Dozens of small fixes across saving, search, the CSV grid, and the menus — found by a line-by-line audit, each one gate-checked against the last release.

Saving & recovery

  • Quit waits for an in-flight save. “Quit Anyway” answers the unsaved-changes question — it no longer aborts a save that’s still streaming to disk.
  • Anything refused during a save says so. Sorts, delimiter conversions, row and line deletes, cell edits, and multi-cursor typing that land while a save is writing now show “unavailable while saving” instead of reporting success that didn’t happen.
  • Crash-recovery data is safer. It moved out of the purgeable system cache into Application Support, survives a failed restore instead of being deleted with it, and is kept when a file’s volume is simply unplugged.
  • Cell edits during a long save queue up — tabbing across several cells no longer keeps only the last one.

Fresh data, honest dialogs

  • Sort, dedupe, row filters, and bookmark/pattern line deletes re-check the file after their dialogs. If the document changed underneath (a growing log, an external reload), the operation asks you to run it again instead of applying stale coordinates.
  • The CSV grid stops painting stale rows while it rebuilds after bulk operations — and if a reloaded file no longer parses as CSV, Caxton returns to the text view honestly instead of keeping the old grid on screen.
  • Structure problems now block single-cell edits too — the same rule every bulk operation already followed.

Search & filter

  • Wrap Around now means it — with the toggle off, Next stops at the last match instead of looping.
  • A reopened find bar searches again. Closing the bar with ✕ and reopening left Return doing nothing.
  • Regex (?i) patterns find everything under Match Case — a fast-path filter was silently dropping matches.
  • Searches started during indexing finish the job — they re-run automatically when indexing completes, same as filters since 1.0.6.
  • Replace with $1 captures never inserts the literal template — a site that can’t be re-verified is skipped, with an honest count.
  • Entire-file filter scans report failures instead of presenting an empty result as “no matches,” cancelling one from the Jobs panel no longer freezes the filter bar, and closing a window stops its background scan.

Editing & menus

  • Edit ▸ Delete and File ▸ Revert to Saved work now. (Revert deliberately has no shortcut — ⌘R belongs to CSV Fill Right.)
  • Menus enable truthfully — no more clickable Undo with nothing to undo, or Paste on a read-only file.
  • Home, End, ⌘↑ and ⌘↓ clear extra cursors like the arrow keys always did.
  • Filtered-out lines can’t be edited blind — a cursor stranded inside hidden lines refuses to type into content you can’t see.
  • Chinese and Japanese input compose correctly — the candidate highlight landed on the wrong characters for all non-ASCII composition.
  • Markers on very long lines no longer tank the frame rate, and the diagnostics overlay is off by default (View ▸ Diagnostics Overlay brings it back).

Files

  • Empty files open. A freshly-created 0-byte file no longer shows “Could not open — file is empty.”
  • Format XML preserves your data> inside attribute values, comments, and CDATA no longer splits the document.
  • External truncation mid-operation can’t spin or crash — indexing stops cleanly and sorting tolerates the shorter file.

1.0.6 July 24, 2026

Crash recovery and external-change handling, hardened end to end — plus safer giant edits and exact indexing in two rare corners.

Crash recovery

  • Recovered edits survive every path. Choosing Restore used to delete the recovery data immediately — if the open was then cancelled, failed, or landed read-only, the edits were gone for good. Recovery data now survives until your restored work is safely re-protected, cancelling says “Recovery postponed,” and relaunching by double-clicking the crashed file in Finder no longer skips the restore.

Files changed outside Caxton

  • Safe-saves from other apps are recognized as changes, not deletions. Most editors (and tools like rsync) save by writing a new file over the old one — Caxton misread that as “file was deleted” and stopped watching. It now reloads (or asks, if you have unsaved edits) and keeps watching the new file.
  • “Keep Mine” now really means it. After keeping your version over an external change, Save used to fail forever with “the file changed on disk.” Keeping your version now authorizes exactly that overwrite — the next Save writes your version, once.
  • Moved or renamed files are reported honestly — a clear banner instead of silence, with your content intact and Save re-creating the file at its original path.

Editing

  • Very large edits warn before becoming non-undoable. Deleting or typing over a selection past the undo memory cap now asks first — same as large pastes always have — instead of silently losing undo (and briefly doubling memory) after the fact.
  • Sorting or deduplicating very large CSVs streams to a new document instead of holding the whole reordered file in memory — same policy the other big-file transforms already follow, original untouched.
  • Filters started while a file is still indexing now finish the job — the filter re-runs automatically when indexing completes, so matches always cover the whole file.
  • Line-index exactness in two corners: typing at the very end of a file after a final newline now registers the new last line, and edits made while a huge file is still being indexed can no longer skew the line offsets that indexing produces.

1.0.5 July 23, 2026

A reliability release: a batch of CSV grid correctness fixes, safer find & replace, and tougher handling of non-UTF-8 files.

CSV grid

  • Excel/Windows CSV exports with a quoted last column could open in a degraded state — every row flagged malformed, CSV editing disabled. The parser now reads the CRLF line ending correctly after a closing quote.
  • Fill and copy no longer use the display version of a cell. Values over 1,000 characters or containing embedded newlines were written back truncated (with a trailing …) or with ↵ standing in for the newline. Both now read the exact stored value.
  • Grid stability: cell edits committed while a save or a background parse was still running could knock the grid’s row map out of sync (the same family as 1.0.3’s undo fix) — they now apply the moment it’s safe. Undo during a save says so instead of guessing. Keyboard focus can no longer land on the hidden raw-text view after a dialog or app switch. Fixed a crash when find navigation landed on a field beyond the displayed columns of a ragged row.
  • ⇧⌘C now toggles Grid View, as the docs always said — a leftover Show Colors menu item was swallowing the shortcut.

Find & Replace

  • Replace All always acts on the current query. Clicked in the moment between typing a new query and its search finishing, it could operate on the previous query’s results. It now searches first and replaces exactly what you asked for.
  • Results reset when the file reloads. After an external change or log rotation, old results could linger with outdated positions — and Replace could edit the wrong bytes. Results now clear and the search re-runs automatically.
  • Byte-exact matches on lines with invalid UTF-8. Matches after an invalid byte reported skewed positions; replacing at those positions could corrupt surrounding bytes.

Non-UTF-8 files

  • A disk read error is no longer mistaken for the end of the file. Opening could silently show a truncated document; saving could write a truncated copy over the original. Both now stop with an error instead.
  • Mis-detected files are no longer unopenable. Encoding detection samples the first 256 KB; a wrong guess used to dead-end with an error. Caxton now offers to open the file as Windows-1252 so you can switch encodings once it’s open.
  • Follow tail is disabled for converted (non-UTF-8) documents instead of appending garbled bytes to the view.

New

  • Caxton ▸ Automatically Check for Updates — a menu toggle for Sparkle’s automatic update checks, as described in the privacy policy.

1.0.4 July 21, 2026

Two important correctness fixes — one in the fast save path, one in how large UTF-16 files are opened. Recommended for everyone.

Fixed

  • Save could skip the changes made by a bulk operation. When everything unsaved came from bulk edits — Replace All, CSV grid operations, multi-cursor typing — the quick in-place save could report success without actually writing those changes to the file. Bulk edits now save byte-for-byte, verified against the file on disk before and after writing. (Same-length Replace All also now gets the fast save path it was always meant to have.)
  • Large UTF-16 files could turn to garbage partway through. If an emoji or other 4-byte character sat exactly astride an internal 4 MB read boundary, every character after it decoded wrong. The converter now keeps UTF-16 code units aligned across boundaries, and an incomplete character at the very end of a file shows as a replacement character instead of silently disappearing.

1.0.3 July 17, 2026

Fill and Fill Series in the CSV grid, rebuilt from the ground up — plus a fix for an undo bug that could make grid data appear shifted into the wrong columns.

Fill, done right

  • Fill Series dialog (right-click ▸ Fill Series…) — linear and growth series, dates and times (days, weekdays, weeks, months, quarters, years, hours, minutes, seconds), text-plus-number patterns like Item01, weekday and month name lists, or repeat the selection as-is. Terminate by selection, count, or stop value; optionally fill only empty cells. A live preview shows exactly what will be written before you commit.
  • The fill handle now drags in all four directions, with a live summary of what it will do (“Fill 1,234 cells · Linear series, step 5”). Hold ⌥ to copy instead of extending a series, and use the options chip afterwards to switch between Auto, Copy, and Repeat.
  • Fill Down ⌘D, Fill Up, Fill Right ⌘R, Fill Left in the CSV menu and the right-click menu — straight copies of the selection edge, Excel-style.
  • Smarter, safer AutoFill. Dates continue by their real calendar rules (Jan 31 → Feb 28 → Mar 31; Feb 29 returns in the next leap year), Item007 counts up without losing its padding, 1.50, 2.00 keeps two decimals, and decimal math is exact — never 0.30000000000000004. A single number copies instead of incrementing, and irregular values repeat as a pattern instead of inventing a trend.
  • Very large fills report how many cells they will replace before running; every fill is one undo step.

Fixed

  • Undo in the grid could show data shifted into the wrong columns after a find-bar replace or a quick series of edits. The file’s bytes were never corrupted — the grid’s map of row boundaries could go stale and freeze that way. The grid now re-checks its map before every undo, redo, and cell commit.

1.0.2 July 16, 2026

A maintenance release that fixes automatic updates and removes a needless restriction on which files Caxton can recover.

Fixed

  • Automatic updates now install correctly. Earlier builds could detect an update but failed at the last step with “An error occurred while launching the installer.” Caxton now updates itself cleanly through Caxton ▸ Check for Updates….
  • Crash recovery works for files anywhere on your Mac, including network drives and external volumes, not just files inside the app’s former sandbox container.

Caxton remains signed and notarized by Apple, with Hardened Runtime enabled. This is a one-time manual update: download Caxton 1.0.2 and drag it over the copy in your Applications folder. Future updates install automatically.

1.0.1 July 16, 2026

A quality pass focused on the CSV grid and a network-drive save fix, plus a few desktop-app niceties.

Fixed

  • Saving to a network drive no longer fails with a false “not enough disk space.” The pre-save space check misread free space on SMB/NFS/AFP shares; it now proceeds and reports a real error only if the volume is genuinely full.
  • The CSV grid refreshes after Replace All (and other bulk edits) instead of showing stale cells until you switched views.
  • Large delete-lines operations now tell you honestly whether they can be undone on your Mac, matching Replace All.

CSV grid — spreadsheet editing

  • Select ranges — drag across cells, or Shift-click to extend a selection of cells, rows, or columns.
  • Resize columns by dragging the header border; double-click the border to auto-fit to content.
  • Fill — drag the fill handle to copy a value or extend a number series; double-click it to fill down; right-click for Fill Down / Fill Series.
  • Paste blocks from Excel or Sheets straight into the grid (no need to open a cell first); paste a single value to fill a selection.
  • Delete — a selected row or column is removed; selected cells are cleared. All one undo step.
  • Rename a column by double-clicking its header, and reorder rows or columns by dragging them.

Desktop app

  • Closing the last window now returns to the launcher instead of forcing a blank new document.
  • Wider default window, sized to your screen.
  • The About panel shows version and build details.
  • Now runs on macOS 13 (Ventura) and later, on both Apple Silicon and Intel.
  • Shift-clicking a line number in the text editor extends the selection to every line in between.

1.0.0 July 15, 2026

Initial release — a native macOS editor built for files that break other editors: memory-mapped, fully indexed, 10 GB logs and CSVs open in seconds.

  • Find, filter, and Replace All at multi-gigabyte scale.
  • CSV workbench: sort, dedupe, frequency, column operations.
  • Live tail with follow, bookmarks, color markers, multi-cursor, split view.
  • Crash recovery and power-loss-durable saves.
  • 14-day trial; licensed via caxton.app.

Looking for a specific build? Download 1.0.3 · SHA-256 is published with every release on the download section.