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.
Dag