Compatibility matrix
Precise, evidence-based compatibility with Mojito, Behave, and Databricks workload surfaces.
Fabric does not use “full parity” as a blanket claim. Compatibility is tracked by observable behavior and independently verifiable evidence.
Status vocabulary
- Shipped — implemented, covered by automated tests, and available in a published artifact.
- Live-gated — shipped and exercised against configured infrastructure; evidence is produced on each run.
- Certifying — the target and automated gate are configured, but the required observation window is incomplete.
- Different by design — the user outcome is available through a different API or execution model.
- Not supported — users must retain another tool or add an adapter.
Mojito compatibility
| Capability | Fabric status | Fabric surface | Migration note |
|---|---|---|---|
| Deterministic bucketing and weighted variants | Shipped | Web/Node SDK, assignment vectors | Frozen cross-SDK vectors protect assignment stability. |
| Sticky assignment | Shipped | Cookie, localStorage, server storage adapters | Storage is pluggable. |
| DOM recipes, shared CSS/JS, triggers, holdback, divert, manual exposure | Shipped | YAML, tag loader, SDK | Importer maps supported Mojito wave fields and reports non-portable fields. |
| URL previews | Different by design | Signed, expiring EdDSA preview token | Unsigned mojito_* overrides are intentionally not accepted. |
| Exposure and conversion delivery | Shipped | Browser/Node SDK → Cloudflare Queue/R2 | Tenant-scoped, batched, retry-safe ingestion. |
| Self-hosted/static delivery | Shipped | fx publish --static, CDN worker | Cloudflare is the managed edge target. |
| Project/property/feature/environment hierarchy | Shipped | API and Studio | Immutable publications and governed promotion add an explicit environment boundary. |
| Experiment authoring and lifecycle UI | Shipped | Studio | Draft → review → approved → running → paused/killed, with audit history. |
| Frequentist rate/lift, intervals, p-values, SRM | Shipped | Studio and stats package | Results use first-exposure attribution. |
| Bayesian probability and credible intervals | Shipped | Studio and stats package | Beta-binomial with documented Beta(1,1) prior. |
| CUPED variance reduction | Shipped | Studio, warehouse adapter, SQL templates | Activates only when the pre-period covariate has usable variance. |
| Time-to-convert and conversion depth | Shipped | Studio and warehouse adapter | Median/P90 timing and 1+/2+/3+ depth are computed per variant. |
| Segmented results | Shipped | SDK explicit dimensions, Studio | Only explicitly allow-listed, low-cardinality dimensions are collected. |
| R analyst workflows | Shipped templates | R Markdown notebooks | Not an embedded R session in Studio. |
| Arbitrary Mojito custom JavaScript internals/plugins | Not supported | — | Preserve the user outcome with a Fabric SDK adapter or keep the custom plugin. |
Existing Mojito storageAdapter callbacks | Shipped bridge | mojitoCompatibilityAdapter() | Reuses onExposure, onRecipeFailure, and onVeilTimeout while delivery migrates. |
Common trigger.js patterns | Shipped importer | fx import-mojito | Path, URL-contains, DOM-ready, and wait-for-element patterns convert automatically; strict mode blocks remaining manual review. |
| Google Optimize identifiers | Not supported | GA4 adapter | Google Optimize is retired; identifiers are not migrated. |
Behave compatibility
Fabric uses Cucumber Expressions and cucumber-js rather than emulating Behave's Python ABI. Feature text remains standard Gherkin, and user-visible runner capabilities have TypeScript equivalents. The matrix is checked against the Behave documentation while keeping Python source compatibility separate from behavioral parity.
For a practical migration sequence, see Move from Behave.
| Behave capability | Fabric status | Notes |
|---|---|---|
| Feature, Background, Scenario, Scenario Outline, Examples, Rule, tags | Shipped | Native cucumber-js parsing and execution. |
| Given/When/Then step library | Shipped | Databricks SQL, Delta, UC, Jobs, Lakeflow, Volumes, Lakebase, notebooks, dbt. |
| before/after all, scenario, and step hooks | Shipped | AfterAll drains shared fixtures; failure evidence is attached in AfterStep. |
| Run- and feature-scoped fixtures | Shipped with Cucumber lifecycle | Setup is deduplicated by run or feature URI; cleanup runs in AfterAll because cucumber-js has no safe after_feature event. |
context.add_cleanup() | Shipped | Reverse-order, scenario-scoped addCleanup(). |
| userdata and typed parameters | Shipped | World parameters plus DBX_TEST_USERDATA_*; typed duration/run-state/table parameters. |
| Active tags and tag-scoped behavior | Shipped | @requires.* / @excludes.* plus Behave-compatible @use.with_* / @not.with_*; Cucumber tag-scoped hooks. |
| stdout/stderr/log capture | Shipped | 32 KiB per step, secret-redacted; direct child-process file descriptors remain outside the in-process boundary. |
| JUnit, HTML, rerun, pretty, WIP, dry-run, fail-fast, i18n, tag expressions | Shipped | Cucumber formatters/profiles and scripts. |
| steps catalog | Shipped | Generated from the published TypeScript step library. |
| Central test-run history | Exceeds Behave core | Studio Quality ingests Fabric evidence and standard JUnit, with CI metadata and Databricks deep links. |
| Parallel execution | Shipped with policy | Local DuckDB scenarios parallelize; shared live infrastructure remains serial. |
| Step definitions and hooks in TypeScript | Shipped | Fabric ships and supports TypeScript steps; Python notebooks and pipelines remain valid workloads under test. |
context.execute_steps() outcome | Shipped TypeScript equivalent | defineAction() and world.runAction() provide typed, unit-testable composition without runtime Gherkin recursion. |
| Hierarchical feature/scenario context | Shipped TypeScript equivalent | setState() / getState() / requireState() resolve scenario → feature → run and isolate scenarios. |
cfparse cardinality fields | Shipped TypeScript equivalent | parseCardinalityField() supports ?, *, and +; data tables remain preferred for structured values. |
| Behave runner subclass/stage/config outcomes | Shipped through Cucumber | Cucumber profiles, custom formatters/support code, runFeatures(), DBX_TEST_STAGE, and world parameters are the extension surfaces. Python class/config-file source compatibility is not claimed. |
| Existing Python step/plugin source | Not source-compatible | Port step bodies to TypeScript; third-party code that imports Behave internals must remain on Behave or be adapted. |
Databricks workload support
| Surface | Local/contract evidence | Azure live evidence | AWS | GCP |
|---|---|---|---|---|
| SQL Statement Execution and serverless warehouse | Shipped | Live-gated | Not a certified target | Not a certified target |
Secretless workload identity federation (env-oidc / file-oidc) | Unit tested | Available; live certification pending | Available; not certified | Available; not certified |
| Classic job cluster | Request/unit tested | Live-gated: DBR 16.4 LTS, Standard_D2ds_v6, single-node, single-user | Not a certified target | Not a certified target |
| Delta schema, time travel, backup/restore | DuckDB/SQL contract tests | Live-gated scratch-schema checks | Not a certified target | Not a certified target |
| Unity Catalog allow/deny governance | Mock and BDD contract | Live-gated restricted principal | Not a certified target | Not a certified target |
| Lakeflow/Auto Loader | Fixture and orchestration tests | Live-gated isolated pipeline | Not a certified target | Not a certified target |
| Volumes/Files API | Mock tests | Live-gated upload/read/delete | Not a certified target | Not a certified target |
| Jobs, notebooks, dbt | Mock and BDD steps | Live-gated serverless plus classic notebook probe | Not a certified target | Not a certified target |
| Lakebase OAuth, credential refresh, pool swap, ephemeral branches | Unit/integration tests | Live-gated per-run branch | Not applicable until offered/supported | Not applicable until offered/supported |
| Databricks Apps and resource bindings | Bundle validation | Live-gated app/resource/health checks | Not a certified target | Not a certified target |
| Performance, failure recovery, secret rotation, backup/restore, rollback | Unit-tested checks | Live-gated and required in the nightly suite | Not a certified target | Not a certified target |
| Browser → Cloudflare → R2 → Auto Loader → Delta → Studio | Automated script | Live-gated in staging; 7-night promotion window is still accumulating | Cloudflare edge plus Azure data plane only | Cloudflare edge plus Azure data plane only |
AWS and GCP are deliberately not marked portable merely because Databricks APIs are similar. They become supported targets only after infrastructure variables, node types, identity paths, external storage, and the complete live suite are certified in those clouds.
The Databricks target-pack guide lists the packs available today, their required checks, certification scope, and limitations. Fabric does not label an unlisted workload surface as first class.
Operational certification
| Gate | Current requirement | Evidence |
|---|---|---|
| Staging smoke | 7 consecutive scheduled green nights | staging-certification.json artifact; counter resets after a failure |
| Databricks live suite | Every required check passes with restricted identity | JSON, JUnit, BDD HTML, and captured failure evidence |
| Published consumer | Public packages install and execute outside the monorepo | consumer repository nightly workflow |
| Quality evidence | BDD/live/JUnit/generic CLI results persist tenant-scoped in Studio | Quality API, paginated Studio history, CLI clean-consumer test, nightly publication |
| Production Quality policy | Named suites must be fresh and passing before production promotion | Tenant-scoped API enforcement, Studio status, 409 QUALITY_GATE_FAILED, durable audit event |
| Retention and legal hold | 30–3,650 day policy; legal hold suspends automated pruning | Organization governance settings and migration-backed prune policy |
| Authentication and tenancy | Gateway access and Fabric organization authorization remain independent | Better Auth membership, fixed RBAC roles, scoped/expiring keys, tenant predicates on every Quality/governance operation |
| Production promotion | Staging window complete, backup verified, rollback tested | Promotion remains blocked until all gates are green |
Current evidence (July 16, 2026)
- The required Azure serverless/live suite passed every required SQL, Lakebase, Delta, Unity Catalog, Lakeflow, Volume, App, resilience, notebook, and dbt check.
- The recurring Azure classic probe passed on DBR
16.4.x-scala2.12with a single-nodeStandard_D2ds_v6; the disposable notebook and cleanup completed. - Published-package consumer:
@fabricorg/databricks-testkit@0.2.4and@fabricorg/databricks-bdd@0.4.0installed from npm and executed outside this monorepo; the scenarios exercise typed actions, layered state, cardinality, and active tags. - The complete browser-to-Studio staging path passed browser emission, Cloudflare/R2, Auto Loader/Delta, aggregate API, authenticated Studio, Bayesian, CUPED, time/depth, and segmentation assertions.
- A clean-checkout fallback built and deployed the staging API, Studio, and edge workers.
- Staging promotion remains Certifying (1/7 consecutive scheduled nights) until seven scheduled nightly runs succeed consecutively. Manual workflow dispatches prove the path but do not increment that counter.
See Certification evidence for target details, the public reproducible consumer run, and the observation boundary. Raw Fabric-operated artifacts are not presented as customer-accessible links.
The compatibility matrix is a release surface. A capability moves to Shipped or Live-gated only with a test or evidence link; a failed certification moves it back to Certifying.
For controls outside workload compatibility, see enterprise security and operations.