[{"data":1,"prerenderedAt":558},["ShallowReactive",2],{"search-de":3,"content-de-developer\u002Fscopes":4,"surround-de-\u002Fdeveloper\u002Fscopes":549},[],{"id":5,"title":6,"body":7,"description":541,"extension":542,"meta":543,"navigation":544,"path":545,"seo":546,"stem":547,"__hash__":548},"content_de\u002F3.developer\u002F3.scopes.md","Scopes",{"type":8,"value":9,"toc":533},"minimark",[10,14,19,22,26,199,203,399,403],[11,12,13],"p",{},"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.",[15,16,18],"h2",{"id":17},"scope-übersicht","Scope-Übersicht",[20,21],"scope-map",{},[15,23,25],{"id":24},"apps","Apps",[27,28,29,45],"table",{},[30,31,32],"thead",{},[33,34,35,39,42],"tr",{},[36,37,38],"th",{},"App",[36,40,41],{},"Stack",[36,43,44],{},"Scope",[46,47,48,63,76,89,102,115,127,143,160,173,186],"tbody",{},[33,49,50,57,60],{},[51,52,53],"td",{},[54,55,56],"code",{},"apps\u002Fweb",[51,58,59],{},"Nuxt 4 + Vue 3",[51,61,62],{},"Haupt-Dashboard für Nutzer — E-Mail-Builder, Kampagnen, Zielgruppenverwaltung, Automationen, Einstellungen",[33,64,65,70,73],{},[51,66,67],{},[54,68,69],{},"apps\u002Fapi",[51,71,72],{},"Convex",[51,74,75],{},"Serverless-Backend — Datenbank, Authentifizierung (BetterAuth), Echtzeit-Subscriptions, REST-API, Cron-Jobs",[33,77,78,83,86],{},[51,79,80],{},[54,81,82],{},"apps\u002Fmta",[51,84,85],{},"Hono + GroupMQ",[51,87,88],{},"Eigener Mail Transfer Agent — direkte SMTP-Zustellung, DKIM-Signierung, IP-Warming, Bounce-Verarbeitung, Rate Limiting",[33,90,91,96,99],{},[51,92,93],{},[54,94,95],{},"apps\u002Fimap",[51,97,98],{},"Node + IMAP",[51,100,101],{},"IMAP-Server (Port 993) — übersetzt IMAP4rev1-Befehle in Convex-Queries gegen die Postfächer der einzelnen Nutzer",[33,103,104,109,112],{},[51,105,106],{},[54,107,108],{},"apps\u002Fmail-sync",[51,110,111],{},"Node-Worker",[51,113,114],{},"Synchronisiert die externen IMAP-\u002FSMTP-Konten der Nutzer — eingehende Mail nahezu in Echtzeit über IMAP IDLE, Relay für ausgehende Sendungen",[33,116,117,122,124],{},[51,118,119],{},[54,120,121],{},"apps\u002Fcode-worker",[51,123,111],{},[51,125,126],{},"Fragt Convex nach eingereihten Code-Tasks ab und führt sie aus (GitHub Task Runner)",[33,128,129,134,137],{},[51,130,131],{},[54,132,133],{},"apps\u002Fdesktop",[51,135,136],{},"Tauri 2 + Rust",[51,138,139,140,142],{},"Desktop-Shell — bündelt die SPA aus ",[54,141,56],{},", verbindet sich mit einem oder mehreren Deployments (Multi-Workspace)",[33,144,145,150,153],{},[51,146,147],{},[54,148,149],{},"apps\u002Fsetup-cli",[51,151,152],{},"TypeScript (Bun)",[51,154,155,156,159],{},"Setup-CLI für Self-Hosting — der ",[54,157,158],{},"owlat quickstart","-Installer, der eine vollständige Instanz deployt",[33,161,162,167,170],{},[51,163,164],{},[54,165,166],{},"apps\u002Fupdater",[51,168,169],{},"Node",[51,171,172],{},"Update-Worker für Self-Hosting — HTTP-Steuerfläche, die Docker-Compose-Updates zieht und anwendet",[33,174,175,180,183],{},[51,176,177],{},[54,178,179],{},"apps\u002Fdocs",[51,181,182],{},"Nuxt + Content",[51,184,185],{},"Entwicklerdokumentation — Anleitungen, API-Referenz, Architekturentscheidungen",[33,187,188,193,196],{},[51,189,190],{},[54,191,192],{},"apps\u002Fmarketing",[51,194,195],{},"Nuxt",[51,197,198],{},"Öffentliche Marketing-Site — Landingpages, Preise, Changelog",[15,200,202],{"id":201},"packages","Packages",[27,204,205,216],{},[30,206,207],{},[33,208,209,212,214],{},[36,210,211],{},"Package",[36,213,41],{},[36,215,44],{},[46,217,218,231,243,256,268,280,303,316,332,344,356,374,386],{},[33,219,220,225,228],{},[51,221,222],{},[54,223,224],{},"packages\u002Fshared",[51,226,227],{},"TypeScript",[51,229,230],{},"Gemeinsame Typen und Daten — Block-Definitionen, Editor-Typen, Kompatibilitätsmatrix der E-Mail-Clients",[33,232,233,238,240],{},[51,234,235],{},[54,236,237],{},"packages\u002Femail-renderer",[51,239,227],{},[51,241,242],{},"Headless-Engine für E-Mail-HTML — tabellenbasierte Layouts, VML für Outlook, CSS-Inlining, Dark Mode, AMP-Format",[33,244,245,250,253],{},[51,246,247],{},[54,248,249],{},"packages\u002Femail-builder",[51,251,252],{},"Vue 3",[51,254,255],{},"Notion-artiger E-Mail-Editor — Dokument-Canvas, Block-Vorschauen, Einstellungs-Popover, Slash-Befehle",[33,257,258,263,265],{},[51,259,260],{},[54,261,262],{},"packages\u002Femail-previewer",[51,264,252],{},[51,266,267],{},"Vorschau und Analyse — Simulation des Renderings über Clients hinweg, Kompatibilitätsbewertung, E-Mail-Diffs",[33,269,270,275,277],{},[51,271,272],{},[54,273,274],{},"packages\u002Femail-scanner",[51,276,227],{},[51,278,279],{},"Sicherheitsprüfung von E-Mails — Erkennung von Spam-\u002FPhishing-Schlüsselwörtern, Validierung von Magic Bytes in Dateien, ClamAV-Client, URL-Reputation (Safe Browsing)",[33,281,282,287,289],{},[51,283,284],{},[54,285,286],{},"packages\u002Fchannels",[51,288,227],{},[51,290,291,292,295,296,299,300],{},"Normalisierung eingehender Mail — eine quellenbasierte Registry (",[54,293,294],{},"mta",", ",[54,297,298],{},"resend",", …) auf eine kanonische ",[54,301,302],{},"InboundEmailMessage",[33,304,305,310,313],{},[51,306,307],{},[54,308,309],{},"packages\u002Fui",[51,311,312],{},"Nuxt Layer",[51,314,315],{},"Gemeinsame UI-Primitive — Toast-Benachrichtigungen, Error Boundaries, automatisch importierte Composables",[33,317,318,323,325],{},[51,319,320],{},[54,321,322],{},"packages\u002Fplugin-kit",[51,324,227],{},[51,326,327,328,331],{},"Öffentliche Plugin-Verträge (npm) — ",[54,329,330],{},"definePlugin",", Capability-Konstanten, sämtliche Contribution-Interfaces",[33,333,334,339,341],{},[51,335,336],{},[54,337,338],{},"packages\u002Fplugin-host",[51,340,227],{},[51,342,343],{},"Privater Enforcement-Kernel für Plugins — Prüfung von Capabilities\u002FFlags, Reihenfolge, Gate-Ergebnisse, Policy für nicht vertrauenswürdigen Text; wird von Convex und Nuxt gemeinsam genutzt",[33,345,346,351,353],{},[51,347,348],{},[54,349,350],{},"packages\u002Fplugin-codegen",[51,352,227],{},[51,354,355],{},"Build-Werkzeug, dem der einzige Kompositionspunkt für gebündelte Plugins sowie die generierten Kataloge\u002FRegistries gehören",[33,357,358,363,365],{},[51,359,360],{},[54,361,362],{},"packages\u002Fplugin-cli",[51,364,152],{},[51,366,367,370,371],{},[54,368,369],{},"owlat-plugins"," — create\u002Fadd\u002Fremove\u002Fcodegen\u002Fdev über ",[54,372,373],{},"plugins.config.ts",[33,375,376,381,383],{},[51,377,378],{},[54,379,380],{},"packages\u002Fsdk-js",[51,382,227],{},[51,384,385],{},"JavaScript-SDK (npm) — Kontakte, transaktionale Sendungen, Events, Topics",[33,387,388,393,396],{},[51,389,390],{},[54,391,392],{},"packages\u002Fsdk-java",[51,394,395],{},"Java",[51,397,398],{},"Java-SDK (Maven) — dieselbe API-Oberfläche wie sdk-js für JVM-Konsumenten",[15,400,402],{"id":401},"wer-importiert-was","Wer importiert was",[404,405,406,434,450,461,475,483,495],"ul",{},[407,408,409,413,414,295,417,295,420,295,423,295,426,429,430,433],"li",{},[410,411,412],"strong",{},"web"," importiert ",[54,415,416],{},"email-builder",[54,418,419],{},"email-previewer",[54,421,422],{},"email-renderer",[54,424,425],{},"ui",[54,427,428],{},"shared"," sowie den generierten Convex-Client ",[54,431,432],{},"@owlat\u002Fapi"," (Echtzeit-Queries & -Mutations)",[407,435,436,413,439,295,441,295,444,447,448],{},[410,437,438],{},"api",[54,440,422],{},[54,442,443],{},"email-scanner",[54,445,446],{},"channels"," und ",[54,449,428],{},[407,451,452,447,455,458,459],{},[410,453,454],{},"docs",[410,456,457],{},"marketing"," importieren ",[54,460,425],{},[407,462,463,295,466,447,469,472,473],{},[410,464,465],{},"imap",[410,467,468],{},"mail-sync",[410,470,471],{},"code-worker"," sind eigenständige Node-Worker — sie sprechen über den Convex-Client mit ",[54,474,438],{},[407,476,477,479,480,482],{},[410,478,294],{}," ist eigenständig — es empfängt HTTP-Requests von ",[54,481,438],{}," und stellt Mail direkt zu",[407,484,485,447,488,491,492,494],{},[410,486,487],{},"sdk-js",[410,489,490],{},"sdk-java"," sind eigenständig — sie sprechen mit der öffentlichen REST-API, die ",[54,493,438],{}," bereitstellt",[407,496,497,500,501,295,504,295,507,295,509,447,511,513,514,516,517,447,519,513,521,523,524,527,528],{},[410,498,499],{},"plugin-kit"," wird von Plugin-Packages, ",[54,502,503],{},"plugin-host",[54,505,506],{},"plugin-codegen",[54,508,438],{},[54,510,412],{},[54,512,471],{}," importiert; ",[410,515,503],{}," wird von ",[54,518,438],{},[54,520,412],{},[410,522,506],{}," läuft ausschließlich zur Build-Zeit. Die gebündelten Plugin-Packages selbst sind ",[410,525,526],{},"ausschließlich"," aus generierten Kompositionsdateien erreichbar — siehe das Kapitel ",[529,530,532],"a",{"href":531},"\u002Fdeveloper\u002Fplugin-platform","Plugin-Plattform",{"title":534,"searchDepth":535,"depth":535,"links":536},"",2,[537,538,539,540],{"id":17,"depth":535,"text":18},{"id":24,"depth":535,"text":25},{"id":201,"depth":535,"text":202},{"id":401,"depth":535,"text":402},"Wofür jede App und jedes Package im Owlat-Monorepo zuständig ist.","md",{},true,"\u002Fdeveloper\u002Fscopes",{"title":6,"description":541},"3.developer\u002F3.scopes","r60y7oU2AI3NDPJNpZMePcTMQyfrP27qX0UMtCL1V2o",[550,554],{"title":551,"path":552,"stem":553,"children":-1},"UI-Lokalisierung — eine Sprache hinzufügen","\u002Fdeveloper\u002Fui-localization","3.developer\u002F23.ui-localization",{"title":555,"path":556,"stem":557,"children":-1},"Self-Hosting","\u002Fdeveloper\u002Fself-hosting","3.developer\u002F30.self-hosting",1786915107350]