DesertEmail

A from-scratch pure-Rust email server for tiny machines — TLS via rustls, one binary.

Install (pick your platform)

Choose your machine — the installer never auto-detects. Prebuilt binaries download from this site; pick Build from source if yours is not listed.

curl -fsSL https://YOUR-SITE/install-linux-x86_64.sh | sh

Install Termux from F-Droid, run pkg install curl openssl, no root needed on high ports.

Downloads a prebuilt static binary from this site — no local compile, no toolchain.

~1.2 MB binary 1 DEP: RUSTLS runs in 128 MB RAM

Runs on almost anything

The binary is fully static (musl on Linux) with no libc or library requirements, uses plain threads instead of an async runtime, and idles at a few MB of RSS. If it has a CPU from this century and a network jack, it probably works:

HardwareArch / binaryNotes
Raspberry Pi Zero / Pi 1armv6 musl512 MB RAM is plenty; dedicated ARMv6 build — no illegal-instruction crashes
Pi 2/3/4/5, ARM SBCsarmv7 / aarch64 muslThe classic always-on home server
128 MB VPS (cheapest tier)x86_64 muslGets you a public IP + unblocked port 25
Old netbooks / thin clientsx86_64 muslSecond life as a mail machine
Mac (Intel & Apple Silicon)darwinGreat for trying it locally first
Android phone/tablet (Termux)arm64 muslAn old phone makes a fine mail server
Windows 10/11x86_64 .exeNative MSVC build; PowerShell one-liner installer

Everything on board: SMTP (receive + submit) · IMAP · webmail + admin UI · DKIM signing · outbound MTA with retry queue · TLS/STARTTLS.

How the installer works

  1. You pick your platform above — the installer never guesses
  2. Downloads the matching prebuilt binary from this site (/bin/desertemail-<target>) and verifies SHA-256 against /bin/SHA256SUMS — mismatch aborts; missing sums file warns and continues
  3. Installs to ~/.desertemail/bin and wires up your PATH (override with DESERTEMAIL_PREFIX)
  4. Runs a terminal wizard: domain, admin user, password (hidden input), ports, webmail on/off, DKIM key generation
  5. Writes config.toml and — on Linux with systemd — optionally installs and starts a service unit
  6. Prints the DNS records to publish (MX, SPF, DKIM) so real mailboxes accept your mail

The wizard is plain POSIX sh (runs on dash/BusyBox); Windows uses a PowerShell variant (irm … | iex). Piped installs stay interactive via /dev/tty; for CI use DESERTEMAIL_NONINTERACTIVE=1 with env-var answers. Re-running never clobbers an existing config without asking. Unsupported machines use Build from source (needs git + cargo).

Read the full docs →

“We can’t expect God to do all the work.”

— Joshua Graham