A small, opinionated macOS email viewer that fixes four specific Apple Mail pain points.
Compose / send stay in Mail.app — FMail does not try to be a full mail client.
Concrete pain points with Apple Mail that FMail solves:
- Drifting unread counts. The badge and the actual unread set disagree.
- Weak search. No real boolean operators, awkward date syntax, no good way to scope by topic + time + person at once.
- Wrong recipient address. Mail.app picks at random when a contact has multiple addresses (e.g. a real address and an App-Store-only address).
- Illegible threads. Hard to see what's actually new in a long reply chain.
Surveyed alternatives (Mimestream, MailMate, Spark, Canary, Airmail, …) are either Gmail-only, subscription churn, cloud-routed (privacy), or have the same bugs — and most get abandoned within a year. So: build something tiny and personal.
FMail reads Apple Mail's ~/Library/Mail/V*/ store read-only, mirrors the metadata into its own SQLite + FTS5 index, and renders a faster UI on top. Reply / forward open Mail.app's compose window via mailto: URLs — no SMTP, no sync layer, no cloud. Apple Mail keeps doing the actual mail-server talking; FMail just gives you a better way to read and find what's already there.
- Search DSL —
from:kyoko after:2024-03 (invoice OR receipt) -draft has:attachment "exact phrase". Date forms include ISO, relative (7d,last week), month names, and aduring:operator that auto-widens to the granularity you typed (during:2026= all of 2026). - Per-contact preferred address — never mis-send to a contact's secondary address again.
- Threads via union-find on
Message-ID/In-Reply-To/References. - "All Mailboxes" view across every account, with drafts / trash / junk filtered out.
- Mail.app's threading still works — replies set proper
In-Reply-ToandReferencesheaders via RFC 6068 mailto parameters. - "Open in Mail.app" button for messages whose body Mail.app hasn't downloaded yet (uses the
message://URL scheme). - Zero network connections. No outbound traffic, no telemetry.
- Apple's Gmail label model handled —
[Gmail]/All Mailis the canonical store, INBOX/Sent/Important are labels; FMail mirrors the labels table and shows them correctly.
Daily-driver capable. Phases 0–4 shipped — all four pain points closed. Phase 5 (polish) is ongoing. See IMPLEMENTATION.md for per-phase status, file inventory, and the polish backlog.
- macOS 14 (Sonoma) or later.
- Apple Mail set up with your accounts (FMail reads its on-disk data; it doesn't talk to mail servers itself).
- Full Disk Access granted to FMail (so it can read
~/Library/Mail/). The app prompts on first launch. - Contacts permission (optional) — used to suggest the right address per contact when replying. Lazy-prompted the first time you reply.
- Automation permission to control Mail.app (optional) — required for "Mark as Read" / "Mark as Unread", which drive Mail.app via AppleScript. macOS prompts the first time you click one of those buttons. If you decline or dismiss the prompt, you'll need to enable it manually under System Settings → Privacy & Security → Automation → FMail → Mail. (FMail surfaces a one-click button to open that pane when it detects the permission has been denied.)
Requires Xcode 15+ and xcodegen.
brew install xcodegen
xcodegen generate
xcodebuild -project FMail.xcodeproj -scheme FMail -configuration Debug buildThe .xcodeproj is generated from project.yml and not checked in.
FMailSpec.md— design intent: pain points, architecture, phased plan.IMPLEMENTATION.md— what actually shipped, deviations from the spec, file inventory, Phase 5 backlog.
Copyright (C) 2026 Felix Matschke
FMail is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. See LICENSE for the full text.
Note: GPL-3.0 is incompatible with Apple's App Store distribution. Direct download / sideload only.
