mboxShell v0.7.0
mboxShell v0.7.0
Fast terminal viewer for MBOX files of any size.
What's new in 0.7.0 — Google Groups mailboxes
A Google Takeout archive contains two different kinds of mbox, not one. Besides the Gmail export, every group the account owns is exported as a full mailbox of its threads:
Takeout/Mail/All mail Including Spam and Trash.mbox ← Gmail
Takeout/Groups/googlegroups.com/<group>@googlegroups.com/topics.mbox ← Groups
In the archive this release was built against, the Groups mailbox was the largest file of the whole export — 636 MB / 6,787 messages, against 292 MB for the Gmail one. mboxShell opened it, but four Groups-specific details went unhandled (#23):
- Dates were silently invented. Google Groups writes the envelope date with the timezone offset before the year, which asctime does not allow. A message with no readable
Date:header fell through to a last-resort parse that returned a plausible-looking but wrong2000-09-16— no error, just a corrupted sort order and broken date filters. - The label sidebar was empty. These mailboxes carry no Gmail labels. The group name is now surfaced as a virtual label, so the sidebar works for a whole Takeout archive instead of its Gmail half.
- Every group was displayed as
topics. The file name is localised (topics.mbox,temas.mbox, …) and identifies nothing; the group is the directory around it. That name is now what the TUI shows and whatmerge --source-headerrecords. - Conversations are threaded by the real id. Groups assigns each message an explicit
X-GM-THRID, which is exact where matching by subject both over-merges (every conversation titled "Hello" becomes one thread) and under-merges. On the reference mailbox: 1,927 → 1,958 threads, and the largest thread shed 7 messages that never belonged to it.
Two older bugs surfaced while testing this on real data:
- A message with a repeated
Message-IDdisappeared from the threaded view — the reference mailbox showed 6,785 of its 6,787 messages in thread mode. -fwas claimed by two options at once:--forceglobally and--formatinexport. Debug builds panicked at startup onexport.-fnow means--forceeverywhere exceptexport, where it means--formatand--forceis spelled out.
Note on upgrading: the index format changes (3 → 4), so every existing .mboxshell.idx is rebuilt on first open. That re-index is also used to land a deferred fix: mailbox modification time is now recorded in nanoseconds instead of seconds, closing the sub-second window in which a rewritten mailbox looked unchanged and a stale index was served.
Full detail in the changelog (español), and in docs/GOOGLE-GROUPS.md for the layout, the measured header coverage and the exact rules.
Downloads
| Platform | Binary |
|---|---|
| Linux x86_64 | mboxshell-linux-x86_64 |
| Linux ARM64 | mboxshell-linux-aarch64 |
| Linux RISC-V 64 | mboxshell-linux-riscv64 |
| FreeBSD x86_64 | mboxshell-freebsd-x86_64 |
| macOS Intel | mboxshell-macos-x86_64 |
| macOS Apple Silicon | mboxshell-macos-aarch64 |
| Windows x86_64 | mboxshell-windows-x86_64.exe |
| Windows ARM64 | mboxshell-windows-arm64.exe |
Installation
# Linux / macOS
chmod +x mboxshell-*
sudo mv mboxshell-* /usr/local/bin/mboxshell
# Or build from source
cargo install --git https://github.com/dcarrero/mboxshell.gitWhat's included
- Streaming MBOX parser (handles 50GB+ files)
- Persistent binary index for instant re-opens
- Gmail labels support (X-Gmail-Labels) and Google Groups mailboxes from Takeout
- Advanced search (from:, subject:, date:, body:, has:attachment, etc.)
- Conversation threading (JWZ algorithm, or
X-GM-THRIDwhen present) - Export to EML, TXT, CSV with attachment extraction
- Full terminal UI with vi-style navigation
- Bilingual interface (English/Spanish)