v0.6.2
0.6.2 — audit-driven release. Closes the 4 CRIT + 4 MAJ flagged by
the 0.6.1 audit and the 0.6.2 release-gate audit.
Highlights
- Image size cut by ~half —
latest-localdrops from 6.04 GB to 3.11 GB
(-48%), and a new slimlatest-remoteships at 547 MB. Details below. docling-servecontainer added under theremotecompose profile —
the backend now ships a slim image that delegates conversion to
quay.io/docling-project/docling-serve-cpu:v1.21.0over HTTP. Zero
HuggingFace Hub dependency in build or runtime.- Backend + embedding-service migrated from pip to
uv. Single source
of truth is nowpyproject.toml+uv.lock. BREAKING for anyone
bootstrapping fromrequirements*.txt. BAKE_MODELSdefault flipped fromtruetofalsein both
Dockerfiles. The only sanctioned HF touch in the project is now the
latest-localGHCR build inrelease.yml. BREAKING for operators
building from source — pass--build-arg BAKE_MODELS=trueexplicitly
to restore the old behaviour. See
docs/architecture/huggingface-dependency-map.md.- Reasoning stack made opt-in via
--build-arg WITH_REASONING=true
(#254). BREAKING — without the flag,/api/reasoningresponds503.
Pre-built images — major size reduction
The latest-local image dropped by ~48% (-2.93 GB) versus 0.5.1, and
the new remote variant ships at 547 MB — about an order of magnitude
smaller than 0.5.1's only published variant. Pulls are faster, hosts use
less disk, and cold starts are quicker.
| Image | 0.5.1 | 0.6.2 | Δ |
|---|---|---|---|
latest-local (Docling + models baked in) |
6.04 GB | 3.11 GB | -2.93 GB (-48%) |
latest-remote (talks to docling-serve over HTTP) |
— | 547 MB | new — -91% vs 0.5.1 local |
Where the bytes went:
uvmigration (#254) — smaller resolved venv vs pip, deterministic
lockfile, no transitive bloat that nobody noticed under pip's resolver.- Explicit CPU-only torch via
[tool.uv.sources]— drops ~3 GB of useless
CUDA wheels that used to come along for the ride onlatest-local. - Reasoning made opt-in —
docling-agent+mellea+ their LLM SDK
transitive weight move out of the default image. Rebuild with
--build-arg WITH_REASONING=trueto keep them. BAKE_MODELSopt-in for non-release builds — onlyrelease.yml
builds thelocaltarget with the ~1.3 GB Docling checkpoint bake; the
remotevariant carries none.- Hardened
.dockerignore— leaner build context, no spurious layer
churn on every rebuild.
Tags published
Both targets are tagged three ways for pinning flexibility:
ghcr.io/scub-france/docling-studio:0.6.2-remote/0.6-remote/latest-remoteghcr.io/scub-france/docling-studio:0.6.2-local/0.6-local/latest-local
Added
- Docling Serve container wired into compose (
#audit-10,dd1962e,bc9b4f8): newdocling-serveservice under theremotecompose profile, pinned toquay.io/docling-project/docling-serve-cpu:v1.21.0. Pairs withCONVERSION_MODE=remoteso the backend image stays slim and talks to a Docling Serve container over HTTP — no HF Hub dep on the build or runtime path. CI/release-gate E2E jobs now use this combo. - HuggingFace dependency map (
docs/architecture/huggingface-dependency-map.md): exhaustive list of every HF call site in the project, the single sanctioned touch point (release.yml→latest-local), and the maintenance rule that every new HF dep must be opt-in.
Changed
- Backend + embedding-service migrated from pip to uv (#254,
4d9bcf6):document-parser/requirements*.txtandembedding-service/requirements.txtremoved;uv.lockpluspyproject.toml's[project]/[dependency-groups]blocks are now the single source of truth. Dev workflow becomesuv sync --group dev(backend) /uv sync --group local(local Docling). PyTorch is redirected to the explicit CPU index via[tool.uv.sources]to avoid pulling the ~3 GB CUDA wheels intolatest-local. latest-localships with Docling model checkpoints baked at build time (#254,9d62337): suppresses the cold-start HF Hub download on the first/api/convert. End users get an instant first-convert from the pulled GHCR image..dockerignorehardened (#254,fe1dc16): tests, audit reports,.claude/,docker-compose*.ymland other build-irrelevant paths excluded — leaner build context, smaller intermediate layers.- Reasoning stack made opt-in via
WITH_REASONINGbuild-arg (#254,d1ed61e,bb2fe2b):docling-agentandmelleamoved out of[project.dependencies]into[dependency-groups.reasoning]. The defaultlatest-localimage no longer carries them —/api/reasoningresponds503(graceful degrade). Building with--build-arg WITH_REASONING=truerestores the 0.6.1 behaviour. BAKE_MODELSandBAKE_MODELdefault tofalse(#audit-10): bothdocument-parser/Dockerfileandembedding-service/Dockerfilenow opt out of HuggingFace Hub by default at build time. The only sanctioned bake isrelease.yml→latest-localGHCR image, which setsBAKE_MODELS=trueexplicitly on thelocalmatrix entry. See the new HF dependency map for details.
Fixed
- Remote-mode bbox overlay — second pass (
3936166, follow-up to the 0.6.1 fix): a code path the 0.6.1 patch missed still droppedself_refinServeConverter. The Linked-view canvas overlay now lights up consistently in remote mode. - Architecture test excludes generated files (
d29360d):tests/test_architecture.pyno longer scansuploads/,data/or other runtime artifacts — keeps the layering rules clean without false positives.
CI
STUDIO_MODE_ENABLEDopted in on the main CI too (8a61c22): the@criticalUI suite needs the legacy/studiosurface; previously onlyrelease-gate.ymlset the flag, leavingci.ymlE2E UI silently exercising the wrong surface.- Docling model bake skipped during CI builds (
051ac4a,#audit-10): bothci.ymlE2E jobs and bothrelease-gate.ymlE2E jobs (e2e-api,e2e-ui) now build the image withBAKE_MODELS=falseto avoid HuggingFace Hub 429 rate limits on shared GHA runners.release.ymlkeepsBAKE_MODELS=trueso the published image still carries the baked checkpoints. - Unit test no longer pulls HF tokenizer (
#audit-10):test_rechunk_with_serve_document_jsonwas instantiating a realLocalChunker, forcingHybridChunkerto downloadsentence-transformers/all-MiniLM-L6-v2. Now mocks theDocumentChunkerport — same intent, no public network in a unit test.
BREAKING CHANGES
- Backend dev workflow migrated to uv:
pip install -r document-parser/requirements*.txt/pip install -r embedding-service/requirements.txtno longer work — these files are gone. Useuv sync(--group devfor tests,--group localfor local Docling mode). Any third-party CI / IDE bootstrap script that relies on the oldrequirements*.txtlayout must migrate. - Reasoning runtime made opt-in: building
latest-localwithout--build-arg WITH_REASONING=trueproduces an image where/api/reasoningresponds503. Operators who depended on the 0.6.1 default-on reasoning stack must add the build-arg to their pipeline. BAKE_MODELSdefault flipped fromtruetofalsein bothdocument-parser/Dockerfileandembedding-service/Dockerfile. Operators who build their ownlocalimage from source and rely on the "instant first/api/convert" behaviour must now pass--build-arg BAKE_MODELS=trueexplicitly. The publishedghcr.io/.../docling-studio:latest-localimage is unaffected —release.ymlopts in. Pulling that image (the documented path) continues to work as before. Seedocs/architecture/huggingface-dependency-map.mdfor the rationale and the full HF call-site map.