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.
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.
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.
Across 4 maturity tiers
160 flags, every flag consumed
Access vs execution
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.