This is the documentation website for DuckLake, a lakehouse format built on DuckDB. It's a Jekyll site hosted on GitHub Pages.
docs/
preview/ # In-progress docs for next release (default target)
stable/ # Published docs for current release
(both share the same subdirectory layout below)
βββ index.md # Landing page
βββ specification/ # DuckLake format specification
β βββ introduction.md
β βββ data_types.md
β βββ queries.md
β βββ tables/ # Catalog table definitions
βββ duckdb/ # DuckDB extension user guide
βββ introduction.md
βββ usage/ # Core usage docs (connecting, storage, config, etc.)
βββ advanced_features/ # Partitioning, views, constraints, encryption, etc.
βββ maintenance/ # Checkpointing, cleanup, snapshots, file merging
βββ metadata/ # Adding/listing files
βββ guides/ # Tutorials (access control, backups, object storage)
βββ migrations/ # Migration guides (e.g., duckdb_to_ducklake)
_data/
menu_docs_stable.json # Navigation sidebar for stable docs
scripts/ # Utility scripts (Python, Bash)
CONTRIBUTING.md # Style guide and contribution rules
- Front matter: Every doc page needs
layout: docuand atitleproperty. Do not repeat the title as an h1. - Headers: Use h2 (
##), h3 (###), h4 (####) only. Chicago-style headline capitalization. - Cross-references: Use Jekyll link tags:
{% link docs/<version>/path/to/page.md %}(match the docs version you're editing). - SQL style: UPPERCASE keywords, lowercase functions, snake_case names, 4-space indent, semicolons.
- Code blocks:
sqlfor SQL,pythonfor Python,batchfor shell with$prompt,bashfor shell without prompt,textfor output,consolefor errors. - Callout boxes:
> Note,> Warning,> Tip,> Bestpractice,> Deprecated. - Lists: Use
*for unordered lists, 4-space indent for nesting. - File naming:
snake_case.md. - New pages: Create the
.mdfile and add an entry to the matching_data/menu_docs_<version>.json.
- Formatted with
black --skip-string-normalization(single quotes preferred). - Virtual environment at
venv/β activate withsource venv/bin/activate.
Run scripts/lint.sh to check everything:
markdownlintfor Markdown filesblackfor Python scriptsvalefor prose style
- Determine if it extends an existing page or needs a new one.
- Edit/create the Markdown file in the appropriate
docs/stable/subdirectory. - If creating a new page, add it to
_data/menu_docs_preview.jsonin the correct position. - Follow the style guide in CONTRIBUTING.md.
- Run
scripts/lint.shto verify.
scripts/update_docs.py automates documentation updates from merged PRs in duckdb/ducklake:
python scripts/update_docs.py 277 # single issue (preview)
python scripts/update_docs.py 277,286 # multiple issues
python scripts/update_docs.py --full-batch # all matching open issues
python scripts/update_docs.py 277 --dry-run # print prompt only
python scripts/update_docs.py 277 --docs-version stable # target stable docs
python scripts/update_docs.py 277 --model opus # use a different model- This repo:
duckdb/ducklake-web(documentation site) - DuckLake core:
duckdb/ducklake(the lakehouse format + DuckDB extension) - Issues with
[ducklake/#NNN]in the title link to PRs in the core repo that need doc updates.