Getting started
This guide runs mail from source for local use. For a long-running installation, continue with the deployment guide.
Requirements
- Node.js 22 or newer
- pnpm 10 (the repository pins the expected version in
package.json) - PostgreSQL
- An IMAP account for receiving mail
- An SMTP account for sending mail
IMAP and SMTP are optional during first-time setup, but the worker cannot synchronize or send mail until they are configured.
Install
git clone https://github.com/pmh-only/mail.git
cd mail
corepack enable
pnpm install
cp .env.example .envCreate an empty PostgreSQL database, then set at least these values in .env:
DATABASE_URL="postgresql://mail:password@localhost:5432/mail"
ORIGIN="http://localhost:5173"
BETTER_AUTH_SECRET="replace-with-a-long-random-secret"
MAIL_SECRET_KEY="replace-with-a-separate-long-random-secret"Generate independent secrets with openssl rand -base64 32. Keep MAIL_SECRET_KEY stable: data encrypted with that key cannot be recovered after the key is lost or changed.
The example file uses port 3000 for a production/container runtime. SvelteKit development uses port 5173 by default, so update ORIGIN as shown above when running from source.
Start the application
pnpm devThis starts the web and worker development processes together. Open http://localhost:5173. The application runs database migrations automatically before serving requests or processing jobs.
On the first visit, mail redirects to /setup. Configure at least one login method and, optionally, the first IMAP and SMTP account. Additional accounts and features can be configured later in Settings.
Run without external services
Demo mode uses in-memory sample data and does not require PostgreSQL, authentication, IMAP, SMTP, or the worker:
DEMO_MODE=true pnpm devDemo data resets whenever the web process restarts. The external API is disabled in demo mode.
Next steps
- Review authentication before exposing the application publicly.
- Add and troubleshoot mail accounts.
- Browse the feature guide for user-facing capabilities and their exact Settings or environment requirements.
- Read the configuration reference for core process settings and precedence.
- Follow the deployment guide for containers, persistence, and backups.