Skip to content

Plugins ​

Plugins

Opt-in crates behind sova Cargo features. Start from a preset, then install only what you need.

bash
cargo add sova --features web   # HTML apps (cors, shield, session, csrf, static, templates, meta, …)
cargo add sova --features api   # JSON APIs (cors, session, openapi, …)
cargo add sova --features db,auth,mail

Each plugin page: what / when, features, overview, quick start, related links, example apps.

How pages are built: crate //! + optional plugin-guides / plugin-usage → sova-docs-gen.

Writing a new plugin? See the Plugin SDK guide (same generator, guides under plugin-sdk-guides/).

Catalog ​

PluginCategoryVersionSummaryFeatures
acmeHTTP0.1.1Let's Encrypt HTTP-01 certificates with TLS hot-reloadacme
activityOps0.1.2Audit / activity log (who changed what)activity
aiAPIs0.1.0AISDK language models (chat, tools, stream, fake)ai, ai-anthropic, ai-full, ai-google, ai-openai, ai-prompt
authAuth0.1.8Register/login, verify, reset, 2FA, profile, rolesauth, auth-activity, auth-mail, auth-vld
compressHTTP0.1.1gzip / deflate / brotli response compressioncompress
cookiesHTTP0.1.1Parse Cookie header into request-local Cookiescookies
corsHTTP0.1.1Cross-Origin Resource Sharing headerscors
csrfHTTP0.1.3Session double-submit CSRF (Laravel-style except/XSRF cookie)csrf
dbStorage0.1.6SeaORM pool, migrate CLI, optional seed CLIdb, db-mysql, db-sqlite
devtoolsOps0.1.10In-app debug bar (HTML inject, SSE timeline, request snapshots)devtools, devtools-acme, devtools-console, devtools-console-events, devtools-console-graphql, devtools-console-grpc, devtools-console-http-external, devtools-console-mail, devtools-console-rabbit, devtools-console-redis, devtools-console-session, devtools-console-store, devtools-console-tasks, devtools-csrf, devtools-fs, devtools-graphql, devtools-grpc, devtools-i18n, devtools-notifications, devtools-passport, devtools-rabbit, devtools-rate-limit, devtools-redis, devtools-store
envHTTP0.1.1Cascade .env loading for Sova apps (dotenvy)env
fsStorage0.1.0Local filesystem with jail root (async CRUD + walk)fs
graphqlAPIs0.1.2Outbound GraphQL client (+ optional schema mount)graphql, graphql-server
grpcAPIs0.1.2Connect-JSON unary RPC client (+ optional server)grpc
httpAPIs0.1.1Outbound HTTP client with SSRF guards and named configshttp-client
i18nContent0.1.2Locales, catalogs, optional path prefix and cookiei18n, i18n-cookie
idempotencyHTTP0.1.1Replay 2xx responses for Idempotency-Key on mutating methodsidempotency
mailContent0.1.2Outbound email via lettre (SMTP / fake / file)mail, mail-markdown, mail-templates
metaContent0.1.2Document meta, OG/Twitter, JSON-LD, and head injectmeta, meta-i18n, meta-openapi, meta-store, meta-templates
notificationsRealtime0.1.5DB inbox, channels with ACL, optional WS/mailnotifications, notifications-auth, notifications-mail, notifications-templates, notifications-ws
observabilityOps0.1.2HTTP metrics, OpenTelemetry, Elasticsearch log shippingobservability, observability-elasticsearch, observability-otel
openapiContent0.1.1OpenAPI 3.1 document + Scalar UI at mount pathopenapi
passportAuth0.1.3Users + access/refresh JWT + personal access tokenspassport, passport-jwt, passport-oauth, passport-session
quicRealtime0.1.2QUIC datagrams BackgroundService helpers for Sovaquic-udp
rabbitMessaging0.1.1Raw AMQP broker (publish/consume, DLQ, FakeBroker)rabbit
rate-limitHTTP0.1.3Per-key request rate limitingrate-limit
redisMessaging0.1.4Shared Redis/Valkey connection for KvStore, tasks, cache, pub/sub, list queuesredis
response-cacheHTTP0.1.1Cache GET 200 responses in KvStoreresponse-cache
scopeOther0.1.0Scoped RBAC: membership, role matrix, ownership hooksscope
sessionAuth0.1.5Cookie sessions backed by a SessionStoresession, session-redis, session-sql
shieldHTTP0.1.1Baseline security response headers (helmet-style)shield
sseRealtime0.1.1Server-Sent Events helpers for Sova (channels, Last-Event-ID, keep-alive)sse-feed
staticHTTP0.1.1Serve files from a directory under a mount pathstatic-files
storageStorage0.1.4Object storage (local / memory / S3 / GCS / Azure)storage, storage-azure, storage-gcs, storage-memory, storage-s3
storeStorage0.1.6KvStore trait + memory / file / sql / redis / redb backends for Sovastore, store-crypto, store-file, store-redb, store-redis, store-sql
tasksMessaging0.1.4Job worker, priorities, and optional cron/interval schedulertasks, tasks-redis, tasks-sql
tasks-storeMessaging0.1.4TaskStore trait + memory / file / sql / redis backendstasks-file, tasks-redis, tasks-sql, tasks-store
templatesContent0.1.1MiniJinja HTML templates with optional autoreloadtemplates
udpRealtime0.1.1UDP BackgroundService helpers for Sovaudp
vldAuth0.1.4Request validation hooks and coverage checkvld, vld-flash, vld-flash-templates, vld-form, vld-i18n, vld-openapi
wsRealtime0.1.1WebSocket hub, origin allowlist, max message sizews
cliTooling0.1.2CLI ServerArgs / listen_args for Sova (local dev)—

Stack notes ​

Auth (Fortify) ​

Needs db + session. Add mail only for EmailVerification / ResetPasswords (auth-mail).

rust
app.install(Db::from_env().migrations::<AuthMigrator>());
app.install(memory_sessions()); // or SessionLayer::from_store(...)
app.install(Mail::from_env()); // when ResetPasswords / EmailVerification
app.install(
  Fortify::new()
    .features([AuthFeature::Registration, AuthFeature::ResetPasswords])
    .home("/cabinet"),
);
cabinet.use_middleware(Fortify::guard());

auth-activity → activity log. Full page: auth.

Passport (JWT / PAT / OAuth) ​

KindStorageUse
JWT accesssigned, short TTLbrowsers
Refreshauth_refresh_tokensrotate access
PAT (svpat_…)auth_api_tokensmachine / CI

JwtAuth::guard accepts Bearer JWT or PAT. OAuth: GitHub / Google / Apple / Custom ({NAME}_CLIENT_ID / _CLIENT_SECRET). → passport.

Tasks ​

Same handlers for Dispatch, CLI, and HTTP enqueue. Load sova.toml before install(Tasks…) so [schedule.*] applies.

toml
[schedule.ping]
every = "15s"

[schedule.mail_digest]
cron = "0 */5 * * * *"
queue = "mailer"
priority = -100

Toml overrides code .cron() / .every() per job name (cron or every). CLI: tasks list | schedule | run NAME [--json]. Dispatch: req.try_state::<TaskBackend>() + Dispatch::new(...). → examples/misc/tasks, tasks.

Database ​

DATABASE_URL or [db] url (env wins when set). CLI: migrate / seed (cargo sovax db …). SQL KV/queue backends reuse DbPool. → db.