Architecture Overview - osama1998H/Moca GitHub Wiki
Architecture Overview
System diagram, five binaries, project layout, and request lifecycle.
System Architecture
Moca runs as a cluster of five stateless processes behind a reverse proxy (Caddy/NGINX):
βββββββββββββββββββ
β Reverse Proxy β
β (Caddy/NGINX) β
ββββββββββ¬βββββββββ
β
ββββββββββββββββΌβββββββββββββββ
β β β
ββββββββ΄βββββββ ββββββ΄βββββ ββββββββ΄βββββββ
β moca-server β β moca- β β moca-server β
β (HTTP/WS) β β server β β (HTTP/WS) β
ββββββββ¬ββββββββ ββββββ¬βββββ ββββββββ¬βββββββ
β β β
βββββββββββ΄βββββββββββββββ΄βββββββββββββββ΄ββββββββββ
β PostgreSQL 16+ β
β (schema-per-tenant isolation) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Redis 7+ β
β (DB 0: cache, DB 1: queue, DB 2: sessions, β
β DB 3: pub/sub) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Meilisearch v1.12 β
β (tenant-prefixed indexes) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β
ββββββββ΄βββββββ ββββββ΄ββββββ βββββββ΄ββββββββ
β moca-worker β β moca- β β moca-outbox β
β (job consumer)β βscheduler β β (DBβKafka) β
ββββββββββββββββ ββββββββββββ βββββββββββββββ
Five Binaries
| Binary | Scaling | Purpose |
|---|---|---|
moca-server |
Horizontal | HTTP + WebSocket API, serves Desk static assets |
moca-worker |
Horizontal | Redis Streams job consumer with DLQ |
moca-scheduler |
Single leader | Cron job trigger (Redis distributed lock) |
moca-outbox |
Single leader | Transactional outbox poller (DB events to Kafka/Redis) |
moca |
CLI | Project init, site management, development, operations |
In development mode, moca serve runs server + worker + scheduler in-process.
Project Layout
cmd/ # Binary entry points
moca/ # CLI (152+ commands via Cobra)
moca-server/ # HTTP + WebSocket server
moca-worker/ # Background job consumer
moca-scheduler/ # Cron scheduler
moca-outbox/ # Transactional outbox poller
pkg/ # Public framework packages
meta/ # MetaType registry, schema compiler
document/ # Document runtime, lifecycle engine
orm/ # PostgreSQL adapter, query builder
api/ # REST API gateway, middleware
auth/ # Authentication, permissions
hooks/ # Hook registry, event dispatcher
apps/ # App manifest, loader, installer
tenancy/ # Multitenancy, site manager
queue/ # Redis Streams jobs
events/ # Event emitter, outbox
search/ # Meilisearch indexer
observe/ # Logging, health checks, metrics
backup/ # Backup utilities
cli/ # CLI command registry
internal/ # Private implementation
config/ # YAML config parser
drivers/ # Redis client factory
context/ # CLI context resolver
output/ # CLI output formatters
process/ # Goroutine supervisor
serve/ # HTTP server composition
scaffold/ # Project scaffolding templates
pkg/builtin/core/ # Builtin framework core doctypes (User, Role, DocType, etc.)
desk/ # React 19 frontend (TypeScript, Vite, TailwindCSS)
Request Lifecycle
- Request arrives at reverse proxy
- Routed to
moca-serverinstance - Middleware chain: Request ID -> CORS -> Rate Limit -> Auth -> Site Resolution
- Site resolver determines tenant from subdomain/header/path
- Per-tenant connection pool sets PostgreSQL
search_path - API handler executes document CRUD via Document Runtime
- Document lifecycle hooks fire (BeforeInsert, Validate, AfterSave, etc.)
- Events published via transactional outbox (same DB transaction)
- Response returned to client