Spaces:
Running
Contributing to Docling Studio
Thank you for your interest in contributing to Docling Studio! This guide will help you get started.
Getting Started
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/<your-username>/Docling-Studio.git cd Docling-Studio - Create a branch for your work:
git checkout -b feature/my-feature
Development Setup
Backend (Python 3.12+)
cd document-parser
python -m venv .venv && source .venv/bin/activate
# Remote mode (lightweight β delegates to Docling Serve)
pip install -r requirements.txt
# Local mode (full β runs Docling in-process)
pip install -r requirements-local.txt
pip install ruff pytest pytest-asyncio httpx # dev tools
uvicorn main:app --reload --port 8000
Frontend (Node 20+)
cd frontend
npm install
npm run dev
Code Quality
Backend β Ruff
We use Ruff for linting and formatting Python code.
cd document-parser
ruff check . # lint
ruff check . --fix # lint with auto-fix
ruff format . # format
Frontend β TypeScript + ESLint + Prettier
cd frontend
npm run type-check # type check (vue-tsc)
npx eslint src/ # lint
npx prettier --check src/ # check formatting
npx prettier --write src/ # auto-format
Running Tests
# Backend (199 tests)
cd document-parser
pytest tests/ -v
# Frontend (129 tests)
cd frontend
npm run test:run
All tests must pass before submitting a PR.
Submitting Changes
- Commit with clear, descriptive messages
- Push your branch to your fork
- Open a Pull Request against
main - Describe what changed and why in the PR description
- Ensure CI passes (tests + build)
Branching Strategy
We follow a simplified Git Flow:
| Branch | Purpose |
|---|---|
main |
Always stable β latest release merged back |
release/X.Y.Z |
Release preparation (freeze, bugfixes, changelog) |
feature/* |
New features β PR to main |
fix/* |
Bug fixes β PR to main (or release/* for pre-release fixes) |
hotfix/X.Y.Z |
Urgent fix on a released version β PR to main |
Rules:
- All PRs target
main(never stack branches on other feature branches) release/*branches are created frommainwhen preparing a releasehotfix/*branches are created from the release tag
Versioning
We use Semantic Versioning: MAJOR.MINOR.PATCH.
- Source of truth: the git tag (
vX.Y.Z) package.jsonversion should match the current release branch- The build injects the version automatically (Vite
__APP_VERSION__for frontend,APP_VERSIONenv var for backend)
Release Process
Create the release branch from
main:git checkout main && git pull git checkout -b release/X.Y.ZOn the release branch, only:
- Bug fixes
- Move
[Unreleased]to[X.Y.Z] - YYYY-MM-DDinCHANGELOG.md - Update
versioninfrontend/package.json
Merge into
mainvia PR, then tag onmain:git checkout main && git pull git tag vX.Y.Z git push origin vX.Y.ZThe tag triggers the release workflow which builds and pushes the Docker image to
ghcr.io.
Docker Image Tags
Each release produces two image variants:
| Tag | Description |
|---|---|
X.Y.Z-remote |
Exact version β lightweight (Docling Serve) |
X.Y.Z-local |
Exact version β full (in-process Docling) |
X.Y-remote |
Latest patch of this minor β lightweight |
X.Y-local |
Latest patch of this minor β full |
latest-remote |
Latest stable β lightweight |
latest-local |
Latest stable β full |
Hotfix
git checkout vX.Y.Z # from the release tag
git checkout -b hotfix/X.Y.Z+1
# fix, commit, PR to main
git tag vX.Y.Z+1 # tag on main after merge
Changelog
We follow Keep a Changelog. Every PR should add a line under [Unreleased] in CHANGELOG.md. The release branch moves [Unreleased] to the versioned section.
Pull Request Guidelines
- Keep PRs focused β one feature or fix per PR
- Add tests for new functionality
- Update documentation if behavior changes
- Follow existing code style and conventions
Reporting Issues
- Use GitHub Issues to report bugs or request features
- Include steps to reproduce for bugs
- Mention your OS, Python/Node version, and Docker version if relevant
License
By contributing, you agree that your contributions will be licensed under the MIT License.