First developer setup
Run setup from the motherrepo root, where 0daysetup.sh and compose.yaml reside. Programs run in Docker containers. Tmux displays container terminals rather than starting separate Node or .NET applications.
Daily runtime commands
Use these commands in the motherrepo root after first setup. The unified runtime reads the root .env. Tmux attaches to Docker processes. It does not run a second backend stack.
Unified Docker development
The root Compose deployment runs one isolated MailGen instance per checkout. A shared Nginx Proxy Manager (NPM) has a separate lifecycle and persistent state. This is single-host Docker Compose, not Docker Swarm.
Graph synchronization keys and certificates
Graph synchronization uses two different kinds of cryptographic material. Complete Microsoft Graph setup before configuring provider access.
Back up and restore environment secrets
The unified runtime reads the motherrepo root .env. .env.example is a maintained minimal template, not a complete credential set. Setup adds calculated URLs, database connections, and missing generated auth/proxy/FormGen secrets to the root file.
Configure the root environment
The unified runtime reads .env in the motherrepo root. Start with first installation if the machine is not prepared. Use environment reference to look up exact variables.
Environment variable reference
These tables cover the existing configuration groups from committed *.env.example files and root compose.yaml. The unified stack reads the motherrepo root .env. Standalone examples apply only to their separate entrypoints.
Attachment reader and Office preview
The message reader displays stored attachments with original download and read-only previews. Office files use the configured Collabora service, local or remote according to placement. A remote renderer receives scoped access to file bytes through WOPI. It does not receive a general S3 URL.
Isolated test instance
The test instance runs public lifecycle scripts from its own physical source root. Its mounts, ownership labels, initializers, configuration, and runtime state belong to that copy. A shell override of ECSINSTANCEID does not safely select it.
Private Office callback route
Use this guide for a prepared physical test runtime that uses a remote Office renderer. The callback lets the renderer retrieve documents from the target BFF through the existing shared HTTPS proxy.
Generated UI development setup
The renderer belongs to the BFF. Complexity handles generation, persistent state, and history. No separate renderer service or hosted Gateway is required. Use Docker development for ordinary startup.
Microsoft calendar events and local tasks
The BFF /calendar page shows a mailbox's own Outlook calendars. Microsoft Graph supplies events. Tasks remain local to the account's session. Existing mail.read and mail.crud access works alongside calendar.read and calendar.manage permissions.
Complexity custom runtime
Keep COMPLEXITYCUSTOMRUNTIME_ENABLED=0 unless the selected host passes the containment checks. This is the default in the root Compose configuration.
Search runs, history, and results
MailGen represents each search as a separate run. The selected engine can query the database or OpenSearch. OpenSearch can also search full message bodies. Results remain restricted to mailboxes you can access.
OpenSearch disk watermarks
Use this guide to select fixed free-space reserves for local OpenSearch 2.18 in FullLocal or PartialRemote mode. A watermark is a disk threshold that restricts shard allocation or writes before storage becomes full.
Reviewed-source hotfix workflow
A reviewed-source deployment runs the selected snapshot rather than every edit in the working checkout. Read source selection before publishing a hotfix.
Resume service execution modes
The runtime records each service's development or production mode after a successful start. restartDevServers.sh, devstack.sh restart SERVICE, and devstack.sh start SERVICE resume the saved modes. A development worker can therefore keep its mode beside a production BFF.