Skip to content

mboxShell v0.7.0

Choose a tag to compare

@github-actions github-actions released this 20 Aug 10:05
· 3 commits to main since this release

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 wrong 2000-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 what merge --source-header records.
  • 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-ID disappeared from the threaded view — the reference mailbox showed 6,785 of its 6,787 messages in thread mode.
  • -f was claimed by two options at once: --force globally and --format in export. Debug builds panicked at startup on export. -f now means --force everywhere except export, where it means --format and --force is 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.git

What'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-THRID when present)
  • Export to EML, TXT, CSV with attachment extraction
  • Full terminal UI with vi-style navigation
  • Bilingual interface (English/Spanish)