Skip to content

Releases: iemejia/fabio

v0.31.0 — Agent Safety & Discoverability

28 Jun 15:22

Choose a tag to compare

v0.31.0 — Agent Safety & Discoverability

This release transforms fabio into a fully safety-hardened, agent-native CLI with defense-in-depth controls and runtime discoverability that achieves 90% correctness with coding agents.

Agent Safety (New)

Three independent safety boundaries for agent deployments:

--readonly — Blocks all mutations (POST/PUT/PATCH/DELETE) at the HTTP transport layer before network dispatch. Read operations pass through normally.

FABIO_READONLY=1 fabio workspace list     # works
FABIO_READONLY=1 fabio workspace create   # BLOCKED (READONLY_MODE error)

--enable-commands / --disable-commands — Runtime command allowlists/denylists. Operators constrain which command groups an agent can access.

FABIO_ENABLE_COMMANDS=workspace,lakehouse fabio workspace list  # works
FABIO_ENABLE_COMMANDS=workspace,lakehouse fabio deploy plan     # BLOCKED (FORBIDDEN)

--wrap-untrusted — Wraps user-authored fields (displayName, description) with <<<UNTRUSTED>>>...<<<END_UNTRUSTED>>> markers to prevent prompt injection when agent processes fabio output.

All three support environment variables for operator-controlled enforcement.

MCP Server Safety (New)

The MCP server is now read-only by default:

fabio mcp serve                                    # 366 read-only tools
fabio mcp serve --allow-write                      # 810 tools (all)
fabio mcp serve --allow-write --allow-tool "workspace,lakehouse"  # scoped
fabio mcp serve --list-tools                       # inspect without starting

Stable Exit Codes (New)

Agents can branch on $? without JSON parsing:

Code Meaning
0 Success
1 Generic error
2 Usage error
3 AUTH_REQUIRED
4 FORBIDDEN / READONLY_MODE
5 NOT_FOUND
6 CONFLICT
7 RATE_LIMITED
8 TIMEOUT
9 NETWORK_ERROR

Runtime Discoverability (Enhanced)

--budget flag — Token-aware schema output that returns the richest subset within a token limit:

fabio context agent --budget 4000  # full detail for priority groups, compact for rest

222 inline examples — Every major command now has CLI usage examples accessible via fabio context describe <group> <cmd>.

56 output shape examples — Agents can see response shapes via fabio context examples <group> <cmd>.

Safety state introspectionfabio context agent now includes a safety field showing effective restrictions.

Agent Skill (Moved In-Repo)

The agent skill now ships at .agents/skills/fabio/ in the main repository. No more separate fabio-skills repo (archived). Install via:

npx skills add https://github.com/iemejia/fabio

Eval results: 90% pass rate (69/77 tests) with gpt-4o-mini in CI.

Documentation Simplified

  • Deleted COMMANDS.md and EXAMPLES.md — the binary is the documentation
  • All agent knowledge lives in commands.json (auto-generated + examples preserved)
  • fabio context agent/describe/find/workflow provides runtime discovery

Stats

  • 22 E2E safety tests covering all new features
  • 77-case promptfoo eval running in CI via Azure OpenAI
  • 749 unit tests passing
  • Binary size: 19 MB (656 KB embedded context data = 3.5%)

Full Changelog: v0.30.0...v0.31.0

Full Changelog: v0.30.0...v0.31.0

v0.30.0

24 Jun 16:20

Choose a tag to compare

What's New

This release brings a major upgrade to agent discoverability with context hints embedded in every --help output, a complete rewrite of the Data Agent command group to use the new public staging management API (28 subcommands), and significant CI/CD and Docker improvements including distroless images and full GitHub Actions SHA pinning.

Data Agent: Full Staging Management API

The Data Agent command group has been completely rewritten to use Fabric's new public staging management API (Jun 2026), replacing the previous read-modify-write definition approach with 28 dedicated endpoints:

  • get-config/update-config with --stage staging|published
  • add-datasource/remove-datasource/list-datasources/show-datasource/update-datasource (auto-type detection, LRO-aware)
  • select-tables (toggle table selection in discovered schema)
  • list-elements/describe-element/delete-element with --stage
  • add-fewshot/remove-fewshot/list-fewshots/show-fewshot/update-fewshot/clear-fewshots/upload-fewshots (JSON + CSV/TSV bulk upload)
  • query --stage sandbox|production with --timeout and --show-steps
  • publish/reset for staging lifecycle

Context Discovery Hints for AI Agents

Every --help output now includes a CONTEXT section pointing agents to relevant schemas, workflows, and examples:

fabio lakehouse --help
...
CONTEXT:
  fabio context schema lakehouse         Item definition schema
  fabio context workflow lakehouse-etl    Multi-step workflow recipe
  fabio context examples lakehouse list  Output shape example
  • All 72 command groups annotated with contextual hints
  • 12 new output examples for high-value command groups (lakehouse, workspace, deploy, etc.)
  • fabio context examples now supports optional group-browsable discovery
  • Agent schema (fabio context agent) updated with all 88 previously missing subcommands

Dataflow Execute-Query: LRO + Arrow Version

fabio dataflow execute-query now handles 202 LRO responses for long-running queries (up to 90s server-side) and supports --arrow-version 1|2 for Apache Arrow IPC format version selection.

Improvements

  • performance: Pre-allocate collections on hot paths, add #[inline] hints to hot-path functions
  • refactoring: Deduplicate hash functions, standardize base64 imports, adopt idiomatic Rust patterns (6 refactoring rounds total)
  • MSRV bump to 1.96: Leverages floor_char_boundary(), is_none_or(), is_some_and(), Duration::from_mins(), and other modern Rust features
  • apache-airflow-job: Add --update-metadata flag to update-definition
  • paginated-report: Harmonize --content handling across commands

Bug Fixes

  • context: Agent schema now covers the complete CLI surface (88 subcommands were missing)
  • ci: Tolerate GitHub API unreachable in upgrade tests
  • ci: Resolve clippy, test, and audit failures

Docker & Build

  • Distroless runtime image: Production Docker image now uses debian-slim with vendored OpenSSL and non-root user (~20MB smaller)
  • Devcontainer: Tools baked into image, pinned to ubuntu:24.04, multi-arch build (amd64 + arm64)

CI/CD

  • All GitHub Actions pinned to full commit SHA (supply-chain hardening)
  • Cancel-in-progress for PR-triggered workflows
  • Reduced GHA minutes: extracted fmt check, dropped release builds from CI, weekly CodeQL
  • Cache cleanup workflow for stale PR/branch caches
  • rustsec/audit-check action replaces manual audit
  • Docker workflow only triggers on Dockerfile/devcontainer changes

Testing

  • data-agent: Complete E2E test coverage for all 28 subcommands (34 tests)
  • workspace CMK: E2E tests for encryption assign/reset/get commands

Stats

  • 51 commits, 205 files changed, +7,414 / -3,855 lines
  • MSRV bumped from 1.85 to 1.96
  • Data Agent rewritten: 28 subcommands via public staging API

Full Changelog: v0.29.0...v0.30.0

What's Changed

  • chore(deps): bump softprops/action-gh-release from 3.0.0 to 3.0.1 by @dependabot[bot] in #23
  • chore(deps): bump actions/checkout from 6 to 7 by @dependabot[bot] in #24
  • feat: sync with Fabric REST API spec 2026-06-24 by @iemejia in #25

Full Changelog: v0.29.0...v0.30.0

v0.29.0 — Ontology Round-Trip (OWL Import/Export)

18 Jun 22:36

Choose a tag to compare

v0.29.0 — Ontology Round-Trip (OWL Import/Export)

Highlights

Full OWL round-trip support for Fabric Ontologies — import from and export to standard RDF/XML and JSON-LD. Compatible with Ontology Playground.

New Commands

  • fabio ontology import — Parse OWL (RDF/XML or JSON-LD) and push directly to a Fabric Ontology item
  • fabio ontology export — Fetch a Fabric Ontology and serialize to OWL RDF/XML or JSON-LD
  • fabio context tenant --format owl — Export tenant topology as OWL schema (importable)
  • fabio context tenant --format rdf — Export tenant topology as RDF/XML schema (importable)
  • fabio context tenant --format full — Schema + instances in one RDF/XML file (works everywhere)

Workflows

# Import Ontology Playground catalogue files directly into Fabric
fabio ontology import --workspace $WS --id $ONT --file cosmic-coffee.rdf

# Export and re-import (full round-trip preserves types + relationships)
fabio ontology export --workspace $WS --id $ONT --format rdf --file out.rdf
fabio ontology import --workspace $WS --id $ONT2 --file out.rdf

# Extract tenant topology → Fabric Ontology (one pipeline)
fabio context tenant --workspace $WS --deep --format full --output-file tenant.rdf
fabio ontology import --workspace $WS --id $ONT --file tenant.rdf

Stats

  • 14 commits since v0.28.0
  • 14 unit tests + 10 live E2E tests for import/export/round-trip
  • 5 cross-compilation targets passing
  • New dependency: quick-xml 0.40.1 (MIT license) for RDF/XML parsing

Full Changelog

v0.28.0...v0.29.0

Full Changelog: v0.28.0...v0.29.0

v0.28.0 — Real-Time Intelligence & Developer Experience

18 Jun 19:41

Choose a tag to compare

v0.28.0 — Real-Time Intelligence & Developer Experience

Highlights

This release brings 13 new commands covering the full Real-Time Intelligence (RTI) stack — schema discovery, inline ingestion, query diagnostics, deeplinks, eventstream building, and one-command alert creation. It also introduces prek for fast pre-commit hooks, 20 context output examples for AI agents, and a major codebase restructuring into directory modules.

New Features

KQL Database Intelligence (8 new commands)

Inspired by the Microsoft Fabric RTI MCP server, fabio now matches its schema discovery and diagnostics capabilities:

# Schema discovery
fabio kql-database list-entities --workspace $WS --id $KDB
fabio kql-database describe --workspace $WS --id $KDB
fabio kql-database describe-entity --workspace $WS --id $KDB --entity-name StormEvents
fabio kql-database sample --workspace $WS --id $KDB --entity-name StormEvents --count 5

# Inline ingestion
fabio kql-database ingest --workspace $WS --id $KDB --table Events --data "name,val\ntest,42"

# Query analysis
fabio kql-database show-queryplan --workspace $WS --id $KDB --kql "T | summarize count()"
fabio kql-database diagnostics --workspace $WS --id $KDB

# Portal deeplinks
fabio kql-database deeplink --workspace $WS --id $KDB --kql "T | take 100"

Eventstream Builder (4 new commands)

fabio eventstream add-sample-source --workspace $WS --id $ES --name test-data
fabio eventstream add-derived-stream --workspace $WS --id $ES --name filtered --input-node src-stream
fabio eventstream validate --file definition.json
fabio eventstream list-components --category source

Reflex Create-Trigger

One command to create a complete Data Activator trigger with auto-generated entities:

fabio reflex create-trigger --workspace $WS \
  --name "Flood Alert" --eventhouse-id $EH --database WeatherDB \
  --table StormEvents --condition "State == 'ILLINOIS' and EventType == 'Flood'" \
  --action email --recipients "ops@company.com"

Lakehouse Iceberg REST Catalog

New commands for Apache Iceberg metadata access via OneLake Table API:

  • iceberg-config, iceberg-namespaces, iceberg-namespace, iceberg-tables, iceberg-table
  • iceberg-table-exists, iceberg-namespace-exists, iceberg-credentials
  • iceberg-stats, iceberg-snapshots

fabio context Unified Command

The agent discovery system is now unified under fabio context:

  • fabio context agent — machine-readable command schema
  • fabio context tenant — workspace graph extraction
  • fabio context schemas/workflows/best-practices/examples — semantic knowledge

Developer Experience

  • prek pre-commit hooks: Fast Rust-native pre-commit validation (format, clippy, gitleaks, file hygiene)
  • 20 output examples: AI agents can now see response shapes for key commands via fabio context examples <group> <command>
  • Directory module structure: All large files split into maintainable modules (kql_database/, eventstream/, lakehouse/, workspace/, deploy/, context/)

Bug Fixes

  • Fix context/extractcontext/tenant naming in all references
  • Fix missing create-directory in agent schema
  • Fix stale path references after context/ restructure

Stats

  • 36 commits since v0.27.0
  • 13 new commands, bringing total to 843+ subcommands
  • 27 new tests (10 unit + 17 E2E) for new features
  • 5/5 cross-compilation targets passing (linux/macos/windows x64+arm64)

Full Changelog

v0.27.0...v0.28.0

Full Changelog: v0.27.0...v0.28.0

v0.27.0

17 Jun 09:45

Choose a tag to compare

What's New

This release adds the Azure Databricks Storage item type and data pipeline schedule/instance management, syncing with the latest Microsoft Fabric REST API specs (commit 152e811). It also includes a bug fix for the definition part path and expanded E2E test coverage for newly-enabled features.

New Commands

Azure Databricks Storage (fabio azure-databricks-storage):

  • list, show, create, update, delete, get-definition, update-definition
  • New Fabric item type for Azure Databricks integration
  • Definition format: AzureDatabricksStorageV1, part path: definition.json
  • Registered in DEPLOY_ORDER for CI/CD deployment support

Data Pipeline Schedule/Instance Management (fabio data-pipeline):

  • list-schedules, get-schedule, update-schedule, delete-schedule -- full schedule CRUD
  • list-instances, get-instance -- job execution history

Bug Fixes

  • azure-databricks-storage: Definition part path corrected from AzureDatabricksStorage.json to definition.json (per API spec examples)
  • ci: Restricted Copilot git access to read-only in the sync workflow

Improvements

  • 22 new unit tests for azure-databricks-storage and data-pipeline schedule/instance functions
  • 7 new E2E tests for azure-databricks-storage (dry-run, error handling, lifecycle)
  • 4 new E2E tests for mirrored-catalog (now that the feature is tenant-enabled)
  • 3 new E2E tests for data-pipeline schedule/instance commands

CI/CD

  • Sync workflow prompt enriched with examples and behavior harvesting rules
  • Copilot git access restricted to read-only for security

Stats

  • 9 commits, 16 files changed, +1709 / -31 lines
  • 1001 unit/offline tests passing (22 new)
  • All 5 cross-compilation targets passing (linux/macos/windows x64+arm64)

Full Changelog: v0.26.0...v0.27.0

Full Changelog: v0.26.0...v0.27.0

v0.26.0

16 Jun 14:09

Choose a tag to compare

What's New

This release transforms the data-agent command group from 9 basic CRUD subcommands into a comprehensive 22-subcommand management surface, inspired by the official fabric-data-agent-sdk (v0.1.24a0). You can now create, configure, and deploy Fabric Data Agents entirely from the CLI — adding data sources, managing few-shot examples, setting table descriptions, and querying agents — without touching the Fabric portal.

Data Agent: Datasource Management

Add, remove, list, and inspect data sources with auto-type detection from Fabric artifacts:

# Auto-detects Lakehouse type from artifact
fabio data-agent add-datasource --workspace $WS --id $DA --artifact "SalesLakehouse"

# List and inspect configured sources
fabio data-agent list-datasources --workspace $WS --id $DA
fabio data-agent show-datasource --workspace $WS --id $DA --datasource "SalesLakehouse"

# Select/unselect tables for the agent
fabio data-agent select-tables --workspace $WS --id $DA --datasource $LH --tables "orders,products"

Supported artifact types: Lakehouse, Warehouse, KQLDatabase, SemanticModel, Ontology, GraphModel, MirroredDatabase, SQLDatabase.

Data Agent: Few-Shot Examples

Manage question/query pairs that teach the agent how to translate natural language to SQL/KQL:

# Add a single example
fabio data-agent add-fewshot --workspace $WS --id $DA --datasource $LH \
  --question "Top customer by revenue?" \
  --answer "SELECT TOP 1 customer_name, SUM(total_amount) FROM orders GROUP BY customer_name ORDER BY 2 DESC"

# Bulk upload from CSV or JSON
fabio data-agent upload-fewshots --workspace $WS --id $DA --datasource $LH --file fewshots.csv

Duplicate questions are auto-renamed with [N] suffixes (matching the SDK's behavior).

Data Agent: Configuration & Element Descriptions

# Set AI instructions and enable preview runtime
fabio data-agent update-config --workspace $WS --id $DA \
  --instructions-file instructions.txt --enable-preview-runtime

# List tables/columns with selection state
fabio data-agent list-elements --workspace $WS --id $DA --datasource $LH

# Set descriptions to help the agent understand schema semantics
fabio data-agent describe-element --workspace $WS --id $DA --datasource $LH \
  --path "dbo.orders.total_amount" --description "Total order value in USD"

Data Agent: Enhanced Query & Publishing

# Query the draft agent before publishing
fabio data-agent query --workspace $WS --id $DA --stage sandbox --prompt "Test query"

# Configurable timeout (default: 300s)
fabio data-agent query --workspace $WS --id $DA --timeout 600 --prompt "Complex query..."

# Publish to M365 Copilot Agent Store
fabio data-agent publish --workspace $WS --id $DA --to-m365

Bug Fixes

  • data-agent: Fix --query naming conflict — the add-fewshot SQL query flag conflicted with the global JMESPath --query flag, causing null output. Renamed to --answer (with --sql alias) (60f5f20)

Documentation

  • Comprehensive AGENTS.md update with 17 new API behaviors discovered from the official Python SDK, including internal workload management URLs, schema discovery endpoint, M365 publishing endpoint, datasource type mappings, element types, and operational limits
  • Full rewrite of EXAMPLES.md data-agent section with 8 subsections covering all 22 subcommands
  • COMMANDS.md expanded from 9 to 22 data-agent entries
  • agent-context schema updated for AI agent discovery

Dependencies

  • Bump zip from 2.4.2 to 7.2.0 (Dependabot)
  • Add uuid v1 with v4 feature (few-shot ID generation)
  • Update h2 0.4.14 → 0.4.15

Stats

  • 11 commits, 9 files changed, +3,774 / -87 lines
  • 749 unit tests (+34 new), 34 data-agent e2e tests (all passing live)
  • Cross-compilation: 5/5 targets pass (linux x64/arm64, macOS x64/arm64, Windows x64)

Full Changelog: v0.25.0...v0.26.0

What's Changed

  • chore(deps): bump zip from 2.4.2 to 7.2.0 by @dependabot[bot] in #22

Full Changelog: v0.25.0...v0.26.0

v0.25.0

14 Jun 13:46

Choose a tag to compare

v0.25.0

Highlights

fabio upgrade — Self-update command

Fabio can now update itself to the latest release directly from GitHub:

fabio upgrade --check          # check if update is available
fabio upgrade                  # download, verify SHA256, replace binary
fabio upgrade --target-version 0.24.0  # pin specific version

Safety features:

  • SHA256 checksum verification before binary replacement
  • Refuses to downgrade unless --force is passed
  • Development builds (-dev suffix) are protected from accidental overwrite
  • Atomic binary replacement (rename-dance on Windows for locked exe)
  • Full --dry-run support

Profile system improvements

  • --profile flag now works correctly — Previously only affected private link routing; now correctly overrides workspace, output, and capacity for the specified profile
  • profile save merges — Adding a single field no longer wipes other configured fields
  • --private-link-workspace flag — Configurable via CLI (no more manual JSON editing)
  • Capacity injectionFABIO_CAPACITY env var wired from profiles into workspace assign-capacity and gateway create

Performance

  • Context extract auto-scales concurrency to CPU count (previously hardcoded at 8)

Security

  • Added SECURITY.md with vulnerability reporting policy, scope, and response timeline

What's Changed

New Features

  • fabio upgrade command (check/download/verify/replace binary from GitHub Releases)
  • --private-link-workspace flag on profile save
  • Dev build detection: refuses upgrade on -dev versions with clear message

Bug Fixes

  • --profile flag now correctly overrides workspace/output/capacity (not just private_link)
  • profile save merges with existing profile (omitted fields preserved)
  • FABIO_CAPACITY wired from profiles to workspace/gateway commands
  • Downgrade protection: refuses to install older version without --force

Performance

  • Context extract concurrency auto-scales to available CPU cores

Documentation

  • Security policy (SECURITY.md)
  • Strengthened testing requirements for coding agents
  • Comprehensive profile documentation across all markdown files
  • Renamed "agent-first" to "agent-native" across codebase

Stats

  • 15 commits since v0.24.0
  • 22 unit tests + 10 E2E tests for new features
  • Profile tests: 17 total (13 existing + 4 new)
  • Zero clippy warnings, zero unsafe code violations

Full Changelog

v0.24.0...v0.25.0

Full Changelog: v0.24.0...v0.25.0

v0.24.0

13 Jun 19:13

Choose a tag to compare

What's New

This release introduces fabio context extract — a new command that builds a relationship graph of Fabric workspace items for use as structured context in coding agents, AI assistants, and external applications. The graph captures items (nodes), their relationships (edges), and workspace metadata, with three layers of discovery depth and incremental building support.

New Command: context extract

fabio context extract scans one or more Fabric workspaces and produces a graph of items and their relationships:

# Quick inventory (~8s for 20 workspaces)
fabio context extract --workspace $WS

# Full relationship discovery via definition scanning (~4m for 154 items)
fabio context extract --workspace $WS --deep --include-connections

# RDF-compatible JSON-LD output for graph databases
fabio context extract --workspace $WS --deep --format jsonld

Key capabilities:

  • Three-layer relationship discovery: properties (fast), definitions via --deep (thorough), connections via --include-connections
  • Parallel execution: concurrent workspace resolution, item listing, and detail fetching
  • 10 relationship types discovered automatically: child_of, has_endpoint, default_lakehouse, bound_to_model, reads_from, streams_to, queries, executes, definition_ref, workspace_ref
  • GUID scanning: discovers all cross-references by regex-matching UUIDs in decoded definitions against a registry of known item IDs — no type-specific parsing logic needed

Incremental Context Building

Agents can build context progressively without re-scanning everything:

# Fast inventory first
fabio context extract --workspace $WS --no-properties --output-file graph.json

# Deepen a specific workspace
fabio context extract --workspace $WS --deep --merge graph.json --output-file graph.json

# Add another workspace
fabio context extract --workspace $WS2 --deep --merge graph.json --output-file graph.json
  • --no-properties — ultra-fast mode (~3s for 20 workspaces), just item names and types
  • --output-file — persist graph to disk for reuse across sessions
  • --merge — load an existing graph and union new nodes/edges into it (idempotent)

JSON-LD Output Format

--format jsonld produces output that is simultaneously valid JSON (agents consume as-is) and valid RDF (importable into Neptune, Stardog, Jena, or any SPARQL endpoint):

{
  "@context": {"fabric": "https://api.fabric.microsoft.com/ontology/", ...},
  "@graph": [
    {"@id": "urn:fabric:item:uuid", "@type": "fabric:Notebook", "name": "...",
     "fabric:defaultLakehouse": {"@id": "urn:fabric:item:target-uuid"}}
  ]
}

No external RDF crate needed — pure serde_json construction.

Performance

Benchmarked against a live tenant with 20 workspaces and 154 items:

Mode Time Edges
Shallow (default) 7.7s 2
Deep + connections 4m 18s 88
No-properties (inventory only) ~3s 0

Improvements

  • Parallel workspace operations: workspace resolution and item listing run concurrently (2x shallow speedup vs sequential)
  • Smart definition skipping: SQLEndpoint, Dashboard, Datamart, PaginatedReport, MLModel, MLExperiment are skipped in deep mode (saves ~20% LRO calls)

API Behaviors Documented

  • bulkExportDefinitions API format documented (was previously undocumented in our codebase): POST /workspaces/{ws}/items/bulkExportDefinitions?beta=True with {"mode":"All"}. Benchmarked but rejected for context extract — requires read+write permissions per item, resulting in only 14/154 items exported vs 35/154 with per-item getDefinition. Completeness > speed for agent context.

Stats

  • 12 commits, 11 files changed, +2,393 / -14 lines
  • 15 unit tests + 20 E2E tests (10 offline dry-run + 10 live tenant validated)
  • Total test count: 1,657 (915 unit + 742 E2E)
  • Cross-compilation: 5/5 targets pass (linux x64/arm64, macOS x64/arm64, Windows x64)

Full Changelog: v0.23.0...v0.24.0

Full Changelog: v0.23.0...v0.24.0

v0.23.0

13 Jun 08:02

Choose a tag to compare

v0.23.0 — 2026-06-13

Highlights

SQL Endpoint Query — New fabio sql-endpoint query command for executing T-SQL queries directly against SQL analytics endpoints. Supports inline SQL, @file input, and stdin piping:

fabio sql-endpoint query --workspace $WS --id $SQLEP \
  --sql "SELECT TOP 10 * FROM dbo.sales ORDER BY order_date DESC"

Self-Correcting Error Hints — ~65 error paths now include structured hint fields with corrective guidance. When an agent makes a mistake (wrong flag, invalid input, missing permissions), the error response tells it exactly how to fix the issue — including valid enum values, example commands, and required roles.

Deploy YAML Parametersfabio deploy plan/apply --parameters params.yaml --env dev now supports YAML format alongside JSON for parameter files, reducing boilerplate in CI/CD pipelines.

New Features

  • sql-endpoint query: Execute T-SQL against SQL endpoints by ID with full input modes (inline, @file, stdin)
  • Self-correcting errors: Structured hint fields on ~65 error paths (deploy config/ordering/platform, ontology, auth, item operations) guide agents to correct their mistakes without external documentation
  • Deploy YAML parameters: Parameter files can now be YAML or JSON (auto-detected by extension)
  • Release script improvements: scripts/release.sh now validates dependency freshness and runs full checks (fmt + clippy + test + cross-check) before tagging

Documentation

  • Rewrote README intro for a friendlier, more accessible tone
  • Added fabric-cicd migration/compatibility guide to EXAMPLES.md
  • Added source directory creation approaches for fabric-cicd users
  • Restructured release workflow in AGENTS.md with comprehensive 8-step pre-release checklist

Stats

  • 12 commits, 27 files changed, +1256 / -316 lines
  • 21 dependencies updated to latest compatible versions
  • All 5 cross-compilation targets passing (linux x64/arm64, macOS x64/arm64, Windows x64)

Full Changelog: v0.22.0...v0.23.0

Full Changelog: v0.22.0...v0.23.0

v0.22.0

11 Jun 07:28

Choose a tag to compare

Full fabric-cicd Compatibility

This release makes fabio deploy a strict superset of Microsoft's fabric-cicd Python library. Source directories exported by fabric-cicd or Fabric's git integration work identically with fabio — while fabio adds plan/apply separation, content-hash skip detection, rename tracking, and dry-run that fabric-cicd lacks.

New Deploy Features

  • Config file support (--config <file> --env <name>) — JSON or YAML with per-environment workspace mapping, filtering, and option defaults
  • Git-diff selective deploy (--git-diff <ref>) — only deploy items changed since a git reference
  • Selective filtering--exclude-regex, --include-items, --include-folders, --exclude-folders
  • Workspace folder management — infers folder hierarchy from source directory, creates/moves/deletes folders automatically
  • Workspace ID auto-replacement — replaces 00000000-... placeholder with target workspace UUID (regex-based, context-aware)
  • Protected type deletion guards — Lakehouse, Warehouse, SQLDatabase, Eventhouse, KQLDatabase require --allow-delete-types to be deleted
  • Dataflow dependency ordering — topological sort for cross-dataflow references (same as DataPipeline)

fabric-cicd Behavioral Compatibility

All per-item-type behaviors from fabric-cicd are now matched:

  • .children/ KQL Database discovery under Eventhouses
  • .pbi/ directory exclusion from definitions
  • Notebook part ordering (.py before .json)
  • Report byPathbyConnection automatic transformation
  • creationPayload from .platform metadata (fallback)
  • SparkJobDefinitionV2 format auto-detection
  • ItemDisplayNameNotAvailableYet retry (up to 5 minutes)
  • Lakehouse enableSchemas inference from lakehouse.metadata.json
  • Shortcut self-reference resolution (lakehouse GUID, not workspace ID)
  • .platform included in definition parts but excluded from content hash (preserves idempotency)
  • Binary file graceful handling in parameter substitution

Documentation

  • New "Why fabio?" section in README comparing against Fabric CLI and fabric-cicd
  • Updated AGENTS.md with all new deploy behaviors and decisions
  • Added serde_yaml dependency for YAML config file support

Testing

  • 690 unit tests (9 new for deploy compatibility)
  • 11 E2E tests validating against fabric-cicd's sample workspace
  • Verified against live tenant: deployed items from microsoft/fabric-toolbox scenarios

Stats

  • 13 commits, 3 new modules (config.rs, folders.rs, git_diff.rs)
  • ~2,500 lines added across deploy module
  • 12 new CLI flags on deploy plan/apply

Full Changelog: v0.21.0...v0.22.0

Full Changelog: v0.21.0...v0.22.0