# Install eMailPlane

From your invite to your app's first email, in order. Every step that needs you is listed here; the installer does the rest and tells you, in plain words, if anything on your server needs fixing.

## 1. Your invite and your account

eMailPlane is in an invite-only beta. [Join the waitlist](https://emailplane.com/invite/), and we email you a link to create your account at [app.emailplane.com](https://app.emailplane.com/signin). No card needed to set up and test.

## 2. A server you can run it on

- **Linux, 64-bit Intel or AMD (x86_64)**, where you can run commands as root.
- **4 GB of memory** or more, and 20 GB of free disk.
- **Docker.** If it isn't installed, the installer offers to install it from your system's packages (Debian and Ubuntu), and changes nothing unless you say yes.
- **The server you already have works.** If it already runs your app, a website or another mail server (ports 25, 80 or 443 are taken), eMailPlane connects through eMailPlane's network instead: no ports to open and nothing to ask your host. The installer sees the taken ports and picks this mode by itself (`--edge-only` chooses it up front). In this mode the server gets its certificate through your DNS, so have one of these ready: your domain's DNS on Cloudflare (step 5), or your own certificate for `mail.<your domain>` (`--tls-directory` with `cert.pem` and `key.pem`). On a fresh server it can send directly; then it needs ports 25, 80, 443, 587 and 993, and the installer checks them first.

## 3. One command on your server

Your account page shows your **install code**. Run, on your server:

```sh
curl -fsSL https://emailplane.com/install | sudo sh -s -- --code YOUR-INSTALL-CODE --domain example.com
```

`--domain` is the part after the @ in the addresses you want, such as `example.com` for support@example.com. Your server then gets its own name, `mail.example.com`: that is the address your app and agents use. If your team's email for that domain already runs on Google Workspace or Microsoft 365, use a subdomain instead, such as `--domain mail.example.com` (addresses like support@mail.example.com, server at `box.mail.example.com`), and your current email is not touched. The installer checks the server, downloads a signed release with your code, installs it and sets up nightly backups. Running it again is safe: it picks up where it stopped.

Prefer to hand it to your coding agent? Paste this:

```text
Install eMailPlane on this server for my app. Follow https://emailplane.com/start/
step by step. Run as root:
  curl -fsSL https://emailplane.com/install | sudo sh -s -- --domain <my mail domain>
It asks for my install code: pause and let me type it; never ask me to paste it
into this chat. If the installer reports something to fix, show me its exact words.
When it finishes, run `emailplane doctor` and tell me the next step.
```

## 4. Approve your server

When your server connects through eMailPlane's network, it shows a short code. Your account page shows the same code: press **Approve this server** and confirm with your passkey (your phone, Touch ID or a security key). The same page then asks you to choose the relay policy for mail passing through eMailPlane's network (it keeps no copies); mail flows once you have chosen it.

A new server starts in a sandbox: it can email up to 10 people you confirm on your account page, such as yourself and your team. When you are ready to email anyone, ask for that on the same page; the page shows what is still needed first.

## 5. Your domain's DNS, once

The installer publishes the records your domain needs (mail routing, SPF, DKIM, DMARC), or shows each record to copy into your DNS provider, and checks every one live. To have it publish them, give it a Cloudflare API token when it asks: at https://dash.cloudflare.com/profile/api-tokens choose **Create Token**, then **Custom token**, with the permissions **Zone / Zone / Read** and **Zone / DNS / Edit**, limited to your domain's zone. The token is typed in hidden and stays on your server. Today only Cloudflare can be published automatically; with any other DNS provider you copy the records in yourself. Your current email and website records are kept. Your domain switches on by itself as soon as its records are live.

## 6. Connect your app

Your app reads two settings:

```sh
EMAILPLANE_API_URL=https://mail.example.com
EMAILPLANE_API_KEY=<a key for your app, from your server>
```

To get them, run on your server:

```sh
emailplane connect --app my-app
```

It prints a link and a code: open the link where you are signed in to eMailPlane, check the code matches, and approve with your passkey. Then it gives your app its settings, with a key limited to the permissions you approved (`--scopes send,read:inbox` chooses them; `emailplane connect --help` lists every option). Add `--webhook-url https://your-app/hooks/email` to also get `EMAILPLANE_WEBHOOK_SECRET`. Then point your coding agent at your server's own guide, `https://mail.example.com/llms.txt`: it has your server's real address and every call your app can make. The [developer quickstart](https://emailplane.com/developers/) has the API, and [MCP setup](https://emailplane.com/developers/mcp/) connects your agents.

## 7. Send a test

Send yourself an email from your app, reply from your phone, and watch the reply arrive in the same conversation.

## Stuck?

Write to **hello@emailplane.com** with the installer's exact words or the output of `emailplane doctor`. Your AI agent can write to us too; we treat every rough edge it reports as a bug to fix.

---

Source: https://emailplane.com/start/
