npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

fruitmail

v1.2.0

Published

Fast SQLite-based search for Apple Mail.app with full body content support.

Readme

Fruitmail

Fast SQLite-based search for Apple Mail.app with full body content support.

macOS Shell

Requires Node.js 22.13 or newer for npm installs.

✨ Features

  • ⚡ Fast: Direct read-only SQLite access (zero-copy default)
  • 🔒 Safe: Uses read-only mode by default, or copies DB with --copy flag
  • 📧 Body content: Read full email bodies via AppleScript (fast for a few emails)
  • 🔍 Full search: Search by subject, sender, recipient, date range, attachments, and more

📦 Installation

Using Homebrew:

brew tap gumadeiras/tap
brew install fruitmail

Using npm:

npm install -g fruitmail

Using Bash (Zero dependency):

curl -sSL https://raw.githubusercontent.com/gumadeiras/fruitmail-cli/master/fruitmail | bash

🚀 Usage

# Complex search
fruitmail search --subject "invoice" --days 30 --unread

# Page through results
fruitmail search --subject "invoice" --limit 20 --offset 20

# Search by sender
fruitmail sender "@amazon.com"

# List unread emails
fruitmail unread

# Read full email body (supports --json)
fruitmail body 94695

# Open in Mail.app
fruitmail open 94695

# Database stats
fruitmail stats

📊 Performance

| Method | Time for 130k emails | |--------|---------------------| | AppleScript (full iteration) | 8+ minutes | | SQLite (this tool) | ~50ms |

🏗️ Technical Details

  • Database: ~/Library/Mail/V{9,10,11}/MailData/Envelope Index
  • Query method: SQLite (read-only) + AppleScript (body content)
  • Safety: Read-only mode prevents modification; optional --copy mode available

🛠️ Scripts

  • ./scripts/committer "message" path...: stage only the listed paths and create a commit
  • ./scripts/release check 1.1.1: verify synced release versions and run the release test gates
  • ./scripts/release run 1.1.1: bump versions, run tests, package artifacts, tag, push, wait for the release workflow, publish npm, and update Homebrew

Release CI publishes to npm with trusted publishing.

🔗 ClawHub

Available as a skill on ClawHub for OpenClaw users. Install with:

clawhub install apple-mail-search-safe

📝 License

MIT