MiniLake
MiniLake is a local emulator of the Databricks REST API, for developing and testing
databricks-sdk, CLI and Terraform code without a workspace.
SQL statements run on DuckDB. EXTERNAL Delta tables are Parquet files with a _delta_log/,
and writes to them go through a generated Spark job. Jobs run spark-submit in a sibling
Docker container. Everything else in the API is either stored and read back, or answers
501 NOT_IMPLEMENTED. It is meant for one developer on localhost, not as a shared server.
Website: https://dmux.github.io/minilake/
Run it
pip install minilake
minilake --port 8000
# or
docker run -p 8000:8000 ghcr.io/dmux/minilake:latest
curl http://localhost:8000/_minilake/health
The web SQL editor is at http://localhost:8000/ui/. Any token is accepted. The image downloads nothing at runtime, so it also works offline (details).
Use it
from databricks.sdk import WorkspaceClient
w = WorkspaceClient(host="http://localhost:8000", token="dev")
w.catalogs.create(name="sales")
w.schemas.create(name="store", catalog_name="sales")
wh = w.warehouses.create(name="dev", cluster_size="Small")
def sql(statement):
return w.statement_execution.execute_statement(warehouse_id=wh.id, statement=statement)
sql("CREATE TABLE sales.store.orders (id BIGINT, customer VARCHAR)")
sql("INSERT INTO sales.store.orders VALUES (1, 'Ana')")
print(sql("SELECT * FROM sales.store.orders").result.data_array) # [[1, 'Ana']]
Documentation
- Getting started
- Configuration: environment variables, persistence, TLS
- Databricks SDK
- Terraform and Asset Bundles
- Spark and Delta Lake
- Web UI
- MCP server: optional,
MINILAKE_MCP=1, for LLM agents - Testing and development
- FEATURES.md: status of every service, with design notes
- API coverage: every SDK endpoint probed through the
databricksCLI - Emulation roadmap
Known Gaps
These are deliberate. MiniLake targets one developer running it locally.
- No authentication. Any token is accepted. SCIM users and personal access tokens are records, not credentials.
- No access control. The Permissions and Grants APIs store and return what you give them, and nothing is enforced. A test that passes here says nothing about grants in a real workspace.
- The SQL dialect is DuckDB's, not Spark SQL.
- Clusters are a state machine. There is no Spark on them; Spark runs through Jobs.
- MANAGED tables are DuckDB tables with no files, so Spark cannot see them. Use EXTERNAL Delta tables when Spark has to read the data.
- Single process. DuckDB is single-writer, so concurrent load serializes on a lock.
- Not implemented, returns 501: Repos, DLT, Model Registry, Vector Search, Lakeview and Genie, Delta Sharing, and non-Python notebook languages.
- Uneven test coverage.
jobs.py,sql_statements.pyandunity_catalog.pyare tested mostly on the happy path.
MiniLake does not reproduce every quirk of the real service. Tests here run against the
real databricks-sdk, and the Terraform provider and databricks bundle are exercised
end to end, but a green run locally is not a substitute for a run against Databricks.
Contributing
See CONTRIBUTING.md.
License
MIT. See LICENSE.
Metadata
Release files for minilake 1.9.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| minilake-1.9.3.tar.gz | 7.7 MB | With provenance | Details for minilake-1.9.3.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| minilake-1.9.3-py3-none-any.whl | Python 3 | none | any | Details for minilake-1.9.3-py3-none-any.whl |
Total release size: 14.6 MB
Release files / minilake-1.9.3.tar.gz
| Download URL | minilake-1.9.3.tar.gz |
|---|---|
| Size | 7.7 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
86be143f84024edc9cc930602d9117d3b01a4b1ee8ae39ac43b643354f24cb50
|
|
BLAKE2b-256 checksum How to use checksums |
c6dfb712625fa2363c4d92c9f5f3fa6a1d8d232e29d94f72cd6a7f78923d1d11
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.
Transparency logRelease files / minilake-1.9.3-py3-none-any.whl
| Download URL | minilake-1.9.3-py3-none-any.whl |
|---|---|
| Size | 6.9 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b14ab32cc3d4354adabd575f22880ec115de5a71b10be8f9f90066ed9c57f05d
|
|
BLAKE2b-256 checksum How to use checksums |
f3431452cca1255e2606a390d6b6e65f7befd33498c9f83ae2eb3182a33964c5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.
Transparency logSecurity for minilake 1.9.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for minilake-1.9.3.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.