Scopes

Wofür jede App und jedes Package im Owlat-Monorepo zuständig ist.

Jeder Teil des Monorepos hat einen klar abgegrenzten Scope. Apps sind deploybare Services, Packages sind gemeinsam genutzte Bibliotheken, die von einer oder mehreren Apps eingebunden werden.

Scope-Übersicht

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 3Haupt-Dashboard für Nutzer — E-Mail-Builder, Kampagnen, Zielgruppenverwaltung, Automationen, Einstellungen
apps/apiConvexServerless-Backend — Datenbank, Authentifizierung (BetterAuth), Echtzeit-Subscriptions, REST-API, Cron-Jobs
apps/mtaHono + GroupMQEigener Mail Transfer Agent — direkte SMTP-Zustellung, DKIM-Signierung, IP-Warming, Bounce-Verarbeitung, Rate Limiting
apps/imapNode + IMAPIMAP-Server (Port 993) — übersetzt IMAP4rev1-Befehle in Convex-Queries gegen die Postfächer der einzelnen Nutzer
apps/mail-syncNode-WorkerSynchronisiert die externen IMAP-/SMTP-Konten der Nutzer — eingehende Mail nahezu in Echtzeit über IMAP IDLE, Relay für ausgehende Sendungen
apps/code-workerNode-WorkerFragt Convex nach eingereihten Code-Tasks ab und führt sie aus (GitHub Task Runner)
apps/desktopTauri 2 + RustDesktop-Shell — bündelt die SPA aus apps/web, verbindet sich mit einem oder mehreren Deployments (Multi-Workspace)
apps/setup-cliTypeScript (Bun)Setup-CLI für Self-Hosting — der owlat quickstart-Installer, der eine vollständige Instanz deployt
apps/updaterNodeUpdate-Worker für Self-Hosting — HTTP-Steuerfläche, die Docker-Compose-Updates zieht und anwendet
apps/docsNuxt + ContentEntwicklerdokumentation — Anleitungen, API-Referenz, Architekturentscheidungen
apps/marketingNuxtÖffentliche Marketing-Site — Landingpages, Preise, Changelog

Packages

PackageStackScope
packages/sharedTypeScriptGemeinsame Typen und Daten — Block-Definitionen, Editor-Typen, Kompatibilitätsmatrix der E-Mail-Clients
packages/email-rendererTypeScriptHeadless-Engine für E-Mail-HTML — tabellenbasierte Layouts, VML für Outlook, CSS-Inlining, Dark Mode, AMP-Format
packages/email-builderVue 3Notion-artiger E-Mail-Editor — Dokument-Canvas, Block-Vorschauen, Einstellungs-Popover, Slash-Befehle
packages/email-previewerVue 3Vorschau und Analyse — Simulation des Renderings über Clients hinweg, Kompatibilitätsbewertung, E-Mail-Diffs
packages/email-scannerTypeScriptSicherheitsprüfung von E-Mails — Erkennung von Spam-/Phishing-Schlüsselwörtern, Validierung von Magic Bytes in Dateien, ClamAV-Client, URL-Reputation (Safe Browsing)
packages/channelsTypeScriptNormalisierung eingehender Mail — eine quellenbasierte Registry (mta, resend, …) auf eine kanonische InboundEmailMessage
packages/uiNuxt LayerGemeinsame UI-Primitive — Toast-Benachrichtigungen, Error Boundaries, automatisch importierte Composables
packages/plugin-kitTypeScriptÖffentliche Plugin-Verträge (npm) — definePlugin, Capability-Konstanten, sämtliche Contribution-Interfaces
packages/plugin-hostTypeScriptPrivater Enforcement-Kernel für Plugins — Prüfung von Capabilities/Flags, Reihenfolge, Gate-Ergebnisse, Policy für nicht vertrauenswürdigen Text; wird von Convex und Nuxt gemeinsam genutzt
packages/plugin-codegenTypeScriptBuild-Werkzeug, dem der einzige Kompositionspunkt für gebündelte Plugins sowie die generierten Kataloge/Registries gehören
packages/plugin-cliTypeScript (Bun)owlat-plugins — create/add/remove/codegen/dev über plugins.config.ts
packages/sdk-jsTypeScriptJavaScript-SDK (npm) — Kontakte, transaktionale Sendungen, Events, Topics
packages/sdk-javaJavaJava-SDK (Maven) — dieselbe API-Oberfläche wie sdk-js für JVM-Konsumenten

Wer importiert was

  • web importiert email-builder, email-previewer, email-renderer, ui, shared sowie den generierten Convex-Client @owlat/api (Echtzeit-Queries & -Mutations)
  • api importiert email-renderer, email-scanner, channels und shared
  • docs und marketing importieren ui
  • imap, mail-sync und code-worker sind eigenständige Node-Worker — sie sprechen über den Convex-Client mit api
  • mta ist eigenständig — es empfängt HTTP-Requests von api und stellt Mail direkt zu
  • sdk-js und sdk-java sind eigenständig — sie sprechen mit der öffentlichen REST-API, die api bereitstellt
  • plugin-kit wird von Plugin-Packages, plugin-host, plugin-codegen, api, web und code-worker importiert; plugin-host wird von api und web importiert; plugin-codegen läuft ausschließlich zur Build-Zeit. Die gebündelten Plugin-Packages selbst sind ausschließlich aus generierten Kompositionsdateien erreichbar — siehe das Kapitel Plugin-Plattform