Skip to content

Feature reference

Dwara has two editions: OSS (the default build) and Enterprise (built with --features ent). Every dataplane capability is compiled into the OSS build — there are no optional capabilities to enable. This page is the complete reference for what each edition includes, build commands, and feature maturity.

For the high-level OSS vs Enterprise comparison, see Editions. For the license verification mechanics, see Enterprise licensing.

How features are gated

There are two layers of gating:

  1. Compile time. The ent cargo feature compiles in the enterprise modules (dwara-controller, dwara-edge, workspaces, the Redis/Vault extensions, the license verifier, FIPS enforcement). OSS builds do not contain this code at all. Every other capability — H3, L4, OTLP, WASM, CEL, Cedar, GraphQL, gRPC-Web, protocol translation, semantic cache, plugins, PQ, etc. — is compiled into the default OSS build.

  2. Runtime license gate (LicenseGate). When ent is compiled in, the gateway verifies a signed license file at startup and checks feature claims before activating enterprise features. A missing license, an expired license past the grace period, or a missing claim leaves the feature inert.

The result is a single degradation story: an expired license degrades to the OSS feature set, and the dwara_license_status metric reports the state.

Build commands

OSS (default)

sh
cargo build --release

Every dataplane capability is included. This is the published OSS binary.

Enterprise

sh
# Enterprise build (license required at runtime)
cargo build --release --features ent

Diagnostics

sh
# tokio-console diagnostics server (development)
DWARA_CONSOLE=1 cargo run -- -p dwara-bin --config config.yaml

Loom (concurrency model checking, test-only)

sh
cargo test -p dwara-core --features loom --test loom

Enterprise-only features

These require the ent cargo feature at build time AND a valid license with the matching claim at runtime. Without ent, the code is not compiled in. With ent but no license (or an expired license past grace), the config is accepted but the feature is inert.

FeatureWhat it addsLicense claim
entEnterprise edition: license verification, Redis rate limiter/cache/convergence, CP/DP gRPC, workspaces, Vault/KMS, federated analytics, AI credential pools(enables the license gate itself)
FIPS 140-3 modeaws-lc-rs FIPS provider enforcement, self-test, restricted cipher suites, primitive allowlistfips claim required
Service meshSidecar controller + SPIFFE/SPIRE mTLS identitymesh claim; validation warns when configured without ent

The ent feature pulls in these enterprise-only modules (all #[cfg(feature = "ent")]):

ModulePurpose
extensions::redis_rate_limiterDistributed Redis-backed GCRA rate limiter
extensions::redis_cacheRedis-backed distributed response cache
extensions::config_convergenceConfig convergence backend (Redis)
extensions::vault_secretsHashiCorp Vault and KMS secret resolution
extensions::licensingEd25519 license file verification + LicenseGate
workspaceMulti-tenant config partitioning + RBAC + audit
cp_dpControl plane / data plane split (controller + edge)
dataplane::convergenceRuntime convergence coordinator

Enterprise-only config blocks

These config fields are present in the schema in both OSS and Enterprise builds (so configs round-trip), but require ent + a valid license to activate. In an OSS build they are accepted and inert, with two exceptions noted below.

Config pathWhat it controlsOSS behavior
gateway.licenseSigned license file path + grace periodAccepted, ignored
gateway.redis_rate_limiterDistributed Redis rate limiterAccepted, inert
gateway.config_convergenceShared config convergence (Redis)Accepted, inert
gateway.fleetVersion-skew policy for CP/DP fleetAccepted, inert
gateway.meshService mesh sidecar + SPIFFE mTLSAccepted, validation warns
ai.providers[].credential_poolMulti-key AI provider credential rotationValidation rejects
upstreams[].localityLocality-aware routing / data residencyAccepted, inert

Validation behavior in OSS builds

Two enterprise config blocks are explicitly rejected or warned in OSS builds (the rest are silently accepted and inert):

  • ai.providers[].credential_pool -- validation emits an error: "credential pools require the enterprise edition (build with --features ent)". The config is rejected at publish time.
  • gateway.mesh -- validation emits a warning: "the mesh block is configured but the ent cargo feature is not compiled in". The config is accepted but the mesh is inert.

All other enterprise config blocks parse and validate normally in OSS builds. This lets operators stage enterprise configs before obtaining a license.

Runtime license claims

When built with ent, the LicenseGate checks feature claims from the signed license file before activating enterprise features:

Claim stringFeature activated
redis_rate_limiterDistributed Redis rate limiter
config_convergenceConfig convergence across instances
fipsFIPS 140-3 mode enforcement

If a claim is missing, the feature logs a *_not_licensed warning and falls back to OSS behavior. The gateway never crashes on a missing claim.

The FIPS claim has an additional rule: if the license claims fips but the binary was not built with the ent cargo feature, the gateway refuses to start (exit 1). This prevents an operator from accidentally running a non-FIPS binary in an environment that expects FIPS compliance.

Incompatible feature combinations

CombinationStatus
FIPS + PQIncompatible. FIPS mode restricts cipher suites to FIPS-approved primitives; post-quantum hybrid key exchange (ML-KEM) is not FIPS-approved. Do not combine.

Feature maturity

Some capabilities ship as library-complete components with their gateway wiring still landing. Each capability's guide page carries a status note saying exactly what is wired today.

StatusCapabilities
Wired end to endOTLP export, console diagnostics, Kubernetes Gateway API, proxy-wasm host, native filter chain, CEL expressions, Cedar policies, OpenAPI validation, API aggregation, HTTP/3, gRPC-Web, protocol translation, semantic cache, nano-services, post-quantum TLS
Config-accepted, runtime partially wiredL4 TCP/UDP proxying, GraphQL awareness, API lifecycle, A2A protocol, certificate pinning, SOAP translation
Config-accepted, runtime stubbedMCP gateway, service mesh, Extism PDK, signed URL auth, ACME automation