Capability surfaces

Seven providers. One product entity model.

PostgreSQL, SQL Server, MySQL — relational core. MongoDB — document with native time-series. Redis — key-value, with cluster mode opt-in. Neo4j — graph with real session-spanning transactions. Cassandra — wide-column with LWT, opt-in via the preview tier. Each declares its DbCapabilities; Vadyl branches per-feature so your product model stays stable; nothing degrades silently.

Four maturity tiers

Honest signaling. No surprise downgrades.

CoreProduction

PostgreSQL, SQL Server, MongoDB. Production-hardened. Native row-level security where supported. Native vector and time-series augmentations on Postgres / Mongo respectively.

ProductionWithConstraints

MySQL, Redis, Neo4j. Production-ready with declared constraints — MySQL has no transactional DDL or native RETURNING; Neo4j has no XA / 2PC and uses saga compensation; Redis cluster is opt-in. Constraints visible in DbCapabilities.

Preview

Cassandra. Opt-in via Vadyl:AllowPreviewProviders=true. CQL with LWT (IF NOT EXISTS / IF col = value). Compensation-only transactions — distributed atomicity through Vadyl's saga, not 2PC.

Experimental

Currently empty. Reserved for in-development providers. Configurations.RequiredMaturityTier gates which tiers a deployment will accept.

Access plane vs execution plane

Two distinct surfaces. One product model.

Execution plane

Where queries and mutations run. The provider compiles AST to native SQL / aggregation pipeline / CQL / Cypher / Redis commands. Reads, writes, schema, transactions all funnel through here.

Access plane

Direct connectors (DirectSqlServer, DirectPostgreSql, DirectMySql, DirectMongoDb, DirectRedis, DirectNeo4j, DirectCassandra) plus AmazonRdsDatabaseConnector. Validate, capabilities, access, describe, health, drift.

Stable pool identity

IProviderConnectionMaterializer (Constant / Rotating). Pool identity survives secret rotation and IAM-token refresh — no pool churn on credential lifecycle.

Strict separation

Access connectors don't implement IDatabaseProvider. They don't reference execution-plane provider families. Health probes use the native driver libraries directly — never instantiate execution providers.

Capability-driven

Every provider declares 27 capability categories with 160 flags. Every flag has an enforcement point. Vadyl never falls back to a weaker mode silently — capability mismatches fail closed.

Cross-provider semantics

Same product entity model works across every provider. Capability gaps are filled at runtime where possible, compensated through saga where distributed atomicity demands it, fail-closed where impossible.

7
Providers

Across 4 maturity tiers

27
Capability categories

160 flags, every flag consumed

Strict
Plane separation

Access vs execution

Stable
Pool identity

Survives secret rotation

Pick a provider. Or many.

Vadyl can route different entities to different providers in the same project. Same product model, different physics. Capability-driven planning across the whole DAG.