Scopes

What each app and package in the Owlat monorepo is responsible for.

Each part of the monorepo has a clear scope. Apps are deployable services, packages are shared libraries consumed by one or more apps.

Scope Map

11 apps
webNuxt 4 + Vue 3
Main dashboard — email builder, campaigns, audience, automations, settingsapps/web
apiConvex
Serverless backend — database, auth, real-time subscriptions, cron jobsapps/api
mtaHono + GroupMQ
Mail Transfer Agent — direct SMTP delivery, IP warming, bounce processingapps/mta
imapNode + IMAP
IMAP server (port 993) — maps IMAP4rev1 onto Convex per-user mailboxesapps/imap
mail-syncNode worker
Syncs external IMAP/SMTP accounts — inbound via IMAP IDLE, relays outboundapps/mail-sync
code-workerNode worker
Polls Convex for queued code tasks and runs them (GitHub task runner)apps/code-worker
desktopTauri 2 + Rust
Desktop shell — bundles the web SPA, connects to one or more deploymentsapps/desktop
setup-cliTypeScript · Bun
Self-host setup CLI — the owlat quickstart installer for a full instanceapps/setup-cli
updaterNode
Self-host update worker — applies Docker Compose updates over HTTPapps/updater
docsNuxt + Content
Developer documentation — guides, API reference, architecture docsapps/docs
marketingNuxt
Public website — landing pages, pricing, changelogapps/marketing
webapiReal-time queries & mutations
apimtaEmail delivery
webemail-builderEditor UI
webemail-previewerPreview
webuiComponents
apiemail-rendererHTML generation
apiemail-scannerSecurity scanning
webemail-rendererLive preview
apisharedTypes
9 packages
sharedTypeScript
Shared types — block definitions, editor types, compatibility datapackages/shared
email-rendererTypeScript
Email HTML engine — table layouts, VML, CSS inlining, dark mode, AMPpackages/email-renderer
email-builderVue 3
Notion-like editor — drag-and-drop canvas, block settings, slash commandspackages/email-builder
email-previewerVue 3
Preview & analysis — cross-client rendering, compatibility scoring, diffspackages/email-previewer
email-scannerTypeScript
Email security — spam/phishing detection, file validation, ClamAV, URL reputationpackages/email-scanner
channelsTypeScript
Multi-channel adapters — email, SMS, WhatsApp, generic webhook, native chatpackages/channels
uiNuxt Layer
Component library — toast notifications, error boundaries, shared composablespackages/ui
sdk-jsTypeScript · npm
JavaScript SDK — contacts, transactional sends, events, topicspackages/sdk-js
sdk-javaJava · Maven
Java SDK — same API surface, JVM-native clientpackages/sdk-java
All packages import from shared for block types, editor types, and compatibility data.

Apps

AppStackScope
apps/webNuxt 4 + Vue 3Main user dashboard — email builder, campaigns, audience management, automations, settings
apps/apiConvexServerless backend — database, authentication (BetterAuth), real-time subscriptions, REST API, cron jobs
apps/mtaHono + GroupMQCustom Mail Transfer Agent — direct SMTP delivery, DKIM signing, IP warming, bounce processing, rate limiting
apps/imapNode + IMAPIMAP server (port 993) — translates IMAP4rev1 commands into Convex queries against per-user mailboxes
apps/mail-syncNode workerSyncs users' external IMAP/SMTP accounts — inbound mail in near-real-time via IMAP IDLE, relays outbound sends
apps/code-workerNode workerPolls Convex for queued code tasks and executes them (GitHub task runner)
apps/desktopTauri 2 + RustDesktop shell — bundles the apps/web SPA, connects to one or more deployments (multi-workspace)
apps/setup-cliTypeScript (Bun)Self-host setup CLI — the owlat quickstart installer that deploys a full instance
apps/updaterNodeSelf-host update worker — HTTP control surface that pulls and applies Docker Compose updates
apps/docsNuxt + ContentDeveloper documentation — guides, API reference, architecture decisions
apps/marketingNuxtPublic marketing site — landing pages, pricing, changelog

Packages

PackageStackScope
packages/sharedTypeScriptShared types and data — block definitions, editor types, email client compatibility matrix
packages/email-rendererTypeScriptHeadless email HTML engine — table-based layouts, VML for Outlook, CSS inlining, dark mode, AMP format
packages/email-builderVue 3Notion-like email editor — document canvas, block previews, settings popover, slash commands
packages/email-previewerVue 3Preview and analysis — cross-client rendering simulation, compatibility scoring, email diffs
packages/email-scannerTypeScriptEmail security scanning — spam/phishing keyword detection, file magic-byte validation, ClamAV client, URL reputation (Safe Browsing)
packages/channelsTypeScriptMulti-channel adapters — email, SMS, WhatsApp, generic webhook, native chat + inbound channel registry
packages/uiNuxt LayerShared UI primitives — toast notifications, error boundaries, auto-imported composables
packages/sdk-jsTypeScriptJavaScript SDK (npm) — contacts, transactional sends, events, topics
packages/sdk-javaJavaJava SDK (Maven) — same API surface as sdk-js for JVM consumers

Who imports what

  • web imports email-builder, email-previewer, email-renderer, ui, shared, and the generated Convex client @owlat/api (real-time queries & mutations)
  • api imports email-renderer, email-scanner, channels, and shared
  • docs and marketing import ui
  • imap, mail-sync, and code-worker are standalone Node workers — they talk to api over the Convex client
  • mta is standalone — it receives HTTP requests from api and delivers mail directly
  • sdk-js and sdk-java are standalone — they talk to the public REST API exposed by api