FabricFabricExperiments
Migration

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

CapabilityFabric statusFabric surfaceMigration note
Deterministic bucketing and weighted variantsShippedWeb/Node SDK, assignment vectorsFrozen cross-SDK vectors protect assignment stability.
Sticky assignmentShippedCookie, localStorage, server storage adaptersStorage is pluggable.
DOM recipes, shared CSS/JS, triggers, holdback, divert, manual exposureShippedYAML, tag loader, SDKImporter maps supported Mojito wave fields and reports non-portable fields.
URL previewsDifferent by designSigned, expiring EdDSA preview tokenUnsigned mojito_* overrides are intentionally not accepted.
Exposure and conversion deliveryShippedBrowser/Node SDK → Cloudflare Queue/R2Tenant-scoped, batched, retry-safe ingestion.
Self-hosted/static deliveryShippedfx publish --static, CDN workerCloudflare is the managed edge target.
Project/property/feature/environment hierarchyShippedAPI and StudioImmutable publications and governed promotion add an explicit environment boundary.
Experiment authoring and lifecycle UIShippedStudioDraft → review → approved → running → paused/killed, with audit history.
Frequentist rate/lift, intervals, p-values, SRMShippedStudio and stats packageResults use first-exposure attribution.
Bayesian probability and credible intervalsShippedStudio and stats packageBeta-binomial with documented Beta(1,1) prior.
CUPED variance reductionShippedStudio, warehouse adapter, SQL templatesActivates only when the pre-period covariate has usable variance.
Time-to-convert and conversion depthShippedStudio and warehouse adapterMedian/P90 timing and 1+/2+/3+ depth are computed per variant.
Segmented resultsShippedSDK explicit dimensions, StudioOnly explicitly allow-listed, low-cardinality dimensions are collected.
R analyst workflowsShipped templatesR Markdown notebooksNot an embedded R session in Studio.
Arbitrary Mojito custom JavaScript internals/pluginsNot supportedPreserve the user outcome with a Fabric SDK adapter or keep the custom plugin.
Existing Mojito storageAdapter callbacksShipped bridgemojitoCompatibilityAdapter()Reuses onExposure, onRecipeFailure, and onVeilTimeout while delivery migrates.
Common trigger.js patternsShipped importerfx import-mojitoPath, URL-contains, DOM-ready, and wait-for-element patterns convert automatically; strict mode blocks remaining manual review.
Google Optimize identifiersNot supportedGA4 adapterGoogle 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 capabilityFabric statusNotes
Feature, Background, Scenario, Scenario Outline, Examples, Rule, tagsShippedNative cucumber-js parsing and execution.
Given/When/Then step libraryShippedDatabricks SQL, Delta, UC, Jobs, Lakeflow, Volumes, Lakebase, notebooks, dbt.
before/after all, scenario, and step hooksShippedAfterAll drains shared fixtures; failure evidence is attached in AfterStep.
Run- and feature-scoped fixturesShipped with Cucumber lifecycleSetup is deduplicated by run or feature URI; cleanup runs in AfterAll because cucumber-js has no safe after_feature event.
context.add_cleanup()ShippedReverse-order, scenario-scoped addCleanup().
userdata and typed parametersShippedWorld parameters plus DBX_TEST_USERDATA_*; typed duration/run-state/table parameters.
Active tags and tag-scoped behaviorShipped@requires.* / @excludes.* plus Behave-compatible @use.with_* / @not.with_*; Cucumber tag-scoped hooks.
stdout/stderr/log captureShipped32 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 expressionsShippedCucumber formatters/profiles and scripts.
steps catalogShippedGenerated from the published TypeScript step library.
Central test-run historyExceeds Behave coreStudio Quality ingests Fabric evidence and standard JUnit, with CI metadata and Databricks deep links.
Parallel executionShipped with policyLocal DuckDB scenarios parallelize; shared live infrastructure remains serial.
Step definitions and hooks in TypeScriptShippedFabric ships and supports TypeScript steps; Python notebooks and pipelines remain valid workloads under test.
context.execute_steps() outcomeShipped TypeScript equivalentdefineAction() and world.runAction() provide typed, unit-testable composition without runtime Gherkin recursion.
Hierarchical feature/scenario contextShipped TypeScript equivalentsetState() / getState() / requireState() resolve scenario → feature → run and isolate scenarios.
cfparse cardinality fieldsShipped TypeScript equivalentparseCardinalityField() supports ?, *, and +; data tables remain preferred for structured values.
Behave runner subclass/stage/config outcomesShipped through CucumberCucumber 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 sourceNot source-compatiblePort step bodies to TypeScript; third-party code that imports Behave internals must remain on Behave or be adapted.

Databricks workload support

SurfaceLocal/contract evidenceAzure live evidenceAWSGCP
SQL Statement Execution and serverless warehouseShippedLive-gatedNot a certified targetNot a certified target
Secretless workload identity federation (env-oidc / file-oidc)Unit testedAvailable; live certification pendingAvailable; not certifiedAvailable; not certified
Classic job clusterRequest/unit testedLive-gated: DBR 16.4 LTS, Standard_D2ds_v6, single-node, single-userNot a certified targetNot a certified target
Delta schema, time travel, backup/restoreDuckDB/SQL contract testsLive-gated scratch-schema checksNot a certified targetNot a certified target
Unity Catalog allow/deny governanceMock and BDD contractLive-gated restricted principalNot a certified targetNot a certified target
Lakeflow/Auto LoaderFixture and orchestration testsLive-gated isolated pipelineNot a certified targetNot a certified target
Volumes/Files APIMock testsLive-gated upload/read/deleteNot a certified targetNot a certified target
Jobs, notebooks, dbtMock and BDD stepsLive-gated serverless plus classic notebook probeNot a certified targetNot a certified target
Lakebase OAuth, credential refresh, pool swap, ephemeral branchesUnit/integration testsLive-gated per-run branchNot applicable until offered/supportedNot applicable until offered/supported
Databricks Apps and resource bindingsBundle validationLive-gated app/resource/health checksNot a certified targetNot a certified target
Performance, failure recovery, secret rotation, backup/restore, rollbackUnit-tested checksLive-gated and required in the nightly suiteNot a certified targetNot a certified target
Browser → Cloudflare → R2 → Auto Loader → Delta → StudioAutomated scriptLive-gated in staging; 7-night promotion window is still accumulatingCloudflare edge plus Azure data plane onlyCloudflare 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

GateCurrent requirementEvidence
Staging smoke7 consecutive scheduled green nightsstaging-certification.json artifact; counter resets after a failure
Databricks live suiteEvery required check passes with restricted identityJSON, JUnit, BDD HTML, and captured failure evidence
Published consumerPublic packages install and execute outside the monorepoconsumer repository nightly workflow
Quality evidenceBDD/live/JUnit/generic CLI results persist tenant-scoped in StudioQuality API, paginated Studio history, CLI clean-consumer test, nightly publication
Production Quality policyNamed suites must be fresh and passing before production promotionTenant-scoped API enforcement, Studio status, 409 QUALITY_GATE_FAILED, durable audit event
Retention and legal hold30–3,650 day policy; legal hold suspends automated pruningOrganization governance settings and migration-backed prune policy
Authentication and tenancyGateway access and Fabric organization authorization remain independentBetter Auth membership, fixed RBAC roles, scoped/expiring keys, tenant predicates on every Quality/governance operation
Production promotionStaging window complete, backup verified, rollback testedPromotion 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.12 with a single-node Standard_D2ds_v6; the disposable notebook and cleanup completed.
  • Published-package consumer: @fabricorg/databricks-testkit@0.2.4 and @fabricorg/databricks-bdd@0.4.0 installed 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.

On this page