mrkeyoor.com_
Tue 29 Sept 06:36 UTC
Self-Hostedevaluationupdated 29 Sept 2026

superlocal review

SuperLocal is a desktop-focused email client and provider gateway that combines several accounts while keeping each mailbox's identity and provider behavior separate. Its Inbox SDK stores normalized mail in SQLite, and the included web app currently connects to Gmail and Inbound.new or runs with two fictional mailboxes.

Verdict

Our SuperLocal run built in 11 seconds, then failed 337 of 675 tests, so this is a codebase to study or help finish rather than a mail system to trust with production accounts today. The provider separation, local storage, and detailed state rules are thoughtful. Missing license terms, unfinished IMAP support, and the split test result make adoption hard to justify outside an evaluation checkout.

We ran it

Lab card: what happened when we ran superlocal
Install✓ · 47s200 packages · 189 MB
Build✓ · 11s
Tests✗ · 37s338 passed · 337 failed of 675 (bun test)
Repo466 files~71,809 lines of source · 66.6 MB · 1 CI workflows · Dockerfile

Answers from our run

Does superlocal build from source?

Dependencies installed in 47 seconds (200 packages), and the build succeeded in 11 seconds. We cloned commit d3725bc into a clean Debian container with 3 CPUs and no project-specific setup.

Do superlocal's tests pass?

Not all of them: 338 of 675 passed and 337 failed when we ran the project's own test command (bun test). Some failures need services or credentials a bare container does not have.

Who should not use superlocal?

Production teams that require a green test gate: our run had 337 failures among 675 tests.

What are the alternatives to superlocal?

Zero, Mailspring, Roundcube. Our SuperLocal run built in 11 seconds, then failed 337 of 675 tests, so this is a codebase to study or help finish rather than a mail system to trust with production accounts today.

Setup2/5Demo starts quickly; real mail needs OAuth and careful state setup
Docs4/5Detailed local, Docker, provider, backup, and access guidance
Community3/5225 stars, 6 open PRs, and a September 2026 main push
Maturity2/5No release or license, unfinished providers, and 337 failed tests

Who it’s for

Bun and TypeScript developers studying a provider-neutral email data model.
Individuals willing to self-host a private unified inbox for Gmail and Inbound.new accounts.
Teams evaluating a local SDK for mail sync, drafts, events, provider actions, and encrypted credentials.
Contributors prepared to work from an unreleased repository with a large test suite.

Who it’s NOT for

Production teams that require a green test gate: our run had 337 failures among 675 tests.
Companies that need clear reuse rights: GitHub reports no license, and the repository root contains no license file.
Anyone needing finished IMAP, iCloud, Resend, or Cloudflare support: the README labels those providers in progress or planned.
Shared-inbox or role-based support teams: each approved user gets private accounts, and shared mailboxes plus team roles are not implemented.
Operators expecting an appliance: real Gmail needs OAuth setup, remote use needs HTTPS and a reverse proxy, and state must be backed up with its keys.

Setup reality

Our sandbox installed commit d3725bc in 47 seconds, adding 200 packages and using 189 MB. The build passed in 11 seconds. The test command failed after 37 seconds: Bun reported 338 passed and 337 failed across 675 tests, with 222,760 expectation calls.

Bun 1.4 or newer is required. The fictional two-mailbox mode needs no credentials. Real Gmail needs a Google OAuth client, secret, and callback URL; Inbound.new needs an API key. Remote access reuses Google identity login, requires an exact email allowlist, and leaves TLS plus reverse-proxy rate limits to the operator.

SQLite databases, configuration, runtime secrets, and instance keys must move together. Docker uses a persistent volume at /persist; deleting it or changing the instance identity breaks continuity. Gmail and Inbound.new are implemented, while IMAP, iCloud, Resend, and Cloudflare remain unfinished.

Two fictional mailboxes make the first run useful

The first local start creates 2 fictional mailboxes through the same Inbox SDK used by real providers. You can read conversations, switch inboxes, compose messages, test keyboard shortcuts, and inspect the unified view without handing over a Gmail account. That is a good demo boundary for email software. It lets a developer see the storage and provider model before OAuth, webhook, or DNS work enters the room.

SuperLocal keeps each account's identity and capabilities separate even when messages appear in one view. Replies retain the right sender, while Done and snooze are local workflows rather than fake upstream labels. Received HTML goes into a script-disabled iframe, remote images pass through authenticated routes, and tracker blocking stays under the SDK's policy. Those choices fit a local client that must treat every message as hostile input.

What happened when we ran it

Our sandbox installed commit d3725bc in 47 seconds with 3 CPUs, 8 GB of RAM, no secrets, and no elevated privileges. Bun added 200 packages, and the environment occupied 189 MB. The build succeeded in 11 seconds. The repository itself contained 466 files, roughly 71,809 lines of source, and 66.6 MB before dependencies. It is a workspace monorepo with one CI workflow, a Dockerfile, and Compose configuration.

The test command failed after 37 seconds. Bun reported 338 passed and 337 failed across 675 tests, after 222,760 expectation calls. The final log lines named three AI triage service failures involving retained SDK messages, archive inventory accounting, and a paused 10,000-thread history. They do not explain why those tests failed, and the other 334 failures are not identified in the supplied tail. A single root cause would be guesswork.

A nearly even pass-fail split changes the recommendation. The 11-second build proves that the TypeScript output can be produced in our container. It does not show that mailbox state, recovery, or AI triage behavior is dependable. There is also no top-level tests directory, although the command found 675 tests across 2 files. Teams should reproduce the failures before connecting accounts that can send or modify mail.

Gmail and Inbound.new are the implemented providers

The README lists 2 real connectors as implemented: Gmail and Inbound.new. Gmail needs a Google OAuth web client, an exact callback URL, and explicit client credentials. Inbound.new uses an API key and then exposes discovered addresses. Mock and real data live separately, which lowers the chance that a developer action quietly crosses into a real mailbox.

IMAP and iCloud are marked in progress. Resend and Cloudflare Email Service are planned, and the document is careful to say that receiving APIs do not automatically provide IMAP folders or native read flags. Take those labels literally. If your account is outside Gmail or Inbound.new, SuperLocal is source material for a connector today, not an inbox you can finish configuring before lunch.

Real connections permit provider writes by default. An operator can disable them and authorize Gmail with its read-only scope, but existing grants must be reauthorized before sending or modifying messages later. Open issue 26 asks for Gmail alias support in recipient display and replies. That is a narrow issue with broad consequences for people who rely on several sending identities from one account.

Docker state has to survive as one unit

The Docker path publishes one browser port and stores state in the superlocal-state volume under /persist. Configuration, SQLite databases, generated keys, runtime secrets, and journals live together. The README warns against docker compose down -v, replacing the instance ID, sharing one volume between 2 instances, or backing up while the app is running. A database copied without its matching keys can fail closed.

Published images target Linux AMD64 and ARM64, with commit-specific tags and recorded digests. That is better than relying only on latest, though GitHub Container Registry packages may begin private until the owner changes visibility. Database migrations can also limit downgrades. Before an update, stop the app and copy the entire retained state, then pin the image digest you tested.

Remote access gives each person a private inbox

Google login can restrict a remote installation to an exact email allowlist. Each approved person receives private connections, messages, drafts, settings, and browser recovery data. Shared mailboxes and team roles are absent. That makes the current design suitable for several independent users on one installation, not a support desk where agents work the same queue.

Remote operation needs more than the 20-login-per-minute application limit. SuperLocal does not install TLS or configure the reverse proxy, and it does not trust forwarded client IP headers for its own limiter. The README tells operators to add per-client limits at the trusted proxy. Removing an email blocks access, but adding it back can restore an unexpired session, so offboarding should include sign-out or session-expiry checks.

No license and no release tag stop casual adoption

GitHub showed 225 stars and 7 combined open issues and pull requests on September 29, 2026. Search results split that into 1 issue and 6 pull requests. The main branch was last pushed on September 8, while newer pull requests covered Gmail reconnects, signatures, reply defaults, and AI request fixes. There was no GitHub release, so deployment has to pin a commit.

More seriously, GitHub detected no license and the root listing contains no license file. Public source code is readable, but that does not grant the permissions an open-source license normally provides. Ask the maintainer to add terms before copying the SDK into a product or running a long-lived fork. Combined with 337 failed tests and unfinished general mail support, that missing file makes SuperLocal an interesting engineering reference rather than a defensible production dependency.

Alternatives

ProjectWhat it isPick it when
ZeroAn MIT-licensed open-source email app with a stronger ready-to-adopt product focus.pick this instead when a licensed modern inbox matters more than SuperLocal's provider SDK architecture.
Mailspring gh↗A GPL-licensed desktop mail client for macOS, Windows, and Linux.pick this instead when you want an established desktop client with conventional account support.
RoundcubeA long-running GPL webmail client for standard mail-server deployments.pick this instead when your IMAP and SMTP service already exists and you only need webmail.

What people are saying

  1. [velocity-scout] R44VC0RP/superlocal

Sources

  1. SuperLocal repository and README
  2. Gmail alias support issue
  3. Gmail reconnect pull request
  4. Measured SuperLocal commit

More self-hosted reviews

Qwen3.8-Flash-Next-Single-DGX-Spark · usque-custom-pro · anythingmcp · Calibre-Web-Automated · CF-Server-Monitor · niubigeo · the whole board →