Welcome to the repository of the 3D City Database and software tools documentation starting from version 5.
This page is dedicated to developers. Please find the live version of the user manual here:
This documentation covers the 3D City Database (3DCityDB) v5, a free and open-source package for managing virtual 3D city models:
- 🏗️ Database schema with Feature, Geometry, Appearance, Metadata, and Codelist modules explained.
- 🛠️ citydb-tool for data import/export, database operations, ...
- 📄 Format support for CityGML and CityJSON with CQL2 query language support.
- 🐳 Docker integration for containerized deployment of database and tools.
- 🚀 Getting started guides with setup instructions and migration from previous versions.
- 🔄 Compatibility guide covering CityGML version migration, database upgrades, and format conversion between CityGML 1.0/2.0/3.0 and CityJSON.
This documentation uses a branch-based versioning system with automated deployment via GitHub Actions.
The version information is derived directly from the branch name, following this pattern:
- Main branch (
main): Deploys asedgeversion (latest development documentation) - Release branches (
release-X.Y): Deploy versioned documentation usingmajor.minorformat only
Examples:
release-1.0→ Documentation version1.0release-2.3→ Documentation version2.3release-10.15→ Documentation version10.15
The documentation deployment follows this workflow:
-
Main branch (
main):- Automatically deploys as
edgeversion - Represents the latest development documentation
- Automatically deploys as
-
Release branches (
release-X.Y):- Must be named with major.minor version format (e.g.,
release-1.0,release-2.3) - Automatically deploys versioned documentation
- Creates or updates corresponding GitHub releases with tag
vX.Y - The highest version number among all release branches becomes the
latestversion - The
latestalias points to the most recent stable release
- Must be named with major.minor version format (e.g.,
The GitHub Actions workflow (.github/workflows/ci.yml) automatically:
- Extracts version from the branch name (main → edge, release-X.Y → X.Y)
- Validates branch naming format
- Scans all
release-*branches to determine the latest version - Deploys documentation using mike for version management
- Creates GitHub releases with appropriate tags (vX.Y) for release branches
- Updates the
latestalias to point to the highest version number - Sets the default documentation version to
latest - Manages GitHub release "latest" flag to match the highest version
To create a new documentation release:
- Create a new branch named
release-X.Y(e.g.,release-1.0,release-2.5) - Push the branch - CI will automatically:
- Deploy the new documentation version
- Create a GitHub release with tag
vX.Y - If this is the highest version number, mark it as the new
latest
The CI automatically creates GitHub releases for each release branch:
- Tag format:
vX.Y(e.g.,v1.0,v2.5) - Release name:
Release vX.Y - Latest flag: Automatically set for the highest version number
- Release notes: Include links to documentation and version information
- Tag updates: Tags are automatically updated to point to the latest commit on release branches
- No releases for edge: Main branch (
edge) does not create GitHub releases
To update documentation content for an existing release version:
- Switch to the release branch: Check out the specific
release-X.Ybranch you want to update - Make your changes: Edit the documentation files in the
docs/directory as needed - Commit changes: Commit your updates to the release branch
- Push updates: Push the changes to the remote repository
- Automatic redeployment: The CI workflow will automatically trigger and:
- Redeploy the updated documentation for that version
- Update the git tag to point to the latest commit
- Update the corresponding GitHub release
Important notes:
- The version is automatically derived from the branch name
- GitHub releases and git tags are created/updated automatically for release branches
- Git tags are force-updated to always point to the latest commit on release branches
- Content updates preserve the existing version number and aliases
- The documentation will be redeployed with the same version identifier
- If updating the current
latestversion, the changes will be immediately visible on the default documentation site
Every pull request from a branch within this repository gets an ephemeral documentation preview so reviewers can see the rendered result before merging.
- URL:
https://docs.3dcitydb.org/pr/<PR-number>/— a bot comment with the link is posted on the PR and updated on every push. - Not in the version menu: previews are published straight into the
pr/folder on thegh-pagesbranch and never touchversions.json, so they do not appear in the version dropdown at the top of the docs. They also carry a preview banner and are markednoindex. - Automatic cleanup: a scheduled job removes previews of closed/merged PRs once a week (Mondays), and can also be run manually via workflow_dispatch.
- Fork PRs are excluded for now (a fork could inject content into the docs site).
The feature is implemented as a build/deploy split so it can be extended to forks later:
.github/workflows/pr-preview-build.yml— builds the preview withmkdocs.pr.ymlusing a read-only token (safe for untrusted code) and uploads it as an artifact..github/workflows/pr-preview-deploy.yml— publishes the artifact togh-pagesunderpr/<num>/and comments on the PR, using a write token viaworkflow_run..github/workflows/pr-preview-cleanup.yml— the weekly cleanup sweep.
mkdocs.pr.yml is a small overlay over mkdocs.yml (via INHERIT) that injects the per-PR
site_url, enables the overrides/main.html banner, and hides the version selector — the
production build (mkdocs.yml) is unchanged.