An email proxy that keeps your mail in your own database

Email, without the baggage.

Courier sits between you and your mail providers. One server fetches mail from Gmail, Microsoft 365, or any IMAP account and serves one clean API for the web client, agent tools, and apps.

Illustration: an old sorting room with a wall of empty wooden pigeonholes, one of them glowing cool teal.
Features

Your mail, in your database

Courier is a full-stack email platform: a proxy server that does the provider work, and clients that never have to. These are the jobs it does today. The web client reads, triages, searches, writes, sends, and manages rules, and the pages below say where each thing lives.

Providers on one side, one API on the other

01

One API, many providers

Adapters fetch and send through Gmail (OAuth and the Gmail API), Microsoft 365 (Microsoft Graph), and any IMAP and SMTP account. Every client uses the same API; none of them talks to a provider.

02

Your own database

Every message, thread, label, and rule lives in PostgreSQL, with full-text search from a trigger-maintained index. The most recent 1,000 messages per account are kept warm in Valkey, and attachments go to S3 when a bucket is configured.

03

Threads that hold together

A message joins a conversation by its References header, then In-Reply-To, then the provider's thread ID, and last by subject within 30 days.

04

Live updates

The web client listens to an authenticated stream of server-sent events, so new mail and sync changes show up without a refresh. The header says Live when the stream is connected.

A web client for the inbox

05

Every folder, or all accounts at once

Inbox, Starred, Snoozed, Sent, Drafts, Scheduled, Spam, Trash, Archive, and All Mail, for one account or a unified view across all of them.

06

Conversations

A thread folds earlier messages to one line and opens the newest. Quoted text collapses, attachments show as chips, and a warning appears when a sender's address looks like a lookalike or fails its authentication results.

07

Labels and smart folders

Labels carry a color and can nest. Smart folders are saved searches that fill themselves. They list in the sidebar and open to their own page, and new ones are created through the API or an agent.

08

Batch actions and density

Select many messages and archive, trash, star, mark, label, or move them in one step, and switch the list between comfortable, default, and compact density.

09

Block and allow lists

A blocked sender never reaches the inbox, because the list is checked when mail is synced. The Settings page manages both lists.

10

Go-to keys

Press G and then I, S, D, T, A, P, or R to jump to the inbox, starred, drafts, trash, archive, spam, or rules. The question mark opens the shortcut sheet.

Write in Markdown. Let rules do the sorting.

11

A Markdown composer

A CodeMirror editor with a formatting toolbar, a rendered preview, and your signature appended. Courier turns the Markdown into clean HTML when the message is sent.

12

A rules engine

Sixteen condition fields, thirteen operators, and twenty actions, joined in nested AND and OR groups, with priorities and a stop-processing switch. A rule can also be run over mail that is already in the database.

13

Send later, snooze, undo

The server queues scheduled sends, wakes snoozed messages, and holds a send for an undo window. Send shows an Undo toast for that window, and the web client lists what is scheduled and snoozed. Times are set through the API and the agent tools.

Everything is also a tool

14

148 MCP tools

Reading, sending, drafting, labels, folders, rules, smart folders, contacts, signatures, accounts, search, and push are all tools an agent can call. Each is a thin adapter over a REST route, and tests fail when the two drift apart.

15

AI features, when a model key is set

Semantic search, thread, contact, and topic summaries, commitment and follow-up tracking, reply drafts, meeting briefings, related threads, and suggested rules run on the server and answer through the API. Without a model key each one says it is not configured instead of failing.

16

Approved outreach for other tools

Other Renkara tools can send outreach through Courier with proof of the exact content, an approval step, retries, a suppression list, and signed complaint and unsubscribe intake.

Screens

See it in light and dark

Real captures of the running tool, with fictional StrataForge Robotics data. They follow your theme.

How it works

From provider to inbox

  1. Connect

    Link a Gmail or Microsoft 365 account through OAuth, or an IMAP and SMTP account with an app password. Credentials are encrypted at rest.

  2. Sync

    Adapters fetch mail by each provider's own mechanism: Gmail history and push, Microsoft Graph delta and webhooks, IMAP IDLE. Courier normalizes it, threads it, indexes it, and stores it.

  3. Read and organize

    The web client, an agent, or a native app reads from Courier's API. Stars, archive, trash, and spam change Courier's copy at once and are written back to the provider.

  4. Automate

    Rules sort new mail as it arrives. Workers send scheduled messages, wake snoozed ones, and purge old trash, all on the server.

Accessibility

Built so everyone can use Courier.

Courier's web client is built on the Renkara design system. On 10/29/2026 we ran axe-core over fourteen states of the running app (the inbox, an open conversation, starred, sent, drafts, scheduled, rules, the rule editor, settings, search results, a smart folder, a reply window, contacts, and the composer) at phone and desktop widths in light and dark, 56 scans in all. It found real problems earlier in the day; we fixed the small ones in Courier, and what is left is listed below as known gaps. We do not claim a WCAG conformance level for the product.

  • Partly supported

    Keyboard operation

    A skip link and a visible focus ring are in place, every message row is a focusable control that opens on Enter or Space, and go-to chords (G then I, S, D, T, A, P, or R) and a shortcut sheet work. Courier defines more single-key shortcuts than the web client connects, so those do nothing. The scan reports no nested controls in the message rows.

  • Partly supported

    Screen reader landmarks and labels

    The page has landmarks (header, sidebar navigation, main), the Live indicator announces its state, the star buttons and message headers have accessible names, and axe-core's name and role checks pass apart from one button on the contacts page and one unfocusable scrolling pane in the reply window. Courier has not been tested with a screen reader.

  • Partly supported

    Contrast in light and dark

    After fixes, text and controls pass axe-core's contrast rule in light and dark on every scanned state except one, the name of the open smart folder in the sidebar. The scan found white text on the dark theme's light-teal accent, gray text on a hard-coded fallback color, and red text on the dark surface, and each was fixed in Courier. Only the scanned states were checked, and no one has reviewed contrast by hand.

  • Partly supported

    Reduced motion

    The header checks the reduced-motion setting before animating, and the design system's global styles switch motion off when it is set. The rest of the app's transitions have not been audited and no test covers it.

  • Not yet tested

    Text resize and zoom

    Resizing text to 200 percent has not been tested, and several components set text in fixed pixel sizes.

  • Partly supported

    Mobile and touch

    Below 768 pixels wide the sidebar folds into a menu drawer, the list fills the screen, and opening a conversation replaces it with the reading pane. No scanned state scrolls sideways at 375 pixels. Tap-target size was not measured.

Tech specs

Under the hood

Courier technical specification
Server
  • FastAPI on Python 3.12
  • SQLAlchemy 2 and Alembic
  • PostgreSQL, with full-text search
  • Celery workers on a Valkey broker
Web client
  • React 19, TypeScript, and Vite
  • Zustand state, a virtualized message list
  • CodeMirror 6 Markdown editor
  • Light and dark themes
Mail
  • Gmail API with Pub/Sub push
  • Microsoft Graph with delta sync and webhooks
  • IMAP with IDLE, SMTP for sending
Search and storage
  • Twelve search operators with AND, OR, and NOT
  • Valkey hot cache, 1,000 messages per account
  • S3 attachments when a bucket is configured
  • Embeddings computed on the server (all-MiniLM-L6-v2)
Agents
  • 148 MCP tools over the REST API
  • AI features with a per-account monthly budget
  • Signed outreach intake for other tools
Quality
  • More than 1,200 backend test functions
  • More than 300 frontend tests
  • Keyboard shortcut and layout tests
Works with

Part of the Renkara fleet

MCP tools

Built for agents as well as people

Every tool is a thin adapter over a REST route. These are the groups, with the number of tools in each and a few names.

Messages and threads · 24

  • list_messages
  • get_message
  • get_thread
  • get_unread_count
  • archive_messages
  • delete_messages

AI and search intelligence · 20

  • semantic_search
  • summarize_thread
  • summarize_contact
  • summarize_topic
  • list_commitments
  • get_follow_ups

Outreach controls · 20

  • create_outreach_draft
  • get_outreach_draft_proof
  • approve_outreach_draft
  • dispatch_outreach_draft
  • create_outreach_suppression
  • list_outreach_outcomes

Contacts · 13

  • list_contacts
  • get_contact
  • update_contact
  • merge_contacts
  • export_contacts
  • autocomplete_contacts

Compose and send · 12

  • send_message
  • reply_message
  • forward_message
  • create_draft
  • update_draft
  • send_draft

Labels and folders · 12

  • apply_label
  • remove_label
  • move_to_folder
  • list_labels
  • create_label
  • get_account_folders

Signatures and identities · 11

  • list_identities
  • create_identity
  • update_identity
  • list_signatures
  • create_signature
  • get_default_signature

Search and smart folders · 8

  • search_messages
  • list_smart_folders
  • create_smart_folder
  • get_smart_folder
  • update_smart_folder
  • execute_smart_folder

Accounts · 7

  • list_accounts
  • get_account
  • create_account
  • update_account
  • delete_account
  • sync_account

Rules · 7

  • list_rules
  • create_rule
  • update_rule
  • delete_rule
  • get_rule
  • test_rule

Block and allow · 6

  • block_sender
  • unblock_sender
  • list_blocked_senders
  • list_allowed_senders
  • add_allowed_sender
  • delete_allowed_sender

Service, settings, and push · 8

  • check_service_health
  • get_diagnostics
  • get_settings
  • update_settings
  • register_push_subscription
  • get_vapid_public_key
Native clients

On iPhone, iPad, and Mac

FAQ

Questions people ask

Does Courier replace my mail provider?

No. Your provider still holds the mailbox and delivers mail. Courier syncs a copy into its own database and sends through your provider's servers, so your mail, labels, and rules stay yours if you switch providers.

Which providers can I connect?

Gmail and Microsoft 365 through OAuth, and any IMAP and SMTP account with an app password.

Can I send mail from the web client?

Yes. The web composer sends new messages, replies, replies to all, and forwards, and a short undo window lets you take a send back. Agents can do the same through the API and the tools.

What do the AI features need?

A model key. Without one, each AI feature reports that it is not configured instead of failing. There is a monthly budget per account, with a hard stop, and the features answer through the API and agent tools.

Where do the screenshots come from?

They are captures of the web client running locally against fictional data for StrataForge Robotics, a made-up company. No real mailbox was read, and the capture never connects to a mail server.

Contact

Questions about this tool?

Write to Renkara Media Group and a person will answer.