Changelog

v0.2.0

DAG list redesign, metadata, and search.

DAG list

  • The file browser is now a full-width DAG list showing each DAG’s ID, path, description, tags and creator — not just the file path.
  • Search box filters by DAG ID, path, description, tags, owner or creator.
  • Switch between a card view and a compact table view (your choice is remembered).
  • GET /files is enriched with parsed DAG metadata (dag_id, description, tags, owner) and the draft author, cached per file so listings stay fast.

Fixes

  • A brand-new DAG saved as a draft but never deployed no longer disappears from the file browser — it now shows with a “not deployed” badge so you can reopen and finish it.

v0.1.0

Initial public release.

Visual editor

  • React Flow canvas: searchable, category-grouped operator palette with drag-and-drop.
  • Dependency edges between tasks and TaskGroups, including group-to-group connections.
  • Visual grouping: box-select, Ctrl+G, drag-into-frame, rename/delete with confirmation, nested groups.
  • Edge editing: Label and per-task trigger_rule.
  • Typed parameter editors: key:value dict editor, rich-text (WYSIWYG) fields, connection picker for conn_id params, expandable raw-Python fields.
  • DAG settings modal with a chip-based cron builder; default_args (owner, email, retries, retry_delay).

Code editor & round-trip

  • CodeMirror 6 editor with Split (canvas + code) mode.
  • Byte-exact round-trip via libcst: unchanged graphs regenerate the source file identically.
  • Surgical, kwarg-level edits for changed statements — hand-written formatting elsewhere is preserved.
  • Three-tier parsing: DagSmith-authored DAGs, typical hand-written DAGs (@dag, with DAG, >>, chain(), nested TaskGroups), and dynamic constructs (loops, .partial().expand()) shown as read-only opaque blocks.
  • "Load from bundle" to pull the currently deployed file back into a draft.

Provider catalog

  • Automatic operator/sensor introspection across installed Airflow providers — no hand-maintained block list.
  • MRO-aware parameter discovery for operators that forward **kwargs to a parent class (SQL-family operators).
  • Cached catalog with ETag-based conditional requests.

Draft → Deploy

  • Versioned drafts in Airflow’s own metadata database, with autosave, history and restore.
  • Pre-deploy validation: fast syntax check plus a full DagBag import in an isolated subprocess.
  • Atomic, backed-up writes with optimistic-locking conflict detection and a diff view on conflict.

Teams & git

  • Directory-scoped teams: members-only editing, team-tagged DAGs, admin bypass.
  • Per-file team reassignment by admins, independent of directory.
  • Git commit on deploy for bundles that are git repositories.
  • Optional per-team git remote with a Commit & Push button (GitHub and GitLab), and push-on-deploy.
  • JSONL audit log for deploys, git pushes and team changes.

Security

  • Deploy disabled by default; explicit opt-in required.
  • Every endpoint authorized through the Airflow Auth Manager.
  • User DAG code never executed in the api-server process — only in an isolated, time-limited subprocess.
  • Bundle-root path confinement with symlink-escape rejection.

Quality

  • Backend test suite (pytest) including a byte-exact round-trip corpus; ruff linting.
  • Frontend unit tests (vitest) and type checking (tsc).
  • GitHub Actions CI on every push/PR; PyPI trusted-publishing release workflow (no stored tokens).
  • Apache-2.0 licensed.