Skip to content
mwo-dkPublic

About

Coxswain: Norton Commander style file manager with Everything-speed search on Linux, macOS and Windows. Terminal (Ratatui) and desktop (Tauri) apps, git in every panel.

Topics

Resources

Stars

8 stars

Watchers

0 watching

Forks

Repository files navigation

Coxswain

The one at the helm, who steers the boat and keeps the crew in time.

Coxswain is a two-panel file manager in the Norton Commander tradition, built for developers. It comes as a terminal app (coxswain, Rust and Ratatui) and a desktop app (coxswain-gui, Tauri and Svelte 5), both on one shared Rust core and one config file. It finds any file by its name, its text or what it is about, previews over 60 kinds of file, opens archives like folders, shows git in every panel, and keeps everything on your machine.

The desktop app: Ctrl+F opens Find and engine is typed; the groups fill in as it is typed, Names with engine.rs, In files with main.rs and engine.rs and the lines that say engine, About this; Esc closes Find Find: type a word and names, the text inside files and what files are about come in, grouped, as you type.

Why Coxswain

  • One core, two apps: a terminal app and a desktop app with the same keys, the same settings and one search store.
  • Finds by name, by the words inside files and by what they are about, offline, with a small model on your machine or your own Ollama or LM Studio.
  • Ask your files a question in your own words, and get an answer with numbered sources, from a model on your machine.
  • Archives, git history, branches and ZFS snapshots open like folders: go in, look, copy out.
  • Runs where you work: FreeBSD first, then NetBSD, OpenBSD, illumos, Linux (ARM too), Android (Termux), macOS and Windows; 31 languages.
  • Nothing leaves your machine unless you ask, and online-only cloud files are never downloaded behind your back.

Highlights

  • On FreeBSD and illumos: browse ZFS snapshots like folders. Alt+Z lists a folder's snapshots, Enter shows it as it was, Diff compares a file with now and F5 copies it back, with no root; the dataset, its compression and space sit in the footer. Properties names a file's package and lists its files, shows and sets chflags, and the sidebar has your boot environments and jails. OpenZFS on Linux and macOS too, and on TrueNAS over SSH. ZFS snapshots · FreeBSD
  • FreeBSD, the other BSDs, illumos, Linux, macOS and Windows: the terminal app on FreeBSD, NetBSD, OpenBSD, illumos, Linux, macOS and Windows, the desktop app on all but NetBSD and illumos, each BSD and illumos with an install line, its own package tool for what is missing, its own service for the search helper (rc.d, rcctl, SMF) and a manual page; TrueNAS over SSH. FreeBSD · NetBSD · OpenBSD · illumos · TrueNAS
  • Norton Commander at heart: two panels, the F-key bar, a command line and NC's keys. Panels and keys
  • See where the space goes: Alt+U on a folder or a drive shows every file as a rectangle by its size, inside its folder and coloured by its kind, with the bytes by type and the largest files beside it; zoom in, and delete what you do not need from there. Both apps. Space
  • One Find for names, words, meaning and answers: Ctrl+F and type; the hits come in groups (Names, In files, About this, History) ranked by words and meaning together, Ctrl+Enter asks, one key limits it to this folder, inside your zip, 7z and tar archives too; you choose what is read and what is left out (*.log, a folder). Search · Inside archives · Choosing the folders
  • Gentle with your cloud: OneDrive, Dropbox, Google Drive, Proton Drive and iCloud files that are only online are found by name, marked with a cloud, and never downloaded unless you open one. Each cloud account is one entry in the sidebar and under Alt+F1, found on your machine, with no logins. Cloud files · Clouds
  • Ask your files: a question in your own words, answered from the closest passages with numbered sources, by your own chat model or one built in that needs no server (on a Mac it uses the GPU). Ask · Without a server · Set it up
  • Search by meaning, in any language: a small model on your machine (on Apple Silicon it uses the GPU), or your own Ollama, Lemonade or OpenAI-style server. Search by meaning · Set it up
  • See before you open: code in about 200 languages (COBOL, Fortran and Pascal too), Markdown, PDF, Word, PowerPoint, spreadsheets, SQLite and Parquet (in the terminal app F3 too, in its built-in viewer), HTML, fonts, video and more. The preview pane · Data
  • Builds what needs building: LaTeX, Office, PlantUML and Graphviz previews, with your tools or a sealed container. LaTeX · Tools
  • Reads cryptography bills of materials: a CycloneDX CBOM as a rated tree or sunburst, compared with last month's scan, in both apps. CBOMs
  • Reads build provenance: SLSA and in-toto files as inputs → build → outputs, with who signed them, whether the files here are the ones built, and whether the commit is in your checkout, in both apps. Build provenance
  • Reads chess games: a PGN file (packed too) as a table of games to filter by player, opening, result, year and rating, fast with millions of games; each game on a board in the theme's colours with its moves in figurines, variations and comments; EPD and FEN positions; Find finds games by player or opening. In both apps. Chess games
  • Archives are folders: zip, 7z and tar (gz, bz2, xz, zst): go in, preview, copy, move, rename, pack, with passwords to open them and to lock new zips and 7z (AES-256). Archives
  • Git in every panel: branch, ahead and behind, counts, a glyph per file, and who last committed it and when; the git config as git uses it, secrets hidden. Git, Git config
  • History as folders: Ctrl+G on a file or folder lists its commits; Enter on one browses the files as they were, F5 copies an old version out, and Find finds commit messages. Git history · History in search
  • Branches and worktrees too: Alt+B lists the branches, Enter browses one's files, Alt+S switches to it (git refuses to lose your changes); Alt+W lists the worktrees. The git line names a worktree, a detached HEAD and a merge or rebase under way. Git branches
  • Folder sizes without asking, instant in your home folder. Folder sizes
  • Finds duplicates by content across folders and disks, and marks the extra copies by rule. Duplicates
  • Thirty-three themes with the looks of their era, from the Amiga and the home computers to Windows and Mac, and 31 languages, listed by region: Hebrew and Persian right to left, Greek capitals without accents, Japanese and Korean lined up in the terminal. Themes · Languages
  • Nothing leaves your machine unless you ask for it. Privacy
The terminal app: two blue panels, git status on the left The desktop app in Cyber, its default theme: a green phosphor terminal with two panes, git status, colour tags and the F-key bar
The terminal app The desktop app in Cyber
The preview pane: Markdown with a Mermaid diagram and math, a notebook, a spreadsheet, a Word document and a font A tar.gz archive open like a folder
The preview pane Archives as folders
Morphy's Opera Game in the desktop app at 15.Bxd7+: the board in Cyber's greens, the moves beside it in figurines with a variation in brackets The terminal app's chess view: the board in Unicode pieces on blue squares, the moves beside it
Chess games Chess in the terminal app
Space in the desktop app: the demo home as a treemap, videos, the virtual machine, music and photos as coloured rectangles inside their folders, the bytes by type beside it Space in the terminal app: the same treemap in coloured half-blocks, folder names on their title rows, the bytes by type on the right
Space: where the space goes Space in the terminal app

Smart search: names, words, meaning and answers

One field finds every file by name in a blink, by the words inside it, by what it is about in any language, and Ask answers a question from your files with numbered sources: type, and the hits come in groups, the ones that fit your query first; Ctrl+Enter asks. It all runs on your own machine, or on your own server (Ollama, Lemonade, LM Studio, llama.cpp …); nothing leaves it unless you choose a server elsewhere. Three steps:

  1. Settings → Finding files → Set up… (terminal app: coxswain --setup-search). The guide finds the model servers on your machine and says what suits it.
  2. Use the graphics card or NPU if you have one: the guide checks that the server does.
  3. Let it read in the background: Start with my session keeps the index current between launches (a systemd user service, a launchd agent, a Run entry or an XDG autostart entry on FreeBSD; no administrator rights).

The whole walk-through: Smart search in a few minutes.

The desktop app: Ctrl+F opens Find, rocket fuel cost is typed and Ctrl+Enter asks; the answer appears in place, The rocket fuel costs 2,105 kEUR in April and 2,655 kEUR in June [1], with the sources budget.txt and budget-da.txt numbered under it

Ask with qwen3:8b on Ollama on the same machine. The wait for the first word is cut short.

Install

Quickest, per system (every option is in the table below):

flowchart LR
  you([Your system]) --> fb[FreeBSD] --> fbs["install-freebsd.sh<br>both apps; port under review"]
  you --> bsd[NetBSD, OpenBSD] --> unix["install-unix.sh<br>(ftp)"]
  you --> ill[illumos] --> unixc["install-unix.sh<br>(curl)"]
  you --> nas[TrueNAS] --> nasb["FreeBSD or Linux build<br>in your home, over SSH"]
  you --> lin[Linux] --> linb["brew, or the static binary<br>.deb, .rpm, .AppImage<br>Flatpak, Nix"]
  you --> and[Android] --> ter["Termux: cargo install,<br>pkg once packaged"]
  you --> cros[ChromeOS] --> deb[".deb in Linux"]
  you --> any[Any, with Rust] --> cargo["cargo install --locked coxswain"]
  you --> mac[macOS] --> brew["brew, brew --cask, .dmg"]
  you --> win[Windows] --> wg["winget, .msi, -setup.exe"]
Loading
fetch -qo - https://raw.githubusercontent.com/mwo-dk/coxswain/master/install/install-freebsd.sh | sh   # FreeBSD
ftp -o - https://raw.githubusercontent.com/mwo-dk/coxswain/master/install/install-unix.sh | sh         # NetBSD, OpenBSD
curl -fsSL https://raw.githubusercontent.com/mwo-dk/coxswain/master/install/install-unix.sh | sh       # illumos
brew install mwo-dk/coxswain/coxswain                                                                 # Linux, macOS: terminal app
cargo install --locked coxswain                                                                       # anywhere with Rust, Termux too
brew install --cask mwo-dk/coxswain/coxswain-gui                                                      # macOS: desktop app
winget install mwo-dk.Coxswain.Terminal                                                               # Windows: terminal app
System Terminal app Desktop app
FreeBSD 14, 15 fetch -qo - https://raw.githubusercontent.com/mwo-dk/coxswain/master/install/install-freebsd.sh | sh installs both apps (FreeBSD); --terminal-only for the terminal app alone The same line (experimental), with the packages it needs from pkg
NetBSD 10, 11 ftp -o - https://raw.githubusercontent.com/mwo-dk/coxswain/master/install/install-unix.sh | sh (NetBSD) Not yet: webkit-gtk41's binary packages miss dependencies
OpenBSD 7.9 ftp -o - https://raw.githubusercontent.com/mwo-dk/coxswain/master/install/install-unix.sh | sh installs both apps (OpenBSD); --terminal-only for the terminal app alone The same line (experimental), with webkitgtk41 from pkg_add
illumos (OmniOS, OpenIndiana) curl -fsSL https://raw.githubusercontent.com/mwo-dk/coxswain/master/install/install-unix.sh | sh (illumos) Not built: no WebKitGTK 4.1
TrueNAS The Linux build (Community Edition) or the FreeBSD one (CORE) in your home, over SSH (TrueNAS) Not on a NAS
Linux brew install mwo-dk/coxswain/coxswain, or the static x86_64-unknown-linux-musl binary .deb, .rpm, .AppImage, or the Homebrew cask (x86-64)
Linux, Flatpak Not in it: the line above Not on Flathub yet: build it with flatpak-builder (Flatpak)
Linux on ARM64 (Raspberry Pi OS 64-bit, Asahi, ARM servers) The static aarch64-unknown-linux-musl binary, or brew as above _arm64.deb, .aarch64.rpm, _aarch64.AppImage (Linux on ARM)
Nix (Linux, macOS) nix run github:mwo-dk/coxswain, or nix profile install github:mwo-dk/coxswain (Nix) nix run github:mwo-dk/coxswain#coxswain-gui (Linux)
Android (Termux) pkg install coxswain once it is in Termux's repository; until then pkg install rust git && cargo install --locked coxswain (Termux) Not on Android
ChromeOS The Linux binary for its processor, in the Linux terminal The .deb for its processor, in Linux (ChromeOS)
Any cargo install --locked coxswain ./install/install.sh (or install\install.ps1) from a clone
macOS brew install mwo-dk/coxswain/coxswain brew install --cask mwo-dk/coxswain/coxswain-gui, or the .dmg
Windows winget install mwo-dk.Coxswain.Terminal, or coxswain-terminal-<version>-x86_64-pc-windows-msvc.zip .msi or -setup.exe
Windows on ARM coxswain-terminal-<version>-aarch64-pc-windows-msvc.zip _arm64_en-US.msi or _arm64-setup.exe (Windows on ARM)

Downloads are on the releases page. The builds are not code-signed: on macOS, if the app "is damaged", run xattr -cr /Applications/Coxswain.app once (the cask does it for you); on Windows click More info and Run anyway. Why macOS may ask about your folders again after an update: macOS. Both apps check for a newer release when they start, then once a day while open, and give the exact update command (Update checks). Every way to install and update, and building from source: install/INSTALL.md. Git glyphs want a Nerd Font; without one set glyphs = "ascii" (Glyphs and fonts).

First steps

  1. Start it in a folder: coxswain (or cox) in a terminal, or coxswain-gui. Two folders open the two panels: coxswain ~/src ~/Downloads.
  2. Move with the arrows, Enter opens (a folder, or an archive), Backspace goes up, Tab switches panels.
  3. Mark with Insert, then F5 copies or F6 moves to the other panel. F8 moves to the trash, F7 makes a folder, and Ctrl+Z undoes the last of them.
  4. Find anything with Ctrl+F; Tab steps through the kinds: Names, In files, About (meaning) and Ask. Turn on smart search (meaning and Ask): Settings → Finding files → Set up…, or coxswain --setup-search (the guide).
  5. Type a command and press Enter: it runs in the panel's folder.
  6. Settings, sorted by task (Finding files, Previews, Looks, Behaviour, Keys, Privacy and updates): Ctrl+, or the gear button in the desktop app, F12 (Settings at the right end of the key bar), Shift+F10 → Settings or F9 → Settings in the terminal app. In the desktop app, Space shows the preview pane.
  7. Not sure what you can do with a file? Shift+F10 (or the Menu key, or the ⋯ on the row) lists what fits it, each with its key: pack, extract, rename, history (The action menu). Forgot a key? F9 lists every command, and F1 shows your keys.

More in Panels and keys and Every default key.

Documentation

The docs index is the full map; every feature has its own page with the keys, what you see, the settings, and the questions people ask.

Area What is in it
Panels and keys The first-run guide, the screen, notices and what's new, moving, quick search, marking, sorting, tabs, views, folder sizes, git, git history, branches and worktrees, the mouse, the command list (F9), Features (F1), the action menu, what the apps remember, every key
Tags, notes, favourites and the sidebar Colour tags, folder notes, favourite groups, places and drives
Commands, the user menu and scripts The command line, F2 menu, scripts, F3 and F4, opening files
Search The guided setup, Find, names, text, documents, scans, diagrams, git history, archives, cloud files, removable disks, meaning, servers, Ask, Ask about code, Ask without a server, built-in models, the helper, battery, search settings
The preview pane Text and code, documents, HTML, Office, data, CBOMs, build provenance, media, diagrams, LaTeX, tools and containers, safety
Files Copy, move, new folder, delete, undo, clipboard, drag and drop, batch rename, archives, pack and extract, passwords, properties, duplicates, ZFS snapshots
Customising Settings, themes, looks, your own theme, languages, keys, glyphs
Reference The terminal app, flags, every config key, privacy, updates, where files are kept, disk use, security, licences and bills of materials, performance
Systems FreeBSD, NetBSD, OpenBSD, illumos, TrueNAS, Linux on ARM, Flatpak, Nix, Termux on Android, ChromeOS, macOS, Windows on ARM
Questions, collected The common questions, linked to their full answers
Changelog Every version, newest first; the last ten are below

Layout

crates/coxswain-core   config, fs ops, archives, git status and history, search index and store, duplicates (shared)
crates/coxswain        terminal UI (package and binaries: coxswain, cox)
gui/                   Svelte 5 frontend
gui/src-tauri          Tauri backend (binary: coxswain-gui)

Licence

MIT. Every release carries the licences of what it is built from (THIRD-PARTY-NOTICES.md, also inside the apps), an SBOM for each app and a CBOM of the cryptography they use; see Licences and bills of materials.

Norton Commander is a trademark of Gen Digital Inc. Coxswain is an independent project, not affiliated with or endorsed by Gen Digital.

Changelog

Newest first. Downloads for each release are on the releases page.

Version Date What's new
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). PGN chess files (also .pgn.gz, .pgn.zst) open as a table of games and a board with figurine notation, Alt+K (Chess games). 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). 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). 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 · Containers). 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 · View and edit). Norwegian in Bokmål and Nynorsk, 31 languages in all, and a Norwegian system no longer gets Danish (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). 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 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
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
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://<PAT>:@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 · Containers
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
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
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
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
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
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

All versions, back to 1.0.0: the full changelog.

About

Coxswain: Norton Commander style file manager with Everything-speed search on Linux, macOS and Windows. Terminal (Ratatui) and desktop (Tauri) apps, git in every panel.

Topics

Resources

Stars

8 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages