Production
The engine ships with the moving parts a production team would otherwise build — query interception, observability, tenant isolation, ranked search, typed wrappers for the four Postgres extensions Zanith treats as first-class.
What lives here
| Page | Covers |
|---|---|
| [Plugins](/docs/production/plugins) | ZanithPlugin, the three hooks, registration, the interception model. |
| [Observability](/docs/production/observability) | consoleLogger, slowQueryLogger, structuredLogger, openTelemetryPlugin. |
| [Multi-tenancy](/docs/production/multi-tenancy) | rowLevelTenancy, schemaBasedTenancy, databaseBasedTenancy — pick by isolation needs. |
| [Search](/docs/production/search) | search() for ranked text + trigram + vector. tsvectorSetupSql for the column and trigger. facets for filter UIs. |
| [Postgres extensions](/docs/production/extensions) | Typed helpers for pgvector, pg_trgm, pgcrypto, pg_cron. |
Everything is built on the same surface
The four observability plugins, the three tenancy strategies, and any plugin you author all use the same three hooks: onQuery, onResult, onError. There's no privileged interface — start with Plugins if you want the model.