FabricFabricExperiments
Getting started

Create your first experiment

Define an experiment in Studio or YAML and apply it through the governed action path.

You can create experiments in two ways:

  • Studio no-code UI for business users and quick edits,
  • YAML + fx for source-controlled workflows.

Both paths converge on the same governed domain actions.

Option A: Create in Studio

  1. Start the hosted API and Studio. See Start the web UI locally.
  2. Sign up, verify email, and create an organization.
  3. Open the organization Overview at /app/{orgSlug} and select Create experiment.
  4. Complete Basics: hypothesis, stable ID, audience sampling, holdback, and exposure behavior.
  5. Configure Activation: choose the trigger and add shared code or metadata when needed.
  6. Add Variants, including weights, payload JSON, DOM operations, or advanced JS/CSS.
  7. Add the primary outcome and any guardrails under Metrics.
  8. Open Review, inspect the generated specification, and click Create draft.

From the experiment detail page, the dotted lifecycle canvas shows completed, current, and upcoming stages. You can submit for review, approve, start, pause, resume, conclude, edit, or stop the experiment as its current state allows.

Approval enforces separation of duties: the experiment owner cannot approve their own experiment. To exercise the complete lifecycle, use a second organization member with permission to approve. A single-member evaluation can still create, validate, preview, and submit drafts, but it intentionally stops at independent approval.

Return to /app/{orgSlug}/experiments to see the draft in the Design column. Use the Table toggle when you need a compact inventory instead of the visual Pipeline. See Use the Studio workflow for the complete interface guide.

Option B: Author YAML locally

Create experiments/homepage-cta.yaml:

id: homepage-cta
name: Homepage CTA
description: Test whether a more direct CTA improves signup.
sampleRate: 1
variants:
  - key: control
    name: Current CTA
  - key: treatment
    name: New CTA
    payload:
      cta: Start building
metrics:
  - key: signup
    name: Signup
    kind: conversion
    eventName: signup
    isPrimary: true

Validate and apply locally:

fx validate experiments/
fx plan experiments/
fx apply experiments/

Or push to the hosted API:

fx push experiments/ \
  --api-url https://api.example.com \
  --api-key fx_key_... \
  --tenant <orgId>

You can also import the same YAML files in Studio from /app/{orgSlug}/experiments/import.

Lifecycle

Fabric Experiments treats lifecycle changes as actions:

Every action is validated, persisted, and emitted to the audit trail.

ActionAllowed fromResultImportant guard
experiment.submit_for_reviewdraftreviewThe spec must pass schema validation.
experiment.approvereviewapprovedThe authenticated approver must not be the experiment owner.
experiment.startapprovedrunningApproval evidence must already exist.
experiment.pauserunningpausedAlso used by an applied SRM breach.
experiment.resumepausedrunningExisting assignment configuration is retained.
experiment.killrunning, pausedkilledTerminal decision; it cannot be resumed.
experiment.declare_winnerrunningconcludedRequires a winner variant and justification.
experiment.archivekilled, concludedarchivedArchived is the final state.

Any action/state pair not listed here is rejected before its handler runs.

The review → approved transition requires an approver whose authenticated user identity is different from ownerId; request approval from another organization member. Payload fields cannot override that authenticated actor.

Studio presents these domain states as six visual stages:

StageStates
Designdraft
Reviewreview
Readyapproved
Liverunning, paused
Decisionconcluded, killed
Archivearchived

On this page