Architektur-Überblick
Systemarchitektur
Abschnitt betitelt „Systemarchitektur“Rebase ist eine Full-Stack-Plattform mit vier Schichten:
┌─────────────────────────────────────────────────────────────────┐│ Frontend Layer ││ Rebase CMS + Studio • Custom Views • Plugins • Your App ││ @rebasepro/app • @rebasepro/ui • @rebasepro/studio │└───────────────────────────┬─────────────────────────────────────┘ │ HTTP + WebSocket ▼┌─────────────────────────────────────────────────────────────────┐│ Backend Layer ││ Hono HTTP Server • REST API • Auth • Storage • WS ││ @rebasepro/server │└───────────────────────────┬─────────────────────────────────────┘ │ Drizzle ORM ▼┌─────────────────────────────────────────────────────────────────┐│ Database Layer ││ PostgreSQL • Tables • RLS Policies • Realtime sync │└─────────────────────────────────────────────────────────────────┘Hauptkomponenten
Abschnitt betitelt „Hauptkomponenten“Datenbank-Adapter-System
Abschnitt betitelt „Datenbank-Adapter-System“Das Backend initialisiert sich über ein einheitliches Datenbank-Adapter-Muster. Die datenbankspezifische Logik ist in ein eigenes Paket ausgelagert, und der Adapter übernimmt automatisch das Connection Pooling, die Schema-Auflösung und das Routing von Echtzeit-Ereignissen.
import { createPostgresAdapter } from "@rebasepro/server-postgres";
database: createPostgresAdapter({ connectionString: process.env.DATABASE_URL!})Collections werden über die interne Dependency-Injection-Registry automatisch anhand des konfigurierten Adapters aufgelöst.
Collection-Registry
Abschnitt betitelt „Collection-Registry“Die BackendCollectionRegistry ist der Laufzeitindex aller Collections, ihrer PostgreSQL-Tabellen, Enums und Drizzle-Relationen. Sie wird beim Start aus Ihren Collection-Definitionen befüllt.
Realtime-Service
Abschnitt betitelt „Realtime-Service“Die Echtzeitsynchronisierung nutzt den nativen LISTEN/NOTIFY-Mechanismus von PostgreSQL:
- Eine Datenmutation findet statt (Insert, Update, Delete)
- Das Backend sendet ein
NOTIFYauf einem Kanal - Der
RealtimeServiceempfängt die Benachrichtigung - Er überträgt die Änderung per Broadcast an alle verbundenen WebSocket-Clients
- React-Komponenten werden mit den neuen Daten neu gerendert
Geben Sie bei Multi-Instanz-Deployments (z. B. Cloud Run mit mehreren Replikaten) einen connectionString in Ihrem PostgresBootstrapper an, damit alle Replikate dieselbe LISTEN-Verbindung gemeinsam nutzen.
Storage-Registry
Abschnitt betitelt „Storage-Registry“Wie Treiber werden auch Storage-Backends in einer Registry registriert. Sie können mehrere Storage-Provider (lokal, S3) verwenden und verschiedene Dateifelder mithilfe von storageId an unterschiedliche Backends weiterleiten.
Paketübersicht
Abschnitt betitelt „Paketübersicht“| Paket | Rolle | Verwendet von |
|---|---|---|
@rebasepro/types |
TypeScript-Schnittstellen für Collections, Eigenschaften, Entitäten, Plugins | Alles |
@rebasepro/server |
Backend-Server-Initialisierung, REST-API, Auth, Storage, WebSocket | Backend |
@rebasepro/client |
Typisiertes SDK – HTTP-Transport, WebSocket, Auth | Frontend |
@rebasepro/app |
React-Framework – Scaffold, Controller, Formulare, Routen, Hooks | Frontend |
@rebasepro/ui |
Eigenständige UI-Komponentenbibliothek (Tailwind v4 + Radix) | Frontend |
@rebasepro/app |
Login-Ansichten, Auth-Controller-Hooks, Benutzerverwaltung | Frontend |
@rebasepro/studio |
Collection-Editor, SQL-Konsole, JS-Konsole, RLS-Editor, Storage-Browser | Frontend |
@rebasepro/cli |
CLI für Schemagenerierung, DB-Migrationen, SDK-Generierung | Dev-Tooling |
@rebasepro/forms |
Leichtgewichtiges React-Formular-Zustandsmanagement | Frontend |
@rebasepro/plugin-ai |
KI-gestütztes Plugin zur automatischen Feldvervollständigung | Frontend |
@rebasepro/plugin-data-import-export |
CSV/JSON/Excel-Import und -Export | Frontend |
@rebasepro/inference |
Leitet Collection-Properties aus Beispielzeilen ab (der Import „Collection aus einer Datei erstellen“ im Admin) | Frontend |
Datenfluss
Abschnitt betitelt „Datenfluss“Leseablauf
Abschnitt betitelt „Leseablauf“- Benutzer öffnet eine Collection im Rebase CMS
- Typisiertes SDK sendet
GET /api/data/:slug+ öffnet ein WebSocket-Abonnement - Backend fragt PostgreSQL über Drizzle ORM ab
- Daten-Transformer deserialisiert Datenbankdatensätze in das Entitätsformat
- Antwort wird an das Frontend gesendet, Komponenten rendern
- WebSocket hält die Ansicht in Echtzeit synchron
Schreibablauf
Abschnitt betitelt „Schreibablauf“- Benutzer bearbeitet eine Entität im Formular
beforeSave-Callbacks werden ausgeführt (Validierung, Transformation)- Typisiertes SDK sendet
PATCH /api/data/:slug/:id - Backend serialisiert Werte, führt Drizzle-
UPDATEaus afterSave-Callbacks werden ausgeführt (Nebeneffekte)NOTIFY-Broadcast löst ein WebSocket-Update an alle Clients aus- Wenn der Verlauf aktiviert ist, wird ein Snapshot aufgezeichnet
Nächste Schritte
Abschnitt betitelt „Nächste Schritte“- Schema as Code — Der TypeScript-First-Ansatz
- Backend Overview — Serverkonfiguration
- Collections — Definieren Sie Ihr Datenschema