MailVault
Open source · self-host or let us run it

Programmable email forwarding

Point a domain at MailVault and every address on it becomes something your code can create, route and retire — from a terminal, a script, or an agent. No dashboard required, and nothing of yours is stored.

mailvault — forwarding for example.com
# point a domain at mailvault and route its mail
$ mailvault domain add example.com

Publish this DNS MX record so mail reaches the server:

  name:      example.com
  priority:  10
  value:     mx.mailvault.sh

$ mailvault domain verify example.com
status:  verified

$ mailvault addr add hi@example.com --to you@gmail.com
address:      hi@example.com
forwards to:  you@gmail.com

# and because it is scriptable, so is everything else
$ mailvault --output json addr list | jq -r '.[].local_part'

Why another forwarder

Mail infrastructure that cannot read your mail

Forwarding itself is a commodity. What is not is treating your mail as something we should be structurally unable to read — and building an interface your code drives rather than your mouse.

Question
Typical forwarder
MailVault
Create 40 addresses in a deploy script?
Click 40 times
One loop, JSON out, real exit codes
Read the code that handles your mail?
Closed
Open source, end to end
Run it yourself if you outgrow us?
No exit
Same binary, your server
What is kept after delivery?
Varies, often logged
Nothing — no queue, no copy

The rest is table stakes and we treat it that way: SPF, DKIM, DMARC, blocklists, MTA-STS and TLS reporting run on every message. One detail is worth naming, because it is the part most forwarders get wrong — mail is relayed byte for byte, so the sender’s original DKIM signature survives intact and still passes DMARC at the destination.

How it works

Three commands from empty domain to working mail

Install once with go install, or grab a binary. The CLI prints the exact DNS records to publish — including the MX — and tells you when they have taken effect.

01

Claim the domain

MailVault issues a TXT record proving you own it, and the MX record that routes mail to us.

mailvault domain add
02

Verify it

Checks DNS and reports a distinct exit code for “not propagated yet”, so a polling script knows to wait rather than fail.

mailvault domain verify
03

Route the mail

Aliases, or a catch-all written the way you would address it. Change destinations any time without touching DNS.

mailvault addr add

Availability

Opening in waves

MailVault runs real mail today, for a small number of domains. We are widening access gradually rather than all at once, so that deliverability and support keep up with the load.

Hosted

Request a seat and we will get in touch as the next wave opens. No card, and nobody is charged for joining the list.

Request early access

Self-hosted

Available now and not gated on anything. It is the same code the hosted service runs — one Go binary, a Postgres database, and a relay.

Run it yourself

Roadmap

One promise, extended

Every product below is the same idea pushed further: mail infrastructure that cannot read your mail. Forwarding keeps nothing. Everything after it keeps only ciphertext.

Live

Forwarding that stores nothing

Domains, aliases and catch-alls, driven from the CLI or the API. Messages are authenticated on arrival and relayed onward without being queued, parsed or copied.

Next

Encrypted delivery to your endpoint

Mail as a webhook, but the payload is encrypted to your endpoint’s public key before it leaves us — so we deliver a message we cannot read, and neither can anything between. Every other inbound-parse service posts your mail as plaintext JSON. Signed-plaintext mode stays available for endpoints that cannot hold a key.

Then

Zero-access encrypted inbox

Keep mail instead of only passing it on — encrypted to a key derived on your machine, so the server stores ciphertext it has no way to open. The private key never leaves the client.

Then

Scoped addresses for agents

Give an assistant its own address and its own key. It can read and send on that address alone, and is cryptographically unable to touch any other — an inability, not a permission setting that can be misconfigured.

Later

Per-domain signing and outbound sending

Sign forwarded mail with your domain’s own key, return bounces to the original sender, and send transactional mail from the addresses you already receive on — the same authentication posture in both directions.