msgvault

Padlocked envelope on a black background, above badges reading SQLite + FTS5, DuckDB + Parquet, LLM Chat and MCP Server

Mail, chat and meeting notes copied to your own disk

msgvault is an MIT-licensed archive that keeps a local copy of your messaging history. It syncs Gmail, IMAP, Microsoft 365, Slack, Teams, Discord and Matrix, and imports exports you already have: MBOX, Maildir, PST, Apple Mail, WhatsApp, iMessage. Google Calendar events, CardDAV contacts and meeting notes from Granola or Notion go into the same SQLite database, stored under ~/.msgvault by default.

The archive is read through a web UI, a terminal UI, the CLI, an HTTP API or an AI assistant over MCP. A captured message stays readable after it is gone from Gmail or Slack.

Keyword search and DuckDB aggregates without calling the provider

  • Offline search: keywords hit SQLite's FTS5 full-text index, while per-sender, domain and time aggregates run in DuckDB over a Parquet cache. Neither touches Gmail or Slack; only sync does.
  • Compressed storage: raw MIME is zlib-compressed, 3 to 5 times smaller according to the docs, and an attachment received several times is stored once.
  • Incremental, resumable sync: after the first pass, the Gmail History API returns only new and changed messages, and an interrupted sync picks up where it stopped.
  • Remote deletion behind a switch: staging messages for deletion leaves the provider alone. Deleting from Gmail or IMAP requires [deletion] remote_enabled = true, moves mail to Trash by default and keeps the archived copy.
  • Single binary: release builds embed the web UI and need neither Node nor Bun at runtime. An install script covers macOS, Linux and Windows, and Homebrew and conda-forge carry packages.

Alpha label, default-on telemetry and a Google OAuth client to set up

msgvault calls itself alpha software. The README warns that APIs, storage format and CLI flags may change, and tells users to back up their data. Release 0.22.0 shipped on 23 October 2026, three weeks after 0.21.0. The docs track main, so a documented feature can be missing from the binary you installed.

Anonymous telemetry has been on by default since 0.22.0. The daemon reports a daily ping and usage counts to PostHog, never archive content or query text. [telemetry] enabled = false or DO_NOT_TRACK=1 turns it off. Optional AI features such as semantic search are another matter: they send selected data to the endpoints you configure, which can be local.

Gmail requires a Google Cloud project and OAuth client of your own. While the app sits in Testing mode, Google expires Gmail tokens seven days after consent; publishing it to production lifts that limit. The project observed about 50 messages per second on a first sync over a fast connection, and Gmail's per-user quotas can slow that down, so a mailbox with hundreds of thousands of messages may take several hours.

The server is meant for a trusted network. The docs recommend Tailscale and advise against exposing port 8080 to the internet. Any API key, read-only client keys included, opens the whole archive.

msgvault sits next to your mail client instead of replacing it. Its site describes it as something to use alongside your mail client and provider exports, and it never sends mail. Wes McKinney, who wrote it, says he built it to get twenty years of Gmail out of Google's walled garden.