An obituary, and an upgrade.
SMTP is dead.
Long live
the REST.
A modern, REST-native email server that speaks SMTP to the world out of politeness—and HTTPS to its peers because it's 2026.
Fig. 01 · Live capture
$ tcpdump host mail.example.com
SMTP · :25
←▍
Two servers shake hands. After EHLO, the connection upgrades to a single HTTPS POST.
In Memoriam
SMTP
RFC 821 · 1982 — 2026
Survived by 5,000 unread Postfix log lines.
In Memoriam
IMAP
RFC 3501 · 1986 — 2026
May your IDLE finally rest.
In Memoriam
POP3
RFC 1939 · 1988 — 2026
USER. PASS. RETR. QUIT. We hardly knew ye.
§ I
The pitch, in one breath.
Every mailbox operation—send, receive, search, label, filter—is an HTTP endpoint. When two REST Mail servers find each other, they skip SMTP entirely and POST.
~12ms
peer delivery
3protocols
spoken at the edge
0config
to upgrade peers
1binary
go static build
§ II
How the upgrade works.
Three steps. No configuration. No magic.
- 01
DNS Discovery
A TXT record at
_restmail.<domain>announces the endpoint.$ dig TXT _restmail.example.com "v=restmail1 endpoint=https://mail.example.com/v1" - 02
EHLO Capability
Both servers advertise
X-RESTMAILduring EHLO. If both speak it, the upgrade fires. - 03
HTTPS Delivery
Skip SMTP. The sender POSTs to the recipient's REST endpoint with a signed JWT.
§ III
Every operation is a POST.
Not a webhook bolted onto IMAP. Not a wrapper. The store itself.
POST/v1/messagessend a message
GET/v1/messageslist inbox
GET/v1/messages/:idfetch one
POST/v1/messages/:id/labelslabel / move
GET/v1/search?q=full-text search
GET/v1/stream (SSE)real-time updates
POST/v1/deliverpeer delivery
POST/v1/sievefilter scripts
§ IV
Built on what works.
Go 1.24+
single static binary
chi router
idiomatic HTTP
PostgreSQL
via GORM
React + Vite
webmail UI
Bubble Tea
terminal admin
Server-Sent Events
no polling
Sieve scripts
user filters
Docker Compose
one command