Background
All Conduction Nextcloud apps are licensed EUPL-1.2 (canonical, see project_conduction-apps-eupl-license). For years the Nextcloud appstore rejected <licence>EUPL-1.2</licence> in info.xml because it wasn't on the SPDX allow-list — so the fleet uses <licence>agpl</licence> as a workaround (EUPL-1.2 is AGPL-3.0 compatible per its compatibility appendix, so this is legally honest, just lexically wrong).
Ruben raised this upstream a while back. It's now fixed, but ship-timing means the workaround stays for a bit.
Upstream status
| Item |
State |
Notes |
| nextcloud/appstore#1710 — "Add EUPL-1.2 to accepted licence identifiers" |
CLOSED / COMPLETED (2026-05-07) |
Original tracking issue |
| nextcloud/appstore#1754 — "Add further compatible app licenses" |
MERGED (2026-05-07) |
Appstore-side: deployed to apps.nextcloud.com |
| nextcloud/server#60212 — "feat(app-licenses): Add further compatible licenses for apps to use" |
MERGED (2026-05-11) into master |
Server-side validation; ships in Nextcloud 34 |
Implication for our fleet
- Right now: the appstore-side accepts
EUPL-1.2 uploads, but apps installed on Nextcloud 33 or older would see info.xml validation errors locally (server still on the old allow-list). Keep agpl until our info.xml <nextcloud min-version="34">.
- When the fleet min-version reaches 34: flip every app's
<licence>agpl</licence> → <licence>EUPL-1.2</licence>. This will also fix the casing-drift the fleet currently has (agpl / eupl / EUPL-1.2 / AGPL-3.0-or-later — 4 spellings across 22 apps; see nextcloud-app-template/docs/fleet-drift-deeper.md).
Current fleet min-versions (NC)
From the fleet-drift-deeper.md audit:
- min-28 (most of the fleet)
- min-29 (mydash)
- min-30 (docudesk, openklant, opentalk, openzaak, valtimo)
- min-31 (app-versions)
- min-33 (scholiq)
So we're still far from min-34 fleet-wide. This issue is not actionable today; it's a tracker for when the floor rises.
Action items
- Track NC release adoption. Once the fleet's
info.xml min-version is universally 34+, this issue becomes actionable.
- When ready: include the
<licence> flip in the info.xml canonicalization sweep planned in fleet-drift-deeper.md Tier A item 1. The hydra fleet-sync tool can carry the change.
Until then
Keep using <licence>agpl</licence> in appinfo/info.xml and document the workaround in each app's README.md (already standard per the project-memory entry). Don't flag the AGPL/EUPL discrepancy as a bug — it's the deliberate workaround.
Background
All Conduction Nextcloud apps are licensed EUPL-1.2 (canonical, see
project_conduction-apps-eupl-license). For years the Nextcloud appstore rejected<licence>EUPL-1.2</licence>ininfo.xmlbecause it wasn't on the SPDX allow-list — so the fleet uses<licence>agpl</licence>as a workaround (EUPL-1.2 is AGPL-3.0 compatible per its compatibility appendix, so this is legally honest, just lexically wrong).Ruben raised this upstream a while back. It's now fixed, but ship-timing means the workaround stays for a bit.
Upstream status
masterImplication for our fleet
EUPL-1.2uploads, but apps installed on Nextcloud 33 or older would see info.xml validation errors locally (server still on the old allow-list). Keepagpluntil ourinfo.xml<nextcloud min-version="34">.<licence>agpl</licence>→<licence>EUPL-1.2</licence>. This will also fix the casing-drift the fleet currently has (agpl/eupl/EUPL-1.2/AGPL-3.0-or-later— 4 spellings across 22 apps; see nextcloud-app-template/docs/fleet-drift-deeper.md).Current fleet min-versions (NC)
From the fleet-drift-deeper.md audit:
So we're still far from min-34 fleet-wide. This issue is not actionable today; it's a tracker for when the floor rises.
Action items
info.xmlmin-versionis universally 34+, this issue becomes actionable.<licence>flip in theinfo.xmlcanonicalization sweep planned in fleet-drift-deeper.md Tier A item 1. The hydra fleet-sync tool can carry the change.Until then
Keep using
<licence>agpl</licence>inappinfo/info.xmland document the workaround in each app'sREADME.md(already standard per the project-memory entry). Don't flag the AGPL/EUPL discrepancy as a bug — it's the deliberate workaround.