Skip to content

Plugin Catalog

Vyuh Server ships with a curated set of plugins covering the cross-cutting concerns every server needs. Each plugin owns one singleton role (or contributes into a chain), and each is independently optional — pull exactly what your service needs.

Database (relational, OLTP)

Backs vyuh.db. At most one per server.

PluginRoleNotes
PostgresDbPluginDbPluginProduction Postgres via the official postgres driver. Transactions, DDL batching, LISTEN/NOTIFY

Storage (files, blobs)

Backs vyuh.storage. At most one per server. Optional — omit if your service has no file storage needs.

PluginRoleNotes
SupabaseStoragePluginStoragePluginBucket+path file ops — upload, download, delete, move, copy, list, signed URLs — backed by Supabase Storage

Auth

Both auth plugins can coexist — strategies concatenate into one chain.

PluginStrategyNotes
JwtAuthPluginBearer-token JWTCallback-based verifier — bring your own JWT library
ApiKeyAuthPluginX-API-Key header or ?api_key= queryLookup callback resolves keys against any backing store

Telemetry

Exactly one telemetry plugin per server. Swap by environment.

PluginSinkNotes
ConsoleTelemetryPluginIOSink (stdout)JSON-line dev/test sink
OtelTelemetryPluginOpenTelemetry SDKProduction tracing, configures from OTEL_* env vars

Filters

PluginCompilerNotes
PostgresQueryPluginPostgresQueryCompilerCompiles cdx_query JSON AST into parameterized Postgres WHERE clauses

Capability Plugins

These don't claim a singleton role — they claim a descriptor type and emit infrastructure routes from it.

PluginClaimsNotes
EntityCrudPluginEntityCrudDescriptor<T>The standard list/get/create/update/delete/count/grouped/schema/saved-view/versioning/drafts/relationship route table
RealtimePluginRealtimeChannelDescriptorMounts authenticated SSE at /live, diagnostics at /live/status, and fans source events to subscribed clients
OpenApiPluginn/aAuto-generates /openapi.json from the live router; mounts /docs (Scalar or Swagger UI)

Writing Your Own

The framework's plugin model is the same one the shipped plugins use. See Writing a Plugin for a complete walkthrough of building a custom RateLimiterPlugin from scratch.