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
Applications11 apps
webNuxt 4 + Vue 3
Main dashboard — email builder, campaigns, audience, automations, settingsapps/webapiConvex
Serverless backend — database, auth, real-time subscriptions, cron jobsapps/apimtaHono + GroupMQ
Mail Transfer Agent — direct SMTP delivery, IP warming, bounce processingapps/mtaimapNode + IMAP
IMAP server (port 993) — maps IMAP4rev1 onto Convex per-user mailboxesapps/imapmail-syncNode worker
Syncs external IMAP/SMTP accounts — inbound via IMAP IDLE, relays outboundapps/mail-synccode-workerNode worker
Polls Convex for queued code tasks and runs them (GitHub task runner)apps/code-workerdesktopTauri 2 + Rust
Desktop shell — bundles the web SPA, connects to one or more deploymentsapps/desktopsetup-cliTypeScript · Bun
Self-host setup CLI — the owlat quickstart installer for a full instanceapps/setup-cliupdaterNode
Self-host update worker — applies Docker Compose updates over HTTPapps/updaterdocsNuxt + Content
Developer documentation — guides, API reference, architecture docsapps/docsmarketingNuxt
Public website — landing pages, pricing, changelogapps/marketingwebapiReal-time queries & mutations
apimtaEmail delivery
webemail-builderEditor UI
webemail-previewerPreview
webuiComponents
apiemail-rendererHTML generation
apiemail-scannerSecurity scanning
webemail-rendererLive preview
apisharedTypes
Packages9 packages
sharedTypeScript
Shared types — block definitions, editor types, compatibility datapackages/sharedemail-rendererTypeScript
Email HTML engine — table layouts, VML, CSS inlining, dark mode, AMPpackages/email-rendereremail-builderVue 3
Notion-like editor — drag-and-drop canvas, block settings, slash commandspackages/email-builderemail-previewerVue 3
Preview & analysis — cross-client rendering, compatibility scoring, diffspackages/email-previeweremail-scannerTypeScript
Email security — spam/phishing detection, file validation, ClamAV, URL reputationpackages/email-scannerchannelsTypeScript
Multi-channel adapters — email, SMS, WhatsApp, generic webhook, native chatpackages/channelsuiNuxt Layer
Component library — toast notifications, error boundaries, shared composablespackages/uisdk-jsTypeScript · npm
JavaScript SDK — contacts, transactional sends, events, topicspackages/sdk-jssdk-javaJava · Maven
Java SDK — same API surface, JVM-native clientpackages/sdk-javaAll packages import from
shared for block types, editor types, and compatibility data.Apps
| App | Stack | Scope |
|---|---|---|
apps/web | Nuxt 4 + Vue 3 | Haupt-Dashboard für Nutzer — E-Mail-Builder, Kampagnen, Zielgruppenverwaltung, Automationen, Einstellungen |
apps/api | Convex | Serverless-Backend — Datenbank, Authentifizierung (BetterAuth), Echtzeit-Subscriptions, REST-API, Cron-Jobs |
apps/mta | Hono + GroupMQ | Eigener Mail Transfer Agent — direkte SMTP-Zustellung, DKIM-Signierung, IP-Warming, Bounce-Verarbeitung, Rate Limiting |
apps/imap | Node + IMAP | IMAP-Server (Port 993) — übersetzt IMAP4rev1-Befehle in Convex-Queries gegen die Postfächer der einzelnen Nutzer |
apps/mail-sync | Node-Worker | Synchronisiert die externen IMAP-/SMTP-Konten der Nutzer — eingehende Mail nahezu in Echtzeit über IMAP IDLE, Relay für ausgehende Sendungen |
apps/code-worker | Node-Worker | Fragt Convex nach eingereihten Code-Tasks ab und führt sie aus (GitHub Task Runner) |
apps/desktop | Tauri 2 + Rust | Desktop-Shell — bündelt die SPA aus apps/web, verbindet sich mit einem oder mehreren Deployments (Multi-Workspace) |
apps/setup-cli | TypeScript (Bun) | Setup-CLI für Self-Hosting — der owlat quickstart-Installer, der eine vollständige Instanz deployt |
apps/updater | Node | Update-Worker für Self-Hosting — HTTP-Steuerfläche, die Docker-Compose-Updates zieht und anwendet |
apps/docs | Nuxt + Content | Entwicklerdokumentation — Anleitungen, API-Referenz, Architekturentscheidungen |
apps/marketing | Nuxt | Öffentliche Marketing-Site — Landingpages, Preise, Changelog |
Packages
| Package | Stack | Scope |
|---|---|---|
packages/shared | TypeScript | Gemeinsame Typen und Daten — Block-Definitionen, Editor-Typen, Kompatibilitätsmatrix der E-Mail-Clients |
packages/email-renderer | TypeScript | Headless-Engine für E-Mail-HTML — tabellenbasierte Layouts, VML für Outlook, CSS-Inlining, Dark Mode, AMP-Format |
packages/email-builder | Vue 3 | Notion-artiger E-Mail-Editor — Dokument-Canvas, Block-Vorschauen, Einstellungs-Popover, Slash-Befehle |
packages/email-previewer | Vue 3 | Vorschau und Analyse — Simulation des Renderings über Clients hinweg, Kompatibilitätsbewertung, E-Mail-Diffs |
packages/email-scanner | TypeScript | Sicherheitsprüfung von E-Mails — Erkennung von Spam-/Phishing-Schlüsselwörtern, Validierung von Magic Bytes in Dateien, ClamAV-Client, URL-Reputation (Safe Browsing) |
packages/channels | TypeScript | Normalisierung eingehender Mail — eine quellenbasierte Registry (mta, resend, …) auf eine kanonische InboundEmailMessage |
packages/ui | Nuxt Layer | Gemeinsame UI-Primitive — Toast-Benachrichtigungen, Error Boundaries, automatisch importierte Composables |
packages/plugin-kit | TypeScript | Öffentliche Plugin-Verträge (npm) — definePlugin, Capability-Konstanten, sämtliche Contribution-Interfaces |
packages/plugin-host | TypeScript | Privater 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-codegen | TypeScript | Build-Werkzeug, dem der einzige Kompositionspunkt für gebündelte Plugins sowie die generierten Kataloge/Registries gehören |
packages/plugin-cli | TypeScript (Bun) | owlat-plugins — create/add/remove/codegen/dev über plugins.config.ts |
packages/sdk-js | TypeScript | JavaScript-SDK (npm) — Kontakte, transaktionale Sendungen, Events, Topics |
packages/sdk-java | Java | Java-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,sharedsowie den generierten Convex-Client@owlat/api(Echtzeit-Queries & -Mutations) - api importiert
email-renderer,email-scanner,channelsundshared - 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
apiund stellt Mail direkt zu - sdk-js und sdk-java sind eigenständig — sie sprechen mit der öffentlichen REST-API, die
apibereitstellt - plugin-kit wird von Plugin-Packages,
plugin-host,plugin-codegen,api,webundcode-workerimportiert; plugin-host wird vonapiundwebimportiert; 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