[← README](../README.md) · [Docs index](README.md) # Changelog Every version, newest first. Downloads are on the [releases page](https://github.com/mwo-dk/coxswain/releases). The README shows the last ten. ## Unreleased What has been merged since the last release waits in [`changelog.d/`](https://github.com/mwo-dk/coxswain/tree/master/changelog.d), one file per change; the next release gathers them into its own row under *Versions*. Nothing yet. ## Versions | Version | Date | What's new | |---|---|---| | **2.34.2** | 2026-10-26 | **The Windows terminal app starts on a PC without the Visual C++ Redistributable.** Before, the zip's (and WinGet's) `coxswain.exe` stopped at once, asking for `vcruntime140.dll`. Also on Windows: `coxswain --meaning` or `--disk` piped into another program no longer keeps it waiting ten minutes for the search helper, paths show as `C:\…` instead of `\\?\C:\…` in both apps, and the desktop app's sidebar shows each drive's letter and label (*C: Windows*) instead of calling every one *System*. [Sidebar](organise/sidebar.md#what-you-see) **A branch switch no longer lets a downloaded repository run a program through git-lfs.** Where you have git-lfs set up, Switch to branch and New branch from a listed branch are refused, with the key named, when the repository's own config names a git-lfs transfer agent or extension, an ssh or askpass program, a credential helper that is a command, a proxy or certificate setting, or its `.lfsconfig` names an LFS server that is not https. [Git branches](panels/git-branches.md#why-is-a-switch-refused-because-of-git-lfs) **A branch switch no longer runs a hook a downloaded repository sets in its config, or writes outside its folder.** Switch to branch and New branch are refused, with the reason, when the repository's own config sets a hook (`hook..command`, which newer git runs even with hooks turned off) or puts its work tree somewhere else (`core.worktree`). [Git branches](panels/git-branches.md#why-is-a-switch-refused-because-of-a-hook) **Updating Coxswain from its Nix flake compiles only its own crates.** The crates it depends on are built apart, in a store path of their own, so an update that keeps `Cargo.lock`, the `Cargo.toml` files and `flake.lock` as they were takes them from your store instead of compiling them again. [Nix](systems/nix.md#why-does-nix-run-githubmwo-dkcoxswain-take-so-long-the-first-time) **Building Coxswain with Nix takes less time.** The tests that run in the build are compiled without optimising, in a third of the time; the programs are still built in release. [Nix](systems/nix.md#what-the-packages-hold) | | **2.34.1** | 2026-10-26 | **What a crashed or killed run leaves in the cache goes at the next start, and Disk use shows all of it.** Work folders of conversions, searchable PDFs, virus scans, transcripts and copies between archives now sit in the cache's `scratch/` instead of the system's temporary folder, and with `media/`, `ocr/`, `export/` and the others they are removed at the next start of either app or the search helper when their run ended. Find-and-replace undo copies of runs that ended go too. A running app's folders are never taken by another app's sweep, however old. ChessBase archives unpacked by the search helper are removed when its run ends. The chess analysis cache keeps the newest 1000. Stray archive-index files no longer pile up, and helper.log stays under 1 MB while a helper runs. Disk use gets the rows *scratch/* and *chess/*. [Disk use](reference/disk-use.md#the-rows) · [Where things are kept](reference/where-things-are-kept.md#every-file-and-folder) **Find and replace in the terminal app no longer closes the app when nothing matches.** A preview that finds nothing says so, as in the desktop app. [Find and replace](files/find-and-replace.md#in-the-terminal-app) **F1 → Features says how to read a whole version.** Under *Notices and what's new*, F1 now says that Enter on a version in Settings → Overview → What's new shows all it brought in the viewer (terminal app). [Notices and what's new](panels/notices.md#how-do-i-see-what-an-upgrade-brought) | | **2.34.0** | 2026-10-26 | **Large EPUB books and web pages are read with a fraction of the memory, and long ones are found by what their last chapters say.** A web page and each chapter of a book are read as they come, never whole: a 60 MB chapter or page takes 11 to 12 MB to read instead of 65 to 68 MB, and a page saved with a 30 MB picture inside it 8 MB instead of 34 MB. The text found is the same (checked on 3,000 real pages). A book or page with about 3 MB of text or more gets its passages for search by meaning from all of it, read for at most 20 seconds (the time the model takes not counted): only those `.epub`, `.html`, `.htm` and `.xhtml` files get their vectors made again, once; nothing is read again for search by words. The EPUB preview shows the first megabyte of a long chapter, and **F3** in the terminal app shows an `.epub` as its text. [Documents it reads](search/documents.md#is-a-large-epub-or-web-page-read-whole) **ChessBase games come with their annotations, ChessBase archives open, and comments draw on the board.** A `.cbh` database's texts, symbols, evaluations and times show with the moves, and its coloured squares and arrows on the board, as do `[%csl]` and `[%cal]` in any PGN comment, in both apps. A `.cbv` archive opens as the database it holds. Chess960 games are read, a set-up position gets the castling rights its moves use, and databases past 4 GB find their games through `.cbj`. The search store reads each `.cbv` file once, for the first time; nothing else is read again (Chess960 games of a `.cbh` file it already has come in when that file changes). [ChessBase databases](previews/chess.md#chessbase-databases) **Choose and tune the chess engine in Settings.** *Settings → Previews → Chess engines* lists Stockfish, Leela Chess Zero, Berserk, Ethereal and other UCI engines, each found or with its install line; *Test engine* shows the engine's own options (threads, hash, Elo, Skill Level, Leela's network file) to set per engine, checked before they are sent; the engine can stop by depth or positions searched instead of time. [The engine's own options](previews/chess-play.md#the-engines-own-options) **Step through the chess engine's lines without playing them.** The engine's lines are numbered: **1** to **5** (or a click on one of its moves in the desktop app) show a line on the board, **→** **←** step through it like a variation, **Esc** goes back to the game and **Enter** plays it up to the move shown. The engine stays on the game's position meanwhile. A click on a line's first move now shows it instead of playing it; **b** still plays the best move. Both apps. In the desktop app a button clicked in a chess, Go, draughts, shogi, xiangqi or bridge view (*Engine*, *Analyse game*, a move) no longer keeps the keys: **←** **→** **↑** **↓** step the game again at once. [Stepping through an engine line](previews/chess-play.md#stepping-through-an-engine-line) **DuckDB files are shown with a container too, and a kind with no image no longer offers one.** DuckDB publishes no image, so Coxswain now has its own, `ghcr.io/mwo-dk/coxswain-duckdb` (DuckDB 2.0.0's released command line, about 25 MB to download): with no `duckdb` installed, **Pull** on the *DuckDB databases* row of Settings → Previews → Preview tools, or **Read tables** in the preview, shows a `.duckdb` file's tables. A kind whose image is set to none (GhostXPS's, or one you emptied) greys out *Container*, says *Used now: nothing: install …* instead of asking you to pull an image that does not exist, and has **Open config.toml** (terminal app: **O**) to name one; a *Container* choice made before uses the installed program and says so, and *Preview with…* leaves *Container* out. [Data](previews/data.md#why-does-a-duckdb-file-need-a-program-when-sqlite-does-not) **SCID 5 databases open like SCID 4 ones.** A `.si5` file (with its `.sg5` and `.sn5`) shows its games in the table and on the board in both apps, with Find and Find this position; a game SCID marked deleted is left out (Find this position too, which opens the game of the row it names), and each game has its event date. The search store reads each `.si5` file once, for the first time (a build of `master` from before this fix reads them once again). [SCID databases](previews/chess.md#scid-databases) **`.xlsb` workbooks are found by all their cells, old `.xls` and `.xlsb` are read with a fraction of the memory, and long ones are found by what their last sheets say.** The cells after the first of a row, which Excel writes in a short form in an `.xlsb`, were left out; they are read now, so **every `.xlsb` is read again, once**, and gets its vectors again. An `.xls` is read record by record from the file, a sheet where it lies, and an `.xlsb` as it is unpacked: a 75 MB `.xls` takes 29 MB to read instead of 162 MB, an `.xlsb` with a 60 MB sheet 28 MB instead of 88 MB. An `.xls` with about 3 MB of text or more gets its passages for search by meaning from the whole workbook: those get their vectors made again, once; no other `.xls` is read again. The desktop app previews `.xlsb` as tables too, and **F3** in the terminal app shows a workbook (`.xlsx`, `.xlsm`, `.xlsb`, `.xls`, `.ods`) as its sheets' text. [Documents it reads](search/documents.md#are-old-xls-and-binary-xlsb-workbooks-read) **A 7z split into parts opens like a folder, and large 7z archives open at all.** **Enter** on `games.7z.001` shows the whole archive, its `.002`, `.003` … parts read as one, read-only, in both apps; inside a zip too, its parts copied together into the cache. The later parts say in their facts which part they are and where the archive opens from. A 7z with up to about 900,000 files opens (before: about 250,000), and a file taken out of a 7z made of many blocks is unpacked from its own block: a game from a 7z of 400,000 Go games shows in 0.3 s instead of 5 s. In the terminal app, **F3** and **Alt+K** on a Go or chess file inside an archive open its games on the board, as on disk. Nothing is read again. [Archives as folders](files/archives.md#limits) **Subversion and CVS commits open like folders.** **Enter** on a commit in a Subversion or CVS history shows its files as they were, **F3** views one, the desktop app's **Diff** shows what it changed, and **F5** copies a file or folder out, read-only, from the server you said yes to; the question now says so. [Subversion](panels/subversion.md#inside-a-revision) · [CVS](panels/cvs.md#inside-a-commit) **Xiangqi games from Chinese websites open on the board.** DhtmlXQ games, the format of the xiangqi sites and of community collections exported from them (one game a file, often with no ending, or `.che`), show in the table of games and on the xiangqi board with their variations and comments, in both apps, inside a zip too: rest the cursor on one with the preview pane open, or press **F3** in the terminal app. All but 13 of the 191,234 games in one such collection play to their end. In the terminal app **F3** on any games file inside an archive now opens it on its board. [Xiangqi games](previews/xiangqi.md#dhtmlxq-games) **On Windows, a renamed or moved file inside an archive no longer seems to vanish.** A tar or a tar.gz written anew within a few milliseconds of the last change, at the same size, could keep its old date, and the app then showed the list of contents it had kept from before: a file moved into a folder showed an empty folder. The new archive is now always dated after the old one. [Archives](files/archives.md#what-changes-and-how-safely) **A ChessBase archive cannot fill the memory or the disk.** A `.cbv` file that claims far more than it holds, more than 16 GB or more than the disk has free is refused at once; the rest are unpacked a piece at a time, closing the preview stops it, and its bar moves as it goes. [ChessBase databases](previews/chess.md#chessbase-databases) **A game's variations stay in view, and Esc gives the arrow keys back.** The move you are on keeps its variations and the other moves from its position in view in both apps, not only in a big window; in the desktop app's preview pane only the moves scroll, the board stays, and Esc on the table of games hands the keys back to the panels (the arrows seemed dead before). [Chess games](previews/chess.md#why-do-i-see-the-variations-at-a-move-on-one-computer-and-not-on-another) **Chess engine lines, DhtmlXQ names and engine options behave as you expect.** A line number the engine has no line for says *The engine has only 1 line here*, and the heading names the keys there are (*1–3 step through a line*). A DhtmlXQ xiangqi game whose name has a dot in it (`001-1.古谱的启示`) opens as a game in both apps. In the terminal app's Settings, **Enter** on a text or number opens it with the value selected, so typing replaces it; a refused value no longer stays in the desktop app's field; **Delete** on an engine's last option leaves no empty table in config.toml; the *Opening or ECO* filter is no longer cut in a narrow preview. [Stepping through an engine line](previews/chess-play.md#stepping-through-an-engine-line) **The preview cache keeps itself in bounds, and a crash leaves no half copies in your folders.** Previews not shown for 30 days go by themselves, at each start and every six hours, and past 4 GB the ones shown longest ago go first. **Made again:** the first start after the update removes every preview not shown for 30 days, and each is made again when its file is next shown. A preview build cut short or failed is made again, never shown half made. The passing copy a copy or a save writes beside its target is removed at the next start when the app was killed or crashed half way, and a save no longer fails on such a left-over. [Previews made by tools](previews/tools.md#how-much-room-do-previews-take-and-can-i-free-it) · [Copy](files/copy.md#the-app-crashed-during-a-copy-is-a-half-copy-left-in-the-target) **CVS history: a file, a diff or a copy out of a commit no longer fails now and then.** CVS closes its output a moment before it ends (it still cleans up, its read locks among it); Coxswain stopped it at that moment, so the run read as "failed" and could leave its lock files behind. It now lets CVS finish by itself, within the same 30 seconds. **The built-in models' speed estimate is never 0 or endless.** The processor test that says whether a built-in model is *slow here* could measure nothing on a busy or coarse-clocked machine; a speed of 0 was then kept for good. It now always measures, and a kept 0 is measured again. [CVS working copies](panels/cvs.md#inside-a-commit), [Set up smart search](search/setup.md#the-steps) **A replace started at the same moment in a second Coxswain keeps its undo copies.** When one run cleared the kept copies of runs that had ended, it could take the folder another run was making that very moment, before that run had locked it, and with it that replace's undo; and a folder emptied halfway could be left behind for ten minutes. A run's folder is now cleared only once its lock is old and no one holds it. [Find and replace](files/find-and-replace.md#undo) **A long file kept whole (*Everything*) that cannot be read to its end keeps the vectors it had.** Before, a file whose reading stopped part way was taken as done with the passages of only its first part, and the vectors it had before were gone; now it keeps them and is not tried again until it changes (one on a disk unplugged at the next scan). A file that changes or goes while it is read gets nothing of what was read. [Long files](search/long-files.md#what-each-keeps) **The terminal app's Settings shows each row's explanation whole.** The box at the bottom grows to the lines it needs, at 80×24 and in every language, and the rows above scroll; it used to cut long explanations after two lines. [Settings](customise/settings.md#in-the-terminal-app) **Settings → Looks in the terminal app names the app each row is for.** *Language* and *Icons and git glyphs* come first; *Theme of the terminal app* stands under the heading *Terminal app*, and the desktop app's theme, fonts, text size and row height under *Desktop app*, so nothing under *Language* reads as part of it. The desktop app sets the themes off from the languages by a line. [Settings](customise/settings.md#what-each-area-holds) **The hint under *Theme of the terminal app* says when the new theme shows.** Chosen in the terminal app's own Settings it shows at once; chosen in the desktop app or in config.toml, a terminal app already running takes it when it starts again. It used to say only the second, in every language. [Settings](customise/settings.md#looks) **Game files read by one tokeniser.** PGN, PDN, xiangqi and PBN moves are cut apart by one shared reader: Find this position opens the game it names after a comment left open or a lone `Event` tag (files read before keep their positions until they change), a note glued to a move (`d5$14`) no longer hides the opening's name, and a bridge comment over several lines is kept whole. [Chess games](previews/chess.md#finding-games) **A Go collection of 100,000 games scrolls smoothly in the desktop app.** The list draws only the rows in view and fetches the next ones as you scroll, as the chess table does, no longer every row it has read; the keys, the cursor and opening a game work as before. [Go](previews/go.md#the-list-of-games) **The search store's details count a long file with the vectors of a part among the files with vectors, and show the store's own errors in your language.** *Took too long*, *could not be read to its end* and *read only in part* are translated; the number of files with vectors now adds up with the passages. [Data files](previews/data.md#coxswains-own-index-and-store) **A long Word or OpenDocument text, book or web page kept whole that needs more than 20 seconds to read is found by meaning by the part read, rather than not at all.** Out of time with no vectors yet, it gets the vectors of the part read, is read once more the next day, and then keeps the larger part until it changes; one that had the vectors of all of it keeps them. Only files that run out of time are read again, once, a day later. [Long files](search/long-files.md#what-each-keeps) **Long PDFs are read a page at a time.** Each page is made ready just before it is read, so a long manual gives search its first page within half a second and several times more pages in the same three seconds; a long PDF with text is no longer taken for a scan and read by OCR for a minute; the preview's scan check answers in a moment. PDFs already read keep their text until they change: nothing is read again. [Documents it reads](search/documents.md#why-does-a-long-pdf-miss-words-near-its-end) **A long version under What's new is no longer cut off in the terminal app.** Settings → Overview shows as much of what a version brought as fits, ending in "…", and Enter shows all of it in the built-in viewer. [Notices and what's new](panels/notices.md#why-does-a-version-end-in--in-the-terminal-app) **A SCID names file that claims millions upon millions of names is refused.** A `.sn4` or `.sn5` file holding more than 16 million names in all no longer makes the table or the search helper ask for a gigabyte or more of memory; the database is not opened, as with any other damaged file. [SCID databases](previews/chess.md#scid-databases) **A 7z split into parts with a part missing says which part.** Instead of *unexpected end of file*, it says *games.7z.002 is missing*. In the terminal app, **Alt+Enter** on a later part inside an archive says on the status line which part it is. A 7z opens with a list of contents of up to 64 MB (about 900,000 files), so it takes at most about 600 MB of memory to list. [Archives as folders](files/archives.md#limits) **Long books and web pages kept whole get every passage with a slow model, and hostile workbooks and books are read in bounded time.** A book or web page read for search by meaning stops after 20 seconds of reading, not counting the time the model takes; one that runs out keeps the vectors it had. A file kept whole whose reader gives up is not read again every ten minutes but when it changes, and a file that changes or goes while it is read gets nothing of what was read. An `.xls` with crafted small sectors no longer takes minutes to read, and a book of many large chapters is no longer unpacked twice over for each. [Long files](search/long-files.md#what-each-keeps) **A file out of a large .tar.bz2 comes out at once.** The first time a `.tar.bz2` is opened, Coxswain keeps where a bzip2 block starts, one every 4 MB (about 11 KB for a 1.3 GB tar); a file taken out later is unpacked from the block before it, not from the start (the last file of a 1.3 GB `.tar.bz2`: 0.05 s instead of 19 s), from `bzip2` and `pbzip2` alike. A `.tar.bz2` opened before is listed as it was until it changes; nothing is read again. [Archives as folders](files/archives.md#limits) **A long message is shown whole, chess databases' side files stay out of Find, and the terminal app's Settings cuts no label.** **Enter** or **F3** on a 7z split into parts with one missing says which part on the status line, whole; in the terminal app a long status message takes up to four rows instead of being cut. The files beside a SCID or ChessBase database (`.sn5`, `.sg4`, `.cbg`, `.cbp`, `.cbt` and the like) are no longer read as text, so their scraps of names are no separate Find hits: what was read of them goes from the search store at once, and only files with those endings are passed over once more (a `.cbt` comic is read again, once). Settings in the terminal app wraps a long label onto the next line rather than cutting it, at 80×24 in every language, and ClamAV's explanation ends without a stray `·`. [Archives as folders](files/archives.md#limits) · [Finding games](previews/chess.md#finding-games) · [Settings in the terminal app](customise/settings.md#in-the-terminal-app) **Making folders alike on Windows keeps encrypted files encrypted and copies every data stream.** A file encrypted with EFS is copied encrypted, or not at all where the target cannot encrypt (it was written as plain data before); every alternate data stream of a file is copied, not only the mark of a download; undo on an older Windows also takes away a copy it made read-only. [Compare folders](files/compare-folders.md#does-it-copy-alternate-data-streams-and-encrypted-files-on-windows) **The desktop app's preview no longer blinks while files change next to the one under the cursor.** A download growing in the same folder, or any file saved there, made the preview read its file again each time: a big archive's list (a 340 MB zip of 200,000 files) went blank and came back every second. The preview now reads the file again only when the file itself changes. [Archives](previews/media.md#archives) | | **2.33.1** | 2026-10-25 | **Compare folders leaves a sync run's own leftovers out.** The *.coxswain-sync-…* folder a run keeps what it replaced in, and a half-written *.name.coxswain-….tmp* file, get no mark, so two folders made alike show as the same. [Compare folders](files/compare-folders.md#why-does-compare-folders-not-mark-a-sync-runs-leftovers) **A long Word or OpenDocument text kept whole (*Everything*) gets a passage for every part of it with a slow model too.** Since coxswain 2.33.0 the time the model took counted as reading time, so after 20 seconds the rest of the file was left without passages. Files already given only part of their passages keep them until they change. [Long files](search/long-files.md#what-each-keeps) | | **2.33.0** | 2026-10-25 | **An archive inside an archive opens like a folder.** **Enter** on a zip, tar or 7z inside another opens it too, eight deep: it is copied once into the cache folder and looked into there, read-only, so memory stays flat however large it is. [Archives as folders](files/archives.md#limits) **Hidden text is no longer found or given to Ask.** Runs marked hidden in Word and OpenDocument files, and text a PDF draws invisibly, white on a white page or smaller than 2 points, are left out of search by words, search by meaning and Ask's sources; the invisible words over a scan stay. Every PDF and Word file is read again once, and its passages for search by meaning are made again; a PDF of scanned pages is read by OCR once more too, when OCR is on (tesseract and pdftoppm installed), which takes a while for many scans; until then its old text is not found. [Does Coxswain read hidden text?](search/documents.md#does-coxswain-read-hidden-text) **Near copies give Ask one source, not sixteen.** Passages that are near the same in several files (copies, versions with another date or number) are folded into the closest one before Ask picks its sources, so other files get their places; that source says *and 3 similar files* in both apps. Nothing is read again. [How much it reads](search/ask.md#how-much-it-reads) · [Why does a source say "and 3 similar files"?](search/ask.md#why-does-a-source-say-and-3-similar-files) **Permissions and dates in bulk.** **Alt+M** sets the permission bits of the marked files as chmod takes them (`644`, `u+x,go-w`, `a+X`; on Windows read-only and hidden), and their modification date to now, a typed date or another file's date, into folders if asked. A plan lists every file before and after first; links are never followed; **Ctrl+Z** puts the whole batch back. Both apps. [Permissions and dates](files/permissions-and-dates.md) **Checksums in both apps.** **Alt+H** writes a SHA256SUMS, SHA512SUMS or B3SUMS of the marked files and folders, in the lines `sha256sum` and `b3sum` read; **Enter** on such a list (or a `.sha256`, `.sha512`, `.b3` file, in GNU or BSD form) checks every file it names and says which are OK, changed or missing, marking the entries that changed. Big files are read a piece at a time, with progress and Stop. [Checksums](files/checksums.md) **Analyse a whole chess game with an installed engine.** **g** (*Analyse game*) evaluates every move in the background: an evaluation bar beside the board, a graph of the game (a click goes to that move; a row of bars in the terminal app), and the moves that lose half a pawn, a pawn or three marked `?!`, `?`, `??`; kept per game, so it comes back at once. **w** (*Save as annotated PGN*) writes the game with evaluations, marks and the engine's lines into a new file next to it. [Analysing a whole game](previews/chess-play.md#analysing-a-whole-game) **ChessBase databases open as games.** A `.cbh` database (with its `.cbg`, `.cbp` and `.cbt` files beside it) opens like a PGN file in both apps: the table of games with players, Elo, result, date, tournament and opening, each game on the board with its variations, Find by players and events, and Find this position. Annotations, Chess960 games, the newer `.2cbh` format and `.cbv`/`.cbz` archives are not read yet. The search store reads each `.cbh` file once; no other file is read again. [ChessBase databases](previews/chess.md#chessbase-databases) **The chess engine without installing Stockfish.** With podman or docker, the chess view's engine and game analysis run Stockfish from Coxswain's own image (`ghcr.io/mwo-dk/coxswain-stockfish`, about 70 MB, pulled once in *Settings → Previews → Container images*), without network, read-only, with no capabilities and no folder of yours; built weekly from Stockfish's released source. [The engine](previews/chess-play.md#the-engine) **The terminal app's chess board in pictures.** In kitty and Ghostty (kitty's graphics protocol, through tmux too with `allow-passthrough` on) and in foot, WezTerm, xterm, mlterm and Konsole (sixel), the board draws the desktop app's own chess pieces on its squares; other terminals keep block characters. `[chess] pieces = "pictures"` says so when the terminal shows none. [Pieces as pictures in the terminal](previews/game-pieces.md#pictures-where-the-terminal-shows-them) **Play on from any chess position, and ask an installed engine.** In a game, an EPD position or a Polyglot book, click a piece and then a square (**m** in the terminal app) to play your own moves, promotions too; they are kept as your line beside the game and written only to a new PGN file next to it with *Save as new PGN*. *Engine* (**a**) shows an installed Stockfish's (or any UCI engine's) best three lines with their evaluations, **b** plays its best move; nothing is downloaded and it runs on this computer. [Chess: playing on and the engine](previews/chess-play.md) **Find the games that reach a chess position.** *Find this position* (**p**) under any board lists the games in your PGN files that reach it, from the search store, and opens one with a click (**Enter** in the terminal app). **Every `.pgn`, `.pgn.gz` and `.pgn.zst` file is read again once** for this, to keep its games' positions; nothing else is redone. [Finding games](previews/chess.md#finding-games) **Compare files, in both apps.** **Shift+F2** shows the two files under the panels' cursors, or two marked files, side by side (one under the other in a narrow terminal): changed lines and the changed words in them, spaces or case set aside, the next change with **n**, a change copied to the other side and saved. A PDF, Word or OpenDocument file is compared by its text, pictures by their pixels (in the desktop app side by side, over each other with a slider, or as their difference), any other file byte by byte. [Compare files](files/compare-files.md) **Compare folders, in both apps.** **Ctrl+F2** compares the left panel's folder with the right one's, every file under them, by size and date or byte by byte, and marks each entry in both panels as it is found: **+** only here, **>** newer, **<** older, **≠** different, **=** the same. **Ctrl+F2** again opens its menu: mark the differences for **F5**, or show the differences only. Archives, container images, snapshots and git histories are compared too, read-only. A link is compared as a link and never followed. Making one side like the other comes later. Fix: the terminal app's Compare files shows a control character in a file's name as **?**, so a name cannot send escapes to the terminal. [Compare folders](files/compare-folders.md) **Compare folders makes one side like the other.** *Make right like left* and *Make left like right* in its menu (Ctrl+F2) plan every copy, replacement and deletion first; what is replaced or deleted goes to the bin as one item (deleting only when ticked), the run touches only what the plan saw, never through a link, Esc stops it and Ctrl+Z undoes it. Both apps; not on Windows yet. [Compare folders](files/compare-folders.md#making-one-side-like-the-other) **AsciiDoc to PDF, draw.io exports.** *Build PDF of AsciiDoc* writes a PDF of an `.adoc` document next to it, by Asciidoctor PDF installed or in its container, with its diagrams drawn here and nothing taken from the web; the preview draws an AsciiDoc document's diagram blocks, and the terminal app's F3 shows it as readable text. *Export draw.io diagram* (off until turned on in Settings → Previews; about 560 MB, with podman or docker) writes PNG, SVG or PDF next to a diagram with draw.io itself, only in its sealed container, and draws thumbnails in the grid view; the preview shows a diagram's pages as tabs and reads the diagram inside `.drawio.svg` and `.drawio.png`. Both apps. [Build PDF of AsciiDoc](files/asciidoc-pdf.md), [Export draw.io diagram](files/drawio-export.md) **E-books through calibre: MOBI, Kindle (AZW, AZW3), FictionBook, LIT and Palm books** show their cover, title, author and first pages, Find reads their words, and *Convert e-book* makes an EPUB, AZW3 or PDF next to them, in both apps. Off by default (*Settings → Previews → E-books with calibre*); an installed calibre first, else its container image (1.3 GB, no network, none of your folders). Books locked with DRM are left alone. Turning it on reads only the MOBI, AZW, AZW3, FB2, LIT and PDB files again, once; nothing else is read or embedded anew. [E-books](previews/ebooks.md) **Geodata in the preview and Convert geodata.** A map of the file's own shapes (no background, nothing fetched) for GeoPackage, shapefiles, GeoJSON, KML, GPX and GeoTIFF, with their layers, coordinate system and extent and a GPX track's length and time; *Convert geodata* makes GeoPackage, GeoJSON, shapefile, KML, GPX, cloud-optimised GeoTIFF or PNG copies next to the original. By GDAL installed, or its small pinned image (about 40 MB) with podman or docker; a GPX file needs neither. Both apps; the map in the desktop app. [Geodata](previews/geodata.md) **KiCad schematics and boards in the preview and Export from KiCad.** A schematic shows sheet by sheet and a board layer by layer as a PDF, with thumbnails (a board in 3D); *Export from KiCad* writes a PDF, an SVG, a bill of materials (CSV) or zipped Gerber and drill files next to it. By KiCad's kicad-cli installed, or its large pinned image (about 476 MB) with podman or docker. Both apps; the preview in the desktop app. [KiCad](previews/kicad.md) **OpenSCAD models in the preview and Export 3D model.** A `.scad` model shows as a picture of the part OpenSCAD makes (a flat one as its outline), with Rendered / Source and thumbnails; *Export 3D model* writes it as STL or 3MF next to it. By OpenSCAD installed, or its pinned image with podman or docker. Both apps; the picture in the desktop app. [OpenSCAD models](previews/openscad.md) **Drag and drop that works.** Files dragged out of the desktop app now arrive in GTK programs on Linux and the BSDs (a file manager, a browser upload), which got nothing before, names with spaces or `%` included; drops land on the right pane on HiDPI screens; files can be dragged out of archives, disk images, mailboxes and git histories (copied out first); a drop on a folder's row or a sidebar place goes into that folder; Ctrl at the drop copies and Shift moves at once; the drag shows the file's name or the count. The terminal app asks *Copy here* or *Move here* for files dropped on the terminal. [Drag and drop](files/drag-and-drop.md) **Find and replace across files.** **Alt+R** replaces text or a regular expression (case and whole-word options) in the marked files and folders, or in the files Find lists. Every change is shown first with its file, line, before and after, and any change or file can be unticked; each file is written safely in its own encoding (UTF-8, UTF-16, Latin-1) with its line endings and permissions; binary files, links and read-only files are left out; **Ctrl+Z** puts the whole batch back. Both apps; on Windows it previews only, for now. [Find and replace](files/find-and-replace.md) **Compare folders makes one side like the other on Windows too.** *Make right like left* and *Make left like right* work there through the folders' own handles, never through a junction or link swapped in; names that differ only in case are one entry. Links, junctions and hard-linked files are left out, both folders must be on a local NTFS or ReFS disk, and what is replaced or deleted stays in a folder at the target's top instead of the bin. [Compare folders](files/compare-folders.md#making-one-side-like-the-other) **Bridge deals.** PBN files open like chess games (**Alt+K**, **F3** in the terminal app): a table of deals with the pairs, contract and result to filter and sort, each deal as four hands round the table with its auction, stepped through trick by trick, each trick's winner worked out from the contract's trumps; Find finds deals by player or event. **Read again once for search:** every `.pbn` file; nothing else is redone. [Bridge deals](previews/bridge.md) **Draughts games.** PDN files open like chess games (**Alt+K**, **F3** in the terminal app): the table of games to filter and sort, each game on a numbered board stepped through move by move, captures of several pieces played square by square, men crowned, variations and comments beside it; international draughts and English draughts (checkers) by the GameType tag, Russian, Brazilian, Pool and Canadian too; Find finds games by player or event. **Read again once for search:** every `.pdn` file; nothing else is redone. [Draughts games](previews/draughts.md) **Shogi games.** KIF and CSA files open like chess games (**Alt+K**, **F3** in the terminal app): the table of games to filter and sort, each game on a 9×9 board with the pieces in hand, captures, drops and promotions, KIF's variations and comments beside it, handicaps and board diagrams; Find finds games by player or event. **Read again once for search:** every `.kif`, `.kifu` and `.csa` file; nothing else is redone. [Shogi games](previews/shogi.md) **Xiangqi (Chinese chess) games.** A PGN file whose tags say `Game "Chinese Chess"` opens like chess games (**Alt+K**, **F3** in the terminal app): the table of games to filter and sort, each game on a board with the river and palaces, the pieces as their characters in red and black, moves in ICCS, WXF or Chinese, comments and variations beside it; Find finds games by player or event. Nothing is read again for search. [Xiangqi games](previews/xiangqi.md) **A graph in the git history.** Each commit in a history (**Ctrl+G**) has its place in a graph beside it: its lane, the lines to the commits it was made on and on top of, merges and the names of the branches and tags whose tip it is. **Alt+A**, or *All branches* next to the badge in the desktop app, lists every branch's commits, so the graph shows where they split off and were merged; **Alt+A** again goes back to this branch. SVG in the desktop app's *Details* view, box-drawing characters in the terminal app; worked out only as far down as the list is shown, so a long history opens as fast as before. [The graph](panels/git-history.md#the-graph) **What is not pushed and not merged.** **Alt+R** in a git history (or on a file or folder), or *Against upstream* next to the badge in the desktop app, lists only the commits on your side of the upstream (`↑`, not pushed) and on its side (`↓`, not merged), as of the last fetch, whose time the badge shows with the upstream and the counts. Coxswain never fetches for it. [Against upstream](panels/git-history.md#against-upstream) **Find finds a local model by its name, and F3 shows its facts.** Typing `llama 3b` in Find puts Ollama's blob of `llama3.2:3b` first in *Names* (read from Ollama's manifests and the Hugging Face cache's links, no model file read); the terminal app's **F3** on a model shows its facts card with the full chat template, and **h** there shows the file itself as hex, on every facts card. The terminal app's Find marks the words found again, instead of showing `?` around them. [Your local models, by name](files/local-models.md#can-i-find-a-model-by-its-name) **Chess pieces drawn in the terminal.** The terminal app draws each piece from block characters after the desktop app's pictures (octants, sextants, quadrants or half blocks, as fine as the terminal draws), as large as the window allows; figurines on a small board. *Settings → Previews → Game pieces in the terminal*, `[chess] pieces`. [Game pieces in the terminal](previews/game-pieces.md) **The desktop app on NetBSD (experimental).** NetBSD 10 now gets the desktop app as OpenBSD has it: built, tested and started under X11 in a NetBSD virtual machine on every release, in `coxswain-desktop--x86_64-unknown-netbsd.tar.gz`, and installed by the same `install-unix.sh` line with `webkit-gtk41` from `pkgin`. The script now also recommends the Nerd Font symbols, on OpenBSD too. [NetBSD](systems/netbsd.md#the-desktop-app-what-experimental-means) **Neural network models in both apps.** ONNX, TensorFlow Lite, Core ML (also `.mlpackage`) and Keras files show their format, producer, operator set, inputs and outputs with shapes, nodes and parameters: under the preview, in Properties (Alt+Enter) and as a card in the terminal app's viewer (F3). The desktop app also draws the graph with Netron 9.3.2, bundled and offline in a sandboxed frame. Nothing runs and no pickle is read. [Neural network models](previews/neural-networks.md) **Preview tools: which program shows each kind of file, and a choice per kind.** *Settings → Previews → Preview tools* (terminal app: **F12** → *Previews*) has a row per kind (LaTeX, Office documents, Diagrams, Video and sound, Maps, 3D models …) with what is installed and its version, its container image (pulled or not, its size) with Pull and Remove, what is used now, the choice Installed program, Container or Off, and Try, which shows a sample. `[preview.prefer_tool]` becomes `[preview.tools]`, per kind; a config with it is rewritten once on start. [Preview tools in Settings](previews/tools.md#preview-tools-in-settings) **Preview with… switches the program of a kind of file from the file itself, and a preview no tool can make says what would.** *Preview with…* in the action menu (**Shift+F10**) and **F9** lists the kind's choices, Installed program, Container or Off, with what each would use; the preview of a file with no program and no pulled image says *Install ffmpeg, or pull its image (126 MB).* with **Copy** and **Pull its image** beside it. [Preview with…](previews/tools.md#preview-with) · [Installing what is missing](previews/tools.md#installing-what-is-missing) **SCID databases open like PGN files.** Put the cursor on a SCID database's `.si4` file (its `.sg4` and `.sn4` beside it) and **Alt+K**, **Space** in the desktop app or **F3** in the terminal app shows its games as a table to filter and sort, each game on the board with its variations, comments and glyphs; Find finds its games by player, event or opening, and *Find this position* finds them too. The search store reads every `.si4` file once again for this (nothing else). SCID 5's `.si5` is not read yet. [Chess games](previews/chess.md#scid-databases) **Long files: sample or everything.** Search keeps a sample of a long file by default (its first 4 MB of text, 256 passages spread over it); *Everything* keeps all its text and gives every part a passage, chosen in Settings → Meaning or per folder from the action menu, each choice saying first how many long files it touches, the room and the time. Choosing *Everything* reads again the text, code, CSV and log files of those folders with more than 4 MB of text and makes again the vectors of their files with more than 256 passages; going back to *Sample* reads nothing again and gives the room back. [Long files](search/long-files.md) **Names sort by your language's alphabet.** In both apps, the panels, archives, a comic's pages, Space, the clouds and the chess game table follow the alphabet of the language Coxswain speaks: in Danish and Norwegian Æ, Ø and Å come after Z, in Swedish and Finnish Å, Ä and Ö do, in German Ä sorts with A, in Spanish ñ after n, in Czech ch after h. Numbers still go by their value (file2 before file10) and case still does not count. [Sorting](panels/sorting.md#why-do-æ-ø-and-å-come-after-z-and-ä-with-a) **Split and join in both apps.** **Alt+X** cuts a big file into parts of a chosen size (100 MB, a CD, a FAT32 USB stick, a DVD, or any size typed) as `name.001`, `name.002` … with `name.sha256` of the whole; **Enter** on `name.001` joins them back and checks the result. Never over a file; progress and Stop, and nothing half made is left. [Split and join](files/split-and-join.md) **Stop a running copy, move, delete, extract or pack.** In the desktop app a progress bar with a Stop button (or Esc on it), in the terminal app Esc on the progress line: the file it was on is removed, what was done stays and Ctrl+Z undoes it, and the status line says how far it got (*Stopped: 120 of 400 copied*). A move to another disk now goes file by file, each original deleted only after its copy is checked, so every file is in one place at any time; an archive is written beside itself and left untouched when stopped, with a file left by a crash removed at the next start, and the pack dialog warns when space may be short. [Stopping it](files/copy.md#stopping-it) **Go, shogi and xiangqi on real boards in the terminal app.** With room in the window, Go stones are round discs drawn from block characters, shogi pieces light tiles pointing at their opponent and xiangqi pieces light discs, each with its name written on it as text; where the terminal shows pictures (kitty, Ghostty, foot, WezTerm, Konsole, Windows Terminal …) the desktop app's own stones, tiles and discs, and draughts' men and kings too. [Go, shogi and xiangqi](previews/game-pieces.md#go-shogi-and-xiangqi) **The last commit and Find's commit search for Mercurial and Jujutsu.** In a Mercurial repository, and in a Jujutsu one without `.git` next to `.jj`, the *Last commit* column (the info line in the terminal app) shows when each file and folder was last committed and by whom, and Find finds their commits by message, author and changed path under *History*. Read-only: the repository's own Mercurial config, hooks and extensions never run. Find reads each such repository's newest 2000 commits once, at the helper's next scan. [Git history in search](search/history.md#does-it-search-mercurial-and-jujutsu-repositories) · [Mercurial](panels/mercurial.md#what-you-see) · [Jujutsu](panels/jujutsu.md#settings-and-configtoml) **Mercurial repositories in both apps.** In a folder with `.hg`, the line under the pane names `hg` and the active bookmark or branch, with the changed files marked; **Ctrl+G** lists a file's or folder's commits, **Alt+B** the bookmarks and branches, **Alt+S** switches with `hg update --check` (refused while a file is changed) and *New branch here* makes a bookmark. Everything runs through the `hg` program, never with the repository's own `.hg/hgrc`, so its hooks and extensions do not run. [Mercurial in the panels](panels/mercurial.md) **Jujutsu repositories in both apps.** In a folder with `.jj`, the line under the pane names `jj`, the working-copy change and its nearest bookmark, with the changed files marked; **Ctrl+G** lists a file's or folder's commits and **Alt+B** the bookmarks, as folders, all read through the `jj` program without taking a snapshot or changing anything. Where `.git` is next to `.jj`, *Settings → Behaviour → Use git where Jujutsu is too* shows git's view instead. [Jujutsu in the panels](panels/jujutsu.md) **Subversion and CVS history, on request.** **Ctrl+G** in a Subversion or CVS working copy asks once whether Coxswain may read the history from the server it names; with yes it lists the commits from `svn log` or `cvs log` (CVS's per-file revisions joined into commits), newest first, with date and author, in both apps. Nothing is sent before that yes, nothing but the log is asked, and the answer is kept per server: *Settings → Privacy and updates → History from servers* forgets it. [Subversion](panels/subversion.md#history-from-the-server) · [CVS](panels/cvs.md#history-from-the-server) · [Privacy](reference/privacy.md#what-can-leave-it) **Subversion and CVS working copies show their status.** In a Subversion working copy the line names `svn`, the revision and the branch, and in a CVS one `cvs` and the branch or tag, with each changed, added, deleted, unversioned or conflicting file marked; it is read from `.svn/wc.db` and the `CVS/Entries` files alone, so no server is asked and neither program is needed. **Alt+G** opens a terminal in the working copy for `svn update`, `cvs log` and the rest. [Subversion working copies](panels/subversion.md) · [CVS working copies](panels/cvs.md) **Find and replace writes on Windows, and Permissions and dates goes into folders there.** Alt+R now writes its changes on Windows too (it only previewed there), and Alt+M offers *Into folders, all the way down*. Both go through each folder by its own handle and never through a junction, link or mount point, as on the other systems; a file with other permissions, data streams or attributes than a new one would get is left as it is. [Find and replace](files/find-and-replace.md#how-a-file-is-written) **Files out of an archive keep their dates, and a link to nothing is no program.** A file copied out of a zip, 7z or tar with **F5**, or extracted with **Ctrl+E**, now keeps the modification date it has in the archive instead of taking the time of copying; a folder made inside a zip or 7z with **F7** is dated now, not 1 January 1980. In the terminal app, **Enter** on a symbolic link whose target is gone (or two links pointing at each other) no longer tries to run it as a program. [Pack and extract](files/pack-and-extract.md#what-goes-in-what-comes-out) · [Archives as folders](files/archives.md) · [Opening files](commands/opening-files.md#how-to-use-it) **Ask resists files that try to steer it.** Each source reaches the model fenced off, so a file can no longer end its own source, make up another or end the model's rules with a chat template's turn marks; invisible tag and bidi characters are left out; escape sequences in an answer or a server's error never reach the terminal; a server's answer stops after 1,024 tokens (4,096 when it thinks), marked *…*, instead of running on for up to 15 minutes, and a server that sends megabytes no longer freezes the desktop app. [Can a file trick Ask?](search/ask.md#can-a-file-trick-ask) **The terminal app's binary compare shows its own keys.** Comparing two binary files (or two pictures) now shows the keys that work there, **n** **p** and **Esc**, instead of the text compare's. [Compare files](files/compare-files.md#documents-pictures-and-other-files) **Smaller programs.** The released terminal and desktop apps leave out their symbol table: about 11 % and 13 % smaller downloads and installs. [Performance](reference/performance.md#why-is-the-program-file-so-large) **A built-in editor in both apps.** **Shift+F4** edits a text file inside Coxswain: colours, undo, find and replace, go to line; saving keeps the file's encoding, line endings and permissions, and asks before writing over a file that changed on the disk meanwhile. In the terminal app **F4** opens it when no editor is set, instead of the first of `vi`, `nano` and the like that is installed. [The built-in editor](commands/editor.md) **New chess pieces in the desktop app.** The board draws clean, modern pieces: white with a black outline and black, with the squares showing through around them, on every theme. They are Uray M. János's set after the Wikimedia pieces, under CC BY-SA 3.0. [Chess](previews/chess.md#notation-and-the-board) **Compare files saves when the other file changed meanwhile.** Saving a side with **F2** no longer stops at *Not saved* because the file copied from changed on the disk after the copy: both files are held as they were read from the first copy on, so the side asked for is written with the lines copied, and *Save over it* writes a side's own lines as read, never its new bytes at old places. A file that changed before a copy says so and is not copied from. [Is anything lost?](files/compare-files.md#the-other-file-changed-while-i-was-copying-is-anything-lost) **A config.toml from a newer Coxswain no longer stops this one.** A key given in `[keys]` to an action this version does not know (from a newer version on another machine, one you went back from, or misspelt) is left out, stays in the file, and a notice names it once; before, the terminal app refused to start and the desktop app silently used every default. The search helper reads your `[search]` settings even when another part of the file is refused (a key bound twice), instead of the defaults, which read the folders you left out and the archives you turned off. `state.json` keeps what a newer version wrote there when an older one saves it. [Configuration](reference/configuration.md#i-share-one-configtoml-between-machines-with-different-versions-is-that-safe) **A mistake in config.toml costs only its own setting.** Both apps keep every setting they can read and use the default only for a broken one; the terminal app no longer refuses to start and the desktop app no longer starts with every default. A notice names the line and the problem (*config.toml line 12: `theme` must be text*): in the terminal app a dialog at start where **Enter** opens `config.toml` at that line, in the desktop app the status line and *Settings → What's new*, with a button that opens it there. Settings still save while such a line waits to be mended. [Configuration](reference/configuration.md#the-file) **Container images open like folders.** A `docker save` or `podman save` tar, and an OCI image layout (as a tar, or a folder through its `index.json`), open with Enter as one read-only folder of their merged layers: whiteouts honoured, gzip and zstd layers, links resolved inside the image; F5 copies files out, the panel title shows the tag, and the preview and Properties show tags, platforms, layers, entrypoint, environment, ports and labels. Both apps. [Container images](files/container-images.md) **Container previews in folders with a `:` in their name.** A LaTeX, Typst, office, PlantUML, pandoc, diagram or PostScript preview, and Make PDF searchable, run in podman or docker now work in a folder such as *Meeting 10:30*, where they failed with *incorrect volume format*; the folder is mounted with `--mount`. Make PDF searchable in the terminal app now counts as a use of its image, so *Remove images not used for 90 days* no longer removes an image you use there. [Containers](previews/containers.md#what-a-container-may-do) **Scan for viruses with ClamAV, only when you ask.** Turn it on in Settings → Previews, then **Alt+I** (or the action menu) scans a file, the marked files or a folder in a container with no network and your files read-only; the virus database comes from database.clamav.net when it is more than a day old. What it finds is marked and listed, and for each file you choose: leave it, the bin, or quarantine; nothing is deleted by itself. Both apps. [Scan for viruses](files/virus-scan.md) **ffmpeg and ImageMagick: videos, sound and photos the app could not show, and conversions.** Videos and sound the player cannot play (AVI, WMV, MPG, WMA, APE …) show a frame or their waveform, every video gets its length, size and tracks and a thumbnail, songs a waveform, and HEIC, GIMP and RAW photos show in the preview and as thumbnails. *Convert video or audio* makes MP4, MP3 or FLAC copies, the sound alone or a clip, and *Convert or edit pictures* JPEG, PNG or WebP copies, smaller ones, ones without their location, or turned ones, next to the originals, never over them, with progress and Stop, in both apps. An installed ffmpeg is used first, else its container image (about 126 MB); ImageMagick runs in its sealed container first (about 60 MB), else installed under a strict policy. Each image says in Settings what it gives, its size and its cost; containers do not run on the BSDs or illumos, where the installed programs do it. [Convert video or audio](files/convert-media.md), [Convert or edit pictures](files/edit-pictures.md), [Media](previews/media.md#video-and-sound-with-ffmpeg), [Containers](previews/containers.md#the-images) **Other formats with Apache Tika.** Turn on *Read other formats with Apache Tika (container)* under Settings → Finding files and Find finds the words in OneNote, XPS, CHM, Outlook .pst and .ost, MHTML, Hangul and Access files, and in old Word, PowerPoint, Publisher and Visio files when LibreOffice is not installed. Off by default; turning it on pulls `docker.io/apache/tika:4.1.0` (about 190 MB) for podman or docker; the server has no network, no folder and no port, and stops after 5 idle minutes. Not on the BSDs or illumos. Read again: only the files of those kinds, once, when you turn it on; nothing else. [Other formats with Apache Tika](search/tika.md) **Transcripts of speech with Whisper.** Turn on *Transcribe speech with Whisper* under Settings → Finding files, then *Transcribe speech* in the action menu (Shift+F10) or F9 on a recording, a video or a folder: it says how many hours of sound and how long they take here, then transcribes in the background, never on battery, pausable from the *Speech* line. Find finds what was said; the desktop app's preview shows the transcript with its times, the terminal app's F3. The model is chosen for this machine and downloaded from Hugging Face (checked by its SHA-256) when you turn it on; an installed whisper.cpp runs first, else `ghcr.io/ggml-org/whisper.cpp:main` (about 505 MB) without network. Read again: nothing; only the files you ask for are transcribed, and again only when they change. [Transcripts of speech](search/transcripts.md) **Long Word, OpenDocument, spreadsheet and presentation files are found by what their last pages are about.** A `.docx`, `.odt`, `.xlsx`, `.ods`, `.pptx` or `.odp` with about 3 MB of text or more gets its 256 passages for search by meaning from the whole file, read twice as it is unpacked and never held whole, not only from its first 4 MB; with [Long files](search/long-files.md) set to *Everything* every part of the whole file gets a passage. Search by words still keeps the first 4 MB. Only those files get their vectors made again, once; nothing else is read again. [Search by meaning](search/meaning.md#is-a-document-found-by-what-its-last-chapter-is-about) **Large Word, OpenDocument, spreadsheet and presentation files are read with a fraction of the memory.** A `.docx`, `.odt`, `.xlsx`, `.ods`, `.pptx` or `.odp` is read as it is unpacked, never a whole part in memory: one with a 60 MB part takes 11 to 21 MB to read instead of 25 to 94 MB. The text found is the same; nothing is read again. [Documents it reads](search/documents.md#settings-and-configtoml) **Files dragged out of an archive stay while another program reads them.** Closing the desktop app no longer deletes the copies it made for a drag out of an archive or a git history, which the program they were dropped on may still have open; they go once they are a day old. [Out of archives and histories](files/drag-and-drop.md#out-of-archives-and-histories) **The old ImageMagick image can go.** `docker.io/dstmodders/imagemagick`, ImageMagick's default image before Coxswain made its own, is listed in Disk use as a former default to clear, and *Keep images up to date*, when on, replaces it with today's and removes it. Nothing is removed without one of those. [Containers](previews/containers.md#pinned-images) **Vectors for many short files are made about a quarter faster.** The built-in model now gets the passages of several files together, shortest first, so its batches are full and padded only to about their own length; a few files' passages are made ahead while it works, and each file's vectors are still written whole or not at all. The vectors are the same as before: nothing is made again. [Search by meaning](search/meaning.md#how-it-works) **Esc then F10 quits on macOS too.** When Esc and the next key arrived together (macOS Terminal, the app busy), the key was lost and typed as `[21~`; the terminal app now puts it back together. [The terminal app](reference/terminal-app.md#the-terminal-it-needs) **Settings opens Finding files when config.toml lists something twice.** A folder or pattern written twice in a list of `[search]` (`name_roots`, `text_roots`, `text_exclude` …) stopped **Finding files** in the desktop app's Settings from opening: a click on it left the area before on show. Both entries now show, each with its **Remove**. The same had stopped **Previews** opening since coxswain 2.32.1 when two tools share a container image; Previews now lists images per kind of file. [Settings: Finding files](customise/settings.md#finding-files) **Big Go collections open at once.** An SGF file is read game by game as it streams by, no longer up to 64 MB in one piece: its list fills while you look, in both apps, whatever the file's size; every game file (PGN, PDN, SGF, KIF, CSA, PBN) is read by one shared reader. [Go](previews/go.md#how-big-a-collection-can-it-open) **Folders of a million files in the desktop app.** The app keeps each tab's listing and the window gets only the rows in view, so a folder of a million files opens in about a second instead of four, with no frozen window, and the web view stays near 200 MB instead of growing past 2 GB (7 GB after **Ctrl+A**). Sorting, marking, quick search and the marked count work on the whole folder as before; tabs in the background are read when you switch to them. [Performance](reference/performance.md#the-desktop-app) **Desktop app fixes from the 2.32.1 test round.** In a git history, F6, Shift+F6, F7, F8, Shift+F8, Ctrl+X, Ctrl+V and Ctrl+M are refused at once instead of after a question; F1 → *Features and questions* lists every feature before you type; after one Alt+N, opening the preview pane no longer puts the cursor in the notes field, where arrows and typing went into the note; the chess window's buttons take the theme's colours. [Git history](panels/git-history.md#what-works-in-a-history) **Safer with hostile archives and files.** A 7z that unpacks to gigabytes is unpacked as it is read, no longer into memory, so it cannot take the app down; a zip whose files share their packed bytes (a few kilobytes that unpack to gigabytes) is not extracted whole, one file of it can still be copied out. Files and folders from a zip or a tar never come out writable by other users. An archive entry, a name index or a commit dated far in the future no longer ends the app, a VMDK whose extents add up past what a number holds shows the largest size instead of a wrong one, and a LaTeX file in Latin-1 is no longer mistaken for a part of another document. [Archives](files/archives.md#limits) **Container images pinned to the builds Coxswain was tried with; HEIC and RAW photos in ImageMagick's image.** Every default image is named by its tag and digest, so a pull fetches exactly that build, never whatever the tag points at that day; a new version of Coxswain moves the pins, and *Keep images up to date* then pulls the new pin and removes the old copy. An image you set in `config.toml` is never changed. ImageMagick's image is now Coxswain's own (Alpine's ImageMagick with libheif and LibRaw, about 21 MB), so HEIC and RAW photos show and convert without an installed ImageMagick. Pulled again once: a default image whose pulled copy is not the pinned build is pulled again by the next round of updates, or after a click by the next preview that needs it. [Pinned images](previews/containers.md#pinned-images) · [Convert or edit pictures](files/edit-pictures.md#can-it-read-my-heic-or-raw-photo) · [Media](previews/media.md#photos-only-imagemagick-or-ffmpeg-reads) **Every container runs held tight.** LaTeX, LibreOffice, PlantUML, pandoc, Typst, Kroki and OCRmyPDF now run as ffmpeg, ImageMagick, Whisper, Tika, calibre and the chess engine do: on a read-only root with a small /tmp, bounded memory and processes, no capabilities and no way to gain privileges. [What a container may do](previews/containers.md#what-a-container-may-do) **Arch and the BSD install script, fixed.** `makepkg -si` in `packaging/aur/coxswain-bin` or `packaging/aur/coxswain` of a clone installs the clone's release again, where it fetched 1.0.0 and failed, and leaves no `-debug` package behind after removal; `install-unix.sh` on NetBSD, OpenBSD and illumos links to its system's guide, which was a missing page, and its `--help` no longer ends in `set -eu`. [Linux on ARM](systems/linux-arm.md#which-file-to-download) **Tidier screens in every language.** In the terminal app at 80 columns, short F-key labels lend their room to long ones, so far fewer are cut (German, Greek, Czech, Lithuanian, …); Persian words with لا no longer push a column's border along; Japanese and Korean answers in F1 → Features wrap without short lines; Alt Gr letters (@, {, €, ą) sent by Windows terminals as Ctrl+Alt are typed in Find, rename and the command line. In the desktop app, F-key labels too long for a small window end in … (whole in the tooltip), a long area name in Settings breaks inside the list, a long Latin file name under Hebrew or Persian keeps its start and ends in …. [Languages](customise/languages.md#the-f-key-bar-in-my-language-is-cut-short-is-that-a-mistake) **Translation fixes.** The action menu's title reads right in Czech, Ukrainian, Lithuanian, Latvian and German for a folder and for several items; git's *staged* and *core dump* are translated where they were left in English (Danish, Norwegian, Persian, Armenian, Georgian, Greek, Hebrew); British, Australian and New Zealand English say *bin* everywhere, and Canadian English *trash* and *-ize* everywhere. [Languages](customise/languages.md#the-languages) **"New" on a language lasts about a month.** Settings marks a fresh translation *new* for four weekly releases after the one that brought it, then the mark goes by itself; Czech, Polish, Ukrainian, Greek, Persian, Armenian, Georgian, Japanese and Korean are no longer marked, Norwegian is until 15 November 2026. [Languages](customise/languages.md#the-languages) **Your local models, by name.** Ollama's `sha256-…` blobs show the model they are (`llama3.2:3b`) and Hugging Face cache folders show `org/name`, in the panels and in Space; a GGUF or safetensors file's facts (architecture, parameters, quantisation, context, layers) say how much memory it needs and whether it fits this machine, in the preview and in Properties in both apps. Only headers are read; PyTorch pickles are named, never opened. [Your local models, by name](files/local-models.md) **Long logs, CSV, text and code get their passages for search by meaning from the whole file, not only its first 4 MB.** The 256 passages a file gets are spread from its start to its end (search by words still keeps the first 4 MB of text). Only text, code, CSV and log files with more than 4 MB of text get their vectors made again, once. [Search by meaning](search/meaning.md#is-a-document-found-by-what-its-last-chapter-is-about) **Model files with huge headers are refused, not read.** A GGUF header is read up to 64 MB (was 256 MB) and a safetensors one up to 16 MB (64 MB for all the shards of a model; was up to 100 MB each), and past that the facts say *header over 64 MB, not read*; an xz archive's list of blocks is read up to 16 MB and a million blocks. Naming the files in Ollama's store no longer downloads its manifests from the cloud, nor holds up other folders while it reads. [The facts](files/local-models.md#the-facts) **Draughts pieces drawn in the terminal.** The terminal app draws draughts men and kings from block characters after the desktop app's pictures, as it does chess pieces; ● and ♚ on a small board. [Game pieces in the terminal](previews/game-pieces.md) · [Draughts games](previews/draughts.md#a-game-on-the-board) **A PDF can no longer guess its way past the hidden-text filter, and a form drawn twice keeps its text.** The marks that say where hidden text starts and ends now carry 128 random bits drawn for each file read, so a file that draws many guesses cannot match one; and a form drawn once in white on an empty page and again in black is read where it is seen, with the text after it, instead of losing both. Nothing is read again. [Does Coxswain read hidden text?](search/documents.md#does-coxswain-read-hidden-text) **A PDF cannot switch off its own hidden-text filter.** The marks Coxswain sets in a PDF's drawing to say where hidden text starts and ends, and where a span's spoken text goes, are new for each file read, so a file that draws such marks itself no longer turns hiding off for words meant for Ask, hides real text or slips in words. [Does Coxswain read hidden text?](search/documents.md#does-coxswain-read-hidden-text) **Find and replace and Permissions and dates keep to the very files they planned on OpenBSD too.** A file or folder renamed away after the plan is left, even where the clock ticks too coarsely to show the rename. [Find and replace](files/find-and-replace.md) **The branch stays readable on ZFS, and more install hints on the BSDs and illumos.** In the terminal app, a git repository on ZFS (FreeBSD, illumos) showed the dataset line over the branch in the panel's bottom border; the dataset line is now cut short instead. Where a tool is missing, the hint now names OpenBSD's and NetBSD's `typst`, OpenBSD's `ocrmypdf`, and OmniOS's `compress/7zip` and `ooce/application/tig`. [ZFS snapshots](files/zfs-snapshots.md#the-dataset-in-the-footer) · [Preview tools](previews/tools.md#installing-what-is-missing) **Fixes for the BSD and illumos installs.** The install script's last line on OpenBSD, NetBSD and illumos linked to a page that does not exist; it now names the system's guide. On OpenBSD `man coxswain` no longer warns about an outdated `mandoc.db` after an install, and the rc.d script, when started without a user, now says in `/var/log/daemon` how to name one (rcctl only showed *failed*). On illumos the SMF service's message says to clear it after naming the user, and the guide says so too. Uninstalling finds the autostart entry under `XDG_CONFIG_HOME` too. [OpenBSD](systems/openbsd.md#the-search-helper) · [illumos](systems/illumos.md#from-boot-with-smf) **Pull and Remove stay side by side.** In *Settings → Previews → Preview tools* a long image name (LaTeX's) wraps its own words, and **Pull** and **Remove** stay together at the end of its line instead of **Remove** dropping to a line of its own. [Containers](previews/containers.md#pulling-and-removing-images) **F1 names the git graph and its keys, and the Flatpak page says how Whisper runs there.** F1's help and *Git history as folders* in F1 → Features now say that the history has a graph of branches and merges, with the keys for all branches and against the upstream. The Flatpak page says that transcripts use the host's `whisper-cli` in `/usr/bin` or `/usr/local/bin`, else whisper.cpp's container image through the host's podman or docker. [Git history as folders](panels/git-history.md) · [Flatpak](systems/flatpak.md#does-whisper-work-in-the-flatpak) **Container results are never taken through a link, and maps and GeoJSON come out right.** What a container writes back (a preview, a converted video, picture, map, model, KiCad or draw.io export, a searchable PDF) is now read only as a plain file of its own: a link to another of your files, a hard link or a FIFO left in its folder is refused. A reprojected map is no longer drawn stretched, *To GeoJSON* of a GPX file of waypoints alone (or a GeoPackage beside empty tables) works, and an installed GDAL older than 3.7 gives way to its container or says it is too old. [Safety](previews/safety.md#what-a-preview-never-does) · [Geodata](previews/geodata.md#what-it-needs) **Saving in the editor and in Compare files keeps the file whole and as it was.** A full disk or quota no longer leaves half a file: the save is refused and the file left as it was. The new text is private to you until it has the file's permissions and group; a read-only file is refused rather than replaced, and another user's file, or one with an ACL or extended attributes, is written in place so it keeps them. Replace all no longer cuts the wrong text after ẞ, the Kelvin sign or İ. In Compare files, **N** and **P** in two binary files look on a thread (**Esc** stops it), hex rows put the right side under the left below 110 columns instead of cutting it off, and Compare folders no longer says the folders are the same when a file stands against a folder. [Editor](commands/editor.md#saving-what-is-kept) · [Compare files](files/compare-files.md#documents-pictures-and-other-files) · [Compare folders](files/compare-folders.md#how-to-use-it) **A move to another disk never loses a file.** A move across disks that fails half way (a full disk, an unreadable file, a pipe in the folder) now moves back what had gone over, so the source is whole again; if that fails too, the error names both places and **Ctrl+Z** takes back the rest. A target that is the source itself under another path (a bind mount) is refused instead of being emptied, and in the terminal app an accented letter typed right after **Esc** no longer crashes it. [Move and rename](files/move-and-rename.md#a-move-to-another-disk-failed-half-way-where-are-my-files) **Scan for viruses never calls a file clean it did not fully read.** Files past ClamAV's size or depth limits are listed as read only in part, files it could not read are listed and no longer counted as scanned, a scan that read nothing says so instead of *No viruses found*, a marked folder that is a link is scanned as the folder it points to, and quarantine no longer fails on a file in a linked folder or leaves a file moved but unlogged. Apache Tika that will not start is tried again only after 10 minutes, so indexing no longer stalls on it. [Scan for viruses](files/virus-scan.md#what-you-see) **Compare files saves both sides when changes were copied both ways.** Before, the left file was written and the right one refused as "changed on the disk", its copied changes lost; and a side that cannot take a copied letter in its encoding now stops the save before either file is written. Splitting a file into more than 100,000 parts (a size typed as `1`, one byte) is refused instead of filling the memory, and in the desktop app a sort that a newer listing overtook no longer moves rows under the marks. [Compare files](files/compare-files.md#copying-a-change-across-and-saving) · [Split and join](files/split-and-join.md#splitting-a-file) **Games and the terminal app hold up to hostile files and silent engines.** A chess engine that never answers no longer leaves a "thinking" line and a running process behind: it is stopped when you step on or after its time, in both apps, and an engine is never looked for in the working folder through an empty `PATH` entry. Looking for an opening book no longer downloads online-only `.bin` files of a cloud folder. A crafted Go file (millions of values, a board of one huge group) no longer takes gigabytes or freezes the terminal app's board, and a CSA line `P0` is read without fault. In the terminal app, a background job that ends while the editor is open waits for it to close instead of putting it away with your unsaved text, the editor scrolls sideways correctly in a very narrow window, and **F4** in a text copy (a PDF's text, a transcript) edits the file it was made of, not the throwaway copy. [Play and analyse](previews/chess-play.md#the-engine) · [Opening books](previews/chess.md#opening-books) · [View and edit](commands/view-and-edit.md) **Search inside files is safer with files made to harm it, and keeps what it read of a disk that is away.** The search helper no longer drops the text of the files on an unplugged disk or share when a reader asks for them again: they keep their text and are read once the disk is back. A Word document of runs never closed, or a PDF of forms sharing their resources, is read for seconds at most instead of for hours; a text file of blank space or zero bytes (a sparse file of a terabyte) is read no further than 256 MB, and a longer log gets its passages from its first gigabyte; a line of one endless word no longer takes gigabytes while its passages are made; a tar of very long names keeps no list of gigabytes in the cache. A container runtime that starts late (Tika, calibre) no longer makes its files be read and given vectors again. Find this position leaves out a PGN file `text_exclude` names, and a file stopped part way is read again. Ask makes an earlier answer as inert as a source in the next prompt, an embedding server's error page is shown in one short line, and a model download stops when it is longer than the file expected. [Documents it reads](search/documents.md#settings-and-configtoml) · [Search by meaning](search/meaning.md#how-it-works) **The container images list in Settings is back.** *Settings → Previews → Container images*, with what each image gives, its size, **Pull** and **Remove**, shows again in the desktop app; with the default images, where OCRmyPDF's image also serves Ghostscript, the whole list was missing. [Containers](previews/containers.md#pulling-and-removing-images) **Opening a Find hit in a large SGF file no longer freezes the terminal app.** The hit's game is looked for on a thread of its own while the list of games shows, with *Finding the game of the hit… Esc stops* under it; **Esc** stops the looking. [Go](previews/go.md#finding-games) **Go games and chess opening books.** SGF files open like chess games (**Alt+K**, **F3** in the terminal app): a list of games with players, ranks, komi, handicap and result, each game on a board stepped through move by move, captured stones taken off, variations marked A, B, … and comments beside it; Find finds games by player or event. A Polyglot opening book (`.bin`) next to your PGN files, or the one *Settings → Previews → Opening book* names, lists its moves for every position on the chess board, and a book on its own shows its moves from the start position, to play through. **Read again once for search:** every `.sgf` file; nothing else is redone. [Go games](previews/go.md) · [Opening books](previews/chess.md#opening-books) **Plainer errors, and a few rough edges gone.** The status line says an error in plain words in your language (*No permission*, *Not found*, *The disk is full*) instead of `(os error 13)`, and for a file that would not open only the first line of what the opener said; the whole text goes to `helper.log`. Properties of a folder you may not list says *Could not be read: No permission* instead of *0 B in 0 files*. The git tool's notice says what really opened: a terminal, a shell in the terminal app, or nothing when no terminal was found. A `.h5` file opens in Netron only when its bytes hold a Keras model; other HDF5 files are shown as before. Removing a container image in Disk use reports only the space really freed, not the layers other images still share. Settings → Keys names Undo as *Undo*, not the operation it would undo. The chess filter's year and rating fields are as wide as their labels. The `.deb`, `.rpm` and AppImage menu entry lists Coxswain as a file manager and hands it the files and folders it is opened with. Each system's page says how to uninstall. [Properties](files/properties.md) · [Disk use](reference/disk-use.md#clearing) · [Neural network models](previews/neural-networks.md) · [Linux on ARM](systems/linux-arm.md#uninstalling) **LibreOffice is stopped at its time limit.** Reading an older Office file (`.doc`, `.ppt`, Visio …) for search stopped only LibreOffice's launcher after two minutes, and its `soffice.bin` could go on at full speed for days; now it ends with everything it started, as do OCR, calibre, ffmpeg, whisper and the other programs the helper and conversions run. A file that took too long is not tried again until it changes. [Scans, pictures and older Office files](search/scans.md#settings-and-configtoml) **Sorting by size puts folders in the order of their sizes.** **Ctrl+F6** and the desktop app's *Size* header now sort folders by the measured size the Size column shows, largest first, instead of by the folder entry's own few kilobytes, which put them in an order that contradicted the sizes on screen; folders not measured yet (or all, with folder sizes off) come after, by name, and the list sorts itself again as sizes arrive, the cursor staying put. The terminal app's marked total now counts a marked folder's measured size too, not its entry's 4 KB. [Sorting](panels/sorting.md#do-folders-sort-by-their-size) · [Marking](panels/marking.md#why-does-the-marked-total-grow-after-i-mark-a-folder) **Space looks its best.** In the desktop app each file is a soft gradient in the theme's own colours (Cyber's greens, cyans and ambers first), with thin gaps, rounded corners and darker frames for deeper folders; names show only where they fit, centred in big rectangles; tiny files are one grey block that says how many; the cursor is framed in the accent colour and lights the folders it is in; a zoom grows or shrinks the map; By type shows *<0.1 %* instead of 0. The terminal app draws flat colours with a darker edge between files, lighter folder rows and no half-block banding. [Space](panels/space.md#what-you-see) **Split says when a size makes too many parts.** A size that would cut a file into more than 100,000 parts (`1` is one byte) is refused with how many parts it would make and the limit, instead of asking for a size again. [Split and join](files/split-and-join.md#splitting-a-file) **The terminal app draws at once when it starts in a huge folder.** Its first panels were read before anything was drawn, so a folder of a million files showed a blank terminal for seconds; now the panels show `..` and *Working on …* at once, the keys answer, and the files fill in when read. [Performance](reference/performance.md#the-terminal-app) **Searching no longer waits on Find this position or the once-only look at long texts.** Find this position takes only the games it shows of a position millions of games reach, instead of sorting all of them while the search store waits; a big PGN file's old positions go a part at a time; and the one-time look for long logs after an update goes through the store 2,000 files at a time, letting searches in between. [Finding games](previews/chess.md#finding-games) **An older Coxswain no longer throws away a newer one's search store.** Going back to an older version left text search empty and read every file again; now it leaves `search.db` as the newer version made it, reads nothing, and a notice and Settings say why. Updating again finds everything, nothing read again. [I went back to an older Coxswain](search/text.md#i-went-back-to-an-older-coxswain-why-is-text-search-off) **Going back to an older Coxswain and forward again reads nothing again.** With Ghostscript or LibreOffice installed, each return from a version before this one read every `.ps`, `.eps`, `.wri`, `.wk1`, `.wks`, `.123`, `.sxc`, `.abw`, `.cwk` and `.numbers` file again, text and meaning, as if its program had just been installed. The helper now keeps its own list of the programs it found. Nothing is read or made again. [Scans, pictures and older Office files](search/scans.md#i-went-back-to-an-older-coxswain-and-forward-again-are-files-read-again) **Logs, CSV, text and code of any size are read for search.** They are read line by line until 4 MB of text is kept, so a 300 MB log costs a few megabytes of memory instead of 300; before, files over 20 MB (`text_max_size`) were found by name only. Those files, and only those left unread for their size, are read once when this version starts. [Documents it reads](search/documents.md#is-a-300-mb-log-file-read) **A marked Polyglot book offers Open games again in the desktop app.** With one `.bin` opening book marked (**Insert**), the action menu (**Shift+F10**) offers its games as it does with the cursor on it; the menu and the hints count marked files the same way in both apps, disk images known by their first bytes. [Chess games](previews/chess.md#opening-books) **Rename never changes a name you left alone, and failures are counted.** A newline, a tab or another control character in a name shows in Rename and Batch rename as its picture (`␊`, `␉`, `␛`) and is kept; text left as shown renames nothing, and a typed `␊` writes a newline. When a copy, move, delete, extract or pack of several items fails in part, its dialog says how many went through and how many did not: *3 of 4 copied; 1 could not be copied*. Both apps. [Move and rename](files/move-and-rename.md#what-you-see), [When something goes wrong](files/copy.md#when-something-goes-wrong) **The terminal app shows the whole explanation when making one folder like the other.** It is wrapped over as many lines as it needs instead of being cut at the window's edge. [Compare folders](files/compare-folders.md#making-one-side-like-the-other) **Compare folders keeps what a run did on the status line.** After *Make right like left* or *Make left like right*, the run's result (Copied 3, replaced 1, to the bin 1) stays in front of the compare's summary instead of being replaced by it, in both apps. [Compare folders](files/compare-folders.md#making-one-side-like-the-other) **A file out of a large .tar.gz or .tar.zst comes out at once.** The first time a `.tar.gz` is opened, Coxswain keeps a place to unpack it from every 4 MB, and for a `.tar.zst` of several frames where each frame starts; a file taken out later is unpacked from the place before it, not from the start (the last file of a 1.3 GB `.tar.gz`: 0.05 s instead of 2 s). A `.tar.zst` made by `pzstd`, or of several frames, now opens whole: before, only its first frame was read, or none. A `.tar.gz` opened before is listed as it was until it changes. [Archives as folders](files/archives.md#limits) **A big compressed tar opens at once the second time.** What a `.tar.gz`, `.tar.xz`, `.tar.bz2` or `.tar.zst` holds is kept in the cache after the first look, also for later runs, and a file of a `.tar.xz` made in blocks is unpacked from its block, not from the start of the archive. [Archives as folders](files/archives.md#limits) **A folder of broken files no longer restarts Apache Tika for each one.** A file Tika answers it cannot parse now counts as ten files toward a fresh server, instead of stopping the server at once, and a server that crashes on file after file is started at most three times a minute. [What the container may do](search/tika.md#what-the-container-may-do) **Tokio 1.54.1.** The async library under the update check, model downloads and the desktop app moves past a race in its timers (RUSTSEC-2026-0384); 1.54.0 was withdrawn. [Privacy and updates](reference/privacy.md) **A sound file that claims to be far longer than it is no longer keeps Whisper busy.** Transcripts stop at the real end of the sound: a part shorter than ten minutes ends the file, and its length is cut to it, instead of going on ten minutes at a time over silence until the length its header claims (ten hours of nothing for a five-second file). [Pausing, the battery and changed files](search/transcripts.md#pausing-the-battery-and-changed-files) **The terminal app no longer freezes on a huge folder.** A folder that takes longer than a moment to read (hundreds of thousands of files) is read in the background: the panel shows `..`, the status line says it is being read, and the keys keep working. [Performance](reference/performance.md#the-terminal-app) **The docs match the terminal app again.** They now say that its panels follow changes on disk by themselves, why **Ctrl+F3** never reaches it from xterm-style terminals (use **F9** → *Sort by name*), how the extract and pack boxes read, and *Open games* (**Alt+K**) is listed under *Viewing and editing*, where F1 and F9 have it. [Moving around](panels/moving.md#in-the-terminal-app) · [Sorting](panels/sorting.md#ctrlf3-does-nothing-in-my-terminal-why) · [Every default key](panels/keys.md#viewing-and-editing) **Terminal app fixes from a user-test round.** **F3** on a Find hit opens it in the viewer (and **Esc** comes back to Find), and **Ctrl+U** clears Find's field; a name with a newline or an escape in it is shown with `?`, so the panel stays straight and nothing in a name reaches the terminal; **F6**, **F7** and **F8** in a git history say it is read-only at once instead of asking first; a wrong archive password is asked again with *That password did not open it*; **F4** with no editor installed takes the first one there (vim, nano …) or says which is missing; `?` in **+** / **-** matches one letter such as "ø"; the info line keeps the file's name in a narrow panel; *What's new* in Settings shows the start of a version's notes. [Find](search/find-file.md#keys) · [View and edit](commands/view-and-edit.md#questions) · [Marking files](panels/marking.md#questions) · [The screen](panels/the-screen.md#what-you-see) **Small fixes found by trying the apps.** Compare folders keeps its summary on the status line when *Show the differences only* is chosen, in both apps; removing a folder or pattern named twice in `config.toml` from *Settings → Finding files* removes that one entry, not both, so the folders read do not fall back to the whole home; a cleared container image is named without its digest, so the space freed shows on a terminal's line; Alt+G with a terminal git tool and no terminal names the tool instead of saying none is installed. [Compare folders](files/compare-folders.md) **The Subversion and CVS history question names Settings → Privacy and updates,** the area where its answer is forgotten, by its full name. [Subversion](panels/subversion.md#history-from-the-server) **The terminal app's viewer finds what is far down a big file it has just opened.** A search started while the viewer was still finding the lines stopped with *Not found yet: the file is still being read*; it now goes on over the lines as they are found. [View and edit](commands/view-and-edit.md#the-built-in-viewer) **Safer update check.** The library that checks the update server's certificate no longer accepts certificates that lead to a distrusted intermediate (RUSTSEC-2026-0382). [Privacy and updates](reference/privacy.md) **Let the rest go while transcribing.** The *Speech* line in Settings shows **Let the rest go** beside **Pause** and **Go on**, so the files waiting can be dropped while one is under way or paused (terminal app: **Delete** on the line). [Transcripts of speech](search/transcripts.md#pausing-the-battery-and-changed-files) **Chess pieces as pictures in Windows Terminal.** The terminal app asks Windows Terminal (1.22 and later) whether it draws sixel, through the console, and draws the desktop app's pieces on the board there; the old console keeps block characters. [Pictures, where the terminal shows them](previews/game-pieces.md#pictures-where-the-terminal-shows-them) | | **2.32.1** | 2026-10-20 | **A security fix, and fixes from the 2.32.0 test round.** **Security:** in the desktop app a LaTeX file's name could run a command: a name starting with `-` was read by latexmk as an option, on a build that starts by itself. The document now goes as `./name`, a name the shell would act on is built without latexmk, and `% !TEX root` is followed only inside the project ([LaTeX projects](previews/latex.md#what-coxswain-works-out)). **No lost files:** a move (**F6**) of a folder into an archive is refused when it holds a link, a pipe or a device the archive would leave out; Find duplicates scans a ticked folder inside another ticked folder once, so on Windows no file is its own duplicate; a failed folder copy leaves nothing behind and copied files keep their date; copying a pipe no longer hangs; a crafted 7z can no longer fill the memory; **Ctrl+E** leaves out a tar's links, and on Windows names such as `NUL` are not written ([Copy](files/copy.md#what-you-see)). **No freeze, no crash:** the terminal viewer no longer stalls on a long line of hits, and a search through a huge file shows how far it is (**Esc** stops it); Space, folder sizes and the file name index get through thousands of nested folders; Space draws in a terminal 20 to 30 columns wide; a broken PSD is refused ([View and edit](commands/view-and-edit.md#the-built-in-viewer)). **Chess and search:** a PGN file with a byte order mark no longer shows an empty first game, a null move (`--`) passes the turn, a file dated in the future gets its vectors, and an older Coxswain leaves what a newer one's code reader read ([Chess](previews/chess.md#files-it-reads)). **Desktop app:** a fast scroll in the table of games no longer leaves it at an older place, and a tag, a note, F4 with no editor or a session that cannot be saved now say why in the status line ([Chess games](previews/chess.md#the-table-of-games)). **OpenBSD and NetBSD:** the install script and the notice name OpenBSD's `gst-plugins-good`, and NetBSD's rc.d script no longer warns at boot ([OpenBSD](systems/openbsd.md#the-packages-and-what-each-is-for) · [NetBSD](systems/netbsd.md#from-boot-with-rcd)). Nothing is read or made again. | | **2.32.0** | 2026-10-20 | **Where the space goes, chess games, old files and pictures, disk images, about 200 programming languages, a built-in viewer, and Norwegian.** **Alt+U** shows a folder or a drive as a treemap coloured by kind, with the bytes by type and the 100 largest files, on one disk ([Space](panels/space.md)). PGN chess files (also `.pgn.gz`, `.pgn.zst`) open as a table of games and a board with figurine notation, **Alt+K** ([Chess games](previews/chess.md)). Old pictures and files show without anything installed: TIFF, TGA, Netpbm, DDS, HDR, OpenEXR, QOI, JPEG XL, Amiga IFF, PCX, XPM, XBM, Photoshop, CBZ comics, MBOX mailboxes, Outlook `.msg`, dBase tables and tracker music ([Old pictures and files](previews/old-formats.md)). Disk images (`.iso`, `.dmg`, `.vhd`, `.vhdx`, `.vmdk`, `.qcow2` …) show their facts, and with *Open disk images like folders* on and 7-Zip installed open read-only like folders, with CHM and CBR ([Disk images](files/disk-images.md)). **Alt+P** makes a scanned PDF searchable, and Typst, PostScript, XPS, D2 and ten more diagram kinds, old office files and clip art preview through installed programs or sealed containers ([Make PDF searchable](files/searchable-pdf.md) · [Containers](previews/containers.md#the-images)). Code in about 200 languages is highlighted in both apps, old ones too, and **F3** in the terminal app opens a built-in viewer with search ([Text and code](previews/text-and-code.md#languages) · [View and edit](commands/view-and-edit.md#the-built-in-viewer)). Norwegian in Bokmål and Nynorsk, 31 languages in all, and a Norwegian system no longer gets Danish ([Languages](customise/languages.md#the-languages)). Copying a folder out of a disk image is safe with any 7-Zip, and the terminal viewer searches files of long lines a few megabytes at a time. A file an app keeps saving no longer shows as "1 file to go" for search by meaning ([Search by meaning](search/meaning.md#why-does-it-say-a-file-is-changing)). **Read again once for search:** `.ps`/`.eps`; with LibreOffice installed `.wri`, `.wk1`, `.wks`, `.123`, `.sxc`, `.abw`, `.cwk`, `.numbers`; files with the newly known code endings (`.cob`, `.for`, `.bat`, `.mod`, `.pro`, `.inc` …); every PGN file; every `.msg` and `.dbf` file. Nothing else is redone. | | **2.31.5** | 2026-10-19 | **Quicker with many hits, calmer while files change.** Find in the terminal app stays quick with thousands of hits: only the lines on screen are drawn. The desktop app reads a folder again at most every two seconds while something keeps writing into it, as the terminal app does, instead of four times a second. A meaning server's address in a message never shows part of a password or a token in its query. The terminal app's hint on showing hidden git secrets is only spent when there is one to show. [Find file](search/find-file.md) **A hung cloud mount no longer freezes the terminal app.** **Alt+F1** and **Alt+F2** wait at most a moment for the cloud folders: when a mount whose server has gone (rclone, sshfs, gvfs) does not answer, the list opens without the clouds and the status line says so. The desktop app's sidebar leaves them out until the mount answers again, instead of waiting on it every 30 seconds. On FreeBSD, the other BSDs and illumos, a folder made inside a new folder while Coxswain was reading it is now followed for changes too, and a folder that cannot be followed is named once in `helper.log` and no longer counts against the number that can. Nothing is read or made again. [Clouds](organise/clouds.md#why-does-altf1-say-the-clouds-did-not-answer) | | **2.31.4** | 2026-10-19 | **Newer libraries.** The model tokenizer (tokenizers 0.23) and the 7z and xz readers (sevenz-rust2 0.24.1, lzma-rust2 0.23) are newer, as are the other Rust and web libraries, and the builds use Node 24. Nothing changes in how you use Coxswain. [Archives](files/archives.md) | | **2.31.3** | 2026-10-19 | **Safer git config and image updates.** The terminal app no longer closes when **Alt+C** shows a git config with a curly quote, a guillemet or another non-ASCII character right before an address (`!xdg-open “https://…”`). A token used as the user name in an http(s) address (`https://ghp_…:x-oauth-basic@github.com`, `https://:@dev.azure.com`) is now hidden as `••••` too, as is the whole user part of such an address, and so are query keys like *jwt*, *ticket* and *pat*, keys ending in *pat* or *bearer*, and a `credential.helper` shell line with `--pat` or a token in it. An image update never removes the only copy of an image when the runtime cannot say which copy it now has; every image is tried even after one fails, and one image that always fails no longer makes the others pull again every hour. The terminal app's update check no longer writes over notices you dismissed or folders it noted while it waited for GitHub. [Git config](panels/git-config.md#hidden-secrets) · [Containers](previews/containers.md#keeping-images-up-to-date) | | **2.31.2** | 2026-10-19 | **The update notice says when your channel gets a release later, and knows Nix.** WinGet, Flathub, Termux and nixpkgs take a new version a few days after GitHub, so their upgrade command could find nothing: the notice now adds *it can reach WinGet a few days later; or the release page*, in both apps. A copy run from `/nix/store/` is recognised and gets `nix profile upgrade coxswain` instead of the releases page. [Update checks](reference/updates.md#the-command-finds-no-new-version) | | **2.31.1** | 2026-10-19 | **Both apps hear of a new version sooner.** Each app now asks GitHub for a new version every time it starts, then once a day while it is open. Before, a start within a day of the last answer did not ask, and the terminal app asked only when it started, so one left open for days never heard; it now looks every hour too and names each new version once in the status line. Nothing else is sent. [Update checks](reference/updates.md) | | **2.31.0** | 2026-10-19 | **The git config, as git uses it.** **Alt+C** (also in **F9**, the action menu, the git line's right-click menu and the preview pane) shows every git setting that holds in the panel's folder: its value, its scope (system, global, local, worktree, command line, included) and the file it comes from, with values set earlier dimmed below the one that counts. Passwords and tokens (in URLs, `http.extraHeader`, keys named like *password* or *token*) show as `••••` until **Enter** or *Show*, and a copied line stays hidden until then. **F4** opens a line's file in your editor; **Alt+G** opens your git tool to change it, as Coxswain only reads. Outside a repository: the system and global config. Both apps. [Git config](panels/git-config.md) | | **2.30.0** | 2026-10-19 | **Container images kept up to date, and removed when unused.** *Settings → Previews → Keep images up to date* (Off, Weekly, Monthly; `[preview] image_updates`) has the desktop app pull the newest version of the preview images you already pulled, in the background and never on battery, and remove the copy each one replaced, by its own id, so no other image of yours is touched. *Remove images not used for 90 days* (`[preview] image_prune`) frees the room of an image no preview needed for that long. Both are off until you turn them on, and Settings names the registry they reach. Each image in *Container images* and in Disk use now says what it gives, how big it is (TeX Live: about 2.8 GB to download, 5.9 GB on disk) and what it costs. [Containers](previews/containers.md#keeping-images-up-to-date) | | **2.29.0** | 2026-10-19 | **Clouds.** Your cloud accounts, one entry each, like drives in a file explorer: *OneDrive – Personal*, *OneDrive – Contoso*, *Google Drive – you@example.com*, *Dropbox – Personal*, *Nextcloud – me@cloud.example.com*, *iCloud Drive*. In the desktop app they are a *Clouds* section of the sidebar; in the terminal app **Alt+F1** and **Alt+F2** list them, as *Cloud: …*. Coxswain finds them only from what is on the machine: rclone, onedriver and davfs2 mounts and GNOME's *Online Accounts* on FreeBSD and Linux, Nextcloud's and ownCloud's sync folders and Dropbox's everywhere, `~/Library/CloudStorage` and iCloud on macOS, and the sync roots on Windows. It never logs in to a cloud or asks one anything. [Clouds](organise/clouds.md) | | **2.28.1** | 2026-10-19 | **`cargo install coxswain --version X` installs X.** Installing an older version from crates.io built it with the newest Coxswain library instead of its own, so `coxswain --version` (and the app) were a mix of two versions. The app now asks for its own library's version exactly. Versions before this one still mix when installed by number; install this one or newer. [Updates](reference/updates.md) | | **2.28.0** | 2026-10-18 | **Scripts in the terminal app too.** The programs in your `scripts` folder next to `config.toml` are now in the terminal app's **F2** menu as well, after your own entries, run on the marked files (or the file under the cursor) as full paths, on the real terminal, so a script can ask questions and its output stays until you press **Enter**. A new row in **F2** in both apps, *Open the scripts folder*, takes the active panel there and makes the folder when it is missing. Only files that really are in that folder run; a link to elsewhere is refused. [Scripts](commands/scripts.md) | | **2.27.9** | 2026-10-18 | **draw.io diagrams with maths show again.** A diagram with maths turned on stayed blank in the desktop app's preview: draw.io's viewer waited for its maths library, which Coxswain does not ship. It now draws the diagram at once, with the formulas as their TeX text. The draw.io viewer is now v32.0.2 and KaTeX, which draws maths in Markdown and notebooks, 0.19. [Diagrams](previews/diagrams.md#why-does-a-formula-in-a-drawio-diagram-show-as-tex) | | **2.27.8** | 2026-10-18 | **The desktop app asks before deleting where there is no bin.** On illumos, from another ZFS dataset than your home folder's, **F8** in the desktop app now does what the terminal app does: it says *No bin on this disk: delete "photo.jpg" for good?* and asks, even with *Ask before deleting* off, instead of failing to move the files to the bin. Both apps now copy, move, delete, pack and extract the same way underneath, and the desktop app measures the sizes of the folders a copy or extract changed again when it ends. [Delete](files/delete.md) | | **2.27.7** | 2026-10-18 | **A busy search helper that still answers.** While the helper makes the vectors for search by meaning (hours on the processor for a big home folder), it stops every minute to read the files you saved, so they are found by their words within a minute, not when it is done. A search by meaning during that time no longer holds up the helper's other answers, so Find, Settings and the terminal app no longer give up waiting for it. The helper counts the files for Settings and the terminal app only when the store has changed, the desktop app answers hints from memory instead of reading `state.json` each time the cursor moves, and a folder's summary in the preview counts the folder without building the whole listing. Nothing is read or made again. [Search by meaning](search/meaning.md) | | **2.27.6** | 2026-10-18 | **A lighter terminal app.** It no longer starts git for both panels at every change on disk: only a panel whose folder or repository changed reads its git line again, and never twice at once for the same folder, so a build in a big repository no longer piles up `git status` runs. Drawing the screen no longer looks at the disk, so a network share that stops answering no longer freezes it; the panel title and a link's target are read once, when you enter the folder or reach the link. Settings no longer walks the built-in models' folders twice at every key, and Find works out whether Ask is slow once a second instead of at every redraw. Less work for the processor while you wait. [When it updates](panels/git.md#when-it-updates) | | **2.27.5** | 2026-10-18 | **Fixes for quitting, hidden files, database previews and model servers.** In the terminal app, **F10** while a copy or move is still running says so, and a second **F10** quits at once, so a copy stuck on a network disk that no longer answers cannot keep you in; *Show hidden files* in Settings now shows or hides them straight away; swapping the panels with **Ctrl+U** no longer lets one panel's folder sizes stop the other's; and a closed terminal no longer leaves it spinning after **Ctrl+O**. A database preview stops counting after two and a half seconds for the whole file, not per table, so a big one no longer holds up **F3**. A config.toml from 1.x that writes `keys = { … }` or `search = { … }` on one line is updated like the others. Search by meaning stops a pass at the first expired key, missing model, *too many requests* or server error, instead of asking again for every file, and the error goes away once a search is answered again. In the desktop app a slow folder can no longer show up after you have moved on to another, nor a folder's summary in the preview under the wrong one. The ZFS snapshot difference is capped in time and size. [Copy](files/copy.md) · [Servers](search/servers.md) | | **2.27.4** | 2026-10-18 | **Nothing lost to a near miss.** Duplicates no longer calls two folders identical when one has a `.git` or `.env` the other lacks (with hidden files off they were not compared), so a folder can no longer go to the bin with its repository. A file changed twice within a second is hashed again, not taken for its old contents. Batch rename stops instead of writing over a file that appeared after the preview. Copy and move refuse a folder into itself also through a link (FreeBSD's `/home`), and so does a rename inside an archive. `state.json` is saved safely when the terminal and the desktop app save at once; one that cannot be read is no longer replaced by defaults, and a second damaged one no longer replaces the first `.bad`. The desktop app no longer undoes hint counts, *Reset hints* or notices dismissed by the terminal app. inout 0.2.4 replaces the withdrawn 0.2.3. [Duplicates](files/duplicates.md) | | **2.27.3** | 2026-10-18 | **File names stay file names, whatever your shell.** F2's entries, **F3** and **F4** with a viewer or editor of your own, **Enter** on a program and a command of your own in `[git] tool` now run in `sh` in both apps, not in your `$SHELL`: with fish (or nushell, xonsh, elvish) a file named `x\';echo hi;#` could end the quoting and run `echo hi`. The line you type on the terminal app's command line still runs in your `$SHELL`, and **Ctrl+Enter** now quotes the name it adds the fish way when that shell is fish. On Windows a quoted path such as `"C:\Users\First Last\notes.txt"` reaches the program whole, a file named `%USERPROFILE%.txt` is no longer read as another name. And `%f` gives a name that starts with `-` as `./-name`, so no program takes it for an option. [User menu](commands/user-menu.md#settings-and-configtoml) | | **2.27.2** | 2026-10-18 | **Previews that cannot be turned against you.** A file named `.pdf` that is really a web page no longer runs as one in the desktop app's preview: the app's file protocol never serves HTML or XML, shows such a file as plain text, opens only real PDFs in the PDF viewer and sandboxes everything else. A Markdown file, notebook, Word document or book can no longer restyle the window or cover it with its own content: its style sheets are dropped and what it draws stays inside the preview. A file over 512 MiB is never read whole into memory, and a document too large to preview is refused before it is read. [Safety, speed and limits](previews/safety.md#what-a-preview-never-does) | | **2.27.1** | 2026-10-18 | **The docs are in sync again.** Every page now names **F12** for the terminal app's Settings, the line Ctrl+O leaves, the size on `..`, the git facts and **Alt+G**; the pages for each system have an area of their own, *Systems*, and notices moved to *Panels and keys*; diagrams show what each area holds, how search works, how a preview is made, what git does, how Settings and `config.toml` meet, and which install suits your system. F1 → Features has FreeBSD, and its texts follow your keys. The terminal app's action menu and command list show **F12** for Settings, not Ctrl+, which most terminals never pass on. [Docs index](README.md) | | **2.27.0** | 2026-10-18 | **Open in your git tool.** Coxswain shows version control and only switches branches or makes new ones; for commit, push, pull and the rest, **Alt+G** (also in **Shift+F10**, **F9** and, in the desktop app, a right-click on the git line) opens the repository in your own tool: the first installed of lazygit, gitui, tig and the desktop clients (GitHub Desktop, GitKraken, Sublime Merge, Fork, Sourcetree, gitg, git-cola, git gui, gitk, per system), else a terminal there. The terminal app runs a terminal tool in place of the panels and reads them again after; the desktop app opens it in a terminal window. *Settings → Behaviour → Git tool* (`[git] tool`) names one, or a command of your own. [Open in your git tool](panels/git.md#open-in-your-git-tool) | | **2.26.1** | 2026-10-17 | **Settings you can find in the terminal app, and a word when the panels hide.** The terminal app's key bar ends in *12 Settings*: **F12** opens Settings in every terminal, where most never pass **Ctrl+,** on (the desktop app takes **F12** too). Settings is also near the top of the **Shift+F10** action menu, and a hint names its keys the first few times. **Ctrl+O** no longer just makes the panels vanish: a line under the output says *Panels hidden · any key brings them back*, or that no command has run yet. And F1's line now calls the coxswain what it is: the one at the helm, in every language. [Opening Settings](customise/settings.md#opening-it) | | **2.26.0** | 2026-10-17 | **How far behind, and as of when.** Hover the git line in the desktop app, or put the cursor on `..` in the terminal app, for the branch's upstream with the commits ahead and behind, the time of the last fetch and the remote's URL (with any password or token left out). A repository's folder in a listing, such as a project in `~/projects` or a submodule, shows its git line and the same facts when you hover it or put the cursor on it. They are read only when you point at them, never for a whole folder, and Coxswain still never fetches. [Upstream, remote and last fetch](panels/git.md#upstream-remote-and-last-fetch) | | **2.25.0** | 2026-10-16 | **Themes in groups, and a word about your graphics card.** Settings in both apps lists the 33 themes the way the languages are listed by region: Coxswain's own, the file managers of the DOS years, Windows, Mac, other desktops and home computers, then your own. A PC with a graphics card and no model server is told, in the setup guide and once as a notice, that a local Ollama would run search by meaning and Ask on the card much faster, with the install line for FreeBSD (`pkg install ollama`, Vulkan), Linux or Windows; Intel cards and FreeBSD's AMD and Intel cards are now detected. `..` shows the size of the folder above when it is already known. [Themes](customise/themes.md) · [Setup](search/setup.md#a-graphics-card-and-no-server) · [Folder sizes](panels/folder-sizes.md) | | **2.24.4** | 2026-10-16 | **FreeBSD tried by hand, and what it found.** Find shows names in folders made since the search helper started within a second on FreeBSD, the other BSDs and illumos (and new top-level folders on Linux), and lists a name that is exactly your query first, then hits in your home folder. The desktop app's sidebar shows the right free space on the BSDs; `coxswain-gui --version` and `--help` work, and without a display it says so instead of crashing. Folder sizes update after copy, move, delete, new folder, pack, extract and undo, in both apps; after **Ctrl+Z** the cursor is on what came back; Properties shows owner and group by name. On the BSDs and illumos, Previews names the program to install instead of podman or docker, and *Never indexed* lists that system's own folders. An older Coxswain no longer throws away the vectors a newer one made. sevenz-rust2 0.24 (a 7z written with a CRC of exactly 0 opens again) and zip 9.0.4. [FreeBSD](systems/freebsd.md) | | **2.24.3** | 2026-10-16 | **A full review: crashes, lost settings and slow spots fixed in both apps.** Settings no longer replace a config.toml they cannot read, and every config write is safe if it stops half way. No more crashes in the terminal app's Find and menu, when packing a .tar.zst to a full disk, on odd certificate dates, or on deeply nested e-mail in the desktop preview. Duplicates can no longer move the last real copy to the bin. Every git call runs one program instead of two, the search helper does much less work for each status, an idle Find redraws far less often, and crafted PDFs, presentations and books no longer hold up the indexer. A key you bind leaves the action it was a default of, and a key bound twice is refused. Batch rename is all or nothing, and catches names Windows refuses. Cancel stops a model download at once. EPUB previews follow chapter links with `../` and `%20`, and on Windows Ctrl+Enter quotes names so `cmd` takes them. Many more messages are in your language. Search by meaning makes every file's vectors once again after the update, because code is now cut into passages of whole items. zip 9 replaces the withdrawn zip 8. [Changelog](changelog.md) | | **2.24.2** | 2026-10-16 | **Install scripts and release downloads, put right.** `cargo install coxswain` needs `--locked` for now: a library the built-in models use asks for a version of zip that its makers have withdrawn, and only the lock file shipped with Coxswain still names it. The docs and the update notice now say `cargo install --locked coxswain`. The install scripts check for the Rust that Coxswain's dependencies really need, fetch native Rust on Windows on ARM, install the right WebKitGTK on openSUSE, pick the newest archive by number with `--from`, no longer sit silent for two minutes on FreeBSD while they look up the latest release, and the FreeBSD uninstall names `~/.local/share/coxswain`. The terminal archives for FreeBSD, the other BSDs, Linux and macOS are about 13 MB smaller, because `cox` is now a link. The Homebrew formula and cask can no longer go out with a missing checksum. The docs now list the actions, settings, flags and questions they missed. [Install](../README.md#install) | | **2.24.1** | 2026-10-15 | **Commodore 64 in Colodore colours.** The theme now uses the Colodore palette, the colours of a PAL C64 as measured on its monitor, instead of the C64-Wiki values: a bluer blue, and brighter light blue, yellow and light green. [Themes](customise/themes.md) | | **2.24.0** | 2026-10-15 | **The classics: fifteen more themes, and a tube for any of them.** Amiga Workbench 1.3, the home of Directory Opus, with a look of its own; XTree Gold, DOS Shell and Midnight Commander beside Norton Commander blue; the home computers Commodore 64, ZX Spectrum, Amstrad CPC, MSX, BBC Micro and Atari ST (with a GEM look); Amber and Paper white beside Cyber; NeXTSTEP and BeOS with looks of their own, and OS/2 Warp. `crt = true` in a theme of your own puts Cyber's scanlines and glow over any look. [Themes](customise/themes.md) · [Looks](customise/looks.md#the-tube) | | **2.23.1** | 2026-10-14 | **TLS library brought up to date.** rustls 0.23.46 closes four advisories published today (RUSTSEC-2026-0346 to 0349: a `Debug` print that could show session secrets, data sent on after a rejected ECH, an oversized certificate allocation, and a key-exchange downgrade), in every connection the apps make: the update check, model downloads and remote model servers. No advisories open. [Security](reference/security.md) | | **2.23.0** | 2026-10-14 | **Measure the speed of search by meaning.** *Measure speed* on the *Meaning* line of Settings → Finding files (both apps), or `coxswain --meaning bench`, embeds 64 passages with your model and says how many a second it does and what the files still to go would take; `coxswain --meaning bench URL MODEL` tries another server first, without changing anything. [Search by meaning](search/meaning.md#how-fast-is-it-here-and-would-another-model-be-faster) | | **2.22.1** | 2026-10-14 | **Search by meaning: a time left that holds, and dense files cost less.** The time left in Settings and Find counts the passages still to go, not the files, so a few long files at the head of the queue no longer turn it into a thousand hours. A server is shown at most 1,200 characters of a passage (2,000 before): prose is never that long, a line of minified JSON or paths was three passages' worth. An app whose helper is busy with a big change waits for it instead of switching to its own index until restarted, and a helper that finds the store locked for a moment waits too instead of leaving reading off. [Search by meaning](search/meaning.md#why-does-it-find-nothing-yet) | | **2.22.0** | 2026-10-13 | **A progress bar for search by meaning.** While files are still to be read, the *Meaning* line of Settings → Finding files shows a bar with the percent done (both apps), and Find's footer says *meaning for 8,120 of 31,208 (26 %)*. [Search by meaning](search/meaning.md#what-you-see) | | **2.21.0** | 2026-10-10 | **Ask says when it reads less than it could.** The servers tell how many tokens a chat model takes; when Ask gives it less than half, Settings → Ask and the setup guide say so under the model, with a **Use …** button (both apps), and when Ask asks for more than the model takes, the line says the server will refuse and the button sets what fits. [Ask](search/ask.md#can-ask-read-more) | | **2.20.5** | 2026-10-10 | **Ask reads your files, not your translation tables.** String tables (`locales/*.json`, `.po`, `.resx`, an `i18n/` folder) no longer fill Ask's sources when a question names something an app shows, and the model is told to name only files the sources show, never to invent one. [Ask](search/ask.md#why-does-ask-never-quote-my-translation-files) | | **2.20.4** | 2026-10-10 | **Bundled viewers up to date.** KaTeX 0.18.11, marked 18.1 and Asciidoctor 4.1.1 in the desktop app's previews; the Rust toolchain action in CI follows. | | **2.20.3** | 2026-10-10 | **Buttons easier to read in the dark themes.** Close, OK and the other lit buttons of Dark, Nord, Tokyo Night, Windows 11 (dark) and macOS (dark) are semibold: dark letters on a pastel accent were hard to read at the usual size. Your own theme gets it with `bold = true` on its `accent` slot. [Your own theme](customise/own-theme.md) | | **2.20.2** | 2026-10-10 | **Search by meaning indexes build output much faster, or not at all.** A passage is at most 2,000 characters: a line of minified JSON or a list of paths used to be one "word" of thousands of tokens, and a server read all of it, so a few such files took hours. MSBuild's `obj` folders are left out by default, as `target`, `build` and `dist` are. [Search by meaning](search/meaning.md#how-it-works) | | **2.20.1** | 2026-10-10 | **No more black boxes on Windows.** The desktop app ran git, converters and its commands in console windows that flashed up empty, one per program; now none shows. The terminal app is unchanged, so an editor it starts still has its terminal. [View and edit](commands/view-and-edit.md#why-did-empty-black-windows-pop-up-in-the-desktop-app-on-windows) | | **2.20.0** | 2026-10-08 | **A model for code questions.** Settings → Ask → *Model for code questions*: questions about code can go to a model made for code, such as qwen3-coder, on the same server; *Same as Ask* stays the default. It is recommended only where it runs well on this machine (a graphics card that holds it, a Mac with the memory), and the line under the list says why, with the card and its memory. [Ask about code](search/ask-code.md#a-model-for-code-questions) | | **2.19.0** | 2026-10-08 | **Ask knows a question about code.** When most of what it found is code, or the question names something in code (`a::b`, `name()`, a path), the line over the sources says *Code question*. No model decides it, in any language. [Ask about code](search/ask-code.md#a-question-about-code) | | **2.18.0** | 2026-10-08 | **Ask reads code as code.** Files of code, in any language, are cut at their functions and classes with their lines and indentation, each named after its item, and a question about a project's architecture, frameworks or libraries gets a map of it: each file with what it says it is and its public items, and what its project files say it uses. Search by meaning renews its vectors once. [Ask about code](search/ask-code.md) | | **2.17.0** | 2026-10-08 | **On a Mac, a tip when a server has more.** Ollama, LM Studio (MLX) and llama.cpp run on Metal too: when one has a larger chat model than your built-in one (`qwen3:30b-a3b`, larger and quicker) or a stronger embedding model (`bge-m3`, `qwen3-embedding`), Settings and Find say so in grey with a **Use …** button, and the setup guide lists the server's models first. Without a server nothing changes. [The built-in chat model](search/ask-builtin.md#on-a-mac-a-tip-when-a-server-has-more) | | **2.16.0** | 2026-10-08 | **See what Coxswain keeps on your disk, and get the room back.** Settings → Privacy and updates → Disk use (**F9** → *Disk use*) lists the search store, the name index, previews, archive copies, LibreOffice profiles, the helper's log and the built-in models, each with its size, where it is, what clearing it costs, **Show in panel** and **Clear**; *Clear everything that can be built again* frees the lot in two clicks. Tectonic's cache and container images Coxswain pulled for previews are listed too, and go only when you tick them, after the exact list is shown. The preview (and **F3**) of `index.bin` and `search.db` now says what they hold: entries, folders, when built, files read by kind, vectors, errors, size per part. In the terminal: `coxswain --disk` and `coxswain --disk clear`. [Disk use](reference/disk-use.md) | | **2.15.0** | 2026-10-08 | **Ask and search by meaning use your graphics card when they can.** When Ollama, Lemonade or another server here runs a model on the graphics card, it is the one recommended and preselected, never a built-in model on the processor; a built-in model that is slow here says so in red in Settings and under Find's Ask row, with the speed and a **Use qwen3:8b** button. Settings → Ask has one list of every chat model, the server's and the built-in ones, under where each runs. Settings → Finding files → Built-in models lists the models on the disk, with their folder, whether they are loaded and when they were last used, to unload or delete; `coxswain --models` does the same in the terminal. An unknown option on the command line is said, with the closest one. [Built-in models](search/models.md) | | **2.14.0** | 2026-10-07 | **A bigger built-in chat model for Ask.** Qwen3 14B (8.4 GB, downloaded once from huggingface.co) knows more and reasons better than Qwen3 4B, and reads twice as much of your files on a Mac's GPU. The guide recommends it on a Mac with 32 GB or more; Settings → Ask lists only the models that fit the machine, each with the memory it needs. *Let the model think first* now works with the built-in Qwen3 1.7B and 14B too, on a Mac's GPU. [Ask without a server](search/ask-builtin.md) | | **2.13.0** | 2026-10-07 | **Features and questions.** **F1** has a second tab (**Tab** in the terminal app): every feature by area, each with a line on what it does, its keys as your config has them, and two or three of the questions people ask, answered in a sentence or two, in every language. Type to filter (case and accents do not matter); **Show me** opens the feature's docs page on GitHub, only when pressed, and the terminal app also copies the address. **F1** inside a dialog (Copy, Settings, the command list …) opens it at that dialog's feature; it is also in **F9** and the action menu. [Features and questions](panels/features.md) | | **2.12.0** | 2026-10-07 | **Ask reads much more before it answers.** It fills the chat model's context instead of taking ten passages: about 2,500–3,000 words with a server's model, each hit with the passages before and after it, and more from the files that match best. A question about the whole folder (*what is this repository's code about?*, *give me an overview*, in the app's languages) also gets the README, the project files, the folder tree and the docs index. A line over the sources says how much was read (*12 excerpts from 10 files, about 2600 words*), and *Context for a server's model* under *Settings → Ask* (`ask_context`, 8,192 tokens) lets a larger server read more, in both apps. [How much it reads](search/ask.md#how-much-it-reads) | | **2.11.0** | 2026-10-07 | **Nothing hidden.** Find shows its scope as a choice of two, *Everywhere* or *In * (buttons in the desktop app, `[everywhere \| in rocket]` in the terminal app, the one in force lit), and the empty field says which key flips it; the first few times a hint says **Ctrl+F** again searches only this folder. The action menu (**Shift+F10**) now also offers Find, Search inside files, Ask, Find duplicates, Swap panels, Other panel here, Panels on/off, Colour tag, Folder notes and Git worktrees where they fit, and new hints name **Ctrl+F**, quick search (**Alt+letter**) and the panel keys. In the desktop app the preview has a **×** that closes it (as **Esc** does), each favourites group has a **⋯** with Rename and Delete, a tab's tooltip says middle-click closes it, F1 explains quick search, Left/Right in each view and Ctrl+right-click, and Settings → Keys opens `config.toml` at `[keys]` and shows the F2 scripts folder. [Finding what Coxswain can do](panels/README.md#finding-what-coxswain-can-do) | | **2.10.1** | 2026-10-07 | **F2 comes with entries that fit your system.** *Open a terminal here* (**t**) opens a terminal in the panel's folder (`$TERMINAL` or the one installed on the BSDs, illumos and Linux, Terminal on macOS, Windows Terminal or PowerShell on Windows), *SHA-256 of the file* (**h**) shows the file's hash with the system's own tool, and *git status* (**s**) is offered inside a repository; an entry that does not fit is left out. The last row, *Add your own command…* (**+**), opens `config.toml` in your editor at `[[user_menu]]`, with the built-in entries written there as a commented example first. The old *git log*, *git diff* and *git blame* entries are gone: **Ctrl+G** and **Alt+B** do that now. Your own `[[user_menu]]` stays as it is; a new `when = "file"` or `"git"` offers an entry only where it fits. [The user menu](commands/user-menu.md) | | **2.10.0** | 2026-10-07 | **Undo.** **Ctrl+Z** undoes the last file operation, in both apps: a copy (the copies go to the trash), a move or rename, a batch rename, a new folder, a move to the trash (put back where it was; not on a Mac or in the Flatpak, which say so), a pack or an extract, up to 20 back in the same run. Each file is checked first: one that changed since, or whose old place is taken, is left as it is with a reason, and nothing is ever overwritten. The status line says *· Ctrl+Z undoes it* after each, and F9 shows what Ctrl+Z would undo. **Shift+F8** stays for good. On illumos, **F8** works: it failed with *Mount points cannot be determined*, and now uses Coxswain's own trash in `~/.local/share/Trash`, as Termux does (from another ZFS dataset it asks to delete for good). [Undo](files/undo.md) · [illumos](systems/illumos.md) | | **2.9.1** | 2026-10-07 | The desktop app's sidebar no longer lists a running AppImage's own mount (`/tmp/.mount_…`) under *Drives*, and the name index leaves it out. [The sidebar](organise/sidebar.md#why-did-a-mount_-drive-show-up) | | **2.9.0** | 2026-10-07 | **What can I do with this?** **Shift+F10** (or the **Menu** key; in the desktop app also the **⋯** on the row under the mouse and **Ctrl+right-click**) opens a short menu of the actions that fit the file, folder, archive or marked files under the cursor, in both apps: open, view, edit, copy, move, rename, pack, extract, delete, properties, git history and branches, ZFS snapshots, each with its key; **Enter** runs one, **Esc** closes. **Shift+F6** renames in place, the old name filled in. The status line shows one short hint that fits, three times each (*Alt+F5 packs it into an archive · Shift+F6 renames it*); *Settings → Behaviour* turns them off or shows them again (`coxswain --hints reset`), and its new *Right-click* setting makes a right-click open the menu instead of marking. [The action menu and hints](panels/action-menu.md) | | **2.8.2** | 2026-10-07 | **The battery on illumos is noticed.** The search helper asked illumos for a kstat that does not exist (`acpi_drv:0:power:power`), so a laptop never counted as on battery; it now reads `system power` from `acpi_drv:0:power`. The battery readings of NetBSD, OpenBSD, FreeBSD and illumos are tested against real output from their manuals, guides and mailing lists, and NetBSD's older `connected: OFF` counts too. A wrong password for a 7z whose names are open could, about once in 256 times, be taken: the entry's stream ended at once and the archive was written anew with the entry empty; an entry that ends early is now refused as locked. DragonFly BSD is no longer prepared for: its Rust (1.85 in DPorts) is too old for Coxswain's dependencies. ([Battery](search/battery.md)) | | **2.8.1** | 2026-10-06 | Search by meaning on a large store goes many times faster: choosing the next files no longer reads the text of every file still waiting (2 s for each eight with 300,000 waiting), and with a server making the vectors the helper rests a quarter of the time the server worked instead of as long. Folders a program marked as its cache with `CACHEDIR.TAG` (Cargo's build folders, whatever their name) are no longer read, like folders with `.nosearch`. [Search by meaning](search/meaning.md) · [Choosing the folders](search/folders.md) | | **2.8.0** | 2026-10-06 | **NetBSD, OpenBSD and illumos.** The terminal app for NetBSD 10 and 11, OpenBSD 7.9 and illumos (OmniOS, OpenIndiana) on every release, and the desktop app for OpenBSD (experimental), each built and tested in a virtual machine of that system on every change. One plain `sh` script installs them (`ftp -o - …/install/install-unix.sh \| sh`, `curl` on illumos), checks the SHA-256 sums, shows the `pkgin`, `pkg_add` or `pkg` line before it runs it, and adds the manual page and the system's own service for the search helper: an rc.d script on NetBSD, one for `rcctl` on OpenBSD, an SMF service on illumos. On illumos the **ZFS snapshots** work as on FreeBSD (datasets from `/etc/mnttab`), and folders are watched with event ports. Battery, memory and the desktop app's drives are read the native way on each; install hints name each system's packages. On the BSDs, folders are watched with kqueue one descriptor each, and the helper keeps a quarter of its open-file limit free (OpenBSD allows 512); before, a copy into a watched folder could open a descriptor for every new file, FreeBSD included; and no walk goes into a ZFS `.zfs` folder, so `snapdir=visible` no longer indexes every snapshot. Pages for DragonFly BSD (what stops a build) and TrueNAS (the terminal app over SSH, snapshots, the system's datasets left alone). [NetBSD](systems/netbsd.md) · [OpenBSD](systems/openbsd.md) · [illumos](systems/illumos.md) · [TrueNAS](systems/truenas.md) | | **2.7.3** | 2026-10-06 | Background search keeps working while a window of the old version is still open after an update: the helper no longer steps down for older apps, and the app waits for the helpers it starts, so none stays behind. [The search helper](search/helper.md) | | **2.7.2** | 2026-10-06 | **A trash in Termux.** On Android, **F8** now moves files to a trash of Coxswain's own in `~/.local/share/Trash` instead of saying there is none. On the phone's storage it asks to delete for good instead. [Termux](systems/termux.md#deleting-termuxs-trash) | | **2.7.1** | 2026-10-06 | **The built-in chat model is no longer recommended on a slow processor.** On a PC (Linux, Windows, the BSDs, Termux) the built-in Qwen3 model runs on the processor, and Coxswain now measures it there first: a short probe (0.2 s, no download) gives *On this processor: about 74 s to the first word, then 7.4 words a second* under the model in step 4 of the setup guide and in *Settings → Ask*, in both apps. It is marked recommended only when the first word comes within 10 s; otherwise a server's model is, and on a PC with no server the built-in model is still chosen, with the estimate beside it. A chat model is always chosen in step 4 and offered in *Settings → Ask*, never an empty choice; **Skip Ask for now** leaves Ask off. On a Mac's GPU nothing changes. [The estimate](search/ask-builtin.md#the-estimate-for-this-processor) | | **2.7.0** | 2026-10-06 | **Build provenance**, in both apps: an SLSA or in-toto provenance file (`.intoto.jsonl`, a Sigstore bundle, `provenance.json`, or any JSON that holds one) shows as inputs → build → outputs, with who signed it and where it was logged. Each output is checked against the file of that name here or in the other pane (✓ matches, ✗ differs, ? not here), and a git source's commit is looked for in your checkout (*1 commit behind HEAD*), without fetching. **Compare** shows what differs from an earlier build. Nothing is verified, and the view says so. The terminal app opens it on **F3** (`provenance_viewer = false` keeps the pager). [Build provenance](previews/provenance.md) | | **2.6.0** | 2026-10-06 | **At home in Termux.** On Android the terminal app now builds with `cargo install coxswain` in Termux, and works the Android way there: **Alt+F1** lists the phone's folders after `termux-setup-storage`, **Enter** opens a file in its Android app with `termux-open`, copied lines go to Android's clipboard and the search helper pauses on battery through Termux:API, HTTPS uses Termux's certificates, and the update notice says `pkg upgrade coxswain`. Android has no trash or session service: F8 and *Start with my session* say so. Built and tested inside Termux on every change. [Termux](systems/termux.md) | | **2.5.0** | 2026-10-06 | **ARM computers.** The desktop app for 64-bit ARM Linux on every release, as `.deb`, `.rpm` and AppImage, for Raspberry Pi OS 64-bit, Asahi, ARM laptops and servers; the Arch package `coxswain-bin` (`packaging/aur/`) has it too. Both apps native for Windows on ARM (Snapdragon laptops): an installer, an `.msi` and the terminal app's zip, and WinGet gets the ARM installer once the packages are listed. Both are built and tested on ARM on every change. A page for ChromeOS: which `.deb`, sharing ChromeOS folders with Linux, and what the builds need. [Linux on ARM](systems/linux-arm.md), [Windows on ARM](systems/windows-arm.md), [ChromeOS](systems/chromeos.md) | | **2.4.0** | 2026-10-06 | Three more languages, 29 in all: *فارسی* (Persian), *Հայերեն* (Armenian) and *ქართული* (Georgian), picked on a system set to `fa_IR`, `fa_AF`, `prs`, `hy_AM` or `ka_GE` and marked *new*. Persian is right to left in the desktop app like Hebrew, with Persian digits in counts, sizes and dates in both apps, and the falcon banner of the Achaemenids for a flag. Armenian and Georgian sit under a new *Caucasus* region, Persian and Hebrew under *The Middle East*; Georgian headings are never put in capitals. The desktop app draws these letters with Vazirmatn, Noto Sans Arabic, Armenian or Georgian after any font and says on Linux which package to install when none is there. [Persian, Armenian and Georgian](customise/languages.md#persian-armenian-and-georgian) | | **2.3.0** | 2026-10-06 | **The desktop app as a Flatpak** (`io.github.mwo_dk.Coxswain`), built from source with `flatpak-builder`; it is not on Flathub yet. It sees all your files, keeps its search helper inside the sandbox, and runs your editor (F4), shell commands, F2 scripts and the user menu on the host, with the host's tesseract, pdftoppm, LibreOffice, pandoc, LaTeX and PlantUML for previews and search. *Start with my session* writes an autostart entry that starts the Flatpak; the update notice says `flatpak update io.github.mwo_dk.Coxswain`. [Flatpak](systems/flatpak.md) | | **2.2.0** | 2026-10-06 | **Ask without a server.** Ask can answer with a chat model built into Coxswain, in both apps: Qwen3 1.7B, or Qwen3 4B Instruct on a Mac with 16 GB or more, downloaded once from huggingface.co (1.0 or 2.3 GB) and run on the Mac's GPU through Metal, or on the processor elsewhere (slowly there: a minute or more before the first word). Nothing leaves the machine. The setup guide offers it in step 4 and recommends it when no server answers; *Settings → Finding files → Details → Ask → Built-in chat models* downloads, uses and deletes it; `coxswain --meaning ask builtin:qwen3-1.7b` in the terminal app. It runs in the search helper, one copy for every window, and is let go five minutes after the last answer. [Ask without a server](search/ask-builtin.md) | | **2.1.2** | 2026-10-06 | **Background reading that starts.** With *Start with my session* on, the app now asks systemd or launchd to start the search helper and, when the system does not, starts it itself and says once where to allow it (on a Mac: *System Settings → General → Login Items & Extensions → Coxswain → Allow in the Background*). On a Mac the helper no longer runs as a throttled background job, so the backlog moves; the LaunchAgent is loaded with `launchctl bootstrap` and rewritten by the first app you open. The helper writes its starts, exits and errors to `helper.log` in the cache folder. [The search helper](search/helper.md#start-with-my-session-is-on-but-background-reading-does-not-start-why) · [macOS](systems/macos.md#the-search-helper-at-login) | | **2.1.1** | 2026-10-06 | **Fixes on a Mac.** The search helper and the name index no longer walk `~/Library` (but iCloud Drive and the cloud folders), the Photos and Music libraries, the Trash or `/System/Volumes`, so macOS stops asking *Coxswain would like to access data from other apps*; a folder you refused (Desktop, Documents, a USB or network volume) is asked for once per run, and a notice says once what the folder prompts are. **The setup guide with no Ollama or server** now recommends the built-in model, on the Mac's GPU, downloads it with its progress on one click, turns search by meaning on and says so, shows a failed download's error, and marks Ask optional. The server address field's example is a neutral `http://192.168.1.20:11434`. [macOS](systems/macos.md) · [The setup guide](search/setup.md#the-steps) | | **2.1.0** | 2026-10-06 | **On FreeBSD: ZFS snapshots as folders**, in both apps: **Alt+Z** on a folder lists its dataset's snapshots, newest first, with their own space and date; **Enter** browses the folder as a snapshot has it (from `.zfs/snapshot`, no root, `snapdir=hidden` is fine), the preview's **Diff** (the terminal app's **Enter**) shows how a file differs now, **F5** copies it back, and **F4**, **F6**, **F7**, **F8** are refused. The dataset, its compression ratio and its space (or quota) are in the footer, and **Properties** shows mountpoint, used, available, referenced, quota, refquota and the number of snapshots. Properties also names the **package** a file belongs to (*Files of this package* lists them as a folder) and the **file flags** as `ls -lo` names them, with your own user flags to tick (`nodump`, `hidden`; `uchg`, `uappnd` off ZFS). **Boot environments** and **jails** are in the desktop app's sidebar and under **Alt+F1** in the terminal app. Properties (**Alt+Enter**) is in the terminal app too. Works with OpenZFS on Linux and macOS; on Linux, `lsattr`'s immutable and append-only show under Flags. [ZFS snapshots](files/zfs-snapshots.md) · [Properties](files/properties.md#zfs-packages-and-file-flags) · [FreeBSD](systems/freebsd.md#zfs-packages-flags-boot-environments-and-jails) | | **2.0.0** | 2026-10-06 | Coxswain 2.0. A **first-run guide** in both apps, shown once and skippable on every step: the two panels and their keys, how far Find looks (meaning and Ask start the setup guide), theme, language and icons with a Nerd Font check, and what can leave the machine; **F1** (then *Show the guide again*, or **G** in the terminal app) and Settings → *Overview* open it again. When tesseract, pdftoppm, LibreOffice, LaTeX, PlantUML or pandoc is missing, the hint gives the exact install line for your system (`pkg`, `pacman`, `apt`, `dnf`, `zypper`, `brew`, `winget`) with a **Copy** button; Coxswain never runs it. Dialogs name their action and count (*Copy 3 items*), their button is the verb, one key line reads the same in both apps (*Enter Copy · Esc Cancel*), and an error says what failed, its cause in one line and the rest under *Details*. One word per thing: *mark*, *folder*, *Find*, *Refresh*; the desktop key bar says *Move*, *New folder*, *Commands*. **Changed:** `config.toml` is rewritten once on start, your comments kept, and a notice lists it: `[keys]` `select_group`, `unselect_group`, `invert_selection`, `mkdir`, `dir_sizes` become `mark_group`, `unmark_group`, `invert_marks`, `new_folder`, `folder_sizes`; `[search]` `roots` and `exclude` become `name_roots` and `name_exclude`; `--settings` takes an area or an option only (`meaning`, `ask`, `news`, `cloud` are gone). [What's new in 2.0](whats-new-2.md) · [The first-run guide](panels/first-run.md) | | **1.44.0** | 2026-10-06 | Settings in the terminal app: **F9** → *Settings*, or `coxswain --settings[=area or option]`, opens it full screen with the desktop app's areas and options. **←** **→** pick the area, **↑** **↓** the option, **Space** flips a switch or takes the next value, **Enter** types a text or number in place or opens a list to add and remove folders, **/** finds a setting; each option is explained at the bottom with what it costs, and saved to `config.toml` at once, your comments kept. *Finding files* has the status lines with their next step and the four levels (one that needs a model starts the setup guide); *Overview* lists the tips and what's new; *Keys* lists every key; *Privacy and updates* says what can leave the machine. The theme changes at once. It fits 80×24, Japanese and Korean lined up. [Settings in the terminal app](customise/settings.md#in-the-terminal-app) | | **1.43.0** | 2026-10-05 | **Coxswain runs on FreeBSD.** Both apps for FreeBSD 14 and 15 (amd64) on every release, installed with one line: `fetch -qo - https://raw.githubusercontent.com/mwo-dk/coxswain/master/install/install-freebsd.sh \| sh`. The script checks the SHA-256 sums, installs into `/usr/local` or `~/.local`, shows the `pkg install` line for what the desktop app needs before it runs it, and adds a manual page (`man coxswain`), a menu entry and an rc.d script for the search helper. The terminal app needs nothing beyond the base system; the desktop app is experimental. *Start with my session* writes an XDG autostart entry there; the helper watches folders, not every file, so kqueue stays light; battery and memory are read with `sysctl`; the update notice names the install line. [FreeBSD](systems/freebsd.md) | | **1.42.0** | 2026-10-05 | Settings by task, in the desktop app: an *Overview* of how everything stands with *What's new*, then *Finding files*, *Previews*, *Looks*, *Behaviour*, *Keys* and *Privacy and updates*, and *Find a setting…* above them. Every option says in one line what it does and carries badges for what it costs (disk space, processor time, downloads, can leave this machine). *Finding files* opens with a status line for names, words, meaning and Ask, each with its next step (*Read now*, *Start it*, *Set up…*, *Try it*), then *How far should Find look?* in four levels that turn on what they need or open the setup guide; *Details* holds every switch. New in Settings: the terminal app's theme, row height, folder sizes, editor, viewer, the name index's folders, what is never indexed, the largest file read; *Keys* lists every key; *Privacy and updates* lists what can leave the machine and where things are kept. The *Font* field is greyed out under a theme that brings its own font. `--settings=search`, `meaning`, `ask`, `news` and `language` still open where they did. [The Settings window](customise/settings.md) | | **1.41.0** | 2026-10-05 | One Find, in both apps: one field for names, words in files, meaning and Ask, the hits in groups (*Names*, *In files*, *About this*, *History*) ordered by what you typed; **Tab** picks a kind (or type `text:`, `about:`, `?`), **Ctrl+F** inside Find limits everything, Ask too, to this folder, **Ctrl+Enter** (terminal: **Alt+Enter**) asks and the answer opens in place; every missing piece says what it needs, with one step; a ⌕ button on each path bar. Ask's first word comes without reloading the models on an 8 GB card; the title shows the version only. [Find file](search/find-file.md) | | **1.40.0** | 2026-10-05 | Ask answers at once: a model that thinks first (such as `qwen3:8b`) is asked not to, so the first word comes in under a second instead of 15–28 seconds; *Let the model think before it answers* in Settings (`ask_think`) brings the thinking back. Searching the text of files ranks the files with your words by meaning too, and a question typed as a question finds the files with some of its words; the setup guide says where the built-in model really runs (a Mac's GPU), and the warning before a change of embedding model counts every passage. [Thinking](search/ask.md#thinking) · [Ranking](search/meaning.md#how-words-and-meaning-are-ranked-together) | | **1.39.0** | 2026-10-05 | Search by meaning and Ask cover whole documents: every part of a file gets vectors (up to 256 passages, about 25,000 words), not only its first 960 words, and each passage is matched with the file's name, its folder and its Markdown heading. A file counts with its best passage and a little more when several match. With bge-m3 and other server models, answers that score a little lower are no longer cut off (measured on the search-quality corpus: right file in the first five for every question). The first start after the update makes the vectors once more, in the background (the text is not read again); both apps say how many files and about how long. [Search by meaning](search/meaning.md#why-is-search-by-meaning-re-reading-everything) | | **1.38.0** | 2026-10-05 | Smart search is set up with a guide, in both apps: *Settings → Search by meaning → Set up…* or `coxswain --setup-search`. It finds the model servers on your machine (Ollama, Lemonade, LM Studio, llama.cpp, Jan, LocalAI, or one you name elsewhere), lists only the models that make vectors for meaning and only those that answer for Ask, recommends a server and models for your graphics card, NPU or processor, downloads with a click (Ollama, Lemonade), asks a test question with the time to its first word, says when a model runs on the processor although there is a GPU and how to fix it, and offers *Start with my session*. Find file's "set it up" links open it. [Smart search in a few minutes](search/setup.md) | | **1.37.0** | 2026-10-05 | Search by meaning uses your Mac's GPU: on Apple Silicon the built-in model runs on the GPU through Metal, several times faster, after a check that its results match the CPU's; Intel Macs stay on the CPU. *Settings → Search by meaning* says *Built-in model · on the GPU (Metal)* or *on the CPU* with the reason, a notice says so once, and `coxswain --meaning` prints the same; *Use the CPU only* (or `coxswain --meaning cpu`) keeps it off the GPU. [On a Mac's GPU](search/meaning.md#on-a-macs-gpu) | | **1.36.0** | 2026-10-05 | Git branches and worktrees as folders, in both apps: **Alt+B** lists the branches (local ones first, the current one marked, ahead and behind its upstream), **Enter** browses a branch's files read-only, **Alt+S** switches to it after asking (git's own refusal shows when your changes would be overwritten), *New branch here* makes one; **Alt+W** lists the worktrees, dirty or clean, and opens one. The git line says *worktree: …*, *detached at a1b2c3d* and *merging*, *rebasing* and the like, and in the desktop app a click on it opens the branches. [Git branches and worktrees](panels/git-branches.md) · [The git line](panels/git.md#the-git-line) | | **1.35.0** | 2026-10-05 | Japanese and Korean, 26 languages in all: *日本語* and *한국어*, picked on a Japanese or Korean system and marked *new*. The terminal app lines up letters that take two columns (column titles, sizes, the marked line); the desktop app draws them with Hiragino, Yu Gothic, Malgun Gothic or Noto Sans CJK after any font, says on Linux which package to install when none is there, and leaves Enter and Esc to an input method while it composes. Quick search finds names macOS keeps decomposed. [Japanese and Korean](customise/languages.md#japanese-and-korean) | | **1.34.0** | 2026-10-05 | Four more languages, 24 in all: *Polski*, *Čeština*, *Українська* and *Ελληνικά*, picked by themselves on a Polish, Czech (or Slovak), Ukrainian or Greek system. They are fresh translations, marked *new* in Settings with a link to say where a word reads wrong; `coxswain --languages` lists them in the terminal. The language list is grouped by region, and Greek headings in capitals drop their accents as Greek does. [Languages](customise/languages.md) | | **1.33.0** | 2026-10-05 | Two more languages, 20 in all: *Deutsch (Österreich)* and *Deutsch (Schweiz)*, with their flags in Settings. Swiss German writes ss for ß and «guillemets»; a system set to `de_AT`, `de_CH` or `de_LI` picks them by itself. [Languages](customise/languages.md) | | **1.32.1** | 2026-10-05 | Ask offers only chat models: on Ollama, models that only make vectors (such as `bge-m3`) are left out of *Chat model*, and one already set is named plainly in Find file and Settings (*bge-m3 makes vectors and cannot answer: choose a chat model, e.g. qwen3:8b*) instead of being tried. A model on a server with the OpenAI API is tried with a one-word question when saved. `coxswain --meaning ask` refuses an embedding model. Picking `bge-m3:latest` for `bge-m3` no longer throws all vectors away, and a real change of the embedding model says first how many files it reads again and about how long, and asks. [Ask](search/ask.md#it-says-my-model-makes-vectors-and-cannot-answer-why) · [Servers](search/servers.md#why-does-switching-the-model-start-over) | | **1.32.0** | 2026-10-05 | **F1** lists the keys by what they do, under headings (Moving, Panels and tabs, Marking, Files, Archives, Search, Git, Viewing and editing, App), the most used first in each, in both apps; the terminal app puts them in two columns when it is wide enough. The desktop app's **F9** shows the same headings until you type. [The command list and Help](panels/command-list.md) · [Every default key](panels/keys.md) | | **1.31.0** | 2026-10-05 | Pack (Alt+F5) shows its formats: the desktop app has a *Format* list next to the name (Zip, 7z, tar, tar.gz, tar.bz2, tar.xz, tar.zst) with a line on what each is good for, and in the terminal app Tab and Shift+Tab swap the name's ending. The format you packed into last is suggested next time, in both apps. [Pack and extract](files/pack-and-extract.md#formats) | | **1.30.3** | 2026-10-05 | The terminal app installed with WinGet says `winget upgrade mwo-dk.Coxswain.Terminal` when a new version is out. [Updates](reference/updates.md) | | **1.30.2** | 2026-10-04 | The terminal app follows changes on disk: a file another program writes, copies in or deletes appears or goes in its panel within a second, the cursor staying put, and the git line follows commits and checkouts. Two Coxswains changing one archive at once (the desktop app and the terminal app, or two windows) wait for each other, so neither change is lost. Ask says *Waiting for … to answer* until the first word comes, on any server; servers with the OpenAI API are sent nothing ahead of the question. [The terminal app](reference/terminal-app.md#what-you-see) · [Archives as folders](files/archives.md#can-i-change-one-archive-from-the-desktop-app-and-the-terminal-app-at-once) · [Ask](search/ask.md#the-first-answer-takes-long-why) | | **1.30.1** | 2026-10-04 | **Ctrl+A** marks everything in the folder, files and folders, as in a file explorer, in both apps; the desktop app no longer selects the whole window's text. [Marking](panels/marking.md) | | **1.30.0** | 2026-10-04 | Find file no longer looks inside the archives in caches and programs' folders (`~/Library/Caches`, `AppData\Local`, `node_modules`, `target`, `.m2`, `/var/cache` …) on any system, so they neither fill the results nor the name index; *Settings → Search inside files → Look inside archives everywhere the names are indexed* (`archives_everywhere`) finds the entries of every archive on the machine by name. A 7z whose packed list of contents says it unpacks to more than 64 MB is not opened, so a crafted one cannot fill the memory. [Inside archives](search/archives.md#which-archives) | | **1.29.2** | 2026-10-04 | The terminal app installs from crates.io again (`cargo install coxswain`): 1.29.0 and 1.29.1 could not be published there. [Install](../README.md#install) | | **1.29.1** | 2026-10-04 | Previewing a video or a sound on Linux without GStreamer's good plugins no longer takes the desktop app's window down: the preview says what to install (or, in an AppImage on a distribution other than Debian and Ubuntu, that its GStreamer cannot find them) with *Open in its app*. The search helper that starts with your session is registered by the link a package manager keeps on your PATH (Homebrew's `bin/coxswain-gui`), so after an upgrade it starts the new version by itself. [Media](previews/media.md) · [The search helper](search/helper.md) | | **1.29.0** | 2026-10-04 | Search inside files and Ask have keys of their own: **Shift+F7** (or **Ctrl+Shift+F** in the desktop app) opens Find file at the text of your files, **Ctrl+F7** at Ask; in Find file **Tab** and **Shift+Tab** go forward and back through the depths, and each depth's button names its key. The desktop app's Settings button counts what is new: **Settings → What's new** lists what you can turn on, with *Show me* and *Dismiss*, and every version's changes, the unread ones marked; the terminal app has `coxswain --whats-new`. After an upgrade the search helper that starts with your session no longer points at the removed version (search, text and meaning stopped until it was turned off and on); the app that finds it so registers itself. Lit buttons in Cyber glow on the dark and can be read. [Find file](search/find-file.md) · [Notices and what's new](panels/notices.md) · [The search helper](search/helper.md) | | **1.28.4** | 2026-10-04 | More found while taking the pictures: Help (F1) lists actions by name with keys as on the keyboard (Ctrl+G, not Ctrl+g), Batch rename keeps its rows in line when one has a conflict, an HTML page and a photo's camera details fill the preview as they should, a big icon no longer overlaps the size under it, folder notes are not offered inside an archive or a history, the status line stops saying *Working on…* while a locked archive's password is asked for (both apps), and documents keep their paragraphs' direction in Hebrew. The [keys] example no longer takes Git history's Ctrl+G, and the theme example's cursor row no longer hides folder names. [Changing keys](customise/keys.md) · [Your own theme](customise/own-theme.md) | | **1.28.3** | 2026-10-03 | Found by trying it all: a history's commits are listed newest first however the pane is sorted (they were in the order of their ids), its folders show no "0 B", its tab is named after the file and the path bar keeps its end (badge included) when the path is long; the terminal app asks for a locked 7z's password again (it went back to the folder without asking); an HTML page's own stylesheet and pictures show in its preview; a 7z with locked names says so in the preview, with *Enter the password*; code, diffs and file names keep their direction in Hebrew; small fixes in *Settings → Search*. The desktop app's previews read pictures, PDFs, fonts and video through its own file protocol, which refuses a cloud file you did not ask for. [Git history](panels/git-history.md) · [Cloud files](search/cloud-files.md) | | **1.28.2** | 2026-10-03 | Quicker where it was slow: a changed archive has only its changed members read again (105 ms instead of 1.5 s for a zip of 10,000), an archive still downloading waits until it has settled, search by meaning reads only the files it shows, a folder sorted by commit shows at once, the git status and the *Last commit* column follow a commit on their own (desktop app), a file's history goes on past its renames, Ask can be stopped while the model loads and loads it ahead, each tab keeps its scroll position, folders copied out of a history get the commit's date, and zip times are read and written in your time zone. [Performance](reference/performance.md) | | **1.28.1** | 2026-10-03 | Cloud files are safer still: on Windows a file's cloud state is read from the folder's listing, never by opening the file; the desktop app's readers (text, archives, databases, books, mail, certificates, bills of materials, tool previews, git diff) refuse an online-only file until you press *Download and preview*, whatever the page asks; on Linux, davfs2's WebDAV and FUSE mounts without a subtype count as cloud mounts. [Cloud files](search/cloud-files.md) | | **1.28.0** | 2026-10-03 | Coxswain no longer downloads your cloud. Earlier versions read every file in the folders they searched, and a file that OneDrive, Dropbox, Google Drive, Proton Drive or iCloud kept only online was downloaded by that read, so indexing could fill the disk and take the machine. Now such a file is told from its metadata alone (Windows' Cloud Files attributes, macOS's dataless flag, cloud mounts on Linux), found by name and never read: no text, no hash, no thumbnail, no preview, no git, until you open it. A cloud glyph marks it in both apps, the preview offers **Download and preview**, a notice says which clouds were found, and *Settings → Search inside files* reads them anyway if you want (`cloud`, `cloud_read`). A file that goes back to the cloud loses its text at the next pass. [Cloud files](search/cloud-files.md) | | **1.27.4** | 2026-10-03 | Security review: an HTML preview may load pictures, styles and fonts from the page's own folder only, not from anywhere on the disk; extracting a crafted tar cannot fill the memory; changing a zip locked the old way (ZipCrypto) no longer scrambles its locked files: they are locked anew with AES-256, with the password, and a wrong password the check byte lets through is noticed; a history copied out on Windows never makes a `.git` by another spelling; Ask's errors never repeat a password in the server's URL; releases carry a `SHA256SUMS` and build provenance. [Security](reference/security.md) | | **1.27.3** | 2026-10-03 | Dependencies brought up to date: getrandom 0.4 for the search helper's token, Mermaid 12.1 for diagrams, Vite 8.3.2, and the latest patch releases of tokio, uuid, libc and others. No advisories open. [Install](../install/INSTALL.md) | | **1.27.2** | 2026-10-02 | The sidebar's drives and their free space stay current: read again every 30 seconds while the window is in view and when it comes back to the front, so a USB stick appears without reopening the window. [The sidebar](organise/sidebar.md) | | **1.27.1** | 2026-10-01 | A SQLite database in the desktop preview shows each table's first rows under its schema, open at once for small databases. [Data files](previews/data.md) | | **1.27.0** | 2026-10-01 | You choose what search leaves out: *Settings → Search inside files → Left out* lists folder names and now file patterns too (`*.log`, `secret*`), with Add and ×, and says how `.nosearch` leaves out one folder. *Show in panel* next to `search.db` (and the built-in model) opens its folder with the cursor on it. **F3** in the terminal app shows a SQLite database or a Parquet file as its tables, row counts and first rows. On a machine without Coxswain's cache folder, the first search helper now keeps the files' text (it could not make its store before). [Choosing the folders](search/folders.md) · [Data](previews/data.md) | | **1.26.6** | 2026-10-01 | Search by meaning no longer stops after the first files: a store whose Markdown was read again after an update failed every scan from then on, so nothing more was read and no vectors came; it mends itself now. When reading or vectors stop, Settings, the terminal app's Find file and a notice say why (*No vectors: … Connection refused*). Coxswain's own cache folder is never read into the search, on any system. [Search by meaning](search/meaning.md#vectors-stopped-coming-why) | | **1.26.5** | 2026-10-01 | The desktop app's preview shows files again: since 1.26.0 every file's preview stayed empty, Markdown, Parquet, databases, LaTeX, PDF and Office alike (a name lost in a merge stopped it). A LaTeX document seen before shows from the cache at once and is no longer built again when another file in its folder changes, also inside archives. A check on every pull request now finds a name that is not declared, and `tools/preview-check.py` opens a file of each kind in the real app. [LaTeX](previews/latex.md) | | **1.26.4** | 2026-10-01 | What Coxswain keeps about your files (the name index, the search store, previews, notes, tags and favourites) is readable by you alone, also on installs from before, from their first start after the update. [Privacy](reference/privacy.md#can-other-users-on-the-same-machine-see-my-index) | | **1.26.2** | 2026-10-01 | Final performance review: thumbnails keep only the rows on screen (100,000 files in 14 ms), a folder's listing is half the size, highlighting runs off the window's thread, the terminal app copies on a thread with `(2/3)` progress and lists a history without freezing, files copied out of a history keep the commit's date, a solid 7z previews, copies and searches every file again, a short folder after a long one no longer shows blank, and Ask follows its answer only while you are at the bottom. [Performance](reference/performance.md) | | **1.26.1** | 2026-10-01 | Final security review: a repository someone else made can no longer run its own programs through git (filter drivers, file system monitor, signature checker, fetch); LibreOffice converts with macros and link updates off; on Windows a file opens through the shell, not `cmd`; archives cannot lead outside, fill the disk on a preview or lose files on a move, and keep their long names and permissions when changed; a 7z key is made as 7-Zip makes it; Stop ends an Ask while the model thinks; settings saves never overwrite each other; releases come only from master. [Safety](previews/safety.md) · [Security](reference/security.md) | | **1.26.0** | 2026-10-01 | Pack with a password: Alt+F5 into a zip or 7z takes a password (typed twice), every file locked with AES-256, and a 7z's file names hidden too if you like; the new archive opens without asking again while the app runs. Both apps. [Passwords](files/archive-passwords.md#locking-a-new-archive) | | **1.25.2** | 2026-10-01 | Nothing leaves the machine from a preview: the webview is held to the app and your disk, HTML pages see their own folder only, a project's `latexmkrc` no longer runs, and a locked 7z stays locked when changed. [Safety](previews/safety.md) · [Privacy](reference/privacy.md) | | **1.25.1** | 2026-10-01 | Performance review: the desktop app keeps only the rows on screen in the page, so a folder of 100,000 files lists in 30 ms and the cursor moves in one; nothing that touches the disk runs on the window's thread; both apps say *Working on …* during a copy, move, delete, extract or pack and while a slow folder is read; the terminal app sorts without rereading and draws a frame in half a millisecond however much is marked. [Performance](reference/performance.md) | | **1.25.0** | 2026-10-01 | Search inside archives: the files in your zip, 7z and tar archives are found by name, by their text, by meaning and by Ask, shown as a path through the archive, and Enter opens the archive there; a changed archive is read again, a locked one keeps its secrets. On by default, *Search inside archives* in Settings. [Inside archives](search/archives.md) | | **1.24.0** | 2026-10-01 | Git history as folders: Ctrl+G on a file or folder lists the commits that touched it, Enter on one browses the files as they were, with a preview, the commit's diff, F3 and F5; a *Last commit* column (date and author) in both apps; commit messages, authors and changed paths in Find file, by text and by meaning. Text previews of files inside archives show again. [Git history](panels/git-history.md) · [History in search](search/history.md) | | **1.23.1** | 2026-10-01 | Dependencies reviewed: every crate and npm package at its latest version, the one known vulnerability (lodash in the Mermaid renderer) fixed, the terminal app without widgets it never draws, draw.io diagrams drawn without a word to diagrams.net, and from now on a weekly check of every dependency for advisories, with Dependabot proposing updates. [Security](reference/security.md) | | **1.23.0** | 2026-10-01 | Files inside archives show in the preview pane, and F3 views them in the terminal app, from a copy of just that file; locked ones ask for their password. [Archives](files/archives.md) | | **1.22.3** | 2026-10-01 | Both apps reviewed: Ctrl+C in a command keeps the terminal app, Delete while typing a command deletes nothing, Alt+F2 paths start from the right panel, the F-key bar names the action a shared key runs; the desktop app lists your own themes under F9, runs F2 entries with an upper-case key, shows USB sticks under `/run/media`, draws ASCII or your own folder/file/link glyphs, keeps Automatic on British English, and says when an editor or opener fails. [Keys](panels/keys.md) · [Glyphs](customise/glyphs-and-fonts.md) | | **1.22.2** | 2026-10-01 | Archive review: a 7z with locked contents asks for its password when changed, F5/F6/Ctrl+V into an archive keep the name you give, F8 inside says Delete, only the locked files run again after a password, an archive is listed once while it does not change and written by one change at a time, 7z entries keep their dates, extraction reads a 7z once, an archive inside one is not opened empty, moves fall back to copying only across disks, case-only renames work where case does not count, and a batch rename that fails gives names back. [Archives](files/archives.md) | | **1.22.1** | 2026-10-01 | Search review: folder totals twenty times faster over a big store, searches go on while the index reads a moved-in folder, a damaged index cache never crashes the helper, a server's refusal of one file no longer stops search by meaning, API keys reach the model lists, diagram sentences get vectors in long files, and honest preview notes. [Search](search/README.md) | | **1.22.0** | 2026-10-01 | Ask: Tab to the fourth depth of Find file, ask a question, and your own chat model answers from your files, citing them; follow-ups work, nothing is kept. [Ask](search/ask.md) | | **1.21.0** | 2026-10-01 | Cryptography bills of materials (CycloneDX CBOMs): every algorithm, key, certificate and protocol rated, as a tree or sunburst, compared with an older scan, in both apps. [CBOMs](previews/bom.md) | | **1.20.0** | 2026-10-01 | More archive kinds: tar.bz2, tar.xz, tar.zst and 7z, read and written, and locked 7z archives open with their password. [Archives](files/archives.md) | | **1.19.0** | 2026-10-01 | Archives are folders: go in with Enter, copy and move in, out and between them, rename, make folders, take out, pack with Alt+F5, with passwords for locked zips. [Archives](files/archives.md) | | **1.18.0** | 2026-09-30 | Diagrams are searched by what they say: a sentence per arrow in draw.io, Mermaid, Graphviz and PlantUML. [Diagrams in search](search/diagrams.md) | | **1.17.0** | 2026-09-30 | HTML files show as pages, safely sealed off; the title bar shows the version and search depths on Linux too. [HTML pages](previews/html.md) | | **1.16.0** | 2026-09-30 | Search by meaning on your own Ollama, Lemonade or any OpenAI-style server. [Servers](search/servers.md) | | **1.15.0** | 2026-09-30 | Notices say once what search can do and what is off; the titles show the version and search depths. [Notices](panels/notices.md) | | **1.14.0** | 2026-09-30 | LaTeX builds by itself when its sources change, and another engine takes over when one fails. [LaTeX](previews/latex.md) | | **1.13.0** | 2026-09-30 | Find file shows where it can look, and that search by meaning is there to turn on. [Find file](search/find-file.md) | | **1.12.1** | 2026-09-30 | Terminal app: typing in Find file never waits for the search. [Find file](search/find-file.md) | | **1.12.0** | 2026-09-30 | Search by meaning: a small multilingual model on your machine finds files about what you type. [Search by meaning](search/meaning.md) | | **1.11.0** | 2026-09-30 | LaTeX picks XeLaTeX or LuaLaTeX by the packages and builds past errors; the preview cache can be cleared. [LaTeX](previews/latex.md) | | **1.10.0** | 2026-09-30 | PowerPoint decks show at once, drawn in the app; LibreOffice's exact view follows. [Office](previews/office.md) | | **1.9.1** | 2026-09-30 | Office previews work again from the AppImage. [Office](previews/office.md) | | **1.9.0** | 2026-09-30 | Search reads pictures, scans and older Office files with programs you have installed. [Scans and pictures](search/scans.md) | | **1.8.0** | 2026-09-30 | The search helper can start with your session: systemd, launchd or the Windows Run key. [The search helper](search/helper.md) | | **1.7.0** | 2026-09-30 | draw.io diagrams drawn in the app by draw.io's own viewer; slides and documents render by themselves. [Diagrams](previews/diagrams.md) | | **1.6.0** | 2026-09-30 | Search pauses on battery, and knows removable disks wherever they are mounted. [Battery](search/battery.md) · [Removable disks](search/removable-disks.md) | | **1.5.0** | 2026-09-30 | Search inside files in Settings: the folders read, names only, Index now, Delete the index. [Choosing the folders](search/folders.md) | | **1.4.2** | 2026-09-30 | A new app icon in Cyber's colours. [Themes](customise/themes.md) | | **1.4.1** | 2026-09-30 | Search follows changes on disk within seconds; Duplicates reuses the hashes search already has. [Text in files](search/text.md) · [Duplicates](files/duplicates.md) | | **1.4.0** | 2026-09-30 | Folder sizes in your home folder are there at once. [Folder sizes](panels/folder-sizes.md) | | **1.3.1** | 2026-09-29 | Search inside PDFs. [Documents it reads](search/documents.md) | | **1.3.0** | 2026-09-29 | Search inside Word, spreadsheets, slides, mail, books and notebooks. [Documents it reads](search/documents.md) | | **1.2.0** | 2026-09-29 | Search inside your files: Tab in Find file. [Text in files](search/text.md) | | **1.1.0** | 2026-09-29 | One file name index for every window and the terminal app. [Names everywhere](search/names.md) | | **1.0.1** | 2026-09-29 | Screenshots in Cyber, diagrams in the theme's colours, Homebrew as the one package manager. [Install](../install/INSTALL.md) | | **1.0.0** | 2026-09-29 | Coxswain under its own name: two panels in the terminal and on the desktop, previews, duplicates, 18 themes and 18 languages. [Docs index](README.md) | --- [← Previous: Questions, collected](faq.md) · [Next: Docs index →](README.md)