Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Cargo feature matrix

Important

Dependency examples use 12.0.0-rc.1, the planned first v12 RC. Do not request it from crates.io before it is published; use path dependencies from this source checkout during development.

This page is the public feature contract for the 16 packages in the Rullst release train. The package manifests remain the machine-readable source of truth. The matrix explains the behavior those names select in v12 and makes the default build visible before an application adopts optional integrations.

Cargo features are additive across a dependency graph. An application can disable a package’s defaults at the dependency edge, but it cannot disable a feature enabled by another dependency. Inspect the final selection with:

cargo tree -e features

The release gates compile every package with no default features, every public umbrella feature in isolation, representative domain-package boundaries, and the complete workspace with all features. The isolated umbrella list is checked automatically against rullst/Cargo.toml, so a newly added public feature cannot silently escape the matrix. See check-feature-boundaries.sh for the exact individual checks.

Umbrella crate: rullst

The default rullst dependency enables orm and queue-sqlite. Applications that only need the HTTP runtime can opt out:

[dependencies]
rullst = { version = "12.0.0-rc.1", default-features = false }
FeatureDefaultEnables
ormyesrullst-orm and Core’s ORM integration
orm-mongodbnoorm plus the MongoDB document adapter
orm-duckdbnoorm plus the in-process DuckDB analytics adapter
orm-tursonoorm plus typed Turso-primary CRUD/query, parameterized remote libSQL SQL over Hrana HTTP v3, transactions, reversible checked migrations, and a persistent offline fallback
orm-surrealdbnoorm plus SurrealDB HTTP document and bounded graph adapters
orm-scoutnoorm plus bounded Meilisearch, Elasticsearch and Algolia Scout HTTP adapters
orm-pgvectornoorm plus typed pgvector SQLx values; use with strict-postgres for the supported live query contract
orm-qdrantnoorm plus bounded dense-vector Qdrant HTTP operations and offline fallback
orm-redisnoorm plus namespaced Redis Hash, Set and Sorted Set operations
orm-polyglotnoConvenience feature enabling MongoDB, DuckDB, Turso, SurrealDB and Qdrant adapters
queue-sqliteyesCore’s durable SQLite queue backend
nexusnoThe generated Nexus administration interface
studionoStudio plus Core’s Studio integration marker
authnoAuthentication, sessions, passkeys, and RBAC helpers from rullst-auth
auth-jwtnoauth plus the strict application-issued JWT policy
auth-sqlitenoauth-jwt plus bounded shared SQLite JWT revocation and passkey device lifecycle state
mailnorullst-mail with HTTP/offline transports and no SMTP dependency
mail-sqlitenomail plus bounded shared-local SQLite recipient suppression and provider-event replay evidence
mail-smtpnomail plus the optional SMTP transport
mail-aws-sesnomail plus native SES v2 delivery signed by the official AWS SDK
messagingnoNative bounded broker-neutral messaging contracts and the deterministic process-local broker
messaging-sqlitenomessaging plus fixed-schema durable local SQLite publication, lease, retry/DLQ, ACK and idempotency state
messaging-orm-outboxnomessaging and orm plus the static relational outbox-to-broker relay; the publish/ACK crash window remains at-least-once
mailernoCompatibility alias for mail-smtp; prefer mail-smtp in new manifests
queue-redisnoRedis dependency and Core’s Redis queue backend
cache-redisnoRedis dependency and Core’s Redis cache backend
redisnoConvenience alias enabling queue-redis, cache-redis and orm-redis
offline-syncnoNative bounded offline queue, explicit conflict state machine, account-bound encrypted snapshots, and static-dispatch push/pull orchestration; platform storage and concrete transport remain application responsibilities
oauthnoOAuth2/OIDC providers from rullst-connect
oauth-sqlitenooauth plus bounded encrypted shared-local token-generation state with exact SQLite compare-and-swap
ainoProvider-agnostic AI clients and local safeguards from rullst-ai
ai-sql-memorynoai plus tenant-aware durable chat memory for SQLite, PostgreSQL, MySQL, and MariaDB
capitalnoPayment, payout, analytics, DPS builder, and offline fiscal APIs from rullst-capital
capital-actixnocapital plus the Actix Web adapter for the canonical signed-webhook verifier
capital-quota-sqlnocapital and orm plus atomic shared resource quotas for SQLite, PostgreSQL, MySQL, and MariaDB
capital-webhook-sqlnocapital and orm plus bounded durable webhook replay/event claims for SQLite, PostgreSQL, MySQL, and MariaDB
capital-nfsenocapital plus checksum-pinned official XSD validation, PKCS#12 XMLDSig, signed-environment protocol binding, authenticated local command journal, and rustls mTLS preparation
capital-pdfnocapital plus bounded validated native invoice PDF rendering
capital-mailnocapital-pdf plus Mail’s payment-bound HTML/PDF attachment delivery bridge
securitynoRASP/WAF and application-security primitives from rullst-security
security-redisnosecurity plus the atomic Redis rate limiter
iotnoIoT models, frame helpers, and signed OTA verification from rullst-iot
telemetrynoOpenTelemetry dependencies and Core’s OTLP integration
strict-postgresnoorm with the concrete PostgreSQL pool/backend selected
strict-mysqlnoorm with the concrete MySQL pool/backend selected when PostgreSQL is not also selected
strict-sqlitenoorm with the concrete SQLite pool/backend selected when PostgreSQL and MySQL are not also selected

The three strict-* backend features are supported as single selections. Feature unification can activate more than one; the current deterministic precedence is PostgreSQL, then MySQL, then SQLite. Do not depend on that precedence as backend negotiation. Select one strict backend in an application, or select none to use SQLx Any.

Shared-local SQLite composition profile

A bounded single-host application may compose the following umbrella features over one file-backed SQLite URL:

[dependencies]
rullst = { version = "12.0.0-rc.1", default-features = false, features = [
  "auth-sqlite",
  "capital-quota-sql",
  "mail-sqlite",
  "messaging-sqlite",
  "oauth-sqlite",
  "queue-sqlite",
] }

The stores use distinct fixed table namespaces. Initialize/check them sequentially, keep application readiness false until every required component is healthy, and reuse exactly the same URL, quotas, namespaces, and keys after restart. Close every handle before file-level backup or restore. The dedicated facade_recovery test proves restart, idempotency, encrypted-secret plaintext absence, queue recovery, aggregate readiness, and isolated fail-closed corruption for this exact profile.

Sharing the file is not a cross-domain transaction or a multi-host design. The host still owns permissions, encryption-key custody, a consistent whole-file backup procedure, recovery drills, contention policy, and domain authorization. Prefer separate databases when failure isolation or write throughput is more important than simple local operation.

Runtime and data crates

rullst-core

Default features: none.

FeatureEnables
ormOptional rullst-orm and SQLx support, including Artisan and database-backed feature flags
queue-sqliteSQLx-backed durable SQLite queues without enabling the full ORM facade
queue-redisRedis-backed queues
cache-redisRedis-backed cache storage
redisConvenience alias for both Redis queue and cache backends
offline-syncNative bounded offline state, AES-256-GCM snapshots, and timeout/budget/cursor-checked transport orchestration; excludes platform storage and a concrete authenticated transport
studioIntegration marker used by the umbrella Studio boundary; it adds no dependency by itself
telemetryOpenTelemetry tracing and OTLP export dependencies
strict-postgresorm plus the ORM PostgreSQL backend selection
strict-mysqlorm plus the ORM MySQL backend selection
strict-sqliteorm plus the ORM SQLite backend selection

Core’s process-local Radar and span collector do not require telemetry. That feature is specifically for OpenTelemetry/OTLP integration. The rullst.client v1 codec and bounded #[server_function] transport are available without a feature flag; only the explicit generated route exists on native targets, while the same annotated function becomes its Wasm caller. Identity, authorization and tenant policy remain application layers.

rullst-orm

Default features: none. With no strict-* feature, public pool and database aliases use SQLx Any.

FeatureEnables
redisRedis query cache plus bounded namespaced Hash, Set and Sorted Set datastore operations
mongodbOfficial MongoDB driver plus typed document CRUD, identifier inventory, encrypted recovery participation and offline fallback
duckdbBundled DuckDB client plus parameterized, bounded analytics queries
tursoDirect official Hrana HTTP v3 transport, typed primary CRUD/query facade, parameterized SQL, atomic batches, reversible checksummed migrations, and a persistent SQLite-compatible offline fallback
surrealdbSurrealDB HTTP document CRUD, identifier inventory, encrypted recovery participation and bounded read-only ISO GQL; no embedded SDK
scout-httpBounded Meilisearch, Elasticsearch and Algolia adapters with deterministic offline fallbacks; Meilisearch also has a live container contract
pgvectorTyped pgvector SQLx values and parameterized L2/cosine/inner-product helpers; the live contract also selects strict-postgres
qdrantBounded dense-vector collection/upsert/delete/cosine query operations over HTTP with offline fallback
polyglotConvenience feature enabling mongodb, duckdb, turso, surrealdb, and qdrant
strict-postgresConcrete PostgreSQL pool, database, query-result, and query paths
strict-mysqlConcrete MySQL paths when PostgreSQL is not also selected
strict-sqliteConcrete SQLite paths when PostgreSQL and MySQL are not also selected

The strict backend selection rules and precedence are the same as the umbrella crate. SQLx drivers remain implementation dependencies; strict-* selects concrete public types and query paths rather than acting as a driver download switch.

The Polyglot features expose capability-specific APIs under rullst_orm::polyglot; they do not participate in a shared cross-backend transaction. The base deterministic document store and the MongoDB/SurrealDB adapters implement DocumentInventory for an application-operated bounded snapshot/restore contract; it does not supply online isolation or managed backup. Turso can additionally be selected explicitly by #[orm(backend = "turso")] and the blank/API scaffold. See the Polyglot Persistence guide.

rullst-orm-macros

Default features: none. #[derive(Orm)] uses a fail-closed structured parser: unknown/duplicate options, missing persisted targets, conflicting relations, unsafe identifiers, and SQLx mappings that generated persistence cannot honor are compile errors. The exact derive grammar and its raw soft-delete-expression boundary are defined in the packaged crate README and the SST.

FeatureEnables
strict-postgresCompatibility marker matching the ORM backend vocabulary; no macro expansion changes in v12
strict-mysqlCompatibility marker matching the ORM backend vocabulary; no macro expansion changes in v12
strict-sqliteCompatibility marker matching the ORM backend vocabulary; no macro expansion changes in v12

rullst-connect

Default features: none. Provider clients and framework-independent OAuth/OIDC types remain available without a web-framework adapter.

FeatureEnables
axumAxum callback extractors and the local mock IdP router
actixActix Web callback extractors
leptosFramework-independent callback extractor module for Leptos integration; no Leptos runtime dependency
rullstConvenience integration boundary that enables axum
retryRetry-aware HTTP client behavior using reqwest-middleware and reqwest-retry
reqwest-middlewareThe optional middleware dependency alone; prefer retry for retry behavior
axum-sessionAxum plus a ten-minute, one-active-challenge tower-sessions state/PKCE/OIDC-nonce transaction and callback extractor
sqliteFile-backed shared-local encrypted token snapshots with persisted quota, restart recovery and exact generation compare-and-swap; remote refresh leases, key custody and multi-host operation remain application concerns
mockDeterministic offline provider modules outside test builds

rullst-messaging

Default features: none. The deterministic process-local broker, versioned envelope, idempotency, consumer groups, leases, retry, dead-letter, and purge contracts are available without optional dependencies. Remote broker adapters are not implemented and therefore are not represented by placeholder features.

FeatureEnables
sqliteFixed-schema durable local broker with serialized SQLite writes and immutable plaintext or explicit AES-256-GCM content profiles; restart/corruption/rotation/tamper/two-instance evidence is local, while metadata visibility, key custody and remote replication/failover remain explicit boundaries
orm-outboxStatic bridge from the relational rullst-orm outbox to one configured broker topic, with exact replay after the publish-before-ACK crash window; worker operations and remote atomicity remain application boundaries

rullst-iot

Default feature: std.

FeatureEnables
stdStandard-library support in serialization and Ed25519 dependencies; disabling it makes the crate no_std + alloc
experimental-simulatorsDeterministic MQTT formatting, HSM, and PQC fixtures; not live transports, hardware-backed keys, or production PQC

rullst-capital

Default feature: axum.

FeatureEnables
axumAxum middleware for the canonical bounded signed-webhook verifier
actixActix Web middleware for the same verifier; it does not enable Axum when selected directly
quota-sqlDurable idempotent shared quota accounting over SQLite, PostgreSQL, MySQL, and MariaDB; schema setup/migrations and authoritative membership/tier state remain application-owned
webhook-sqlBounded durable provider-scoped payload/event claims over SQLite, PostgreSQL, MySQL, and MariaDB, including a caller-owned transaction path; cross-system effects and reconciliation remain application-owned
nfseChecksum-pinned official XSD validation, PKCS#12 RSA-SHA256 XMLDSig, signed-tpAmb binding, deterministic GZip/Base64 issuance JSON, bounded signed-authorization/rejection parsing, a HMAC-chained single-writer local command journal, and rustls mTLS preparation; it does not enable live SEFIN transmission, provide a distributed outbox/retry engine, or establish certificate trust/homologation
invoice-pdfBounded paginated A4 invoice PDF with embedded WinAnsi or a validated caller-supplied TTF/OTF; payment/mail orchestration is separate

rullst-mail

Default features: none. HTTP mail providers remain available without SMTP.

FeatureEnables
mail-smtpLettre-based SMTP transport
aws-sesOfficial AWS SES v2 SDK, regional SigV4, temporary/rotating credential providers and native attachments/CID; AWS account readiness and inbox delivery remain external
capital-invoiceCapital’s native invoice PDF plus the final-payment-bound delivery bridge; durable outbox claiming remains application-owned
sqliteFile-backed shared-local suppression state with exact provider-event replay binding and immutable quotas; webhook authentication, encryption and multi-host replication remain application-owned

rullst-auth

Default features: none.

FeatureEnables
oauthOptional rullst-connect OAuth2/OIDC integration and re-exports
jwtApplication-issued JWT claims, key rotation, and revocation-store policy
sqlitejwt plus bounded file-backed shared JWT revocation and passkey device lifecycle state

The umbrella crate exposes these as auth-jwt and auth-sqlite; both enable auth, while auth-sqlite also enables auth-jwt.

rullst-security

Default features: none.

FeatureEnables
redis-rate-limitAtomic namespaced Redis fixed-window limiter plus its explicit offline mock mode; CI/release run the independent-client contract against a digest-pinned Redis service

The umbrella crate exposes this as security-redis, which also enables security.

Dashboard crates

rullst-nexus and rullst-studio both have no default features and expose the same database selection boundary:

CrateFeatureEnables
rullst-nexusstrict-postgresPostgreSQL selection in Core and ORM
rullst-nexusstrict-mysqlMySQL selection in Core and ORM
rullst-nexusstrict-sqliteSQLite selection in Core and ORM
rullst-studiostrict-postgresPostgreSQL selection in Core and ORM
rullst-studiostrict-mysqlMySQL selection in Core and ORM
rullst-studiostrict-sqliteSQLite selection in Core and ORM

Use the same single-selection rule described for rullst-orm.

Packages without optional features

These packages have no public optional Cargo features in v12:

PackageAlways-available scope
rullst-macrosCore procedural macros
rullst-aiProvider clients, prompt inspection, and PII masking
cargo-rullstCLI commands, generators, auditing, and deployment helpers

No optional feature does not mean that a provider is contacted automatically. External integrations still require explicit runtime configuration and use the documented deterministic offline behavior for empty or mock_* credentials.

Selection recipes

Minimal HTTP runtime:

rullst = { version = "12.0.0-rc.1", default-features = false }

SQLite application using the release default:

rullst = "12.0.0-rc.1"

PostgreSQL application with explicit domain integrations:

rullst = {
    version = "12.0.0-rc.1",
    default-features = false,
    features = ["strict-postgres", "auth", "security", "telemetry"]
}

Embedded IoT model without the standard library:

rullst-iot = { version = "12.0.0-rc.1", default-features = false }

Experimental IoT fixtures are deliberately separate:

rullst-iot = {
    version = "12.0.0-rc.1",
    default-features = false,
    features = ["experimental-simulators"]
}