Minimalist .eml and .msg viewer for macOS. Double-click an email in Finder - the window opens, renders the message and gets out of your way. Built with Swift, SwiftUI, AppKit and WKWebView. Zero runtime dependencies.
- Two formats in one binary
.eml(RFC 822 / MIME): full MIME tree, RFC 2047 encoded-words, quoted-printable, base64, charset decoding.msg(Outlook Compound File Binary): CFB parser reads subject, sender, recipients, plain and HTML body, inline images and attachments via MAPI property streams
- Decoded headers:
From,To,Cc,Subject,Date - HTML rendering via
WKWebViewwith inlinecid:images resolved from MIME parts - Plain-text fallback for messages without an HTML part
- Attachments bar with Finder-style file icons, click to open in the default app,
Download Allto~/Downloads - One-click
Set as default for .eml and .msg: after that, double-clicking a message just opens the window, reads the file, shows it. No onboarding, no tray, no background daemon - Light / Dark / System appearance, window size persisted across launches (SwiftData)
emlcheckCLI companion for inspecting MIME trees from the terminal
brew tap noma4i/emlviewer https://github.com/noma4i/emlviewer
brew install --cask emlviewerGrab the latest EMLViewer.app.zip from Releases.
- macOS 14.0+ (Sonoma or later, required by SwiftData)
- Swift 5.9+
- Xcode 15+
The .app is always built by Xcode (xcodebuild) and written to dist/.
make bundle # dist/EMLViewer.app (release, ad-hoc signed)
make run # debug build + launch
make install # copy into /Applicationsopen EMLViewer.xcodeprojmake testMIT
