[{"data":1,"prerenderedAt":1183},["ShallowReactive",2],{"search":3,"content-guide\u002Foperating-modes":442,"surround-\u002Fguide\u002Foperating-modes":1178},[4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232,236,240,244,248,252,256,260,264,268,272,276,280,284,288,292,296,300,304,308,312,316,320,323,327,331,335,339,343,347,351,355,359,363,367,371,375,379,383,387,391,395,399,403,407,411,415,419,423,426,430,434,438],{"path":5,"title":6,"description":7},"\u002Fguide","Guide","Product guides for Owlat — a modular, self-hosted email platform. Learn how to send campaigns, run a personal mailbox, manage a team inbox, and more.",{"path":9,"title":10,"description":11},"\u002Fguide\u002Fgetting-started","Welcome to Owlat","Set up your Owlat workspace and send your first email — from deploying the stack to verifying a domain, building your audience, and launching a campaign.",{"path":13,"title":14,"description":15},"\u002Fguide\u002Fcontact-properties","Contact Properties","Custom fields that extend built-in contact data with your own values for segmentation.",{"path":17,"title":18,"description":19},"\u002Fguide\u002Ftopics","Topics","Topics are explicit audience groups you manage by hand — ideal for opt-in subscribers, imported cohorts, and organized contact buckets you target with campaigns.",{"path":21,"title":22,"description":23},"\u002Fguide\u002Fsegments","Segments","Build dynamic, rule-based contact groups from properties, email activity, and topic membership, re-evaluated from current data each time they're used.",{"path":25,"title":26,"description":27},"\u002Fguide\u002Fforms","Forms","Form Endpoints collect new contacts from your website or landing pages by exposing a public endpoint that accepts submissions and feeds them into a topic.",{"path":29,"title":30,"description":31},"\u002Fguide\u002Fcampaigns","Campaigns & Reporting","Build and send marketing campaigns to a topic or segment with the five-step wizard, optional A\u002FB testing, and full delivery reporting.",{"path":33,"title":34,"description":35},"\u002Fguide\u002Fab-testing","A\u002FB Testing","Compare two variants of a campaign on a test group, then automatically or manually send the winning version to the rest of your audience.",{"path":37,"title":38,"description":39},"\u002Fguide\u002Fautomations","Automations","Send emails automatically based on triggers, delays, and conditions — build welcome series, trial flows, and follow-ups once and let Owlat run them.",{"path":41,"title":42,"description":43},"\u002Fguide\u002Ftransactional","Transactional Emails","One-to-one emails your application triggers in response to a user action — password resets, order confirmations, welcome emails, and similar notifications.",{"path":45,"title":46,"description":47},"\u002Fguide\u002Fcreate-campaign","Create a Campaign","Walk through Owlat's five-step campaign wizard: Basics, Audience, Content, A\u002FB Test, and Review & Send.",{"path":49,"title":50,"description":51},"\u002Fguide\u002Fsend-campaign","Send & Monitor a Campaign","How to send your campaign and track its performance with real-time metrics.",{"path":53,"title":54,"description":55},"\u002Fguide\u002Fquick-start","Quick Start","The fastest path from a blank Owlat workspace to a live email campaign, from your first template through sending and reviewing results.",{"path":57,"title":58,"description":59},"\u002Fguide\u002Ftransactional-setup","Transactional Email Setup","Set up and send transactional emails like password resets and order confirmations via the Owlat API and SDKs.",{"path":61,"title":62,"description":63},"\u002Fguide\u002Fdeliverability","Deliverability","Verify sending domains, manage your blocklist, monitor sending reputation, and stay compliant so your emails reach the inbox.",{"path":65,"title":66,"description":67},"\u002Fguide\u002Fapi-keys-webhooks","API Keys & Webhooks","Create API keys for programmatic access and set up outbound webhooks to receive real-time notifications for email and contact events.",{"path":69,"title":70,"description":71},"\u002Fguide\u002Ffeature-flags","Feature flags","Owlat is modular — every feature listed in this guide can be turned on or off. This page is the user-facing overview of how to do it.",{"path":73,"title":74,"description":75},"\u002Fguide\u002Fteam-permissions","Team & Permissions","Use role-based access to control what each member of your organization can do, with Owner, Admin, and Editor roles.",{"path":77,"title":78,"description":79},"\u002Fguide\u002Faudit-logs","Audit Logs","A chronological record of significant actions in your Owlat organization, so you can see who did what and when.",{"path":81,"title":82,"description":83},"\u002Fguide\u002Fshare-links","Share Links","Create temporary preview links to share email designs with stakeholders who don't have dashboard access.",{"path":85,"title":86,"description":87},"\u002Fguide\u002Fpostbox","Postbox — Personal Email","Per-user mailboxes with a webmail interface and native IMAP\u002FSMTP support. Run your own Gmail-equivalent personal mailbox on your Owlat instance.",{"path":89,"title":90,"description":91},"\u002Fguide\u002Fmigrate-from-google","Migrate from Google","Import your full Gmail history into Owlat over IMAP, and let your AI assistant learn from every imported conversation.",{"path":93,"title":94,"description":95},"\u002Fguide\u002Fteam-inbox","Team Inbox","Triage inbound email as a team: read AI-classified threads, approve, edit or reject agent drafts, work the review queue, and manage quarantine.",{"path":97,"title":98,"description":99},"\u002Fguide\u002Femail-editor","Email Editor","A block-based visual editor for building responsive emails that render consistently across desktop, mobile, Outlook, Gmail, and Apple Mail.",{"path":101,"title":102,"description":103},"\u002Fguide\u002Fai-agent","AI Agent & Autonomy","Configure the AI agent that classifies and drafts replies to inbound mail: auto-reply settings, the health dashboard, circuit breakers, autonomy rules, and the knowledge backfill.",{"path":105,"title":106,"description":107},"\u002Fguide\u002Fknowledge-graph","Knowledge Graph","Browse, search, and manage Owlat's typed organizational knowledge — the 7 entry types, source attribution, confidence decay, relations, and how entries are extracted from mail.",{"path":109,"title":110,"description":111},"\u002Fguide\u002Ffiles","Files","Upload, browse, search, tag, and version documents in the file library.",{"path":113,"title":114,"description":115},"\u002Fguide\u002Fchat","Team Chat","Use Owlat's built-in team chat: public and private channels, direct messages, mentions, attachments, and channels linked to an inbox conversation.",{"path":117,"title":118,"description":119},"\u002Fguide\u002Fcode-tasks","Code Tasks","Queue coding-agent tasks, watch them move from queued through review, and run the code-worker sidecar that opens the pull requests.",{"path":121,"title":122,"description":123},"\u002Fguide\u002Faudience-data","Audience Data: Identities, Relationships & Timeline","Unify a contact across email, phone, and messaging channels, merge duplicates, map relationships, and read the cross-channel interaction timeline.",{"path":125,"title":126,"description":127},"\u002Fguide\u002Fimporting-contacts","Importing & Exporting Contacts","Bring contacts into Owlat from a CSV or from Mailchimp and Stripe, export them back out, and run bulk operations on your audience.",{"path":129,"title":130,"description":131},"\u002Fguide\u002Faccount","Your Account & Data","Export your data as JSON or CSV, request account deletion with a 30-day grace period, and use the onboarding checklist and the public preference center.",{"path":133,"title":134,"description":135},"\u002Fguide\u002Fchannels","Communication Channels","Configure SMS, WhatsApp, and generic-webhook channels, monitor channel health, and understand which channels are fully live today.",{"path":137,"title":138,"description":139},"\u002Fguide\u002Fdesktop-app","Desktop App","Install the Owlat desktop app, connect one or more workspaces, switch between them, and use native notifications, tray badges, shortcuts, and deep links.",{"path":141,"title":142,"description":143},"\u002Fguide\u002Femail-templates","Email Templates","Reusable email designs that define the structure, content, and personalization of every campaign and transactional message you send in Owlat.",{"path":145,"title":146,"description":147},"\u002Fguide\u002Fai-assistant","AI Assistant","Owlat's multi-turn, streaming, tool-calling AI assistant — a private chat surface that can search your workspace and draft copy, plus @assistant replies inside team chat.",{"path":149,"title":150,"description":151},"\u002Fguide\u002Fsecurity-scanning","Sending Security & Scanning","Owlat's security scanning: a content check for spam and phishing, an attachment scan for malware, and a Google Safe Browsing URL check. Suspicious content goes to a review queue.",{"path":153,"title":154,"description":155},"\u002Fguide\u002Fsystem-updates","System & Updates","The owner-only System & Updates screen: your current Owlat version, container health, LLM spend, and the in-app one-click updater with history.",{"path":157,"title":158,"description":159},"\u002Fguide\u002Foperating-modes","Operating Modes","The different ways to run Owlat at a company — read external mailboxes over IMAP, send transactional or marketing email through a delivery provider, host your own mail server, or run a team inbox with AI — and the rules that keep each combination coherent.",{"path":161,"title":162,"description":163},"\u002Fguide\u002Fsaved-blocks","Saved Blocks","Create reusable, linked content blocks you can drop into any email — edit one and every email that uses it updates automatically.",{"path":165,"title":166,"description":167},"\u002Fguide\u002Fmedia-library","Media Library","Manage, organize, search, and reuse images and files across your emails from one centralized hub.",{"path":169,"title":170,"description":171},"\u002Fguide\u002Femail-theme","Email Theme","Set your organization's default colors, font, and email width so every new template starts from a consistent baseline.",{"path":173,"title":174,"description":175},"\u002Fguide\u002Ftranslations","Translations","Send one email in multiple languages: add per-language translations to a single template and Owlat picks the right version for each recipient.",{"path":177,"title":178,"description":179},"\u002Fguide\u002Fcontacts","Contacts","How to add, view, organize, and manage contacts in Owlat, including sources, the contact detail tabs, and subscription compliance.",{"path":181,"title":182,"description":183},"\u002Fapi","API Overview","Owlat exposes authenticated API endpoints under your Convex site URL.",{"path":185,"title":186,"description":187},"\u002Fapi\u002Fwebhooks","Webhooks","Owlat supports both outbound customer webhooks and inbound provider webhooks.",{"path":189,"title":190,"description":191},"\u002Fapi\u002Fpublic-endpoints","Public Endpoints","These routes are public-facing and usually accessed from email links or embedded forms.",{"path":193,"title":194,"description":195},"\u002Fapi\u002Fwebhook-payloads","Webhook Payloads","The authoritative wire contract for outbound webhooks: envelope, signature headers, per-event data shapes, and payload versioning.",{"path":197,"title":198,"description":199},"\u002Fapi\u002Finbound-channels","Inbound Channel Webhooks","Provider webhook reference for inbound SMS, WhatsApp, and generic-channel messages, plus the MTA mailbox and credential callbacks.",{"path":201,"title":202,"description":203},"\u002Fapi\u002Fauthentication","Authentication","Secure API access with organization-scoped API keys.",{"path":205,"title":206,"description":207},"\u002Fapi\u002Fsdk","TypeScript SDK","Typed client for the Owlat API, usable from Node.js, Bun, Deno, or any server-side JavaScript runtime.",{"path":209,"title":210,"description":211},"\u002Fapi\u002Fsdk-java","Java SDK","The official `owlat-sdk` package provides a typed client for interacting with the Owlat API from any JVM application. Requires Java 11+.",{"path":213,"title":214,"description":215},"\u002Fapi\u002Fcontacts","Contacts API","Manage contacts for your organization.",{"path":217,"title":218,"description":219},"\u002Fapi\u002Ftopics","Topics API","Manage topic membership through authenticated endpoints.",{"path":221,"title":222,"description":223},"\u002Fapi\u002Fevents","Events API","Send contact events to drive segmentation and automation triggers.",{"path":225,"title":226,"description":227},"\u002Fapi\u002Ftransactional","Transactional API","Send published transactional templates to a recipient.",{"path":229,"title":230,"description":231},"\u002Fapi\u002Fforms","Forms API","Capture subscribers through public form endpoints.",{"path":233,"title":234,"description":235},"\u002Fdeveloper","Developer Guide","Technical architecture, feature-flag model, and provider abstractions used by Owlat.",{"path":237,"title":238,"description":239},"\u002Fdeveloper\u002Fmta-system","MTA System","Owlat's custom Mail Transfer Agent for direct SMTP delivery with intelligent rate limiting, bounce processing, and IP warming.",{"path":241,"title":242,"description":243},"\u002Fdeveloper\u002Ffeature-flags","Feature flags — developer reference","How the Owlat feature flag system works: single source of truth, dependency resolution, docker profile mapping, and how to add a new flag.",{"path":245,"title":246,"description":247},"\u002Fdeveloper\u002Fhow-email-works","How Email Works","A technical deep-dive into how email actually works — from SMTP and DNS to authentication, deliverability, and the differences between marketing and private email.",{"path":249,"title":250,"description":251},"\u002Fdeveloper\u002Femail-security","Email Security","Content scanning, attachment validation, URL reputation checking, and malware detection for outbound emails.",{"path":253,"title":254,"description":255},"\u002Fdeveloper\u002Fpostbox-architecture","Postbox Architecture","How the Postbox personal-mail feature is wired — schema, IMAP server, app-password auth, outbound relay, inbound delivery, and external mailboxes.",{"path":257,"title":258,"description":259},"\u002Fdeveloper\u002Fproviders","Providers","Pluggable provider abstractions for LLM, email sending, notifications, vector stores, and analytics, selected per-deployment so self-hosters can swap implementations without code changes.",{"path":261,"title":262,"description":263},"\u002Fdeveloper\u002Fcampaign-internals","Campaign Internals","How the campaign backend works: two status machines, send pre-flight, the send orchestrator, emailSends records, and the priority workpools.",{"path":265,"title":266,"description":267},"\u002Fdeveloper\u002Faudience-internals","Audience Internals","Backend reference for contact resolution, the double opt-in lifecycle, topic subscription, the conditions registry, and segment evaluation.",{"path":269,"title":270,"description":271},"\u002Fdeveloper\u002Fautomation-internals","Automation Internals","How the automation run engine works: the step walker, the lifecycle state machine, trigger fanout, the three step types, and the resilience cron.",{"path":273,"title":274,"description":275},"\u002Fdeveloper\u002Fdeliverability-infrastructure","Deliverability Infrastructure","The Convex-side deliverability backend: provider routing, health-aware failover, sending reputation with auto-enforcement, IP warming cache, the blocklist, and the content-scan gate.",{"path":277,"title":278,"description":279},"\u002Fdeveloper\u002Farchitecture","Architecture Overview","Owlat follows a modern serverless architecture with real-time capabilities.",{"path":281,"title":282,"description":283},"\u002Fdeveloper\u002Fplatform-operations","Platform Operations","Operator reference for abuse status and the sending gate, the platform-admin roster, content review, org deletion, in-app self-update, dev endpoints, crons, and migrations.",{"path":285,"title":286,"description":287},"\u002Fdeveloper\u002Fscopes","Scopes","What each app and package in the Owlat monorepo is responsible for.",{"path":289,"title":290,"description":291},"\u002Fdeveloper\u002Fself-hosting","Self-Hosting","Deploy Owlat on your own infrastructure with Docker Compose. Complete guide from first boot to production.",{"path":293,"title":294,"description":295},"\u002Fdeveloper\u002Fself-hosting-config","Self-Hosting Configuration","Complete reference for Docker environment variables, Convex backend variables, service topology, and volume persistence.",{"path":297,"title":298,"description":299},"\u002Fdeveloper\u002Fself-hosting-dns-email","DNS & Email Setup","Configure DNS records, DKIM signing, SPF, DMARC, and bounce handling for reliable email delivery.",{"path":301,"title":302,"description":303},"\u002Fdeveloper\u002Fself-hosting-production","Production Deployment","Secure your self-hosted Owlat instance with TLS, firewall rules, backups, and monitoring.",{"path":305,"title":306,"description":307},"\u002Fdeveloper\u002Fself-hosting-maintenance","Maintenance & Updates","Keep your self-hosted Owlat instance up to date, manage backups, scale performance, and troubleshoot common issues.",{"path":309,"title":310,"description":311},"\u002Fdeveloper\u002Fself-hosting-desktop","Desktop Installer","Install Owlat on a bare Linux VPS straight from the desktop app over SSH — no terminal — with a live, animated provisioning timeline.",{"path":313,"title":314,"description":315},"\u002Fdeveloper\u002Fsetup-cli","Setup CLI & Installer","Operator reference for the Owlat self-host tooling: the install.sh one-liner, the owlat-setup CLI, the convex-deploy flow, and admin bootstrap.",{"path":317,"title":318,"description":319},"\u002Fdeveloper\u002Fconvex","Convex Backend","Owlat uses Convex as its serverless backend, providing real-time subscriptions, ACID transactions, and TypeScript-first development.",{"path":321,"title":202,"description":322},"\u002Fdeveloper\u002Fauthentication","Owlat uses BetterAuth with the Convex adapter for authentication and organization (team) management.",{"path":324,"title":325,"description":326},"\u002Fdeveloper\u002Femail-system","Email System","Owlat's email system consists of a visual editor, template management, and multi-provider sending infrastructure.",{"path":328,"title":329,"description":330},"\u002Fdeveloper\u002Femail-renderer","Email Renderer","The @owlat\u002Femail-renderer package converts editor JSON blocks into production-ready HTML emails with cross-client compatibility, CSS inlining, dark mode, and Outlook VML fallbacks.",{"path":332,"title":333,"description":334},"\u002Fdeveloper\u002Fenvironment-variables","Environment Variables","Reference for every environment variable Owlat reads across the Convex backend, web app, MTA, IMAP server, and mail-sync worker.",{"path":336,"title":337,"description":338},"\u002Fdeveloper\u002Fcomponents","Component Library","Reference for the reusable, auto-imported Vue UI components shipped in the packages\u002Fui layer.",{"path":340,"title":341,"description":342},"\u002Fdeveloper\u002Fdecisions","Architectural Decision Records","The architectural decision records for the Owlat project, each capturing the context, the decision, and the trade-offs involved.",{"path":344,"title":345,"description":346},"\u002Fdeveloper\u002Fdecisions\u002F009-model-routing","ADR-009: Task-Based Model Routing","Why Owlat supports per-task LLM model selection instead of using a single model for all pipeline steps.",{"path":348,"title":349,"description":350},"\u002Fdeveloper\u002Fdecisions\u002F010-listing-engine","ADR-010: Listing Engine","Why Owlat replaced four incompatible list-query contracts with one generic listing engine driven by per-entity descriptors.",{"path":352,"title":353,"description":354},"\u002Fdeveloper\u002Fdecisions\u002F001-custom-email-renderer","ADR-001: Custom Email Renderer Over MJML","Why Owlat built a custom table-based HTML email renderer instead of using MJML, gaining full control over VML, dark mode, and per-client rendering.",{"path":356,"title":357,"description":358},"\u002Fdeveloper\u002Fdecisions\u002F002-convex-backend","ADR-002: Convex as Backend","Why Owlat chose Convex over PostgreSQL and Firebase for real-time reactivity, co-located TypeScript logic, and zero-config scaling.",{"path":360,"title":361,"description":362},"\u002Fdeveloper\u002Fdecisions\u002F003-notion-like-builder","ADR-003: Notion-like Email Builder","Why Owlat replaced the traditional 3-panel email editor with a Notion-like single-column canvas for inline WYSIWYG editing.",{"path":364,"title":365,"description":366},"\u002Fdeveloper\u002Fdecisions\u002F004-monorepo-bun-workspaces","ADR-004: Monorepo with Bun Workspaces","Why Owlat uses a monorepo with Bun workspaces and Turborepo for fast installs, atomic cross-package changes, and cached CI.",{"path":368,"title":369,"description":370},"\u002Fdeveloper\u002Fdecisions\u002F005-custom-mta","ADR-005: Custom MTA","Why Owlat built a custom Mail Transfer Agent instead of relying solely on third-party email providers.",{"path":372,"title":373,"description":374},"\u002Fdeveloper\u002Fdecisions\u002F006-self-hosted-convex","ADR-006: Self-Hosted Convex","Why Owlat uses the open-source Convex backend for self-hosting instead of migrating to a different database.",{"path":376,"title":377,"description":378},"\u002Fdeveloper\u002Fdecisions\u002F007-pluggable-llm","ADR-007: Pluggable LLM Provider","Why Owlat uses the Vercel AI SDK with a provider abstraction layer instead of hardcoding a single LLM vendor.",{"path":380,"title":381,"description":382},"\u002Fdeveloper\u002Fdecisions\u002F008-process-architecture","ADR-008: Agent Process Architecture","Why Owlat processes inbound messages with a self-scheduling step walker plus a lifecycle coordinator instead of one sequential function.",{"path":384,"title":385,"description":386},"\u002Fexamples","Examples","Copy-pasteable integration patterns for common Owlat use cases.",{"path":388,"title":389,"description":390},"\u002Fexamples\u002Fwelcome-email","Welcome Email","Send a personalized welcome email when a new user signs up.",{"path":392,"title":393,"description":394},"\u002Fexamples\u002Fbilling-email","Billing Email","Send a billing receipt with an invoice PDF attached after a successful payment.",{"path":396,"title":397,"description":398},"\u002Fexamples\u002Fevent-automation","Event Automation","Trigger automations with custom events for trial lifecycle, feature adoption, and more.",{"path":400,"title":401,"description":402},"\u002Fexamples\u002Fcontact-sync","Contact Sync","Sync contacts from your database to Owlat using upsert patterns and bulk operations.",{"path":404,"title":405,"description":406},"\u002Fexamples\u002Fwebhook-handler","Webhook Handler","Handle Owlat delivery webhooks with signature verification and event routing.",{"path":408,"title":409,"description":410},"\u002Fexamples\u002Fmultilingual-email","Multilingual Email","Send emails in the recipient's preferred language using template translations.",{"path":412,"title":413,"description":414},"\u002Fvision","Vision","Where Owlat is heading — from email platform to unified communication intelligence powered by AI agents.",{"path":416,"title":417,"description":418},"\u002Fvision\u002Fself-hosting","Self-Hosting Architecture","How Owlat runs as a fully self-hosted stack using Docker Compose — open-source Convex backend, custom MTA, and a pluggable LLM provider.",{"path":420,"title":421,"description":422},"\u002Fvision\u002Fagent-pipeline","Agent Pipeline","Technical architecture for the inbound email agent pipeline — step modules, the walker, security scanning, threading, and human review.",{"path":424,"title":106,"description":425},"\u002Fvision\u002Fknowledge-graph","Technical architecture for Owlat's typed knowledge storage — how organizational knowledge is stored, searched, decayed, and maintained.",{"path":427,"title":428,"description":429},"\u002Fvision\u002Fmulti-channel","Multi-Channel & CRM","Technical architecture for channel adapters, unified messaging, contact identity unification, and the CRM hub.",{"path":431,"title":432,"description":433},"\u002Fvision\u002Ffile-system","Semantic File System","Technical architecture for Owlat's semantic file storage — version tracking with provenance today, plus the planned embedding-based retrieval and auto-tagging layer.",{"path":435,"title":436,"description":437},"\u002Fvision\u002Fdesktop-app","Desktop App & Advanced Agents","Architecture of the Owlat desktop shell, visualization agent, adaptive dashboard, agent health, graduated autonomy, and coding agents.",{"path":439,"title":440,"description":441},"\u002Fvision\u002Froadmap","Roadmap","What's planned next for Owlat — the documented-but-unbuilt pieces still being wired, and the enhancements on our radar.",{"id":443,"title":158,"body":444,"description":159,"extension":1172,"meta":1173,"navigation":1174,"path":157,"seo":1175,"stem":1176,"__hash__":1177},"content\u002F1.guide\u002F43.operating-modes.md",{"type":445,"value":446,"toc":1160},"minimark",[447,456,463,468,471,554,558,581,592,596,717,721,732,936,940,965,969,1041,1045,1125,1129],[448,449,450,451,455],"p",{},"Owlat is modular: every product surface is a feature flag, and you turn on only the ones you need. This page catalogs the common ",[452,453,454],"strong",{},"operating modes"," — coherent combinations of those flags plus the infrastructure each one requires — so you can pick the shape that fits your company and skip the rest.",[448,457,458,459,462],{},"The setup wizard's first step (\"How will you run Owlat?\") offers these as one-click presets. You can always fine-tune the individual flags afterwards from ",[452,460,461],{},"Settings → Features",".",[464,465,467],"h2",{"id":466},"the-three-axes","The three axes",[448,469,470],{},"Every mode is a point along three axes:",[472,473,474,504,530],"ol",{},[475,476,477,480,481,484,485,489,490,484,493,496,497,484,500,503],"li",{},[452,478,479],{},"Receiving"," — where mail comes in. None, an ",[452,482,483],{},"external mailbox over IMAP"," (",[486,487,488],"code",{},"mail.external"," — read Gmail \u002F Fastmail \u002F a company server), a ",[452,491,492],{},"hosted Postbox",[486,494,495],{},"postbox"," — Owlat is your mail server, MX-based), or a ",[452,498,499],{},"shared team inbox",[486,501,502],{},"inbox",").",[475,505,506,509,510,513,514,517,518,521,522,525,526,529],{},[452,507,508],{},"Sending"," — how mail goes out. Nothing, ",[452,511,512],{},"1:1 replies through your own SMTP"," (the external-mailbox path), or a ",[452,515,516],{},"delivery provider"," (the built-in ",[452,519,520],{},"MTA",", ",[452,523,524],{},"Resend",", or ",[452,527,528],{},"Amazon SES",") for programmatic and bulk mail.",[475,531,532,535,536,484,539,542,543,484,546,549,550,553],{},[452,533,534],{},"Message type"," — what you send. ",[452,537,538],{},"Transactional",[486,540,541],{},"transactional"," — receipts, password resets, API sends) and ",[452,544,545],{},"marketing",[486,547,548],{},"campaigns"," + ",[486,551,552],{},"automations"," — broadcasts, drip series).",[464,555,557],{"id":556},"the-rule-that-keeps-modes-coherent","The rule that keeps modes coherent",[559,560,563,578],"callout",{"title":561,"type":562},"Bulk sending needs a delivery provider — an IMAP mailbox is not one","warning",[448,564,565,568,569,572,573,577],{},[452,566,567],{},"Campaigns, transactional, and automations"," send through a delivery provider (MTA, Resend, or SES) with a verified, authenticated sending domain. You ",[452,570,571],{},"cannot"," send them with IMAP-only: a connected external mailbox sends ",[574,575,576],"em",{},"personal 1:1 replies through your own provider's SMTP",", never bulk mail.",[448,579,580],{},"Owlat enforces this. The setup wizard requires a provider when any of those flags is on, and the backend refuses such sends (no rows are written) until one is configured.",[448,582,583,584,587,588,591],{},"A second, quieter rule: ",[452,585,586],{},"system and auth email"," (password reset, team invitations, double opt-in) also needs a transport. It goes through whichever delivery provider you configure. A deployment that configures ",[574,589,590],{},"no"," provider can read mail and reply 1:1, but cannot send password resets or invitations — so it only suits a single admin set up at install or an external identity provider.",[464,593,595],{"id":594},"choose-your-mode","Choose your mode",[597,598,599,615],"table",{},[600,601,602],"thead",{},[603,604,605,609,612],"tr",{},[606,607,608],"th",{},"If you want to…",[606,610,611],{},"Mode",[606,613,614],{},"Delivery provider?",[616,617,618,632,644,656,669,681,693,705],"tbody",{},[603,619,620,624,629],{},[621,622,623],"td",{},"Read your existing Google\u002FIMAP mail in a better client",[621,625,626],{},[452,627,628],{},"IMAP-only",[621,630,631],{},"No",[603,633,634,637,641],{},[621,635,636],{},"Send receipts \u002F password resets from your app",[621,638,639],{},[452,640,226],{},[621,642,643],{},"Yes",[603,645,646,649,654],{},[621,647,648],{},"Run newsletters, forms, and drip campaigns",[621,650,651],{},[452,652,653],{},"Marketing platform",[621,655,643],{},[603,657,658,661,666],{},[621,659,660],{},"Run Owlat as your company mail server",[621,662,663],{},[452,664,665],{},"Hosted mail server",[621,667,668],{},"Yes (MTA)",[603,670,671,674,679],{},[621,672,673],{},"Triage shared support mail as a team",[621,675,676],{},[452,677,678],{},"Team inbox",[621,680,643],{},[603,682,683,686,691],{},[621,684,685],{},"…with AI classification + draft replies",[621,687,688],{},[452,689,690],{},"Team inbox + AI",[621,692,643],{},[603,694,695,698,703],{},[621,696,697],{},"Everything at once",[621,699,700],{},[452,701,702],{},"Full stack",[621,704,643],{},[603,706,707,710,715],{},[621,708,709],{},"Just manage contacts\u002Fdata, no mail",[621,711,712],{},[452,713,714],{},"CRM-only",[621,716,631],{},[464,718,720],{"id":719},"the-mode-matrix","The mode matrix",[448,722,723,724,727,728,731],{},"Always-on built-ins (no flag): the Convex backend, Redis, and the automations runtime. \"Flags on\" lists only what you enable beyond the defaults. ",[452,725,726],{},"Provider"," is the email delivery provider; ",[452,729,730],{},"profiles"," are the Docker Compose profiles that activate.",[597,733,734,751],{},[600,735,736],{},[603,737,738,740,743,745,748],{},[606,739,611],{},[606,741,742],{},"Flags on",[606,744,726],{},[606,746,747],{},"Docker profiles",[606,749,750],{},"What works",[616,752,753,774,796,824,847,868,895,919],{},[603,754,755,759,763,766,771],{},[621,756,757],{},[452,758,628],{},[621,760,761],{},[486,762,488],{},[621,764,765],{},"none",[621,767,768],{},[486,769,770],{},"external-mail",[621,772,773],{},"Read external mailboxes, search, CRM\u002Ftimeline, reply 1:1 via your own SMTP",[603,775,776,780,784,787,793],{},[621,777,778],{},[452,779,226],{},[621,781,782],{},[486,783,541],{},[621,785,786],{},"required",[621,788,789,792],{},[486,790,791],{},"mta"," if provider = MTA",[621,794,795],{},"Programmatic sends via the API\u002FSDK; verified domain required",[603,797,798,802,815,817,821],{},[621,799,800],{},[452,801,653],{},[621,803,804,806,807,810,811,521,813],{},[486,805,548],{}," (+ ",[486,808,809],{},".archive","), ",[486,812,552],{},[486,814,541],{},[621,816,786],{},[621,818,819,792],{},[486,820,791],{},[621,822,823],{},"Campaigns, drip\u002Fbroadcast automations, forms → double opt-in, transactional",[603,825,826,830,834,837,844],{},[621,827,828],{},[452,829,665],{},[621,831,832],{},[486,833,495],{},[621,835,836],{},"MTA + verified domain",[621,838,839,521,842],{},[486,840,841],{},"personal-mail",[486,843,791],{},[621,845,846],{},"Per-user mailboxes, webmail + IMAP\u002FSMTP clients, MX delivery",[603,848,849,853,859,861,865],{},[621,850,851],{},[452,852,678],{},[621,854,855,521,857],{},[486,856,502],{},[486,858,541],{},[621,860,786],{},[621,862,863],{},[486,864,791],{},[621,866,867],{},"Shared inbox, threaded conversations, replies via provider",[603,869,870,874,884,886,892],{},[621,871,872],{},[452,873,690],{},[621,875,876,521,878,521,881],{},[486,877,502],{},[486,879,880],{},"ai",[486,882,883],{},"ai.agent",[621,885,786],{},[621,887,888,521,890],{},[486,889,791],{},[486,891,880],{},[621,893,894],{},"+ AI classification & draft replies (needs an LLM provider)",[603,896,897,901,904,906,916],{},[621,898,899],{},[452,900,702],{},[621,902,903],{},"marketing + receiving + AI",[621,905,786],{},[621,907,908,521,910,521,912,521,914],{},[486,909,841],{},[486,911,770],{},[486,913,791],{},[486,915,880],{},[621,917,918],{},"everything",[603,920,921,925,928,930,933],{},[621,922,923],{},[452,924,714],{},[621,926,927],{},"none of the sending flags",[621,929,765],{},[621,931,932],{},"—",[621,934,935],{},"Contacts, segments, imports, forms; no send",[464,937,939],{"id":938},"imap-only-in-detail","IMAP-only, in detail",[559,941,944,959],{"title":942,"type":943},"Owlat as a better client on top of Google","tip",[448,945,946,947,951,952,955,956,462],{},"Enable ",[452,948,949],{},[486,950,488],{}," and each user connects their own mailbox over IMAP+SMTP. Owlat syncs their mail (including a full-history backfill — see ",[953,954,90],"a",{"href":89},"), indexes it for search and AI, and lets them ",[452,957,958],{},"reply 1:1 through their own provider's SMTP",[448,960,961,962,964],{},"No delivery provider, no sending domain, and no MTA container are required. What you ",[452,963,571],{}," do in this mode: send marketing campaigns, automations, or transactional API mail — those need a delivery provider. Connecting an external mailbox does not give you one.",[464,966,968],{"id":967},"how-to-run-each-mode","How to run each mode",[970,971,972,1024,1032],"ul",{},[475,973,974,977,978,980,981,984,985,988,989,991,992,994,995,998,999,1002,1003,1006,1007,991,1010,1013,1014,1016,1017,1020,1021,462],{},[452,975,976],{},"Self-hosters"," pick a mode in the setup wizard, or set the flags in ",[486,979,461],{},". The built-in ",[452,982,983],{},"MTA is now opt-in",": it runs only when it is the delivery provider (",[486,986,987],{},"EMAIL_PROVIDER=mta",") or when ",[486,990,495],{},"\u002F",[486,993,502],{}," need it for inbound mail. The default ",[486,996,997],{},".env.selfhost.example"," ships ",[486,1000,1001],{},"COMPOSE_PROFILES=mta","; switch ",[486,1004,1005],{},"EMAIL_PROVIDER"," to ",[486,1008,1009],{},"resend",[486,1011,1012],{},"ses"," and drop ",[486,1015,791],{}," from ",[486,1018,1019],{},"COMPOSE_PROFILES"," to stop running it. See ",[953,1022,1023],{"href":293},"Self-hosting configuration",[475,1025,1026,1029,1030,462],{},[452,1027,1028],{},"Delivery providers"," (MTA vs Resend vs SES) and how routing picks one are covered in ",[953,1031,258],{"href":257},[475,1033,1034,1037,1038,462],{},[452,1035,1036],{},"Sending domains"," (SPF\u002FDKIM\u002FDMARC) are only required when you send through the built-in MTA — see ",[953,1039,1040],{"href":297},"DNS & email",[464,1042,1044],{"id":1043},"invalid-combinations-owlat-prevents","Invalid combinations Owlat prevents",[597,1046,1047,1060],{},[600,1048,1049],{},[603,1050,1051,1054,1057],{},[606,1052,1053],{},"Combination",[606,1055,1056],{},"Why it's incoherent",[606,1058,1059],{},"What Owlat does",[616,1061,1062,1079,1093,1109],{},[603,1063,1064,1070,1073],{},[621,1065,1066,1067],{},"Campaigns \u002F transactional \u002F automations on, ",[452,1068,1069],{},"no delivery provider",[621,1071,1072],{},"Bulk mail has no transport",[621,1074,1075,1078],{},[452,1076,1077],{},"Blocked",": wizard requires a provider; sends are refused (no rows written)",[603,1080,1081,1084,1087],{},[621,1082,1083],{},"Treating an external mailbox as a bulk sender",[621,1085,1086],{},"It's personal 1:1 SMTP, never bulk",[621,1088,1089,1090,1092],{},"The capability check never counts ",[486,1091,488],{}," as a provider",[603,1094,1095,1103,1106],{},[621,1096,1097,1099,1100],{},[486,1098,502],{}," on with ",[452,1101,1102],{},"no inbound source",[621,1104,1105],{},"The inbox stays empty",[621,1107,1108],{},"Warned — add the MTA or a channel webhook",[603,1110,1111,1119,1122],{},[621,1112,1113,1115,1116],{},[486,1114,495],{}," on with an ",[452,1117,1118],{},"unverified domain",[621,1120,1121],{},"No MX in, no DKIM out",[621,1123,1124],{},"Warned + the per-domain send gate blocks until verified",[464,1126,1128],{"id":1127},"see-also","See also",[970,1130,1131,1136,1145,1152],{},[475,1132,1133,1135],{},[953,1134,70],{"href":69}," — toggling individual surfaces",[475,1137,1138,1141,1142],{},[953,1139,1140],{"href":41},"Transactional email"," and ",[953,1143,1144],{"href":57},"setup",[475,1146,1147,1141,1150],{},[953,1148,1149],{"href":85},"Postbox",[953,1151,90],{"href":89},[475,1153,1154,1141,1157],{},[953,1155,1156],{"href":289},"Self-hosting",[953,1158,1159],{"href":293},"configuration",{"title":1161,"searchDepth":1162,"depth":1162,"links":1163},"",2,[1164,1165,1166,1167,1168,1169,1170,1171],{"id":466,"depth":1162,"text":467},{"id":556,"depth":1162,"text":557},{"id":594,"depth":1162,"text":595},{"id":719,"depth":1162,"text":720},{"id":938,"depth":1162,"text":939},{"id":967,"depth":1162,"text":968},{"id":1043,"depth":1162,"text":1044},{"id":1127,"depth":1162,"text":1128},"md",{},true,{"title":158,"description":159},"1.guide\u002F43.operating-modes","0kvT6HSXm7JCjJRSrKpMkkK1rc4wXBbYE6GxZ-1Z5j0",[1179,1181],{"title":154,"path":153,"stem":1180,"children":-1},"1.guide\u002F42.system-updates",{"title":162,"path":161,"stem":1182,"children":-1},"1.guide\u002F5.saved-blocks",1782846429694]