First run

What happens the first time you open Maillayer in a browser.

Sign up as the owner

The first account to sign up at /signup becomes the workspace owner. Subsequent signups are blocked unless you explicitly invite them via Team management.

Why signup-blocked-by-default
Self-hosted = your inbox, your contacts, your sender reputation. Open signups would mean anyone who finds the URL can use your provider credentials.

Create your first brand

A "brand" is the unit of isolation in Maillayer. Each one has its own:

  • Email provider config (SMTP / SES / SendGrid / Mailgun)
  • Sender domain
  • Contacts, lists, tags
  • Templates, campaigns, sequences, forms
  • Integration credentials (Stripe key, Firebase JSON, etc.)

One install can host multiple brands — useful for agencies or anyone with several products. More on multi-brand →

The first 10 minutes

  1. Brand → Provider. Paste your SMTP or SES credentials.
  2. Brand → Domain. Add a sender domain so SPF/DKIM can be configured. See Custom domain.
  3. Send a test. The "Send test email" button goes through the same path as a real send and confirms credentials.
  4. Import contacts. Upload a CSV via Contacts → Import.
  5. Send something. A campaign, a sequence trigger, or a transactional send. Whichever fits your use case.

Where data lives

Inside the container at /app/data:

  • maillayer.db — the SQLite database (contacts, campaigns, events, etc.)
  • .auth_secret — the AES-256-GCM key used to decrypt stored credentials
  • backups/ — nightly VACUUM-INTO snapshots

Mount that path as a volume on your host and you can rebuild the container any time without losing state.