MiniLake Is a Local Databricks API Emulator with SQL, Delta Lake and Spark MiniLake, an open-source project from dmux, has released a local Databricks API emulator that executes SQL on DuckDB, writes real Delta Lake files and runs real spark-submit jobs in containers, installable via `pip install minilake` or a GHCR Docker image and reachable at http://localhost:8000. MiniLake speaks the Databricks REST API on the wire so databricks-sdk, the Databricks CLI, Terraform and Asset Bundles work against localhost with no account or API key, and it exposes 67 tools, 8 resources and 4 prompts at /mcp for LLM agents. The project says out-of-scope calls return a 501 NOT_IMPLEMENTED error rather than a simulated success, and the image downloads nothing at runtime, so it runs air-gapped. Unity Catalog, for real Catalogs, schemas, tables and volumes with full CRUD. Every catalog is its own DuckDB database file, so catalog.schema.table addressing is native — not a regex rewrite. MiniLake is a local Databricks API emulator with real SQL , real Delta Lake and real Spark job execution . Point databricks-sdk , the Databricks CLI, Terraform, Asset Bundles or an LLM agent at http://localhost:8000 — no account, no API key, no cloud bill. pip install minilake && minilake --port 8000 PyPI docker run -p 8000:8000 ghcr.io/dmux/minilake:latest GHCR Then open http://localhost:8000/ui/ for the built-in SQL workspace. The image downloads nothing at runtime — it works air-gapped. Fake endpoints let broken code pass. MiniLake executes your SQL on DuckDB, writes real Delta files, and runs real spark-submit jobs in containers — so a green test locally means something. Statement execution on real DuckDB: INLINE and EXTERNAL LINKS dispositions, JSON ARRAY / ARROW STREAM / CSV formats, and a result manifest that carries true column types. EXTERNAL Delta tables are genuine Parquet plus a delta log/ . INSERT , UPDATE and DELETE are routed through a real Spark job; reads go through DuckDB's delta scan . spark python task runs spark-submit in a sibling container and returns actual stdout. Real DAG scheduling honours depends on and run if , with independent branches in parallel. spark.table "cat.sch.tbl" resolves against MiniLake through the official UCSingleCatalog connector — the same protocol Spark speaks to a real workspace. An Athena-style editor at /ui : Monaco with catalog-aware completion, a virtualized result grid, charts, CSV/JSON export, saved queries, query history — and an embedded JupyterLab. Point the databricks provider at localhost and terraform apply creates real catalogs. Verified on every test run: the real provider is driven through apply , plan and destroy , and a second plan has to come back empty. databricks bundle deploy and bundle run work end to end — jobs execute for real. 67 tools, 8 resources and 4 prompts at /mcp — including composites that collapse a five-call sequence into one, and a SQL-dialect resource that stops agents writing Spark SQL. One POST / minilake/reset gives every test a clean workspace without restarting the container. /health , /ready and /services round out the control plane. File-backed notebook and file storage with chunked uploads. Secrets are real CRUD whose values are only ever resolvable inside a job's environment — exactly like Databricks. Real execution DuckDB's delta extension and the Delta / Unity Catalog jars are baked in at build time. The image downloads nothing at runtime — provable with docker run --network none . Failures come back as {"error code", "message"} , so the SDK raises its normal typed exceptions. Anything out of scope returns a loud 501 NOT IMPLEMENTED instead of a convincing lie. MiniLake speaks the Databricks REST API on the wire, so every client you already use keeps working — the same calls, the same response shapes, the same typed errors. STRING , LONG , DECIMAL 10,2 , ARRAY