Consolidated, single-repository prototype of the ownCloud documentation. It replaces the previous 9-repo setup (1 orchestrator + 7 content repos + a custom UI repo) with one monorepo built by Antora.
Live (GitHub Pages): https://doc.owncloud.com
| Area | Legacy | Here |
|---|---|---|
| Repos | 9 | 1 (this repo) |
| Versions | git branches + backporting | folders under content/<product>/<version>/ |
| Branch model | master + N version branches per repo |
main only |
| Search | Elasticsearch + custom index extension + CI secrets | Pagefind (static, build-time) |
| UI | custom Gulp/Browserify/jQuery docs-ui + ui-bundle.zip |
stock Antora default UI + ui/supplemental/ |
| Content sources | 7 remote GitHub repos × branches | local folders, authored here (upstream mirror retired) |
| Global attributes | fetched from GitHub at build | local global-attributes.yml |
Antora + AsciiDoc are kept (native multi-version/multi-component support).
site.yml Antora playbook (local content only)
package.json antora + asciidoctor + pagefind toolchain
antora-extensions/ comp-version, sitemap-cleanup, global-attributes loader
asciidoc-extensions/ tabs, remote-include
global-attributes.yml site-wide AsciiDoc attributes (local)
ui/supplemental/ branding + Pagefind modal search on the stock UI
content/<product>/<ver>/ each version is a folder with its own antora.yml
sync/ retired upstream-mirror tooling, kept as provenance
.github/workflows/ci.yml build → pagefind → deploy to GitHub Pages
Each product version is a folder content/<product>/<version>/ carrying its own
antora.yml, whose version: key repeats the folder name
(content/ocis/8.2/antora.yml → version: '8.2'). site.yml aggregates them by
glob (content/ocis/*, content/server/*, …), so the published version set is
exactly the folder set on disk — adding or removing a version needs no playbook
edit.
Two components are versionless and have no version folder: content/main (the
ROOT landing component, version: ~) and content/webui (a single rolling
component).
Folder names are pure version numbers — 8.2, 10.16, 12.7. There is
deliberately no master, next, dev, or latest folder, and none should
be added:
- A moving path segment is a broken promise.
…/ocis/next/points at a different release every few months, so links, bookmarks, and indexed search results silently retarget to content the reader was never sent to.…/ocis/8.3/means one release forever. - Release rollover moves no URLs. The in-development line already lives at
its real number, marked
prerelease: truewith adisplay_version: '8.3 (dev)'(seecontent/ocis/8.3/antora.yml). Shipping it means dropping those two keys — no path changes, no redirects. With anextfolder, every page of the release would change its URL on ship day. - The version is legible everywhere it matters — folder, path, PR diff, and
URL. A reviewer reads
content/ocis/8.2/…in a diff and knows the target version without consulting a branch→version mapping. latestis generated, never a source folder.antora-extensions/latest-alias.jspublishes/<product>/latest/as a tree of redirect stubs pointing at the newest non-prerelease version;site.ymldeliberately does not setlatest_version_segment.
See the dev-version note under Versions imported for what moves together on release rollover.
There are no branches, so there is nothing to cherry-pick. Backporting means making the same edit in every version folder that should carry it:
content/ocis/8.3/modules/.../page.adoc original edit
content/ocis/8.2/modules/.../page.adoc same edit
content/ocis/8.1/modules/.../page.adoc same edit
One PR then carries the change for every affected version: the reviewer sees the
whole backport at once, and no version is deferred to a follow-up that never
happens. The cost is N copies of the hunk instead of one commit replayed N times;
in exchange there is no conflict resolution, which matters because these docs
genuinely diverge per version (paths, attribute values, screenshots). Text that
is truly version-independent belongs in a shared partial or a
global-attributes.yml attribute rather than in N copies.
ℹ️
modules/is authored here. The upstream mirror is retired — the legacyowncloud/docs-*repos no longer feed this repo, so every file undercontent/<product>/<version>/includingmodules/is edited directly in this repo and a PR againstmainis the only way content changes land. Nothing overwrites your edits; the backport rule above is the whole mechanism.
sync/is kept as a historical record of which upstream repo and branch each folder was imported from.sync/sync-repo.shmirror-replacesmodules/and would discard local edits, so it refuses to run — seesync/manifest.yml.
Delete the folder:
rm -r content/server/10.15That is the whole content change — site.yml needs no edit, because it globs.
Three bits of bookkeeping remain:
- Update the hand-maintained
latest-*/previous-*/current-*attributes inglobal-attributes.ymlif the removed version appeared in them. Thelatestalias itself moves automatically (latest-alias.jsderives it from the newest non-prerelease version). - Server only: drop the segment from
PUBLISHED_VERSIONSinui/supplemental/js/go-redirect.js;test/go-redirect.test.jsfails the build if that list drifts from the publishedpublic/server/*trees. Legacygo.php?to=links for the removed version then fall back tolatest, which is the intended safety net. - Accept that the version's URLs now 404 — nothing redirects a retired version tree. Drop a version only when its inbound links are acceptable casualties, or add redirects deliberately.
| Product | Versions (folder) | Notes |
|---|---|---|
| main | — | ROOT landing component (versionless) |
| server | 11.0, 10.16, 10.15 | no 11.0 branch upstream yet; master is the 11.0 line and is latest |
| ocis | 8.3 (dev), 8.2, 8.1, 8.0, 7.3 | master→8.3 (prerelease); 8.2 branch is latest |
| webui | — | single rolling component (versionless) |
| desktop | 7.2 (dev), 7.1, 6.0, 5.3 | master→7.2 (prerelease); 7.1 branch is latest |
| ios | 12.7, 12.6 | 12.7 branch is latest (released 2026-05-19) |
| android | 4.8 (dev), 4.7 | 4.8 branch imported as prerelease; 4.7 branch is latest |
⚠️ Dev version numbers are provisional. The in-development folders (ocis/8.3,desktop/7.2,android/4.8, …) are markedprerelease: trueand carry a(dev)display_version. They were the upcoming numbers chosen at import time — rename the folder + dropprereleaseon actual release.On release rollover, two things move together: drop
prerelease+display_versionfrom the released folder'santora.yml, and bump thelatest-*/previous-*attributes inglobal-attributes.yml. Open the next dev line by copying the released folder to its new number and re-adding the two keys.The branch references in the Notes column above are historical: they record which upstream
owncloud/docs-*branch each folder was last imported from before the mirror was retired. They are no longer live mappings.
npm ci
npm run antora # build to public/
npm run pagefind # inject static search index into public/pagefind/
npm run serve # http-server on :8080Node 22 is recommended (matches CI).
Star this repo and Watch for release notifications!
We welcome contributions! Please read the Contributing Guidelines and our Code of Conduct before getting started.
- Rebase Early, Rebase Often! We use a rebase workflow. Always rebase on the target branch before submitting a PR.
- Dependabot: Automated dependency updates are managed via Dependabot. Review and merge dependency PRs promptly.
- Signed Commits: All commits must be PGP/GPG signed. See GitHub's signing guide.
- DCO Sign-off: Every commit must carry a
Signed-off-byline:git commit -s -S -m "your commit message" - GitHub Actions Policy: Workflows may only use actions that are (a) owned by
owncloud, (b) created by GitHub (actions/*), (c) verified in the GitHub Marketplace, or (d) verified by the ownCloud Maintainers. Pin every action to its full commit SHA.
Do not open a public GitHub issue for security vulnerabilities.
Report vulnerabilities at https://security.owncloud.com -- see SECURITY.md.
Bug bounty: YesWeHack ownCloud Program
This project is licensed under the AGPL-3.0.
The Kiteworks Open Source Program Office, operating under the ownCloud brand, launched on May 5, 2026, to steward the open source ecosystem around ownCloud's products. The OSPO ensures transparent governance, license compliance, community health, and sustainable collaboration between the open source community and Kiteworks, which acquired ownCloud in 2023.
- OSPO Home: https://kiteworks.com/opensource
- GitHub: https://github.com/owncloud
- ownCloud: https://owncloud.com
For questions about the OSPO or licensing, contact ospo@kiteworks.com.
The OSPO is driving a strategic relicensing of ownCloud repositories toward the Apache License 2.0, following the Apache Software Foundation's third-party license policy.
Individual repositories will migrate as their audit is completed. The LICENSE file in each repo reflects its current license status (not the target).
Current license: AGPL-3.0 (Category X per Apache policy -- cannot be included in Apache-2.0 works).
Migration prerequisites for this repository:
- CLA/DCO coverage: All past contributors must have signed agreements permitting relicensing
- Copyleft dependency audit: All AGPL/GPL dependencies must be replaced or isolated
- KDE heritage review: Any code with KDE-era copyrights requires legal analysis
- Complete relicensing: AGPL-3.0 is a strong copyleft license; migration requires full relicensing of all files, not just a header change