0.1.0 — Initial release
The first useful OpenDOPS release. A Python package named opendops that installs a dops
command, starting with the Databricks domain.
Added
dops adopt— bring an existing dbt or Databricks project under OpenDOPS management. It infers metadata from what’s already on disk (dbt adapter + schema fromprofiles.yml; eachdatabricks.ymlregistered as a bundle with its blueprint inferred from the resources it defines) and writes the.dops/registry — without generating, moving, or rewriting any of your files. Auto-detects the type, is idempotent, and has a--checkdry run. Per-domain forms (dops dbx dab repo adopt,dops dbt adopt,dops dbx notebook adopt) give explicit control.dops web— a web control plane (“an ArgoCD for data engineering”): a local browser dashboard where each project is a single pane of glass — inventory, structural health, the per-target deployment matrix, a job-task DAG view, a read-only code browser, native deploy commands, and blueprint-sync diffs.dops web --livereads thedops_versiontags off your actually-deployed resources and flags every cell synced / out of sync / not deployed — true desired-vs-actual drift (opt-in, uses your databricks CLI auth, degrades to “unknown” offline). Local-first, ships in the wheel (stdlib HTTP + Jinja + vendored assets, no Node). A third adapter over the same UI-agnostic core as the CLI and TUI.dops mcp— a Model Context Protocol server (a fourth adapter over the same core) exposing your projects’ inventory, checks, deployment drift, pipeline DAGs, blueprint divergence, and source to an AI agent (Claude Desktop / Code, Cursor) so it can help configure and optimize each resource — read-only, with OpenDOPS as the grounded source of truth.pip install 'opendops[mcp]'.dops dbx dab repo init— scaffold a Databricks DAB monorepo (bundles, libs, conf, scripts, metadata, and six GitHub Actions workflows).dops dbx dab repo doctor/repo explain— validate and explain the monorepo.dops dbx dab bundle add— generate an independently deployable, Python-first bundle from thedatabricks-python-wheel-jobblueprint.dops dbx dab bundle list/check— Rich tables and structural diagnostics.dops dbx dab bundle commands— print native Databricks CLI commands with branch-derived sandbox prefixes.dops dbx dab bundle changed— detect changed bundles between two git refs, with--format github-jsonfor CI matrices.dops dbx dab gha generate— generate workflows that call the Databricks CLI directly.dops dbx notebook— a non-DAB Databricks subsystem for notebook/workspace projects deployed via nativedatabricks sync(init / check / commands / gha generate).- Six more bundle blueprints —
databricks-dlt-pipeline,databricks-multi-task-workflow,databricks-sql-job,databricks-unity-catalog(governance-as-code), anddatabricks-alerting-job(email/webhook notifications + health rules) join the originaldatabricks-python-wheel-job.bundle checkandbundle commandsare now blueprint-aware — they adapt to jobs, pipelines, or governance bundles automatically. dops dbt— a second domain. Scaffolds standardized dbt projects (staging/marts models, sources, seeds, tests, env targets, CI) and runs them with the nativedbtCLI. Branch-isolated sandboxes build into aDEV_<branch>_<schema>target schema.- Reviewable examples — every blueprint’s actual rendered output is committed under
examples/. - Context-aware CLI — run
dops check,dops upgrade, ordops commandsfrom inside any project and OpenDOPS auto-detects the type (bundle / notebook / dbt).dops listshows every OpenDOPS project in a tree. - Repo-wide checks —
dops check --allvalidates every project at once (with--strictand--json);repo initships a.pre-commit-config.yamlthat runs it on every commit. - Policy enforcement — declare org standards once in
.dops/policy.yaml(required owner, allowed blueprints, required targets, naming) andcheckenforces them everywhere. Opt-in; a no-op until you enable a rule. JSON output added tocheck,list, andbundle version. dops ui— an interactive Textual cockpit for the things a TUI does better than flags: a scaffolding wizard (pick a type + blueprint and fill a form instead of memorisingbundle add --blueprint … --owner …) and interactive upgrade (see each changed file, read a live diff, and apply or accept the blueprint’s version for conflicts). Also browses projects across domains and shows per-target versions. Install withpip install 'opendops[ui]'; built as a thin layer over the same core engine the CLI uses.- Deployment versioning — each bundle’s
databricks.ymldeclares aversionper target (the source of truth for what’s deployed where; promote by bumping it). Resources are stamped with provenance tags (dops_version,dops_git_sha,dops_env,dops_bundle,dops_blueprint), CI stamps the commit SHA at deploy, anddops dbx dab bundle version <name>shows the per-target versions. upgrade— pull blueprint improvements into existing projects without clobbering local edits. Each project records a.opendops-lock.yaml;upgradere-renders the blueprint and classifies every file as add / update / conflict / remove (conflicts land as.opendops-newsidecars). Available asdops dbx dab bundle upgrade,dops dbx notebook upgrade, anddops dbt upgrade.- Branch-isolated sandbox deployments via a
DEV_<sanitized_branch_name>_prefix — on bundle resource names (DAB) or workspace folders (notebooks). - Verified against the real CLIs — the generated output is checked by the actual tools, not
just golden comparisons: all six DAB blueprints pass
databricks bundle validate(CLI v1.3.0) with zero schema diagnostics, and the dbt project passes the realdbt deps+dbt parse(dbt 1.11 + databricks adapter).make test-integrationruns these; they skip cleanly when a CLI is absent. Generated projects now ship a.gitignoreso build artifacts (target/,dbt_packages/,.databricks/, Python caches,.opendops-newsidecars) stay out of version control. - Deploy-ready generated YAML — every blueprint was audited against the real Databricks and
dbt schemas so the rendered output passes
databricks bundle validate/dbt parseas-is: Python jobs ship a job cluster (spark_version/node_type_idbundle variables), Unity Catalog provenance lives in the schemacomment, dbt profiles tolerate unset credentials, and webhook alerts are opt-in. Notebook projects deploy under/Workspace/Shared. An opt-in integration test (make test-integration) runs the real CLIs against the committed examples in CI. - Provenance everywhere — dbt projects carry a
query-commentthat stamps the project, target, and git SHA into every warehouse query (the dbt-native equivalent of resource tags); notebook deploys write a_dops_provenance.jsonmarker into the workspace folder. Everyupgraderecords the blueprint version it came from and advanced to, in both the.opendops-lock.yamland the project metadata. - Friendlier failures — running changed-detection outside a git repository now raises a clear,
actionable error instead of a raw traceback. A parity test pins the generated
sandbox-prefix.shto the Python prefix engine so the two can never silently drift. - Rich-based terminal output and a uv-first developer workflow.
Principles
- OpenDOPS owns structure; the Databricks CLI owns execution.
- Stable targets; runtime prefixes —
databricks.ymlis never mutated per branch.
Roadmap
- Additional Databricks blueprints (multi-task, DLT, SQL, notebook).
- New domains:
dops dbt,dops airflow,dops snowflake. - A future terminal UI built as a thin layer over the same core engine.
See the blueprints page for details, or follow along on GitHub.