Beta
Python Flask SQLite Privacy Local-First Windows Mac

Email Archive Reader

Browse decades of email archives entirely offline — every message, attachment, and thread, indexed and searchable, without your data leaving your machine.

Email is personal history. The problem is that accessing it usually means giving it back to a cloud service, or opening a full email client that phones home constantly. Email Archive Reader takes a different approach: it runs entirely on your local machine, reads the archive files you already have, and gives you a browser-quality interface to navigate them — no account required, no network traffic, no data ever sent anywhere.

The application runs as a lightweight local server that you open in any browser. It parses your archive files once on import, extracts every message, attachment, and thread relationship into a local SQLite database, and builds a full-text search index on disk. After that first pass, browsing and searching your entire history is instant — the original archive files are no longer needed.

The target user is anyone who has exported a lifetime's worth of email from Gmail Takeout, migrated away from Outlook, or simply wants to keep a personal archive of correspondence accessible and searchable without ongoing cloud dependency. Privacy is the non-negotiable constraint the entire design is built around.

Supported Formats

Every major archive format, one unified view

Import any combination of sources — they merge into a single searchable library, browseable by account or all at once.

MBOX

The universal standard for email export — including Gmail Takeout archives. Gmail's label system is parsed directly from message headers, so your inbox structure is preserved exactly.

EML & EMLX

Individual RFC 2822 message files and Apple Mail's EMLX format. Drop a folder of thousands of .eml files and they're imported as a named archive in one pass.

PST & OST

Outlook's proprietary archive formats, parsed via the open-source libpff library. Full folder hierarchy, RTF body conversion, and attachment extraction all supported.

Folder Import

Point the importer at any directory — it walks recursively, detects file types automatically, and consolidates everything under a single import label. Works for mixed-format exports.

Architecture

A local server that disappears when you're done

The app launches with a single command — Python starts a Flask server bound to localhost, finds a free port, and opens your default browser automatically. From the user's perspective it behaves exactly like a native app. The server shuts down cleanly when you close the terminal.

Search is a two-stage pipeline. A Whoosh full-text index handles the free-text portion of a query — scoring and ranking across subject, body, sender, and recipient fields with optional fuzzy matching. Results pass through a SQLite post-filter that handles structured predicates: date ranges, attachment type, read/starred state, label membership, and cross-archive filtering. Neither engine alone is sufficient for all query types; together they cover the full space without a heavier dependency.

Import runs in a background thread so the UI stays responsive for large archives. Progress streams to the browser via Server-Sent Events in real time. The SQLite database uses WAL mode throughout, which allows concurrent reads to proceed without blocking the ongoing write — so browsing earlier imports while a new one indexes works cleanly.

Attachment files are extracted from archives on import and stored in a local directory, each keyed by a stable hash. The database records filename, MIME type, size, and inline Content-ID for accurate HTML email rendering — inline images and attachments distinguished automatically.

Technical Stack

  • Python 3 + Flask 3 Local HTTP server, blueprint-based routing
  • SQLite (WAL mode) Email storage, labels, saved searches, app state
  • Whoosh Full-text search index with fuzzy matching
  • libpff / pypff Outlook PST & OST archive parsing
  • BeautifulSoup4 + chardet HTML parsing, multi-encoding detection
  • Vanilla JS SPA Zero-framework frontend — 11 focused modules
4 Archive format parsers — MBOX, EML, EMLX, PST/OST
100% Offline — binds to 127.0.0.1 only, zero network calls

Features

Everything you'd want from a dedicated email client

Advanced Full-Text Search

Search across subject, body, sender, and recipient simultaneously. Supports operators like from:, to:, after:, before:, has:attachment, is:starred, and label: — the same syntax power users already know. Fuzzy matching surfaces relevant results even with typos.

Thread View

Conversations are automatically grouped by thread — messages are linked by their In-Reply-To and References headers, reconstructing the full back-and-forth of any exchange regardless of folder or import source.

Labels & Folder Mapping

Every folder in an imported archive automatically becomes a color-coded label — Gmail's Inbox, Sent, and custom labels included. You can create additional labels manually and assign them to any message, building a tagging system across all your archives.

Attachment Browser

Filter any view to show only messages with attachments, then narrow further by file type — PDFs, Word documents, spreadsheets, images, or archives. Inline images are rendered in the message body; other attachments are saved locally and openable directly.

Multiple Archives

Import as many archives as you like — personal accounts, work accounts, old backups — each tracked separately with its own email count and status. View them all together or switch between them individually. Duplicate messages across imports are detected automatically.

Timeline & Saved Searches

A timeline view visualizes email activity across the full span of your archive, helping surface periods of high activity or locate approximate dates without remembering exact keywords. Complex search queries can be saved and revisited instantly.

Local-First

Your email history belongs to you.

Email Archive Reader is built on a simple premise: personal correspondence is too important to depend on cloud services for access. It runs entirely on your hardware, stores everything locally, and requires no accounts, subscriptions, or internet connection of any kind.