TeamHub - Releases

← App details

Nextcloud 34

TeamHub 3.38.1
Release Details
UpdatedMay 14, 2026, 8:01 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
Signaturep1xq5GU5FgnU+VBmRTq1YN5VobUyjICVQ1UEEoxNmz+9GoTiMzc4SHrb4aQDDAIA8VppLDpx4+z8TKLAi7OgGy6COZK/7CHQrdDt0Qk+q6ACl4AF3l+RgV0DWrHxbP6V/LkewhJHUl9scVJkfIBwoZXK2bITpo65RdDMVDfTiHR7Nf1/jm/nwjpi2ZMYf7Ct969eB7a+IDoydWoYBETd5mlLBp30cWFthnT3uEpPRJYCgKvOdO9iVjBBOP2VtudKYDkUmdKpHbQutIxQbCcnw5455wCS4byicyEfu6oLxN6VYNk+VSttFf+PQlC7TFYNyHW/XOpneBM/z5yA/e9UaipRtFFzG/ZTepEQL6LoU2UgaXm/cPF4rDtqh3t+7BPR1OerRej8cTXsut7zugiKW2lm98Z3yXixEtTe5b0TJajkVTFYXfVBDYFUR5PLsAczk5ipa8O9UgapijqQDYKvqFyHhrrobWdAHs/cUJMZE7UdLJhpvrEeYfQJTSurKXI4uqLx/PIMj7P2C+LYQn71gnxJStjhCxy5syvDt8EQbljl8tlUtGWmbtpojG0JF9k3j502osAoHz5S02c357aqCGmdaY3Q9PlVyG2C12v2AXB1k5dOKG4nJ8IbrKlBYMe8xiqEllgoc722ab4wtcXqQoeA+kWT9q41VyRt6qrByYU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.37.0
Release Details
UpdatedMay 14, 2026, 6:27 p.m.
Changelog

Added

  • Message @mentions. PostMessageForm and MessageCard edit mode use NcRichContenteditable with the NC core OCS autocomplete API (/ocs/v2.php/core/autocomplete/get), scoped to team members. Mentions render as styled highlight pills in the message body. Backend sends a message_mention NC notification to each mentioned team member (on create and edit).
  • Message pagination. 5 messages per page with prev/next controls in the message stream. Page resets to 1 on team switch and after posting. MessageMapper::countByTeamId() added. listMessages now returns total, page, and limit alongside messages.
  • Per-team message settings. New Messages tab in Manage team for team admins. Configures minimum role to pin messages and minimum role to post messages, stored as per-team IConfig keys. Post Message button hidden (not just disabled) when the user lacks the post role.
  • Calendar view dropdown. Embed bar now has a native select for Month / Week / Day / List variants; selecting reloads the iframe with the chosen view in the URL.
  • Calendar embed auto-reload. After adding or deleting events, the calendar iframe reloads automatically so changes appear immediately.
  • NC-relative team links. Custom team links now accept apps/... or /apps/... paths (e.g. apps/collectives/s5) and open in an iframe tab, just like built-in app tabs. External https:// links continue to open in a new browser tab.
  • VitePress documentation site in docs/. Covers Nextcloud admins, Team management, Developers, and Users — 20 pages total.
  • New migration Version000336200 — remediates auto-generated primary key name on oc_teamhub_team_app_resources for existing PostgreSQL installs.
  • message_mention notifier subject in Notifier.php.
  • getMessageSettings / saveMessageSettings endpoints (GET/POST /api/v1/teams/{teamId}/messages/settings).
  • getCalendarEventsForWeek endpoint (GET /api/v1/teams/{teamId}/calendar/events/week).
  • deleteCalendarEvents endpoint (DELETE /api/v1/teams/{teamId}/calendar/events).

Changed

  • Calendar iframe URL now uses the public share token path /apps/calendar/p/{token}/{view}/now (team-calendar-only, no personal calendars). Falls back to full app when no token available.
  • Calendar connect error handling in ManageTeamView no longer logs the full HTML 500 response body to the console.
  • getPinMinLevel reads per-team IConfig key first, falls back to global key. Admin settings Messages tab removed (settings are now entirely per-team).
  • activeFilesIsGf / activeFilesIsShared in ManageTeamView use .some() across all active files rows so the GF connect buttons correctly hide when a GF is active even if a shared folder row appears first.
  • dav_shares access filter in getRealCalendarIds broadened from IN (1,2) to IN (1,2,3) for compatibility with NC Calendar 5.x circle shares.
  • resumeCalendarAccess corrected from access=1 (read-only) to access=2 (read-write).
  • Select dropdowns in AppEmbed bar and Manage team Messages tab have no background color (theme-transparent).

Fixed

  • MariaDB migration failure on NC 32.0.9: Version000328200 now uses explicit 'th_tar_pk' for setPrimaryKey() — auto-generated name was 31 chars, one over the 30-char DBAL limit.
  • Calendar connectExistingCalendar TypeErrorResourceService was passing $resourceId as string to a method expecting int; cast to (int) at the call site.
  • GF connect buttons visible when GF already activeactiveFilesIsGf now uses .some() instead of .find() so ordering of rows doesn't affect the result.

Added

  • Strict 1:1 enforcement for files resources. ResourceDiscoveryService::reconcileApp now snapshots the team's active files state and routes newly discovered rows accordingly: active shared + incoming GF → pending (with isDualFolderPending flag); active GF + anything → ignored (GF precedence); active shared + another shared → ignored. acceptResource and unignoreResource apply the same guard. All refusals write resource.suppressed_duplicate audit entries with reason codes.
  • Group folder takes precedence in getTeamResources. When both shared and GF rows are active (dual state during manual migration), the loop explicitly picks the gf: row so widgets and the team home always read from the group folder.
  • Dual-folder informational notice in Manage Team → Settings → Team Apps. When a GF is discovered alongside an active shared folder, a blue panel explains the situation and directs the admin to connect the group folder via the existing buttons and migrate files manually.
  • Resource-type badge ("Group folder" / "Shared folder") on each active files row in the settings panel.
  • Picker filtering by active files type. GET /api/v1/pickers/files now accepts activeFilesType=shared|gf|none. Shared folders are suppressed when one is already active; both types hidden when a GF is active.
  • isDualFolderPending flag on panel data rows.
  • normalPendingResources, dualFolderPendingRow, dualFolderSharedRow, activeFilesRow, activeFilesIsShared, activeFilesIsGf computed properties in ManageTeamView.vue.
  • Create New button for Talk — shown in empty state alongside Connect existing.
  • Create New group folder button for Files — shown only when Group Folders is installed; switches label to "+ Create new group folder" when a shared folder is active (signals the workflow).
  • Both 1:1 buttons hidden once a resource is connected, except when a shared folder is active and Group Folders is available — then the GF buttons remain so admin can attach a GF for manual migration.

Changed

  • ResourceService::upsertResourceRow() — now promotes pending/ignored rows to active on explicit connect instead of skipping. Fixes silent failure when the discovery reconciler had already inserted the resource as pending.
  • ResourceService::getTeamResources() — files block prefers gf: row when multiple active rows exist.
  • ResourceDiscoveryService::getSettingsPanelData() — adds dual-folder detection and tagging.
  • ResourceDiscoveryService::resolveFileName() — falls back to basename(path) when filecache.name is empty (some storage backends).
  • FilesService::listConnectableFileFolders() — accepts activeFilesType parameter, filters output accordingly. Also falls back to basename(path) for shared folder names.
  • ResourceStateController::getPanelData() — now triggers reconcileTeam before returning panel data, so externally added GF resources appear immediately.
  • ManageTeamView::connectExisting() — empty catch block replaced with showError().

Fixed

  • Critical pre-existing bug in ArchiveService.php: stray extra } (line ~2770) caused ParseError: unexpected token "try" on every admin archive request. Removed. Archive settings save works again.
  • AdminSettings.vue archive form: archiveBeforeDelete was missing from the data() default and from loadArchiveSettings — the toggle had no reactive backing. Both fixed.

Removed

  • The auto-migration system (FolderMigrationService, FolderMigrationController, FolderMigrationModal.vue, two endpoints) was scoped, built, and removed per user direction. NcDialog wiring proved unreliable; manual file migration is the supported path. The dual-folder notice remains as an informational signal only.

Security

  • All new endpoints check team admin level (≥8) before any action.
  • No raw SQL anywhere; no \OC::$server; constructor DI throughout.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureNB4VEY/kY6IM6/q9rg1aZPixwOBTrNlZIbr9hGsb3TcGQ3kXe591A67Rez1U2FQO3FcRuoxZRNXGMJkziuhoaa9RkoGQuHxtueXomwk5UWjFSTbgf8+JFSFXag8NUNM7DqEnRjG3hLad6HdDwdv8t+t7CDhkih5s2rGI7G55B9uSNdY0LftIal9G2M4DBJmpZtJ+1RitAI/ZqqRCjA+lVc0V7AQFeCxVyrt9weLTdXuvzGTZhazmiYZELVrbpUwurxRgmE6itg5pWp+T4FC1ilm7zyz/v6LOSmRBqgNExbS5lbEutYBoKLSKEPfvjAO2emcj54Ng9PwvRlP1iTvGr7jrZ15DZa0mBL6sXMvDpEdR2yvoAsVDvlroHW0aILMDnc3HruzKkmB8ykRyrkOAwVmCRQUPN5pjr6Qre/hCgYWZR0d+YHFopsJ/VDiH6+PH8aYia/92Z6z21kbvT4wUrqwqARyI510Dcq9TLx+O6CeNqYmBiPYkpAUoX1ck+q3fZAH3cqTXH7N5ezRctAnM3CvctmxMG7Gpd9BmLj0wF1p69qGQ4FvpcVSsFoFt3sc8qxfARDRm0fu+avD47k4YvKfR1NFbUhHe+RMYivFWlmCAhwbaObsGt2mCbyfIwxLFM/S4N2+ji8lwYT2wC9cPTHYTL1+dZNwTCCdaTEZIVSE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.36.8
Release Details
UpdatedMay 13, 2026, 7:15 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignaturelhEnGI/fAC8OFXF2pnGBIlqEN6Bw4EurQEVPeTeuGc+O+1NHT6t7rYfX5gBJinYOJScN0dXIys+FHOvzY/QGT02MbHUDXMqtwzYoegOZBlRE/TXUXp0LKCx+3m+rHjKd9dCtBJi++X2ZUJUqGzsU4Km1WNRKqv6gubdCYUAMjXZmrXtfuEtdOqc5yAgnaA7CxKx+TPcc8bpU+SPkiFeuC9EB+iwnM+3NJThjc6RIQWiCwc9F5i1FsXikkYe9gYENyaraXhZrqj1eeC2hHwBRB5aXYMO9FghzzjvQ2VZo/psiiGWukii17WqKSofNN5N6yeh0Va2q/dT3RRmtRNhZ16D9eCeVLF+w6rUaP3bz3lNZIeksbIkV5E3d3F/FXc51QdNIlQ5D1LdB4ghhVYtvTBFzf5WbB5yzM6uSA/zcR5g02p4iMzLdVoILfkXoMRV7VNISvQfPP9ExuQnw15dpA7nSzIEC2dtLCNoA1xUPTCVCOpz3CMHILjL5F4l8HJtQKx5D9IV8l5Sakf7uqp7SJcx8CWh03/iX6Eibp5HRRS4PsdKyZVKiWgOyG6iXkTktCruXQKGXi5MSwkpPZvYUz8//klH2Bn87PSHJ+q9rtca0j4w/o0QBqnJr03gHcKPh3Y5vD0aaca57svcZPbhr+dwT4WXmEBNkxRlNKwmI0v8=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.36.5
Release Details
UpdatedMay 11, 2026, 7:29 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
Signatures016TbppM9kULPOeWRGdKsV9pcTR+YBhPBA2cPZPRtKPLKxUpr80YJrCOj2+VxmxQrrr0cwaFgQTjtCTw8Uw1ush4zPNdfXfX2HFqsvmP2JYDEFQwk6ftJLwiDfeUk4kDnarODZ2WAJ6Ol22Sq8w4cxdgADyVDii0sRaHyyEnghCuyttUccXzr/1uf1MzlzuH0xhbLSKALpnQVnTKz0jMNgGifh/ug5nh+tmz/nwLSUGJ/n+iyWp8qQhzWtlKQpSSTAW3COCOQvleVoprDWkU9LyOKmQvYXExEmsf9C21olxxEkHygVhDEKKN+2eNmH1XsTyuBmi9SVDOP5uruPsiZs7bnmO9ToBI8oTCtRa6jmu2pJpPjTjIdGW7Mr5US/NEbjljWFdC0KJZ4y0Y5+z6oKExqXb13D/bMndP5uNNZI/0SwLTCCpfd6DYYp9TCESagMG6zARVbIu69ReMWlmvEL2Uhq0hKqlBfhKrHwyrtYRXXzLpn+riNO2WafrOrVmMMT8t1+0aXUdqYBRKz6jpuwRag29IutxSsYwNA9oSlCmjhylald0jhu6AAK9Zi5fg0HuKudr7RBhk4wPY+HrgHtVwvl9h5dJ0ADJmsJEE77CKaT8xdV0SgpRU/JZCMw9qHFnkz7qDR/f/fmshi0L9qaDVOB0hWOKP7Td1BvlC3g=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.32.2
Release Details
UpdatedMay 10, 2026, 11:50 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureaqlS5xLgAtQMFnFSjAjXnjfpSSV5UCZpVyKef4AdzzktPWmKamnaJ/o9bl/knf5Ccxcaac5gNFKSZcycZ4yrXj+BKTne63Wt+G4a/W3uhVV+jEz0aXacH4jwhVJuxDExsQUp83WA/JxrlFp38nEXc3fSMhAPZsP829eID9w6AbRSujgEzOfNCsduJ0Isrw+m60fR8R7LsX0CSC3XzGwLVwoJhbXJ52Ri8JRxLziVP/If/TAJR+pqg25hjGoYRqoPTacmdoFbNxcaZOeAxJSR0VRMwFS7rJJakiZ95w54KztDRvMwJAIMBr4BDtAiqedj3GCj8AtsPmvh3dEh3OPw4xMjQlTRAqW6yL1t4AhvL5dy5dmlQyRZiKwTkSC/9+/SXwR+e+1vfaB5ffmA3JAt9LIZ+24gP7O989Ed6yIo8Rh9//c6HwXky+L1MDOU9onZU3mwWBvI2xujyIhYu9uXMV6q587FsyptGaAoeBVtbtmY6DxiodLmgE5no1Gm0OBt7vy2ZUEhE9ToktSetWQPLtpjptRUBbAyomUGpEiaLSQP7y08h1ulPHoMjM3MelrxfGqSytHakG/M8bImdS7dO46kRG4gEf9C1LaaXH3KkfiNu0F5FPEbf0qidxDY5XePKUiAPirG5nSXLjYCu6f8hDktPh/U70EIWKuO4AAi4qw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.28.0
Release Details
UpdatedMay 7, 2026, 7:47 p.m.
Changelog

Added

  • Connect existing app resources to a team. Team owners can now choose, per app, to connect a Calendar / Files folder / Deck board / Talk room they already own instead of creating a new one. Available in the Create-team wizard step 4 and in Manage Team → Settings → Apps.
  • Resource pickers (GET /api/v1/pickers/{calendar|deck|talk}) listing the current user's owned resources, scoped to the caller's UID.
  • Connect endpoint POST /api/v1/teams/{teamId}/resources/{app}/connect (team-admin required) that inserts the share/ACL row granting the team's circle access to the selected resource.
  • ResourcePicker.vue — unified picker component used by both the wizard and the manage-team dialog. Files mode opens NC's standard getFilePickerBuilder dialog; the other three apps render a populated <select> populated from the picker endpoint.
  • Connected-resource warning under "Delete team" in Manage Team → Maintenance, explaining that connected resources are deleted with the team and how to preserve them.
  • Archive-before-delete admin toggle. New checkbox in Archive Policy controls whether team deletion produces an archive ZIP first or skips archiving entirely. Default OFF for new and existing installs. Same three deletion modes (hard / soft30 / soft60) apply to both archive-on and archive-off paths.
  • POST /api/v1/teams/{teamId}/soft-delete endpoint for soft-delete without archive — creates a pending-deletion row and suspends connected app resources but skips archive production.
  • Owner-side delete dialog when archive-before-delete is OFF, with description and confirmation text adapted to the chosen deletion mode (immediate hard delete vs 30/60 day grace period without archive).

Changed

  • The Delete-team button in Manage Team → Maintenance now branches based on admin policy: archive ON opens the existing archive modal; archive OFF opens a plain NcDialog confirmation.
  • Description text for the Delete-team row dynamically reflects the active archive policy and deletion mode.

Fixed

  • PostgreSQL SQLSTATE[22P02]: invalid input syntax for type smallint: "f" on team creation. The enabled (in teamhub_team_apps) and is_builtin (in teamhub_integ_registry) columns are SMALLINT (per the v3.9.0 cross-database fix), but their bind parameters were still using IQueryBuilder::PARAM_BOOL. PostgreSQL refuses the boolean-to-smallint coercion at the wire-protocol level; MySQL accepted it silently. Fixed by casting to int and binding as PARAM_INT in TeamAppMapper::upsert() and IntegrationRegistryMapper::register().

Security

  • Every connect endpoint re-verifies that the user owns the specified resource (WHERE owner = currentUid or IRootFolder::getById() for Files), preventing forged-resourceId attacks across the four supported apps.
  • Each app refuses to connect a second resource if one is already linked to the team (one-resource-per-team invariant).
  • Picker endpoints scope listing to the caller's UID — never accept a UID from request parameters.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureADlRyz4GyYgl8rljgx6Xw5Yq+hXjFnDGsT/M68SMUIu0PyMV0qJzbt+63EO5ij0SJrNYsf0ggbHaHct97ckYFzxrkFf7+B2O9l5YWdatd+dmtt0FQEMKBReJBSb93ZSRU65JXVlE0/43ikwK+RW9DiQI7QS3/DWSvRf83C43vI57g3PKs0dovrU5BwXWIb0bh7OvzXSfq7guF3JnFxlSeBTsrA9KUDTwQY03n1Wqi6tDYwLvTIQu8tKnPCMmzVQJlAc4d2krRVgEDGn+hNXN8+0sq8YSAq2ZCc2ckBXlMTyzLRrqwkZz7LpgljadbYATQe/GhS+ax5AFKL9efbXx0ny5S553N6Clgaq9vn5AyT5JASVo22Sf/Yxs/bT+EVYxKmwSd7XW9PDvXYwtG9aojqkQnEgZdas2MCeZw3e4yAsh1pd6KpFf3LuQ9U7nxzDSoABLZSDPYctIIZoVVQTPM35Bd/poEbOYl5f60bOYHEmeQkFP/MCVuqM9/XuJ1hIw27U7GdDCAsC1ONdcmlIRYEJHdIQ+yxOjMMYm8F18OjHJYoDuk/GIjFmGCF5QzcE+vdK6z4SO5n6JtTTsM6T8ruv/FNUFtQYbIb4KrhzbUs4TOxV+MCAI0/lB7IJiWdogLEiVuABwSecEPzt/K2qCbK9VgzJV8h77Yg1Z72ic1Dg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.27.4
Release Details
UpdatedMay 7, 2026, 1:14 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureWsF4We8JALnZvd9ZxzvftUVv6y9bJoO2AK9e/PM7P3dJn/cu8zwy1WvJhJDwbFP8Z0Nzcpj/wmN2WjfT0+1nbLor4BJ8Ls7noGy6KZR+laWTW/UHwGcRgFK5FB53Yi7W/rUTcp1dyM05gyl8sZAmrQxA/sD/unJccyNHcQJPpw3s8tsEShXmsFlZJuO2Ria+a0bKRXSQl1Az5v9ORk/Bx0Wd8oTVD+x2yEBq70TMaA4UqHU0Q/qNrZn03XHCYA6bh3QExdWx8sV3dNJ9X8envbqwPG53VL8KIOZD31DsjkVZ73+/stHpj3xQgwoiQ7oQD+ggorUShI16nrkd/VTV+M7VtcZyPxacndnslzeZyS00p2o0U9SzRTiJB3d76gogX/7XdQpRmUIeUroB1UNGaLMoILC8LojcDQsDGgv0w6adCZ5f/BdEgUkZKSMcm++IN5cYtm+q6+Eth29bh7gq5RIpuKb0Ous5wjG9UVgLHi/KDhtj+vZoUkg8CQ3ctPttf+FkJtY/xTuoEzf0ygy8nlHYsBoGQmdjyUqvuB7MZKCL3y1F8mGwEI0FYFMhbRnRVbYQy1ae8RpQj/fKEAWwXEfGIBbQAySath1iBlILNeAreUWmJpiWnE+aSghtd//HPcKvwHW1nRLt4f/UuMYIjCm3u/7C/CrJ49X2ZbIJSyU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.24.0
Release Details
UpdatedMay 5, 2026, 8:48 a.m.
Changelog

Added

  • Mobile single-canvas layout for viewports ≤ 768px and tablet portrait (≤ 1024px portrait). New MobileWidgetView.vue: scrollable canvas, collapsible icon bar at bottom with one icon per accessible widget, FAB action button.
  • FAB widget actions — in-canvas action button rows removed; actions surfaced via FAB: single action fires directly, multiple actions open a slide-up sheet.
  • Tablet landscape layout for viewports ≤ 1200px landscape: 60/40 split with message stream left and collapsible widget column right. Widget cards have spacing and rounded borders.
  • NC sidebar auto-close on mobile/tablet-portrait — uses NcAppNavigation :open.sync prop to close reactively after selecting a team or action, instead of fragile DOM manipulation.

Changed

  • Embedded app iframe content height set to 100% (previously 90%).
  • Edit layout button hidden on both mobile and tablet layouts (editing not available in these modes).
  • Seven modals (ManageLinksModal, AddEventModal, AddTaskModal, AddPersonalTaskModal, InviteMemberModal, ScheduleMeetingModal, TeamMeetingModal) now set min-width: 0 on viewports ≤ 768px to prevent horizontal overflow on phones.
  • MessageStream accepts hide-header prop and exposes openPostForm() method for FAB integration.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureTvyr9L9P+H2RLIOYb8tFSJIV/1sH4rWC2RhttmVfB98kvezRU7Xa/tVV+MKE758D3cT3BKsvBz7e/OtKoPKuCan6HR0AmXNbMYx3F/ep+BoEQP3H/m8pOaYF2xyRAYmsdHxV9EPyyFEX6Trxiwy5aNJSK5S9RJdC+fm8p0gmvDlP1G3+GCerMXdi2lioEpoAnIlE+fd7JUIt48C1YYHKAqDlsaw3wlXiYC4j68I8vVD8GdXYmYgXvxW3IeE/iUbOZJ75bpqxv3ufHqEFPAYas5+SMUy8fGQQZjBvjIN4ztSRwAIZ4e1OFZj2WsYsfJZEi5upcwPoqg5SGo4Xw7vp5Dz3Zxx2hCEhCdO8jlGSinqNul6lPRZmaKXm0GY8v03ZaHu2uUdyNPvOfnVRUbe2ekUKhXe7C0u9umdSLmv2/+HhQRGFFZH6Tfu6Pc1IwWirW2EnhmKoGHnWO0mjq+VK1Ip1ZntyZ1znM9U6fdQaHTjMBq2nlXQWnZgu1tw90QWf1rj3+MGQW9vUyrN5uEx9xxxBVxXjCxCVvkOsqwTR7lqqsQfp/NCR0lRyognr7Hmd985l8nUYHCrg9KfPzOfFxLRauxh1UIiRS1nif3WmJzmaelxyyRNysvksjzsc5GJW9C0wjTPsYOuZv2H+a3GRH1RSzadDXVS11CCDpVMPXG0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.23.0
Release Details
UpdatedMay 4, 2026, 7:35 a.m.
Changelog

Added

  • DELETE /api/v1/comments/{commentId} — hard-delete a comment. Author may always delete their own; team admins (Circles level ≥ 8) may delete any comment. Audit event comment.deleted written with metadata { message_id, author_id, deleted_by_admin, cleared_solved }.
  • Solved-question revert on answer deletion. If the deleted comment is the marked answer to a question, the parent message is automatically reverted to unsolved (question_solved=0, solved_comment_id=NULL). The confirmation dialog warns the user before proceeding.
  • Delete button on comments. Visible to the comment author and team admins. Confirmation dialog; disabled/spinner during async delete. Error messages are HTTP-status-aware (403, 404, generic).
  • currentUserIsTeamAdmin Vuex getter (level ≥ 8) — derived from current_user_level now returned by GET /api/v1/teams/{teamId}/members.
  • Markdown formatting toolbar in PostMessageForm.vue (new messages) and CommentsSection.vue (comments): Bold, Italic, Inline code, Code block, Heading (H2), Bullet list, Link. @mousedown.prevent preserves contenteditable selection; execCommand('insertText') fires at cursor.
  • Markdown toolbar on edit message. Same seven buttons in MessageCard.vue edit mode. Uses native selectionStart/End + setSelectionRange (plain textarea — no execCommand needed).

Fixed

  • XSS via v-html in message and comment bodies. Both renderMarkdown functions now pass output through DOMPurify.sanitize() with an explicit ALLOWED_TAGS/ALLOWED_ATTR allowlist before binding to v-html.
  • Headings (## text) and bullet lists (- item) rendered as literal text. renderMarkdown was a flat .replace() chain ending with \n → <br>, so heading and list regexes (which need multiline anchors) never matched. Rewrote using a null-byte placeholder pattern: code blocks and inline code are stashed before block-level rules run; restored after <br> conversion. Applied to MessageCard.vue and CommentsSection.vue.
  • Deck boards created with permission_edit = 0. Deck's AclMapper does not mark entity fields dirty when set via __call magic, so setPermissionEdit(true) was a no-op. Added enforceAclEditPermissions(): one independent QB UPDATE per column (permission_edit, permission_share, permission_manage), each try/caught so a missing column throws silently without blocking the others. Schema confirmed from live DB.
  • All Deck boards and Calendars provisioned in the same blue colour. createTeamResources() now picks one random colour per team ($teamColour = self::randomTeamColour()) and passes the same value to both createCalendar() and createDeckBoard().
  • Provisioned resources (Talk, Files, Calendar, Deck) not deleted when a team is deleted. deleteTeam() now fetches the team's app list from teamhub_team_apps before destroying the circle, then calls deleteTeamResource() for each app. Resources are deleted before circleService->destroy() so CalDAV/Talk can still resolve the circle principal. All apps are cleaned regardless of their enabled flag.

Changed

  • GET /api/v1/teams/{teamId}/members response now includes current_user_level (integer) alongside is_direct_member.
  • DELETE /teams/{teamId} now deletes all provisioned Nextcloud app resources before destroying the circle.
  • ResourceService::TEAM_COLOUR_PALETTE — 12-colour curated palette for NC-friendly team colours.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureNB29XEJ4DYUSSXCP7cIFfzPYsJyAPHHQtoOtktawP03w3p9lKDvZ86l7WnrBkKcOxtIv7oCuXPh8oQqZkj/L4XmpXAVcvIUPrZPtG3CQ4+OhNvC3BXT4T41GNLAQcG2hyQ4MZX11OBP1F5IfBmGWoY7il1gDNjDTIBqM4J0cFcO/Eg5q4zVYI2x1ks6+SpmlNCLdjVujDfZLN3/wXIQJA4zY5EqUexwmKvz2RiNNESfifz3wwpY5KcYEHrF+gasTIj1ZaaZ5TDC/4tUH71zpn3PAYNRpWPB8d/WhZW8yt0eaRw+4+hLItkzvwsKesAEljUNUrYD8IUD5VIWgysH1IgdXR3tJX2deQK3UW2gVFGuwJvNTtVzDuPGUsZ2m1VdhMPZcsPLqPLH+rvjwrG4qQlaTpXj9v/6ypBBoCo059KU7C5qnITKvANLXgldhEIyV3VNlCjbvww8v2Ogu+FSkSPpQRCq2FWygTVQJNYVIzjNS8J4lGfloPU9lXkEW1UvtK7nzZoumi/H9xmhj3edmOP/MzaR7wrToziaf6cWhhgYfnLxS60TYOUFmY7BCarcQ6y2tlXfPsCHYSDupV2/39kINeZ55xp70YP21S2WyjkkmmsXO76YDImJJIfXJhSUKnfJ7j1gk06Z8QwjQlAxkN2hDHG0JhQVcjWLAri/2A4U=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.22.0
Release Details
UpdatedMay 1, 2026, 12:35 p.m.
Changelog

Fixed

  • Indirect members (added via NC group/sub-team) could not see built-in app tabs (Talk, Files, Calendar, Deck). ResourceService::getTeamResources() checked only for a direct circles_member row; indirect members have none, so the method threw and the controller returned all-null resources. Added isEffectiveTeamMember() helper in ResourceService that mirrors the two-step indirect-membership check (circles_member → circles_membership) used elsewhere, without introducing a circular dependency on MemberService.
  • Member count in members widget was inflated when groups or sub-teams were present. getEffectiveMemberCount() used COUNT(*) FROM circles_membership, which includes group-proxy and sub-team-proxy circles as rows alongside individual users. Replaced with a query that inner-joins circles_member on user_type=1, level=9 to isolate personal user circles, and uses COUNT(DISTINCT user_id) to deduplicate users who appear via multiple membership paths.
  • Pages widget hidden after team creation even when Intravox page was successfully created. create-resources did not write to teamhub_team_apps, so getTeamResources found no intravox row and returned resources.intravox = false.
  • Manage team → Settings → Team apps showed all apps enabled after creation, regardless of wizard selections. Same missing write: ManageTeamView fell back to defaultEnabled = true for every app when no rows existed. The wizard now sends a complete appStates payload (all apps, enabled and disabled) with create-resources; the backend validates and persists these via updateTeamApps().
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureaF+aB3FIewjvx0eqVweCVBEI9ipOSyJoOcNoEC9XKXKaYsVdnElwJwRyq9so1vwmCMkRE2kmmlkqeK+kDc+cDrFhnwG/2NuzoTbG/BQViG1UqASNTodIVMWT3YfFcpVgWYwmY4ebBlHYFmDzpXmozDw74hodGwtZIXiSavfzJhtXhPYvhi/e+Q7v7qICbytjO9C1JFzEEcsGZNNEhkUlSiuO9SMt+yjkG6iWaCzcNjPMPmS7OROieXzAJ/Xxb5vG3aZocJfl2IezIR7sZ1XFrhvRy8+HB0r1EBunJa4YwgM86MaGzlIB2PdMH6OrN6ly6DZwl98oJTMCAjHT95/U/vuzzuwOrsg8P6Y7y+j0mH5nf/ZbSl0FeJk5tfv2GQe2XFXvRw7aKi/K+Y9B0dYReMPmwsBlPvx3mqEj543CaEP/Qzs4xmCJ/V1V0qzGfUkU0UvoDCPh7JLiDED8+O598KEFaxGSOOOqg9hhOLGszJG4jIFyTGsnBLvDFvR4bPFuA5HFjnPH6WdTWnfRhZFhtNojz3LQcsPP5Em9Y7x13KmW8h0HfJ92jzXyY13+4oK8jm9k/TNWyzqz7WYfb83tsia8cUw6PF4yA7fgBs8F4221Ko+19QtZIijE53M2txRNODZ/XsXLdM3ifatbgGi65T0tAzAw3BmWdMtWmHHrvPk=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.21.0
Release Details
UpdatedMay 1, 2026, 9:10 a.m.
Changelog

Added

  • WCAG 2.2 accessibility audit and remediation (Sessions 1–3). Full codebase reviewed against all A and AA criteria. The following fixes were applied:

1.1.1 Non-text content

  • AppEmbed.vue: <iframe> now carries :title="label" so screen readers identify embedded apps (Chat, Files, Calendar, Deck).
  • MessageCard.vue: poll options now carry role="button", aria-pressed, aria-label, tabindex, and @keydown.enter/space handlers — keyboard and AT users can vote in polls.

1.3.1 Info and relationships

  • TeamWidgetGrid.vue: all 11 widget title <span> elements replaced with <h2> (margin/padding reset added to prevent browser defaults from breaking layout). Screen reader users can now navigate widgets by heading.
  • MessageCard.vue edit mode: bare <input> and <textarea> now have associated <label> elements linked by unique per-message id.

1.4.1 Use of color

  • MessageCard.vue: voted poll option now shows a CheckCircleOutline icon alongside the background highlight — vote state is no longer conveyed by colour alone.

1.4.3 Contrast — hardcoded colours

  • DeckWidget.vue: #0e7490 teal replaced with var(--color-info-text, var(--color-main-text)).
  • FilesFavoritesWidget.vue: #f6c342 gold replaced with var(--color-warning, #f6c342).
  • TeamWidgetGrid.vue: #1a1a1a on success/warning badges replaced with var(--color-success-text, #1a1a1a) and var(--color-warning-text, #1a1a1a).

2.1.1 / 2.4.7 Keyboard access and focus visible

  • All 10 components with outline: none on :focus migrated to :focus-visible with 2px solid var(--color-primary-element) ring. Mouse/touch users are unaffected; keyboard users now see focus indicators.
  • App.vue: duplicate :focus-visible blocks consolidated; outline: none removed.
  • TeamTabBar.vue: role="tablist", role="tab", and aria-selected added to all tab buttons. Tab/Shift+Tab moves focus; Left/Right arrow reorders the focused tab and restores focus after re-render via $nextTick.
  • TeamWidgetGrid.vue (edit mode): all 11 drag handles gain tabindex="0" and @keydown handlers for ↑ ↓ ← → to move widgets on the grid. moveWidget() swaps positions with the neighbour in sorted order (fixes vue-grid-layout vertical compaction cancelling y ± 1 nudges).

2.4.6 Headings and labels

  • Same as 1.3.1 widget <h2> and edit input <label> changes above.

2.5.7 Dragging movements

  • Tab bar: Left/Right arrow keys on focused tab provide a keyboard alternative to drag-to-reorder (WCAG requires a pointer/keyboard alternative).
  • Widget grid: ↑ ↓ ← → on focused drag handle provide a keyboard alternative to grid drag-and-drop.

4.1.2 Name, role, value

  • TeamTabBar.vue: role="tablist" + aria-label="Team navigation" on wrapper; role="tab" + aria-selected on each button tab; web link tabs correctly excluded from tab role.
  • TeamWidgetGrid.vue: all 11 collapse/expand buttons now include the widget name in their aria-label (e.g. "Collapse Team Messages" instead of "Collapse").
  • AppEmbed.vue: <iframe title> fix (see 1.1.1).

4.1.3 Status messages

  • PostMessageForm.vue: attachment list wrapped in aria-live="polite" aria-atomic="false" — upload status changes (Uploading…, ✓, error) are now announced to screen readers. Checkmark symbol given :aria-label="Upload complete".

Security

  • renderMarkdown (pre-existing): v-html binding in MessageCard.vue and CommentsSection.vue renders user content without HTML sanitization. Logged as open issue for a dedicated security session — fix requires DOMPurify.sanitize() before return.

Removed

  • Debug console.log calls in TeamWidgetGrid.vue (moveWidget) and TeamTabBar.vue (moveTabLeft, moveTabRight).

Fixed

  • Double margin-top gap below NC top bar. NC page frame and NcContent both applied margin-top: var(--header-height) to the same element. Added #content-vue.app-teamhub { margin-top: 0 } to zero the page-frame copy only.
  • TypeError: e.n is not a function on team pages. translatePlural imported at module scope is invisible to Vue 2 templates — added n to methods: { t, n } in all five affected components; AdminSettings gets an inline n() method matching its existing t() pattern.

Changed

  • All error messages use {error} named placeholder instead of string concatenation. Allows translators to reposition the error detail within the sentence (22 call sites across 10 components).
  • All count-bearing strings converted to n() plural forms (14 strings across 5 components). Translators can now supply correct plural rules per language.

Added

  • Transifex plumbing. .tx/config and .l10nignore added. Stale l10n/en.js / l10n/en.json removed. Ready for NC community bot once @nextcloud-bot is invited to the repo.
  • TRANSLATORS: hints on ambiguous strings: Comment, Leave, Join (team vs. meeting), poll vote labels.
  • Translation standards added to SKILLS.md — every string written in future sessions must be translation-ready immediately.

Removed

  • Debug logging purged. 23 JS (console.log / console.error) and 15 PHP (error_log) calls removed across App.vue, FeedbackModal.vue, FilesSharedWidget.vue, TeamView.vue, FeedbackController.php, FeedbackService.php, TeamService.php, TelemetryService.php. The console.warn in TeamView.menuItemUrl() is intentionally kept as a security signal.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignaturenE6/JanHZPI2gJOiWJZMk28BvA/IenxP9ttZTLP8ukJhVHLtgEHDouOj6MlHhkol7j765YIdplWXD0snC26zoEjqGIeATPoVLA5C4s72+scF+8yA+ABvUZqoI0objebJsNj9vv4e35pMiFRYFjyxcqsepO9SZUd1h6OjJvd9HhLb+FGQ3XWUfhby3fASPzXUHADRgTSFALVT8uKoKBIT6N6RNsmtwZugGGt9sRJclHoFjYtjuw3taOU7IFSU0nzMeY0knJWJQqOiFHqPK02qA6+y1FSqROoxdmh5DzfXT2Lq82tep8PWNaIjy+eZnSPzZ7yMftzsUuw7Op2dt8IhIoeWlcBML4h4voLwnfSBvv4Y1iupF5NupORVXYQbCRwmGBNfpMV3giQAYLitqCBpEzshO22fwTas7ipF9ERzl8Xjnr+kC/FHRwsGaq86iE9uSeEbebDTRS0S1iQJ2QO3uefGq0ak/+D3fbeaEHEZTkmSZ+IHWsrPoPCj+hDThe812ymYqyN6AoCS688N60mHIGUETeN69fCDXFHWylumRxkdCIS9y9g5OtQTVXrKNNfui75jlQcjhQp8DH6aSWBZNIUSFEUw4D+TiXlOfwCJVHEQUxG0mIHvXMyMGS1HUmj0u5/5U3RFxjZeELbUxBdUE6Y39z7mWcI82aLrAf7PHFY=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.20.1
Release Details
UpdatedApril 30, 2026, 11:36 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureQ76CfO42b16YE6NfBvItjvR78K1DPxanhH91XK8A7vyu03DdXe7OUTFmHfzDd0Rrd0V3K8d+/ss0K8d3VUxJ8awlTx0OPmbQ46R+Q4Ar7SiQPOFhn+pi2JFJmQ/okVKIt1ltSZFY+rinZvOy7IrbONsPxD7EWiiE+3ES9wvNVBwvV0vByOQjLvZcMuOekOJmuqGQxAkiGMr/hYPCG9hYUUjjM140GgbKxpy5AR5zEEARvY1E8up0BNapKTdTEaxHq5kYuv708iGtmpuqQ74W0kXi39e0e3q5Ct3iaWo7ZTv3fVMa9UPxM919JoFSw41MDxReeILrujP/mfdgDJc870Heoi74URx8KM7lq1k8Oq2137OVmJFdmaZb1X6GFBozBOFQBWfIAuWg3b8PD7qxy49Qv8bFruv45eAsMtopCjOqrWICqteqyGNkZx1+VLB0yhzXvvkCRRD3ug4tgVwQ7G3gaLhWW1nrt/N1xrCRXaTk0XumsrprLn0ky1aK+i7mKyUsY4HA1C+C21pJ8lgwL8wjmo4Dm3OA5bZ/Fht2lO0YBKJGrt81BshzPYICFVb4pa8F5ESVyN6iaI3UmzvUHrSKYaOlfhhMWs1GsCo3ayDJ7I/iTmTHhltY6uicMp609IA6RTYQ9xVZ3bpaX3gkEGvvyTUY0dUFJdt5bnJP9iE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.18.3
Release Details
UpdatedApril 29, 2026, 12:15 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureBbSeggogNn0JPG7UmMXVzr1S9eGLRgtmaNwEg6Yo8UenbN4JWPjazn+m78aXajFSeh6jbmkpYR5WS7siW2o1xYVqqWTT4/ollugaFrvcDLi9moShgbqcFpi345PSRshFSaFNgIFCcdy4BBGhkVq17dkZRF9vRELuwtsHE+EsAtC4cg0K1x7fhDZ8AbrVUcWthvCAU7mqq/CDbI5QLMHFH/niUjZfxld01piActRQW51/eiXx7RvpY1XIUUd1JJtZjkcLEUpIojQb5Y6vFWnManLZHJ14Y0FC5WJyFvNXszE9twaUCI0ZtnurdSIogtJenXpPCGE397gx0r1KXwDnlXKJIHTNP81xiYQrxsLp6TjDabK9JIz1I6Mv6WVRZbk8O/fZNntQFJDKc+Lwp8d2WD8gEmOXRpvVsOjAuE1WqClJYJZi6MFY0y4H9/iLE7qi2cNj4kP4wdzGupaUWW6J4VprIRNAzSOqERdCLna82JvkMxU1tLiG6hFVmYc5F5QagWPEQlta7IWVmR4/07gZnu029Ec45hrrDyq96wiD5WAA0uqAcL2kir82l8vLeT/4a3uxAWf6YwMF7KldyJZhfoh1gA+uE8vEvKfUFBCDesKclXPsH+Wg4CP0eILT/h2LZ0J3lAd8HmdJnH6hmXp9wx7CxHrGRZYUdixix+59c5Y=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.15.0
Release Details
UpdatedApril 28, 2026, 2:21 p.m.
Changelog

Fixed

  • Calendar widget now reloads automatically after adding an event, scheduling a meeting, or creating a team meeting — all three modal close handlers now call refreshCalendar() via the widget grid ref.
  • Meeting notes public share link now grants read+write access (was read-only), so attendees can edit the notes file directly from the shared link.
  • @nextcloud/vue no longer logs "missing appName / appVersion" console errors — webpack.DefinePlugin now injects appName and appVersion as compile-time bare globals, which is what the library reads at module evaluation time.
  • Members widget: removed redundant border-top from .teamhub-memberships-list; Show all button width set to 90%; left-side padding unified to 12px across avatar stack, membership rows, and show-all button.
  • Removed redundant "Team Messages" heading from the message stream body (the accordion header already shows this label).
  • Removed duplicate "Post First Message" button from the empty-state — the header-level "+ Post Message" button already handles this.
  • All semantic color text uses (--color-error, --color-success, --color-warning) replaced with their high-contrast -text variants across 21 components, improving readability. Backgrounds and borders retain the base variables.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
Signatureo9VGOkozPXYywaP2ZC3o2UICAIdsFUEdehNKJF0GKdgPgzMvL1Slkyeg9XI0ZiY+cw/Uu6rccUulLDeKWR+2iLRpDQb7iNg2ZCL8QgXYi5AjuO9diTPAqrywyowNNXV8gfFpJXJQ3DqEvkXQVptMXM1A5wNXjybgKAQAnTNSlrF+r4HvT/MJHomrojrDn2yCaHyhI5ER47B2YevI+CqWkKC2RFPwrcptBKVi62tk8VGVarMy9/Vrrp7zLbx8M5oZbVcLhdB7zIUerujkchkr2olx+SKYdNmdQ92tkw3kW584WiCqY6fsfLMD3PSRwHqiH3ScVFIXEHYIMeEphCnXukTwik9c4Vd3C/gAjV08K7Ii8ll9Yh4gt7uIMOfRx1o0HYDyMXqnFHlCnAalzN8UIkq+EXJ/i56lETuFvx0gnW8sxVmziuHpn76pjs9ZG1bVsPDSdwMKA1MwdnIt+pkaY7w9nB+25r7Nz7NMVgv9SvDxhMTo9zUGc1ncpnQ+xIqeEm2uCj+OPxjuYkAJ/vlSuzrdcxALAmzpecxR9J4CwZ+cnq9yJZoXIUMSnt694gd58/KsVAaHlI+cSVaPPZz/M26BwF5DJoWBdl+0fTVQ25WzciKzJ+pvmJAvH3KD3TxJKT0W2XTOWeoUfhzsv+nt47eDgDxvD8LUK1WxAtE0axw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.13.0
Release Details
UpdatedApril 24, 2026, 10:02 a.m.
Changelog

Added

  • Group and team members are now fully recognised. When a Nextcloud group or another team is added to a team, its users count towards the team's member total and gain access to the team. The members widget shows direct users as avatars (up to 16, sorted by role then last activity), followed by a flat list of added groups and teams with a GROUP or TEAM pill and their user count. A "Show all N members" link opens a searchable modal listing every effective user, deduplicated.
  • Manage Team → Members tab displays three buckets: Direct Members, Groups & Teams (with name and effective user count), and Pending Join Requests. Admins can remove whole groups or teams, which also clears their users' indirect access.
  • Invite modal can now search for and add other user-created teams (circles) in addition to users, groups, email invites, and federated contacts.
  • New GET /api/v1/teams/{teamId}/members/all endpoint — returns the flat deduplicated list of all effective users (direct plus expanded from groups and sub-teams) for the Show All modal. Requires member-level access.
  • New GET /api/v1/teams/{teamId}/members/manage endpoint — structured response (direct, groups, circles, effective_count) for the Manage Team members tab. Requires admin-level access.
  • BrowseTeamsView teams now return an isDirectMember flag so indirect members see a disabled Leave button with an explanatory tooltip rather than being allowed to "leave" a team they were never directly added to.
  • leaveTeam now detects indirect membership and returns a 403 with an indirect_member sentinel so the UI can show the tooltip explanation.

Changed

  • The GET /api/v1/teams/{teamId}/members response shape changed from a flat array to {members, memberships, effective_count, has_more, is_direct_member}. members is limited to the top 16 direct users (sorted by role then last login), memberships is the flat list of added groups and teams for the widget.
  • Admin Settings → Maintenance team member count column now reflects effective membership (direct users plus users from added groups and sub-teams) instead of only the three top-level rows in circles_member.
  • removeMember() now correctly handles groups (user_type=2) and teams (user_type=16) by using single_id as the delete key. It also calls MembershipService::onUpdate() after deletion so removed indirect users actually disappear from share pickers.
  • Pending Join Requests in Manage Team has extra top padding to separate it from the membership summary.
  • Group and Team icons/pills use the primary-element (blue) and warning (amber) tones respectively — the previous success-green was too low-contrast.

Fixed

  • Integrity check in Admin Settings → Maintenance no longer flags teams as mismatched just because they have a group or sub-team as a member. It now flags only teams whose circles_membership cache is genuinely empty while direct members exist.
  • getTeamMembers no longer fails on the u.last_login column (which does not exist on oc_users); last-login sorting now reads from oc_user_preferences / oc_preferences.
  • browseAllTeams correctly detects membership via groups or sub-teams in addition to direct rows.

Security

  • getTeamMembers now enforces requireMemberLevel — previously any authenticated user could enumerate any team's member list by guessing a circle ID.
  • lastLogin timestamps (used internally for sort order) are stripped from the members response so they are never exposed to the client.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
Signaturea3Sq1npOxTnT7aLDRXv66RWwUdOWvy5yXVlPPHePce9JRxddfqvN4FS4p+bnjFEdkKQmlFNDNzZ97aJmEZb1Kfzb+xpX6WzgDfJe1gTYUhE3XYHBchxclwCzPC/fwdymmrjwwP9b/1q9fH26FRdFciFUmHQO9Z24g696GnkGwApfohzX2U0jd4v55cx1e+vs86SZRWY26tkUm/FXD5+d+bl4FAkDhiK+Z06hFOuuocBhqyt2obf/gohkgTnEZpaHzkaAdgJFvvvRo+azlxGzODk4mqtyZIEDUWbAXQ99vRXZAokuwRrizBbXqbVk5sn3ntgG5rq0NWoYJ3htqhdhqqMh7w6SW/XBD5cGvLZu7BZpfvFLThabB7aZktNZhmVWz3U81C+WjYVhlcKcXPxEeQXXwo+LjSpGNmjkBg2bOsNEnVcYx3LhWsmbqRNf6JH8B0kcERqJcBWRbpthg/ytseDLsFHDX76QmHMb7/r6IKwq3EjaJSpLcuMgYAE0/ad8BtR54j/rWN1AsPD3oj3UfElHO5A27R/Xdu5qwzTd9zpWDRDgp3NE+2a6ler1WpgJtuTXEv+TGCURUK9srKLcpB+QGO/J26pFhqQovLEP72uL3kW8zXDlNW51++6uJJsrE1212s6JzPLSV1jntOrB+exnyQMV9sbNEVVzwyaqonA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.12.0
Release Details
UpdatedApril 23, 2026, 6:50 a.m.
Changelog

Added

  • Shared Files widget — new dashboard widget showing files and folders that team members have shared directly with the team circle (e.g. from Nextcloud Notes or Files). Displays item name, type icon (including a dedicated note icon for .md files), sharer display name with avatar, and share date. Paginated at 10 items per page, sorted newest first.
  • New GET /api/v1/teams/{teamId}/files/shared endpoint — returns paginated list of files/folders shared with the team circle, excluding the team folder itself. Accepts page and limit query parameters.
  • New shared_files app toggle in the Team Apps section of Manage Team — defaults to off; team owners enable it explicitly. Independent of the Files (team folder) toggle.

Fixed

  • Fixed team folder query in ResourceService incorrectly picking up individual file shares (e.g. Notes shares) as the team folder when no folder was configured — query now filters on item_type = 'folder'.
  • Fixed shared_files toggle defaulting to on in Manage Team UI for teams that had no saved state yet — default is now off.

Added

  • Upcoming Tasks widget now shows personal tasks alongside Deck tasks. When the NC Tasks app is installed and the team has a calendar, VTODO tasks from the team calendar are fetched server-side (Sabre/VObject, direct DB query on calendarobjects) and merged with Deck cards into a single sorted list. Each task row shows a source pill — blue "Deck" or teal "Personal task" — so users can distinguish at a glance. The two task types also use different badge icons.
  • New GET /api/v1/teams/{teamId}/tasks endpoint — returns upcoming (≤14 days, non-completed) VTODO tasks from the team calendar.
  • New POST /api/v1/teams/{teamId}/tasks endpoint — creates a VTODO in the team calendar via CalDavBackend (QB fallback if unavailable).
  • New Create personal task action in the Upcoming Tasks widget header, which opens a modal (title, optional description, optional due date/time). Shown only when Tasks app is installed and team has a calendar.
  • The existing Add task action renamed to Create Deck task to distinguish it from personal tasks. Shown only when team has a Deck board.
  • resources payload from GET /teams/{teamId}/resources now includes a tasks: bool flag indicating whether the NC Tasks app is installed.
  • New AddPersonalTaskModal.vue component.
  • New lib/Service/TaskService.php service.
  • New migration Version000310001 — ensures teamhub_integ_registry exists and drops the legacy teamhub_integration_registry table if it survived an NC uninstall. Fixes a scenario where NC's "delete all data" uninstall keeps migration history, causing the new-name table to never be created on reinstall.

Fixed

  • Fixed oc_teamhub_integ_registry does not exist error on installs where NC's uninstall-with-delete-data flow preserved migration history, causing migration 000209000 to be skipped on reinstall while the old teamhub_integration_registry table survived.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureSgfXebprj3dl8qsJCiO/pE+phwLvcTd5NcSGL2buF71GuT7a/fqkQWJ0XTwULl70Dw7D4/wJbMX9+fLnwXK/VvfRS1S1UNa8VUtCiuUJU4f4hjrnxYWuBT6oledtiXpb8fVeB46bTzwVJXTc57HHMm4Fz6L/rjutbeu07fLe5dNIAVXUL8niOfGyeMhBLijQDAsvlcOgBvpFXSqHscgF7IwOYTJdRqoyvAJQZgoxdlffHLnL5isK+GnjJCQXt6WzIxhiHbkMQlr+SwjPdvqo5UcvRCAHoiMS6sVQFmt1TJAHzygxHBK2g58Gv4NRvm/HszdMxCbkJVpgZFeqTO/WOrNTQaIiWIHGlK2XWoVVZetF0vvSlOynOXQqS9SVHmvOhfdH594EN1kwALAckCSdIvaeIdJpA3AgeS5er9GPMQI6lRWX6gP9H6WLAFGSFLjY6HpJvcr8mXBUGLzZWjnqd2w/WzDyGf/SfwMvf7NrgrmkEbkxEkRXYtUxkjJhlIX/g6vQicisTwHViMbO1orUbP6DvXcoXWGcu9iwlnumGSrMFbBwDsP/163U7kO52RjXg4tRxpZ2G0UOzKKx5Nc7TUA87bkxLO3SjC5yL536poI+22uNYSoWsxQpk9KGsVi0xiaLLms53Kp4KnXU7LPMQ+ZAlpb3U63sBLVkRHQhstg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.11.0
Release Details
UpdatedApril 22, 2026, 9:04 a.m.
Changelog

Added

  • Upcoming Tasks widget now shows personal tasks alongside Deck tasks. When the NC Tasks app is installed and the team has a calendar, VTODO tasks from the team calendar are fetched server-side (Sabre/VObject, direct DB query on calendarobjects) and merged with Deck cards into a single sorted list. Each task row shows a source pill — blue "Deck" or teal "Personal task" — so users can distinguish at a glance. The two task types also use different badge icons.
  • New GET /api/v1/teams/{teamId}/tasks endpoint — returns upcoming (≤14 days, non-completed) VTODO tasks from the team calendar.
  • New POST /api/v1/teams/{teamId}/tasks endpoint — creates a VTODO in the team calendar via CalDavBackend (QB fallback if unavailable).
  • New Create personal task action in the Upcoming Tasks widget header, which opens a modal (title, optional description, optional due date/time). Shown only when Tasks app is installed and team has a calendar.
  • The existing Add task action renamed to Create Deck task to distinguish it from personal tasks. Shown only when team has a Deck board.
  • resources payload from GET /teams/{teamId}/resources now includes a tasks: bool flag indicating whether the NC Tasks app is installed.
  • New AddPersonalTaskModal.vue component.
  • New lib/Service/TaskService.php service.
  • New migration Version000310001 — ensures teamhub_integ_registry exists and drops the legacy teamhub_integration_registry table if it survived an NC uninstall. Fixes a scenario where NC's "delete all data" uninstall keeps migration history, causing the new-name table to never be created on reinstall.

Fixed

  • Fixed oc_teamhub_integ_registry does not exist error on installs where NC's uninstall-with-delete-data flow preserved migration history, causing migration 000209000 to be skipped on reinstall while the old teamhub_integration_registry table survived.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureP+5/blvdXpd4uoReE5CvW4k1/WbnStC9vXXjXI3Tvi8B47QV8Dej4K2Wi+1wXxFQ8zQw/i+nuz4/ZzQSwSPnjzzpbQaNRo12s/x+9pb+MsBprGSUENMK3s8vwutV5QoiD5QLM/rxq7+ysdw47AwQbM+4+VGK/a2tAhuO2H7Q3x8nqRmJCSIZewc9D6ihBpQ5Sue3ywJIKFv8X73guc8LPSxhY+YnmW3Mc2bBdsxbUamsF9EZfkSVA9zebC455uSwufPZKLaWlBltydLWyZrhFZOU8aC4QeirMYCXovzThRQNk8hwkdppc4Gb737JqrVrC4uL/AMIPrTsJ4PcAuLDsmM0E/ZHbmpPBZ8wWDfMZKS3tHZM5K/2My3Sv7W3NhkQIzMuh2yNDAcw5r2B20mu34nSvATXTm3qacGBRmbLq9dfdMkEWMenTHtBzjWlVm0s0A03+gv68lasrzv7moyzlrjk1V6i3UuEo5XAGZCJSITQb0+RJAaIHmGqOBCu0UggevHuOqOMUwFl9aa4MbGa3BwxamSt5rfii22L0bWVHtFeiCaWZGfrhTJNM1WhRd134ha+puHWKpMWv8cxTxWA6FyycE4i+H+KR6yyvLpL3viVGPm+24BzSk3GPHdfEetvu2/H7WX1vnTR8NBzKt8dHxAj0YSegXYFaPF+0EO0fEo=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.10.1
Release Details
UpdatedApril 21, 2026, 1:22 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureSxVjtNOVjWRSbm2YIc1M9cvaHIgVbVJbMJcD6FMStLGHteX8VzmSeEq+gpTZTER2VsyukDvVKRWOW3TXPTyzWF3UuC8mZSpEaK4bGHi83B3natM149njVrYyxy0BawErj4YH3VlvPzl4ok8z5hwAFWKGyFNJ2CulO2lsUfwDnhhLsvRAIjZzX+KZ2C99byqV3qFRnWo3kI+JT5PpE5+ug8T3KImQYKwGuMDq6+zFF2Qi+edECt+5TiO/rr3MFCZvSwwlwaNOEnCUjpA5wcwreGKqP2IpDJi+TwzjcJ5Mlmh6/qNjdTTkZ1tRvH5zKrZRHxAqSH0T40TMQM/N3huouEQE+fqHfJXgJXy3t99UrpWUfY9SX/rLWPQCkzgco353IBY1YTacz/cCH2yVlrTMty+EmU4iTOo2876PutuV43kDSytBtGzinCY78vrZ6D99fl/UkU5fsdVFVh91FZiPyd/JnCgTl59rm32K6rEhUmaMeXvKjl8CTuWKc6Z0TZ6qS/GPjeAVxHlpzRMIkhbjMOGnlWAKAlabDRIxZf+SSNazjnI8SFkOUOo5yCIoxMF9GjboNA81NkIg6PYdEaiooPTXiGbOd7cmuh4FNPWiniG06hn+BXX9jpO3zJNTKbmxP4g4dyWMm2923/miX93CtmyhsYWn2OcjX+YLLf78TgQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.9.2
Release Details
UpdatedApril 21, 2026, 11:15 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureVqSPboP020ssz+waXZIgJ+LTvo3hMESzHvMEKUi5BrRSPiplINi3X1Etr3zo/IQIgyv7BvaMYyjNs33q4jz8Y5oaawenqkCDw6XrV8F34rYPZbW0AabIGOAw1Ghy7Qg3mlbkq+GydCzfAMiEHro9sfi1C6kffOdijPwNm3EWPGurR7ERfDa19qeEfqoEU3Ni+//+AnwrL+rP+jf9pYM+q+/49CxT1zs53TqMTZyihHnVNbxOLCR7sgJtTVHR9NBR2HjEhFt73nxFBFn3b3j6OwoIgUX2l2lQR254lB/mgs4uD510an48qHLsYbE72Ph+LM+x8g7NtsLKbzyM24dA2+mL8PiwJhZUCfTFpbPVuiSX6OESUBbml7pgqFFv0dA8FD4gtqxKErPvD7CMaXR4mGrkit8bkkfReObVjBQZyCVl1S9q9Sj1ckfJpUlR5jmBfY39QzY3Bv/+V0cvqxxC+P25xmbvh6VHbnBMcJ9uxs4XW1lhjqvvJFTHS3nJJeQX/tm/q9k2qjnvLEe8nliMc7k0NtZxXdJI4pBPawvBaM5T91AKvzpKWrzmzIxTOWYT0HmgSm6cPPT/EBZl/YaXTO4a5xSNmCljGn0uo7bDiWtwcFNUuzCXG7FirlkyxiOkNv6DaZMXczzv89o0vMubHotd/OzddrXphSIrvkfA+Xg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.9.1
Release Details
UpdatedApril 21, 2026, 9:46 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignaturemX7RsaWak2BPhu44QNActtv1oaoiKlo5vmrzmf+iPPoJPMw0cAXoq2UcPpHnsrPme+mCOiDv+yETlWFSPdesr9U3ffdI56rxQMRqkgAv5QErwwE/jqqyte15iT2wHFrEF6aCn8NnF9bIElrCfmdL8kPwEKbgcrUBom/cQRFlWbqnmd6QRzqY+bevPIx6fXaA4ZTQbuGaR1PikE2Tskm0ETCtHf05Axg6eJ+fjgHAdR/bgsl2/2+giwe3fmoyPaC0GVsuoTmGjduMSPaUINC1hA7NPKM2aHBLvXYcGqNzKF6Wtr+la8VqOq4akwYoSlGvWOQ5uw3gTCubRhDRmMrxb6t1QABD7CseBzMKjTv/Z+ib62hrEj5IoP/qRdiovYZVJQ+VQHw8pqBJqS+a014t5m1+h3nPpZTT1heoyR0qA44AXmGhqcCVCGcMuVAtw7trENCY17FbHradrLmEofCLxoGuCAuviFXQo+03kxTL3dc4pgUm6G1+/RoX5hM3jtYmi5tBmFmXLBT8qsr1ZEStRin8aLwKBr92oeejMhLvyPN4wryntUpq8FL3n+SERCsovIvuwmMw/MOuBrL16xEL0FRa/EKlqN5F5z9gtR+ckjap8/SLQDYu7jbZUD3CGjKJbsaCeKv/Lbsw/tDqe/ZXeg7cZaq2tlPTN3g2kFah/Ek=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.9.0
Release Details
UpdatedApril 21, 2026, 8:24 a.m.
Changelog

Fixed

  • Fixed fresh-install failure: teamhub_team_apps.enabled was declared BOOLEAN NOT NULL which Doctrine rejects when storing false on MySQL/MariaDB; changed to SMALLINT NOT NULL DEFAULT 1.
  • Fixed same BOOLEAN/NOT NULL issue on teamhub_integration_registry.is_builtin; changed to SMALLINT NOT NULL DEFAULT 0.
  • Added migration Version000300801 to apply both column type fixes to existing installations.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureVWWGR5wGqe3Eax5KKz+AQ9nvFxwwNzPj4Zsqen4x72T9rHc242F+i+eaIMt/ae1/SelQGyv18ckoH5xA+eZEF+PzJj5vmcq2Zwx+PwlLTD+ieyRfaFcVc0kkYXTqMKa6/laXrNrwHuBHRsG+5wyJLkXm78H2OG0HMCIm71b7x06pIxU/eN2i6pEcTaTajyUbxPd37FsGv591XzyRKZGK+Z1DZXdMI81aE1g68xGeQLpnkKLPjURMzw3NnqZkcJiiU+fhDggu4O32obgcc2MOgrOo+ciHNX+RKFxkdYLs/qZzbS/RDdjxvnE9U5eESH7hAXU/ww8k/vSdtxEU6vrSd94Mg3GDHhjjS9jj/tLJYCk0J3MQp6EJMVRIInhgNIJJf1VkoCJk2MkTdpgF/GWheW9SBVFD6+IbzR55Ss2OYQK42gXtuNItWBm9ZCvShB5bxnmL4JtZ5I9ZfmmxD6BuZFwAkvnDIe6bt7wnVt8rZ0F0X5f7PrEzFoNq5TnagELFx0Z7HM/8OxRXwOLJtblMZeEI+tFRKxlgSOcI4EBroGwsGQ6sHELNWbqD0XvQBxmjVGjAEXfjx5yp+xwmc5433StzDcu6ItEt8wJQYKQ91quGR1MjEKwwVqmzjtNX77lt2aSKzvy4ibb8g1Xa3uHCUd9PmtdzN9FiBK2G6Gj4flA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.8.0
Release Details
UpdatedApril 20, 2026, 7:08 p.m.
Changelog

Added

  • Telemetry payload expanded with six new anonymous metrics: nc_version, user_count, member_total, message_count, builtin_integrations (per-builtin-app team counts), and link_domains (custom-link hostname frequency map).
  • link_domains aggregates custom web-link URLs down to their bare lowercase hostname before sending — no paths, query strings, ports, fragments, localhost entries, or numeric IPs leave the instance.

Changed

  • GET /api/v1/admin/telemetry preview object now includes all new fields; admin UI automatically renders them via the existing JSON preview.
  • TelemetryService now depends on IUserManager for user counting.

Security

  • All new collection paths are read-only DB queries using QueryBuilder with named parameters — no new user-input surface.
  • No new endpoints; existing telemetry endpoint remains #[AuthorizedAdminSetting]-guarded.
<hr />

TeamHub v3.5 — Changes

Admin Maintenance tab — full teams grid

Replaced the old "Orphaned teams" section with a full teams management grid covering every user-created team on the NC instance. What it does: Paginated table with search by name, "orphans only" toggle, and per-page selector (10/20/50/100). Each row shows team name, description, member count, owner (display name + uid), and creation date. Two icon-only action buttons per row: set owner and delete.

<hr />

Set owner

Admin can assign any NC user as owner of any team — whether or not that user is currently a member.

Delete team (admin)

Admin can delete any team regardless of ownership. Cleans up all associated data before destroying the circle.

TeamHub v3.6 — Changes

Activity widget

Deck activity now scoped to the team's board only — card events (deck_card) and board events (deck_board) handled separately Talk activity scoped to the team's room via numeric room ID — eliminates cross-team bleed Calendar/DAV activity subject strings corrected to match real oc_activity values Friendly human-readable labels for all Deck, Calendar, and Circles activity subjects

Manage Team — Maintenance tab

"Danger Zone" tab renamed to "Maintenance" Transfer ownership added — team owner can promote any current team member to owner Ownership transfer requires two-step confirmation and demotes the current owner to admin Leave team now shows the real server error message (e.g. "Transfer ownership before leaving")

Admin Settings — Membership cache integrity

New section in the Maintenance tab: scan all teams for stale membership cache Compares circles_member (source of truth) against circles_membership (share picker cache) Per-team Repair button rebuilds the cache — fixes teams invisible to Files, Calendar and Deck share pickers

Files

Re-enabling the Files app for a team now works correctly Favourite Files and Recently Modified widgets no longer appear on teams without a connected Files resource

Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignaturegblBv20FJFNq/Q3H9jPQvNSRrs/neT76/CRFwCF6dL2UmGY2TAsKmh06rLTNssVtnttoSuD1vlgANctX1gukwUMRAAXpjp6tHRg8u0II0g9C6sdwaLRstUJGExDUxRr5sbbgVwvRDY2GducpZRWSAyNlTSanLLJl9Eb6YAviLXr5AUAmczvdNRCa40GrHhytUe2O+oMfPtQJliOtotxL47VWvOynucGMWlj6j5ZghCx6gkTazlmWTFQQ/5VOe3EqPZyel9YSGJ4TtXwLOgQHMrBo087M34nxklShndZR12uYeZJ72n81ycvpByC10YfhDwaife+W+TeZBVtTrvo4wmqD8wqbkFsrNdp8DvMSvlVBKtibdZleX89LUG5RTsFQelFaOQjz+4A0h/xp2AhsTUtRef3vRCZCcmARieLz+g2ZaYn5EWnYDCkIPjLe/Kl9KCamL24QaSFyjBfVKcYX6DbTRCUG5xBrsEuEDWnZ9HHTUWZJO5UiqVsfvvHIzWuZ9j2vmRbsPBbKs0dRkaqO/04pDqdZaL5GLqHWjkv4wz+wiOnnMDnNKOtpubvW2HHmRSf8/TGQdzmdvr5ha+tjbOYqCKj+YMYI1jR2PWfIzxWSqzUbUrPDN6r7uEm4/r+f9ydI706wPr/f6BQlPDjq8DOIBTUC3Pc9Xdyjx2xOEio=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.7.2
Release Details
UpdatedApril 20, 2026, 5:58 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureRbq64iwUhPtTjRur8beQ5RgKG0BP0V5/7JaxZYTvBH/PFPcDmjy7EILWhL6IHsowijr6XTZWQlFbL4YZKdPQyW0PJxIm65ECq7IbqNLYK24hL8O/N1HweSZhVd5Dls+3pj9uvvR7ysrfxEt/cYDtHMxn0Ts7HcEdPFX3ONUpithodHeI9dfmNZgz6Fxk9cn+l/Pczp+JuqFa2L2h6YBJzQszsjGlVd1PlUE031Dj/6kYqRC8mQy3qpje7Xm3l6AHU2JrqAD4f4/dsSst7Cojx1sB43sy5yHnO5dSYMoYOVrxKciNrbwk7jW3CoX6XJWhBwJzLN8QKBoLOlrYpEyjYJXj+SeOim39vOvq8dsL2DpeOAhoxUNAuKQC+A0Gv4XhdeSX1FYZXmC20tgXXDln//qXChvYbE6usUmFz0iH0jP2yxqKbj48TZDID7wOyGGX0WHzHmD+zMY/alrx2+jZBqm7+BaFHT9UvDrmY6uIDAWtdbMJO3EhK2Sdn+k5DqenejwYO0yF+o5mU+itgx2pmyNWTF9/B8FcoeZIJExjZBv9/AnW0nP0WgkwqR8JmpaaFObbBWhYLXpIskLmXAfkqvfnYA7yli2bf48LR6yCkARYV2T85lkndOgH6oH51quzNvF2J7o/QcSzC83r2QIln7n4BW/X9hR/yweUkZLDU5Q=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.7.1
Release Details
UpdatedApril 20, 2026, 5:20 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureoWjRFEQ/K3TmpTN0v0cyubM8gFWkzxa8wTKg+A4SGZYjJD4rQHOYb5JacVYVkzMAWM20Gso1z5774wa06Tlh4sShGxSvN76lBZIFQSgOwt2sCXOAnc+Ng+aCCQIxvZOqxSbD7qU1u4A6eDsOOAf3TNXof7N2w1WpzgaD38u0O3qP4F/qNYIbtOelWQ4bHwjrEo1Vx/ubytlASypuqY4rvX6vK0G+vqIsJ2fo13Vyl+s+G0kOhHvtbUgw0VCuk1tlqYU5ORW2XLxsLmGwOWL/cqBRKGmvp2+GJhCd0edluHSxdBTM//Eis/WwfMImT/X5IZ8zuysnXmsX4AeXb8S2wszrIJH+mPkDbWICAr+Et06lJP++vxM0VhWirUYIzkXjL6U6qtA7Z/SC1U3iWhUQwIuAfxRjxcWkyKtIcjUpCgPZX9lLVJGWDP6MtGoKaSJ1nIzyOOLnRdTIqoiDdd9ObMxEC5QpfY1m9wGCyZMahwYO/jkmPWRO9aJSJhmP4+TEIyGabGiKuRSpv/3BDSa6MdD5GPTxu9ST5j04fzXHq/XFPMT/oq1jZMiLou+Y/vdEN3azm2BK16+F5LGCN5+sY5oxDNk5TSftF0TGfrPklgjFPqcK2QVGISZatkwwFfILCVJ9ckpju9jkwMXAnejZmffq0ott5qbn0T8g++E9TAw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0

Nextcloud 33

TeamHub 3.38.1
Release Details
UpdatedMay 14, 2026, 8:01 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
Signaturep1xq5GU5FgnU+VBmRTq1YN5VobUyjICVQ1UEEoxNmz+9GoTiMzc4SHrb4aQDDAIA8VppLDpx4+z8TKLAi7OgGy6COZK/7CHQrdDt0Qk+q6ACl4AF3l+RgV0DWrHxbP6V/LkewhJHUl9scVJkfIBwoZXK2bITpo65RdDMVDfTiHR7Nf1/jm/nwjpi2ZMYf7Ct969eB7a+IDoydWoYBETd5mlLBp30cWFthnT3uEpPRJYCgKvOdO9iVjBBOP2VtudKYDkUmdKpHbQutIxQbCcnw5455wCS4byicyEfu6oLxN6VYNk+VSttFf+PQlC7TFYNyHW/XOpneBM/z5yA/e9UaipRtFFzG/ZTepEQL6LoU2UgaXm/cPF4rDtqh3t+7BPR1OerRej8cTXsut7zugiKW2lm98Z3yXixEtTe5b0TJajkVTFYXfVBDYFUR5PLsAczk5ipa8O9UgapijqQDYKvqFyHhrrobWdAHs/cUJMZE7UdLJhpvrEeYfQJTSurKXI4uqLx/PIMj7P2C+LYQn71gnxJStjhCxy5syvDt8EQbljl8tlUtGWmbtpojG0JF9k3j502osAoHz5S02c357aqCGmdaY3Q9PlVyG2C12v2AXB1k5dOKG4nJ8IbrKlBYMe8xiqEllgoc722ab4wtcXqQoeA+kWT9q41VyRt6qrByYU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.37.0
Release Details
UpdatedMay 14, 2026, 6:27 p.m.
Changelog

Added

  • Message @mentions. PostMessageForm and MessageCard edit mode use NcRichContenteditable with the NC core OCS autocomplete API (/ocs/v2.php/core/autocomplete/get), scoped to team members. Mentions render as styled highlight pills in the message body. Backend sends a message_mention NC notification to each mentioned team member (on create and edit).
  • Message pagination. 5 messages per page with prev/next controls in the message stream. Page resets to 1 on team switch and after posting. MessageMapper::countByTeamId() added. listMessages now returns total, page, and limit alongside messages.
  • Per-team message settings. New Messages tab in Manage team for team admins. Configures minimum role to pin messages and minimum role to post messages, stored as per-team IConfig keys. Post Message button hidden (not just disabled) when the user lacks the post role.
  • Calendar view dropdown. Embed bar now has a native select for Month / Week / Day / List variants; selecting reloads the iframe with the chosen view in the URL.
  • Calendar embed auto-reload. After adding or deleting events, the calendar iframe reloads automatically so changes appear immediately.
  • NC-relative team links. Custom team links now accept apps/... or /apps/... paths (e.g. apps/collectives/s5) and open in an iframe tab, just like built-in app tabs. External https:// links continue to open in a new browser tab.
  • VitePress documentation site in docs/. Covers Nextcloud admins, Team management, Developers, and Users — 20 pages total.
  • New migration Version000336200 — remediates auto-generated primary key name on oc_teamhub_team_app_resources for existing PostgreSQL installs.
  • message_mention notifier subject in Notifier.php.
  • getMessageSettings / saveMessageSettings endpoints (GET/POST /api/v1/teams/{teamId}/messages/settings).
  • getCalendarEventsForWeek endpoint (GET /api/v1/teams/{teamId}/calendar/events/week).
  • deleteCalendarEvents endpoint (DELETE /api/v1/teams/{teamId}/calendar/events).

Changed

  • Calendar iframe URL now uses the public share token path /apps/calendar/p/{token}/{view}/now (team-calendar-only, no personal calendars). Falls back to full app when no token available.
  • Calendar connect error handling in ManageTeamView no longer logs the full HTML 500 response body to the console.
  • getPinMinLevel reads per-team IConfig key first, falls back to global key. Admin settings Messages tab removed (settings are now entirely per-team).
  • activeFilesIsGf / activeFilesIsShared in ManageTeamView use .some() across all active files rows so the GF connect buttons correctly hide when a GF is active even if a shared folder row appears first.
  • dav_shares access filter in getRealCalendarIds broadened from IN (1,2) to IN (1,2,3) for compatibility with NC Calendar 5.x circle shares.
  • resumeCalendarAccess corrected from access=1 (read-only) to access=2 (read-write).
  • Select dropdowns in AppEmbed bar and Manage team Messages tab have no background color (theme-transparent).

Fixed

  • MariaDB migration failure on NC 32.0.9: Version000328200 now uses explicit 'th_tar_pk' for setPrimaryKey() — auto-generated name was 31 chars, one over the 30-char DBAL limit.
  • Calendar connectExistingCalendar TypeErrorResourceService was passing $resourceId as string to a method expecting int; cast to (int) at the call site.
  • GF connect buttons visible when GF already activeactiveFilesIsGf now uses .some() instead of .find() so ordering of rows doesn't affect the result.

Added

  • Strict 1:1 enforcement for files resources. ResourceDiscoveryService::reconcileApp now snapshots the team's active files state and routes newly discovered rows accordingly: active shared + incoming GF → pending (with isDualFolderPending flag); active GF + anything → ignored (GF precedence); active shared + another shared → ignored. acceptResource and unignoreResource apply the same guard. All refusals write resource.suppressed_duplicate audit entries with reason codes.
  • Group folder takes precedence in getTeamResources. When both shared and GF rows are active (dual state during manual migration), the loop explicitly picks the gf: row so widgets and the team home always read from the group folder.
  • Dual-folder informational notice in Manage Team → Settings → Team Apps. When a GF is discovered alongside an active shared folder, a blue panel explains the situation and directs the admin to connect the group folder via the existing buttons and migrate files manually.
  • Resource-type badge ("Group folder" / "Shared folder") on each active files row in the settings panel.
  • Picker filtering by active files type. GET /api/v1/pickers/files now accepts activeFilesType=shared|gf|none. Shared folders are suppressed when one is already active; both types hidden when a GF is active.
  • isDualFolderPending flag on panel data rows.
  • normalPendingResources, dualFolderPendingRow, dualFolderSharedRow, activeFilesRow, activeFilesIsShared, activeFilesIsGf computed properties in ManageTeamView.vue.
  • Create New button for Talk — shown in empty state alongside Connect existing.
  • Create New group folder button for Files — shown only when Group Folders is installed; switches label to "+ Create new group folder" when a shared folder is active (signals the workflow).
  • Both 1:1 buttons hidden once a resource is connected, except when a shared folder is active and Group Folders is available — then the GF buttons remain so admin can attach a GF for manual migration.

Changed

  • ResourceService::upsertResourceRow() — now promotes pending/ignored rows to active on explicit connect instead of skipping. Fixes silent failure when the discovery reconciler had already inserted the resource as pending.
  • ResourceService::getTeamResources() — files block prefers gf: row when multiple active rows exist.
  • ResourceDiscoveryService::getSettingsPanelData() — adds dual-folder detection and tagging.
  • ResourceDiscoveryService::resolveFileName() — falls back to basename(path) when filecache.name is empty (some storage backends).
  • FilesService::listConnectableFileFolders() — accepts activeFilesType parameter, filters output accordingly. Also falls back to basename(path) for shared folder names.
  • ResourceStateController::getPanelData() — now triggers reconcileTeam before returning panel data, so externally added GF resources appear immediately.
  • ManageTeamView::connectExisting() — empty catch block replaced with showError().

Fixed

  • Critical pre-existing bug in ArchiveService.php: stray extra } (line ~2770) caused ParseError: unexpected token "try" on every admin archive request. Removed. Archive settings save works again.
  • AdminSettings.vue archive form: archiveBeforeDelete was missing from the data() default and from loadArchiveSettings — the toggle had no reactive backing. Both fixed.

Removed

  • The auto-migration system (FolderMigrationService, FolderMigrationController, FolderMigrationModal.vue, two endpoints) was scoped, built, and removed per user direction. NcDialog wiring proved unreliable; manual file migration is the supported path. The dual-folder notice remains as an informational signal only.

Security

  • All new endpoints check team admin level (≥8) before any action.
  • No raw SQL anywhere; no \OC::$server; constructor DI throughout.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureNB4VEY/kY6IM6/q9rg1aZPixwOBTrNlZIbr9hGsb3TcGQ3kXe591A67Rez1U2FQO3FcRuoxZRNXGMJkziuhoaa9RkoGQuHxtueXomwk5UWjFSTbgf8+JFSFXag8NUNM7DqEnRjG3hLad6HdDwdv8t+t7CDhkih5s2rGI7G55B9uSNdY0LftIal9G2M4DBJmpZtJ+1RitAI/ZqqRCjA+lVc0V7AQFeCxVyrt9weLTdXuvzGTZhazmiYZELVrbpUwurxRgmE6itg5pWp+T4FC1ilm7zyz/v6LOSmRBqgNExbS5lbEutYBoKLSKEPfvjAO2emcj54Ng9PwvRlP1iTvGr7jrZ15DZa0mBL6sXMvDpEdR2yvoAsVDvlroHW0aILMDnc3HruzKkmB8ykRyrkOAwVmCRQUPN5pjr6Qre/hCgYWZR0d+YHFopsJ/VDiH6+PH8aYia/92Z6z21kbvT4wUrqwqARyI510Dcq9TLx+O6CeNqYmBiPYkpAUoX1ck+q3fZAH3cqTXH7N5ezRctAnM3CvctmxMG7Gpd9BmLj0wF1p69qGQ4FvpcVSsFoFt3sc8qxfARDRm0fu+avD47k4YvKfR1NFbUhHe+RMYivFWlmCAhwbaObsGt2mCbyfIwxLFM/S4N2+ji8lwYT2wC9cPTHYTL1+dZNwTCCdaTEZIVSE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.36.8
Release Details
UpdatedMay 13, 2026, 7:15 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignaturelhEnGI/fAC8OFXF2pnGBIlqEN6Bw4EurQEVPeTeuGc+O+1NHT6t7rYfX5gBJinYOJScN0dXIys+FHOvzY/QGT02MbHUDXMqtwzYoegOZBlRE/TXUXp0LKCx+3m+rHjKd9dCtBJi++X2ZUJUqGzsU4Km1WNRKqv6gubdCYUAMjXZmrXtfuEtdOqc5yAgnaA7CxKx+TPcc8bpU+SPkiFeuC9EB+iwnM+3NJThjc6RIQWiCwc9F5i1FsXikkYe9gYENyaraXhZrqj1eeC2hHwBRB5aXYMO9FghzzjvQ2VZo/psiiGWukii17WqKSofNN5N6yeh0Va2q/dT3RRmtRNhZ16D9eCeVLF+w6rUaP3bz3lNZIeksbIkV5E3d3F/FXc51QdNIlQ5D1LdB4ghhVYtvTBFzf5WbB5yzM6uSA/zcR5g02p4iMzLdVoILfkXoMRV7VNISvQfPP9ExuQnw15dpA7nSzIEC2dtLCNoA1xUPTCVCOpz3CMHILjL5F4l8HJtQKx5D9IV8l5Sakf7uqp7SJcx8CWh03/iX6Eibp5HRRS4PsdKyZVKiWgOyG6iXkTktCruXQKGXi5MSwkpPZvYUz8//klH2Bn87PSHJ+q9rtca0j4w/o0QBqnJr03gHcKPh3Y5vD0aaca57svcZPbhr+dwT4WXmEBNkxRlNKwmI0v8=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.36.5
Release Details
UpdatedMay 11, 2026, 7:29 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
Signatures016TbppM9kULPOeWRGdKsV9pcTR+YBhPBA2cPZPRtKPLKxUpr80YJrCOj2+VxmxQrrr0cwaFgQTjtCTw8Uw1ush4zPNdfXfX2HFqsvmP2JYDEFQwk6ftJLwiDfeUk4kDnarODZ2WAJ6Ol22Sq8w4cxdgADyVDii0sRaHyyEnghCuyttUccXzr/1uf1MzlzuH0xhbLSKALpnQVnTKz0jMNgGifh/ug5nh+tmz/nwLSUGJ/n+iyWp8qQhzWtlKQpSSTAW3COCOQvleVoprDWkU9LyOKmQvYXExEmsf9C21olxxEkHygVhDEKKN+2eNmH1XsTyuBmi9SVDOP5uruPsiZs7bnmO9ToBI8oTCtRa6jmu2pJpPjTjIdGW7Mr5US/NEbjljWFdC0KJZ4y0Y5+z6oKExqXb13D/bMndP5uNNZI/0SwLTCCpfd6DYYp9TCESagMG6zARVbIu69ReMWlmvEL2Uhq0hKqlBfhKrHwyrtYRXXzLpn+riNO2WafrOrVmMMT8t1+0aXUdqYBRKz6jpuwRag29IutxSsYwNA9oSlCmjhylald0jhu6AAK9Zi5fg0HuKudr7RBhk4wPY+HrgHtVwvl9h5dJ0ADJmsJEE77CKaT8xdV0SgpRU/JZCMw9qHFnkz7qDR/f/fmshi0L9qaDVOB0hWOKP7Td1BvlC3g=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.32.2
Release Details
UpdatedMay 10, 2026, 11:50 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureaqlS5xLgAtQMFnFSjAjXnjfpSSV5UCZpVyKef4AdzzktPWmKamnaJ/o9bl/knf5Ccxcaac5gNFKSZcycZ4yrXj+BKTne63Wt+G4a/W3uhVV+jEz0aXacH4jwhVJuxDExsQUp83WA/JxrlFp38nEXc3fSMhAPZsP829eID9w6AbRSujgEzOfNCsduJ0Isrw+m60fR8R7LsX0CSC3XzGwLVwoJhbXJ52Ri8JRxLziVP/If/TAJR+pqg25hjGoYRqoPTacmdoFbNxcaZOeAxJSR0VRMwFS7rJJakiZ95w54KztDRvMwJAIMBr4BDtAiqedj3GCj8AtsPmvh3dEh3OPw4xMjQlTRAqW6yL1t4AhvL5dy5dmlQyRZiKwTkSC/9+/SXwR+e+1vfaB5ffmA3JAt9LIZ+24gP7O989Ed6yIo8Rh9//c6HwXky+L1MDOU9onZU3mwWBvI2xujyIhYu9uXMV6q587FsyptGaAoeBVtbtmY6DxiodLmgE5no1Gm0OBt7vy2ZUEhE9ToktSetWQPLtpjptRUBbAyomUGpEiaLSQP7y08h1ulPHoMjM3MelrxfGqSytHakG/M8bImdS7dO46kRG4gEf9C1LaaXH3KkfiNu0F5FPEbf0qidxDY5XePKUiAPirG5nSXLjYCu6f8hDktPh/U70EIWKuO4AAi4qw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.28.0
Release Details
UpdatedMay 7, 2026, 7:47 p.m.
Changelog

Added

  • Connect existing app resources to a team. Team owners can now choose, per app, to connect a Calendar / Files folder / Deck board / Talk room they already own instead of creating a new one. Available in the Create-team wizard step 4 and in Manage Team → Settings → Apps.
  • Resource pickers (GET /api/v1/pickers/{calendar|deck|talk}) listing the current user's owned resources, scoped to the caller's UID.
  • Connect endpoint POST /api/v1/teams/{teamId}/resources/{app}/connect (team-admin required) that inserts the share/ACL row granting the team's circle access to the selected resource.
  • ResourcePicker.vue — unified picker component used by both the wizard and the manage-team dialog. Files mode opens NC's standard getFilePickerBuilder dialog; the other three apps render a populated <select> populated from the picker endpoint.
  • Connected-resource warning under "Delete team" in Manage Team → Maintenance, explaining that connected resources are deleted with the team and how to preserve them.
  • Archive-before-delete admin toggle. New checkbox in Archive Policy controls whether team deletion produces an archive ZIP first or skips archiving entirely. Default OFF for new and existing installs. Same three deletion modes (hard / soft30 / soft60) apply to both archive-on and archive-off paths.
  • POST /api/v1/teams/{teamId}/soft-delete endpoint for soft-delete without archive — creates a pending-deletion row and suspends connected app resources but skips archive production.
  • Owner-side delete dialog when archive-before-delete is OFF, with description and confirmation text adapted to the chosen deletion mode (immediate hard delete vs 30/60 day grace period without archive).

Changed

  • The Delete-team button in Manage Team → Maintenance now branches based on admin policy: archive ON opens the existing archive modal; archive OFF opens a plain NcDialog confirmation.
  • Description text for the Delete-team row dynamically reflects the active archive policy and deletion mode.

Fixed

  • PostgreSQL SQLSTATE[22P02]: invalid input syntax for type smallint: "f" on team creation. The enabled (in teamhub_team_apps) and is_builtin (in teamhub_integ_registry) columns are SMALLINT (per the v3.9.0 cross-database fix), but their bind parameters were still using IQueryBuilder::PARAM_BOOL. PostgreSQL refuses the boolean-to-smallint coercion at the wire-protocol level; MySQL accepted it silently. Fixed by casting to int and binding as PARAM_INT in TeamAppMapper::upsert() and IntegrationRegistryMapper::register().

Security

  • Every connect endpoint re-verifies that the user owns the specified resource (WHERE owner = currentUid or IRootFolder::getById() for Files), preventing forged-resourceId attacks across the four supported apps.
  • Each app refuses to connect a second resource if one is already linked to the team (one-resource-per-team invariant).
  • Picker endpoints scope listing to the caller's UID — never accept a UID from request parameters.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureADlRyz4GyYgl8rljgx6Xw5Yq+hXjFnDGsT/M68SMUIu0PyMV0qJzbt+63EO5ij0SJrNYsf0ggbHaHct97ckYFzxrkFf7+B2O9l5YWdatd+dmtt0FQEMKBReJBSb93ZSRU65JXVlE0/43ikwK+RW9DiQI7QS3/DWSvRf83C43vI57g3PKs0dovrU5BwXWIb0bh7OvzXSfq7guF3JnFxlSeBTsrA9KUDTwQY03n1Wqi6tDYwLvTIQu8tKnPCMmzVQJlAc4d2krRVgEDGn+hNXN8+0sq8YSAq2ZCc2ckBXlMTyzLRrqwkZz7LpgljadbYATQe/GhS+ax5AFKL9efbXx0ny5S553N6Clgaq9vn5AyT5JASVo22Sf/Yxs/bT+EVYxKmwSd7XW9PDvXYwtG9aojqkQnEgZdas2MCeZw3e4yAsh1pd6KpFf3LuQ9U7nxzDSoABLZSDPYctIIZoVVQTPM35Bd/poEbOYl5f60bOYHEmeQkFP/MCVuqM9/XuJ1hIw27U7GdDCAsC1ONdcmlIRYEJHdIQ+yxOjMMYm8F18OjHJYoDuk/GIjFmGCF5QzcE+vdK6z4SO5n6JtTTsM6T8ruv/FNUFtQYbIb4KrhzbUs4TOxV+MCAI0/lB7IJiWdogLEiVuABwSecEPzt/K2qCbK9VgzJV8h77Yg1Z72ic1Dg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.27.4
Release Details
UpdatedMay 7, 2026, 1:14 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureWsF4We8JALnZvd9ZxzvftUVv6y9bJoO2AK9e/PM7P3dJn/cu8zwy1WvJhJDwbFP8Z0Nzcpj/wmN2WjfT0+1nbLor4BJ8Ls7noGy6KZR+laWTW/UHwGcRgFK5FB53Yi7W/rUTcp1dyM05gyl8sZAmrQxA/sD/unJccyNHcQJPpw3s8tsEShXmsFlZJuO2Ria+a0bKRXSQl1Az5v9ORk/Bx0Wd8oTVD+x2yEBq70TMaA4UqHU0Q/qNrZn03XHCYA6bh3QExdWx8sV3dNJ9X8envbqwPG53VL8KIOZD31DsjkVZ73+/stHpj3xQgwoiQ7oQD+ggorUShI16nrkd/VTV+M7VtcZyPxacndnslzeZyS00p2o0U9SzRTiJB3d76gogX/7XdQpRmUIeUroB1UNGaLMoILC8LojcDQsDGgv0w6adCZ5f/BdEgUkZKSMcm++IN5cYtm+q6+Eth29bh7gq5RIpuKb0Ous5wjG9UVgLHi/KDhtj+vZoUkg8CQ3ctPttf+FkJtY/xTuoEzf0ygy8nlHYsBoGQmdjyUqvuB7MZKCL3y1F8mGwEI0FYFMhbRnRVbYQy1ae8RpQj/fKEAWwXEfGIBbQAySath1iBlILNeAreUWmJpiWnE+aSghtd//HPcKvwHW1nRLt4f/UuMYIjCm3u/7C/CrJ49X2ZbIJSyU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.24.0
Release Details
UpdatedMay 5, 2026, 8:48 a.m.
Changelog

Added

  • Mobile single-canvas layout for viewports ≤ 768px and tablet portrait (≤ 1024px portrait). New MobileWidgetView.vue: scrollable canvas, collapsible icon bar at bottom with one icon per accessible widget, FAB action button.
  • FAB widget actions — in-canvas action button rows removed; actions surfaced via FAB: single action fires directly, multiple actions open a slide-up sheet.
  • Tablet landscape layout for viewports ≤ 1200px landscape: 60/40 split with message stream left and collapsible widget column right. Widget cards have spacing and rounded borders.
  • NC sidebar auto-close on mobile/tablet-portrait — uses NcAppNavigation :open.sync prop to close reactively after selecting a team or action, instead of fragile DOM manipulation.

Changed

  • Embedded app iframe content height set to 100% (previously 90%).
  • Edit layout button hidden on both mobile and tablet layouts (editing not available in these modes).
  • Seven modals (ManageLinksModal, AddEventModal, AddTaskModal, AddPersonalTaskModal, InviteMemberModal, ScheduleMeetingModal, TeamMeetingModal) now set min-width: 0 on viewports ≤ 768px to prevent horizontal overflow on phones.
  • MessageStream accepts hide-header prop and exposes openPostForm() method for FAB integration.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureTvyr9L9P+H2RLIOYb8tFSJIV/1sH4rWC2RhttmVfB98kvezRU7Xa/tVV+MKE758D3cT3BKsvBz7e/OtKoPKuCan6HR0AmXNbMYx3F/ep+BoEQP3H/m8pOaYF2xyRAYmsdHxV9EPyyFEX6Trxiwy5aNJSK5S9RJdC+fm8p0gmvDlP1G3+GCerMXdi2lioEpoAnIlE+fd7JUIt48C1YYHKAqDlsaw3wlXiYC4j68I8vVD8GdXYmYgXvxW3IeE/iUbOZJ75bpqxv3ufHqEFPAYas5+SMUy8fGQQZjBvjIN4ztSRwAIZ4e1OFZj2WsYsfJZEi5upcwPoqg5SGo4Xw7vp5Dz3Zxx2hCEhCdO8jlGSinqNul6lPRZmaKXm0GY8v03ZaHu2uUdyNPvOfnVRUbe2ekUKhXe7C0u9umdSLmv2/+HhQRGFFZH6Tfu6Pc1IwWirW2EnhmKoGHnWO0mjq+VK1Ip1ZntyZ1znM9U6fdQaHTjMBq2nlXQWnZgu1tw90QWf1rj3+MGQW9vUyrN5uEx9xxxBVxXjCxCVvkOsqwTR7lqqsQfp/NCR0lRyognr7Hmd985l8nUYHCrg9KfPzOfFxLRauxh1UIiRS1nif3WmJzmaelxyyRNysvksjzsc5GJW9C0wjTPsYOuZv2H+a3GRH1RSzadDXVS11CCDpVMPXG0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.23.0
Release Details
UpdatedMay 4, 2026, 7:35 a.m.
Changelog

Added

  • DELETE /api/v1/comments/{commentId} — hard-delete a comment. Author may always delete their own; team admins (Circles level ≥ 8) may delete any comment. Audit event comment.deleted written with metadata { message_id, author_id, deleted_by_admin, cleared_solved }.
  • Solved-question revert on answer deletion. If the deleted comment is the marked answer to a question, the parent message is automatically reverted to unsolved (question_solved=0, solved_comment_id=NULL). The confirmation dialog warns the user before proceeding.
  • Delete button on comments. Visible to the comment author and team admins. Confirmation dialog; disabled/spinner during async delete. Error messages are HTTP-status-aware (403, 404, generic).
  • currentUserIsTeamAdmin Vuex getter (level ≥ 8) — derived from current_user_level now returned by GET /api/v1/teams/{teamId}/members.
  • Markdown formatting toolbar in PostMessageForm.vue (new messages) and CommentsSection.vue (comments): Bold, Italic, Inline code, Code block, Heading (H2), Bullet list, Link. @mousedown.prevent preserves contenteditable selection; execCommand('insertText') fires at cursor.
  • Markdown toolbar on edit message. Same seven buttons in MessageCard.vue edit mode. Uses native selectionStart/End + setSelectionRange (plain textarea — no execCommand needed).

Fixed

  • XSS via v-html in message and comment bodies. Both renderMarkdown functions now pass output through DOMPurify.sanitize() with an explicit ALLOWED_TAGS/ALLOWED_ATTR allowlist before binding to v-html.
  • Headings (## text) and bullet lists (- item) rendered as literal text. renderMarkdown was a flat .replace() chain ending with \n → <br>, so heading and list regexes (which need multiline anchors) never matched. Rewrote using a null-byte placeholder pattern: code blocks and inline code are stashed before block-level rules run; restored after <br> conversion. Applied to MessageCard.vue and CommentsSection.vue.
  • Deck boards created with permission_edit = 0. Deck's AclMapper does not mark entity fields dirty when set via __call magic, so setPermissionEdit(true) was a no-op. Added enforceAclEditPermissions(): one independent QB UPDATE per column (permission_edit, permission_share, permission_manage), each try/caught so a missing column throws silently without blocking the others. Schema confirmed from live DB.
  • All Deck boards and Calendars provisioned in the same blue colour. createTeamResources() now picks one random colour per team ($teamColour = self::randomTeamColour()) and passes the same value to both createCalendar() and createDeckBoard().
  • Provisioned resources (Talk, Files, Calendar, Deck) not deleted when a team is deleted. deleteTeam() now fetches the team's app list from teamhub_team_apps before destroying the circle, then calls deleteTeamResource() for each app. Resources are deleted before circleService->destroy() so CalDAV/Talk can still resolve the circle principal. All apps are cleaned regardless of their enabled flag.

Changed

  • GET /api/v1/teams/{teamId}/members response now includes current_user_level (integer) alongside is_direct_member.
  • DELETE /teams/{teamId} now deletes all provisioned Nextcloud app resources before destroying the circle.
  • ResourceService::TEAM_COLOUR_PALETTE — 12-colour curated palette for NC-friendly team colours.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureNB29XEJ4DYUSSXCP7cIFfzPYsJyAPHHQtoOtktawP03w3p9lKDvZ86l7WnrBkKcOxtIv7oCuXPh8oQqZkj/L4XmpXAVcvIUPrZPtG3CQ4+OhNvC3BXT4T41GNLAQcG2hyQ4MZX11OBP1F5IfBmGWoY7il1gDNjDTIBqM4J0cFcO/Eg5q4zVYI2x1ks6+SpmlNCLdjVujDfZLN3/wXIQJA4zY5EqUexwmKvz2RiNNESfifz3wwpY5KcYEHrF+gasTIj1ZaaZ5TDC/4tUH71zpn3PAYNRpWPB8d/WhZW8yt0eaRw+4+hLItkzvwsKesAEljUNUrYD8IUD5VIWgysH1IgdXR3tJX2deQK3UW2gVFGuwJvNTtVzDuPGUsZ2m1VdhMPZcsPLqPLH+rvjwrG4qQlaTpXj9v/6ypBBoCo059KU7C5qnITKvANLXgldhEIyV3VNlCjbvww8v2Ogu+FSkSPpQRCq2FWygTVQJNYVIzjNS8J4lGfloPU9lXkEW1UvtK7nzZoumi/H9xmhj3edmOP/MzaR7wrToziaf6cWhhgYfnLxS60TYOUFmY7BCarcQ6y2tlXfPsCHYSDupV2/39kINeZ55xp70YP21S2WyjkkmmsXO76YDImJJIfXJhSUKnfJ7j1gk06Z8QwjQlAxkN2hDHG0JhQVcjWLAri/2A4U=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.22.0
Release Details
UpdatedMay 1, 2026, 12:35 p.m.
Changelog

Fixed

  • Indirect members (added via NC group/sub-team) could not see built-in app tabs (Talk, Files, Calendar, Deck). ResourceService::getTeamResources() checked only for a direct circles_member row; indirect members have none, so the method threw and the controller returned all-null resources. Added isEffectiveTeamMember() helper in ResourceService that mirrors the two-step indirect-membership check (circles_member → circles_membership) used elsewhere, without introducing a circular dependency on MemberService.
  • Member count in members widget was inflated when groups or sub-teams were present. getEffectiveMemberCount() used COUNT(*) FROM circles_membership, which includes group-proxy and sub-team-proxy circles as rows alongside individual users. Replaced with a query that inner-joins circles_member on user_type=1, level=9 to isolate personal user circles, and uses COUNT(DISTINCT user_id) to deduplicate users who appear via multiple membership paths.
  • Pages widget hidden after team creation even when Intravox page was successfully created. create-resources did not write to teamhub_team_apps, so getTeamResources found no intravox row and returned resources.intravox = false.
  • Manage team → Settings → Team apps showed all apps enabled after creation, regardless of wizard selections. Same missing write: ManageTeamView fell back to defaultEnabled = true for every app when no rows existed. The wizard now sends a complete appStates payload (all apps, enabled and disabled) with create-resources; the backend validates and persists these via updateTeamApps().
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureaF+aB3FIewjvx0eqVweCVBEI9ipOSyJoOcNoEC9XKXKaYsVdnElwJwRyq9so1vwmCMkRE2kmmlkqeK+kDc+cDrFhnwG/2NuzoTbG/BQViG1UqASNTodIVMWT3YfFcpVgWYwmY4ebBlHYFmDzpXmozDw74hodGwtZIXiSavfzJhtXhPYvhi/e+Q7v7qICbytjO9C1JFzEEcsGZNNEhkUlSiuO9SMt+yjkG6iWaCzcNjPMPmS7OROieXzAJ/Xxb5vG3aZocJfl2IezIR7sZ1XFrhvRy8+HB0r1EBunJa4YwgM86MaGzlIB2PdMH6OrN6ly6DZwl98oJTMCAjHT95/U/vuzzuwOrsg8P6Y7y+j0mH5nf/ZbSl0FeJk5tfv2GQe2XFXvRw7aKi/K+Y9B0dYReMPmwsBlPvx3mqEj543CaEP/Qzs4xmCJ/V1V0qzGfUkU0UvoDCPh7JLiDED8+O598KEFaxGSOOOqg9hhOLGszJG4jIFyTGsnBLvDFvR4bPFuA5HFjnPH6WdTWnfRhZFhtNojz3LQcsPP5Em9Y7x13KmW8h0HfJ92jzXyY13+4oK8jm9k/TNWyzqz7WYfb83tsia8cUw6PF4yA7fgBs8F4221Ko+19QtZIijE53M2txRNODZ/XsXLdM3ifatbgGi65T0tAzAw3BmWdMtWmHHrvPk=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.21.0
Release Details
UpdatedMay 1, 2026, 9:10 a.m.
Changelog

Added

  • WCAG 2.2 accessibility audit and remediation (Sessions 1–3). Full codebase reviewed against all A and AA criteria. The following fixes were applied:

1.1.1 Non-text content

  • AppEmbed.vue: <iframe> now carries :title="label" so screen readers identify embedded apps (Chat, Files, Calendar, Deck).
  • MessageCard.vue: poll options now carry role="button", aria-pressed, aria-label, tabindex, and @keydown.enter/space handlers — keyboard and AT users can vote in polls.

1.3.1 Info and relationships

  • TeamWidgetGrid.vue: all 11 widget title <span> elements replaced with <h2> (margin/padding reset added to prevent browser defaults from breaking layout). Screen reader users can now navigate widgets by heading.
  • MessageCard.vue edit mode: bare <input> and <textarea> now have associated <label> elements linked by unique per-message id.

1.4.1 Use of color

  • MessageCard.vue: voted poll option now shows a CheckCircleOutline icon alongside the background highlight — vote state is no longer conveyed by colour alone.

1.4.3 Contrast — hardcoded colours

  • DeckWidget.vue: #0e7490 teal replaced with var(--color-info-text, var(--color-main-text)).
  • FilesFavoritesWidget.vue: #f6c342 gold replaced with var(--color-warning, #f6c342).
  • TeamWidgetGrid.vue: #1a1a1a on success/warning badges replaced with var(--color-success-text, #1a1a1a) and var(--color-warning-text, #1a1a1a).

2.1.1 / 2.4.7 Keyboard access and focus visible

  • All 10 components with outline: none on :focus migrated to :focus-visible with 2px solid var(--color-primary-element) ring. Mouse/touch users are unaffected; keyboard users now see focus indicators.
  • App.vue: duplicate :focus-visible blocks consolidated; outline: none removed.
  • TeamTabBar.vue: role="tablist", role="tab", and aria-selected added to all tab buttons. Tab/Shift+Tab moves focus; Left/Right arrow reorders the focused tab and restores focus after re-render via $nextTick.
  • TeamWidgetGrid.vue (edit mode): all 11 drag handles gain tabindex="0" and @keydown handlers for ↑ ↓ ← → to move widgets on the grid. moveWidget() swaps positions with the neighbour in sorted order (fixes vue-grid-layout vertical compaction cancelling y ± 1 nudges).

2.4.6 Headings and labels

  • Same as 1.3.1 widget <h2> and edit input <label> changes above.

2.5.7 Dragging movements

  • Tab bar: Left/Right arrow keys on focused tab provide a keyboard alternative to drag-to-reorder (WCAG requires a pointer/keyboard alternative).
  • Widget grid: ↑ ↓ ← → on focused drag handle provide a keyboard alternative to grid drag-and-drop.

4.1.2 Name, role, value

  • TeamTabBar.vue: role="tablist" + aria-label="Team navigation" on wrapper; role="tab" + aria-selected on each button tab; web link tabs correctly excluded from tab role.
  • TeamWidgetGrid.vue: all 11 collapse/expand buttons now include the widget name in their aria-label (e.g. "Collapse Team Messages" instead of "Collapse").
  • AppEmbed.vue: <iframe title> fix (see 1.1.1).

4.1.3 Status messages

  • PostMessageForm.vue: attachment list wrapped in aria-live="polite" aria-atomic="false" — upload status changes (Uploading…, ✓, error) are now announced to screen readers. Checkmark symbol given :aria-label="Upload complete".

Security

  • renderMarkdown (pre-existing): v-html binding in MessageCard.vue and CommentsSection.vue renders user content without HTML sanitization. Logged as open issue for a dedicated security session — fix requires DOMPurify.sanitize() before return.

Removed

  • Debug console.log calls in TeamWidgetGrid.vue (moveWidget) and TeamTabBar.vue (moveTabLeft, moveTabRight).

Fixed

  • Double margin-top gap below NC top bar. NC page frame and NcContent both applied margin-top: var(--header-height) to the same element. Added #content-vue.app-teamhub { margin-top: 0 } to zero the page-frame copy only.
  • TypeError: e.n is not a function on team pages. translatePlural imported at module scope is invisible to Vue 2 templates — added n to methods: { t, n } in all five affected components; AdminSettings gets an inline n() method matching its existing t() pattern.

Changed

  • All error messages use {error} named placeholder instead of string concatenation. Allows translators to reposition the error detail within the sentence (22 call sites across 10 components).
  • All count-bearing strings converted to n() plural forms (14 strings across 5 components). Translators can now supply correct plural rules per language.

Added

  • Transifex plumbing. .tx/config and .l10nignore added. Stale l10n/en.js / l10n/en.json removed. Ready for NC community bot once @nextcloud-bot is invited to the repo.
  • TRANSLATORS: hints on ambiguous strings: Comment, Leave, Join (team vs. meeting), poll vote labels.
  • Translation standards added to SKILLS.md — every string written in future sessions must be translation-ready immediately.

Removed

  • Debug logging purged. 23 JS (console.log / console.error) and 15 PHP (error_log) calls removed across App.vue, FeedbackModal.vue, FilesSharedWidget.vue, TeamView.vue, FeedbackController.php, FeedbackService.php, TeamService.php, TelemetryService.php. The console.warn in TeamView.menuItemUrl() is intentionally kept as a security signal.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignaturenE6/JanHZPI2gJOiWJZMk28BvA/IenxP9ttZTLP8ukJhVHLtgEHDouOj6MlHhkol7j765YIdplWXD0snC26zoEjqGIeATPoVLA5C4s72+scF+8yA+ABvUZqoI0objebJsNj9vv4e35pMiFRYFjyxcqsepO9SZUd1h6OjJvd9HhLb+FGQ3XWUfhby3fASPzXUHADRgTSFALVT8uKoKBIT6N6RNsmtwZugGGt9sRJclHoFjYtjuw3taOU7IFSU0nzMeY0knJWJQqOiFHqPK02qA6+y1FSqROoxdmh5DzfXT2Lq82tep8PWNaIjy+eZnSPzZ7yMftzsUuw7Op2dt8IhIoeWlcBML4h4voLwnfSBvv4Y1iupF5NupORVXYQbCRwmGBNfpMV3giQAYLitqCBpEzshO22fwTas7ipF9ERzl8Xjnr+kC/FHRwsGaq86iE9uSeEbebDTRS0S1iQJ2QO3uefGq0ak/+D3fbeaEHEZTkmSZ+IHWsrPoPCj+hDThe812ymYqyN6AoCS688N60mHIGUETeN69fCDXFHWylumRxkdCIS9y9g5OtQTVXrKNNfui75jlQcjhQp8DH6aSWBZNIUSFEUw4D+TiXlOfwCJVHEQUxG0mIHvXMyMGS1HUmj0u5/5U3RFxjZeELbUxBdUE6Y39z7mWcI82aLrAf7PHFY=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.20.1
Release Details
UpdatedApril 30, 2026, 11:36 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureQ76CfO42b16YE6NfBvItjvR78K1DPxanhH91XK8A7vyu03DdXe7OUTFmHfzDd0Rrd0V3K8d+/ss0K8d3VUxJ8awlTx0OPmbQ46R+Q4Ar7SiQPOFhn+pi2JFJmQ/okVKIt1ltSZFY+rinZvOy7IrbONsPxD7EWiiE+3ES9wvNVBwvV0vByOQjLvZcMuOekOJmuqGQxAkiGMr/hYPCG9hYUUjjM140GgbKxpy5AR5zEEARvY1E8up0BNapKTdTEaxHq5kYuv708iGtmpuqQ74W0kXi39e0e3q5Ct3iaWo7ZTv3fVMa9UPxM919JoFSw41MDxReeILrujP/mfdgDJc870Heoi74URx8KM7lq1k8Oq2137OVmJFdmaZb1X6GFBozBOFQBWfIAuWg3b8PD7qxy49Qv8bFruv45eAsMtopCjOqrWICqteqyGNkZx1+VLB0yhzXvvkCRRD3ug4tgVwQ7G3gaLhWW1nrt/N1xrCRXaTk0XumsrprLn0ky1aK+i7mKyUsY4HA1C+C21pJ8lgwL8wjmo4Dm3OA5bZ/Fht2lO0YBKJGrt81BshzPYICFVb4pa8F5ESVyN6iaI3UmzvUHrSKYaOlfhhMWs1GsCo3ayDJ7I/iTmTHhltY6uicMp609IA6RTYQ9xVZ3bpaX3gkEGvvyTUY0dUFJdt5bnJP9iE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.18.3
Release Details
UpdatedApril 29, 2026, 12:15 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureBbSeggogNn0JPG7UmMXVzr1S9eGLRgtmaNwEg6Yo8UenbN4JWPjazn+m78aXajFSeh6jbmkpYR5WS7siW2o1xYVqqWTT4/ollugaFrvcDLi9moShgbqcFpi345PSRshFSaFNgIFCcdy4BBGhkVq17dkZRF9vRELuwtsHE+EsAtC4cg0K1x7fhDZ8AbrVUcWthvCAU7mqq/CDbI5QLMHFH/niUjZfxld01piActRQW51/eiXx7RvpY1XIUUd1JJtZjkcLEUpIojQb5Y6vFWnManLZHJ14Y0FC5WJyFvNXszE9twaUCI0ZtnurdSIogtJenXpPCGE397gx0r1KXwDnlXKJIHTNP81xiYQrxsLp6TjDabK9JIz1I6Mv6WVRZbk8O/fZNntQFJDKc+Lwp8d2WD8gEmOXRpvVsOjAuE1WqClJYJZi6MFY0y4H9/iLE7qi2cNj4kP4wdzGupaUWW6J4VprIRNAzSOqERdCLna82JvkMxU1tLiG6hFVmYc5F5QagWPEQlta7IWVmR4/07gZnu029Ec45hrrDyq96wiD5WAA0uqAcL2kir82l8vLeT/4a3uxAWf6YwMF7KldyJZhfoh1gA+uE8vEvKfUFBCDesKclXPsH+Wg4CP0eILT/h2LZ0J3lAd8HmdJnH6hmXp9wx7CxHrGRZYUdixix+59c5Y=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.15.0
Release Details
UpdatedApril 28, 2026, 2:21 p.m.
Changelog

Fixed

  • Calendar widget now reloads automatically after adding an event, scheduling a meeting, or creating a team meeting — all three modal close handlers now call refreshCalendar() via the widget grid ref.
  • Meeting notes public share link now grants read+write access (was read-only), so attendees can edit the notes file directly from the shared link.
  • @nextcloud/vue no longer logs "missing appName / appVersion" console errors — webpack.DefinePlugin now injects appName and appVersion as compile-time bare globals, which is what the library reads at module evaluation time.
  • Members widget: removed redundant border-top from .teamhub-memberships-list; Show all button width set to 90%; left-side padding unified to 12px across avatar stack, membership rows, and show-all button.
  • Removed redundant "Team Messages" heading from the message stream body (the accordion header already shows this label).
  • Removed duplicate "Post First Message" button from the empty-state — the header-level "+ Post Message" button already handles this.
  • All semantic color text uses (--color-error, --color-success, --color-warning) replaced with their high-contrast -text variants across 21 components, improving readability. Backgrounds and borders retain the base variables.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
Signatureo9VGOkozPXYywaP2ZC3o2UICAIdsFUEdehNKJF0GKdgPgzMvL1Slkyeg9XI0ZiY+cw/Uu6rccUulLDeKWR+2iLRpDQb7iNg2ZCL8QgXYi5AjuO9diTPAqrywyowNNXV8gfFpJXJQ3DqEvkXQVptMXM1A5wNXjybgKAQAnTNSlrF+r4HvT/MJHomrojrDn2yCaHyhI5ER47B2YevI+CqWkKC2RFPwrcptBKVi62tk8VGVarMy9/Vrrp7zLbx8M5oZbVcLhdB7zIUerujkchkr2olx+SKYdNmdQ92tkw3kW584WiCqY6fsfLMD3PSRwHqiH3ScVFIXEHYIMeEphCnXukTwik9c4Vd3C/gAjV08K7Ii8ll9Yh4gt7uIMOfRx1o0HYDyMXqnFHlCnAalzN8UIkq+EXJ/i56lETuFvx0gnW8sxVmziuHpn76pjs9ZG1bVsPDSdwMKA1MwdnIt+pkaY7w9nB+25r7Nz7NMVgv9SvDxhMTo9zUGc1ncpnQ+xIqeEm2uCj+OPxjuYkAJ/vlSuzrdcxALAmzpecxR9J4CwZ+cnq9yJZoXIUMSnt694gd58/KsVAaHlI+cSVaPPZz/M26BwF5DJoWBdl+0fTVQ25WzciKzJ+pvmJAvH3KD3TxJKT0W2XTOWeoUfhzsv+nt47eDgDxvD8LUK1WxAtE0axw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.13.0
Release Details
UpdatedApril 24, 2026, 10:02 a.m.
Changelog

Added

  • Group and team members are now fully recognised. When a Nextcloud group or another team is added to a team, its users count towards the team's member total and gain access to the team. The members widget shows direct users as avatars (up to 16, sorted by role then last activity), followed by a flat list of added groups and teams with a GROUP or TEAM pill and their user count. A "Show all N members" link opens a searchable modal listing every effective user, deduplicated.
  • Manage Team → Members tab displays three buckets: Direct Members, Groups & Teams (with name and effective user count), and Pending Join Requests. Admins can remove whole groups or teams, which also clears their users' indirect access.
  • Invite modal can now search for and add other user-created teams (circles) in addition to users, groups, email invites, and federated contacts.
  • New GET /api/v1/teams/{teamId}/members/all endpoint — returns the flat deduplicated list of all effective users (direct plus expanded from groups and sub-teams) for the Show All modal. Requires member-level access.
  • New GET /api/v1/teams/{teamId}/members/manage endpoint — structured response (direct, groups, circles, effective_count) for the Manage Team members tab. Requires admin-level access.
  • BrowseTeamsView teams now return an isDirectMember flag so indirect members see a disabled Leave button with an explanatory tooltip rather than being allowed to "leave" a team they were never directly added to.
  • leaveTeam now detects indirect membership and returns a 403 with an indirect_member sentinel so the UI can show the tooltip explanation.

Changed

  • The GET /api/v1/teams/{teamId}/members response shape changed from a flat array to {members, memberships, effective_count, has_more, is_direct_member}. members is limited to the top 16 direct users (sorted by role then last login), memberships is the flat list of added groups and teams for the widget.
  • Admin Settings → Maintenance team member count column now reflects effective membership (direct users plus users from added groups and sub-teams) instead of only the three top-level rows in circles_member.
  • removeMember() now correctly handles groups (user_type=2) and teams (user_type=16) by using single_id as the delete key. It also calls MembershipService::onUpdate() after deletion so removed indirect users actually disappear from share pickers.
  • Pending Join Requests in Manage Team has extra top padding to separate it from the membership summary.
  • Group and Team icons/pills use the primary-element (blue) and warning (amber) tones respectively — the previous success-green was too low-contrast.

Fixed

  • Integrity check in Admin Settings → Maintenance no longer flags teams as mismatched just because they have a group or sub-team as a member. It now flags only teams whose circles_membership cache is genuinely empty while direct members exist.
  • getTeamMembers no longer fails on the u.last_login column (which does not exist on oc_users); last-login sorting now reads from oc_user_preferences / oc_preferences.
  • browseAllTeams correctly detects membership via groups or sub-teams in addition to direct rows.

Security

  • getTeamMembers now enforces requireMemberLevel — previously any authenticated user could enumerate any team's member list by guessing a circle ID.
  • lastLogin timestamps (used internally for sort order) are stripped from the members response so they are never exposed to the client.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
Signaturea3Sq1npOxTnT7aLDRXv66RWwUdOWvy5yXVlPPHePce9JRxddfqvN4FS4p+bnjFEdkKQmlFNDNzZ97aJmEZb1Kfzb+xpX6WzgDfJe1gTYUhE3XYHBchxclwCzPC/fwdymmrjwwP9b/1q9fH26FRdFciFUmHQO9Z24g696GnkGwApfohzX2U0jd4v55cx1e+vs86SZRWY26tkUm/FXD5+d+bl4FAkDhiK+Z06hFOuuocBhqyt2obf/gohkgTnEZpaHzkaAdgJFvvvRo+azlxGzODk4mqtyZIEDUWbAXQ99vRXZAokuwRrizBbXqbVk5sn3ntgG5rq0NWoYJ3htqhdhqqMh7w6SW/XBD5cGvLZu7BZpfvFLThabB7aZktNZhmVWz3U81C+WjYVhlcKcXPxEeQXXwo+LjSpGNmjkBg2bOsNEnVcYx3LhWsmbqRNf6JH8B0kcERqJcBWRbpthg/ytseDLsFHDX76QmHMb7/r6IKwq3EjaJSpLcuMgYAE0/ad8BtR54j/rWN1AsPD3oj3UfElHO5A27R/Xdu5qwzTd9zpWDRDgp3NE+2a6ler1WpgJtuTXEv+TGCURUK9srKLcpB+QGO/J26pFhqQovLEP72uL3kW8zXDlNW51++6uJJsrE1212s6JzPLSV1jntOrB+exnyQMV9sbNEVVzwyaqonA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.12.0
Release Details
UpdatedApril 23, 2026, 6:50 a.m.
Changelog

Added

  • Shared Files widget — new dashboard widget showing files and folders that team members have shared directly with the team circle (e.g. from Nextcloud Notes or Files). Displays item name, type icon (including a dedicated note icon for .md files), sharer display name with avatar, and share date. Paginated at 10 items per page, sorted newest first.
  • New GET /api/v1/teams/{teamId}/files/shared endpoint — returns paginated list of files/folders shared with the team circle, excluding the team folder itself. Accepts page and limit query parameters.
  • New shared_files app toggle in the Team Apps section of Manage Team — defaults to off; team owners enable it explicitly. Independent of the Files (team folder) toggle.

Fixed

  • Fixed team folder query in ResourceService incorrectly picking up individual file shares (e.g. Notes shares) as the team folder when no folder was configured — query now filters on item_type = 'folder'.
  • Fixed shared_files toggle defaulting to on in Manage Team UI for teams that had no saved state yet — default is now off.

Added

  • Upcoming Tasks widget now shows personal tasks alongside Deck tasks. When the NC Tasks app is installed and the team has a calendar, VTODO tasks from the team calendar are fetched server-side (Sabre/VObject, direct DB query on calendarobjects) and merged with Deck cards into a single sorted list. Each task row shows a source pill — blue "Deck" or teal "Personal task" — so users can distinguish at a glance. The two task types also use different badge icons.
  • New GET /api/v1/teams/{teamId}/tasks endpoint — returns upcoming (≤14 days, non-completed) VTODO tasks from the team calendar.
  • New POST /api/v1/teams/{teamId}/tasks endpoint — creates a VTODO in the team calendar via CalDavBackend (QB fallback if unavailable).
  • New Create personal task action in the Upcoming Tasks widget header, which opens a modal (title, optional description, optional due date/time). Shown only when Tasks app is installed and team has a calendar.
  • The existing Add task action renamed to Create Deck task to distinguish it from personal tasks. Shown only when team has a Deck board.
  • resources payload from GET /teams/{teamId}/resources now includes a tasks: bool flag indicating whether the NC Tasks app is installed.
  • New AddPersonalTaskModal.vue component.
  • New lib/Service/TaskService.php service.
  • New migration Version000310001 — ensures teamhub_integ_registry exists and drops the legacy teamhub_integration_registry table if it survived an NC uninstall. Fixes a scenario where NC's "delete all data" uninstall keeps migration history, causing the new-name table to never be created on reinstall.

Fixed

  • Fixed oc_teamhub_integ_registry does not exist error on installs where NC's uninstall-with-delete-data flow preserved migration history, causing migration 000209000 to be skipped on reinstall while the old teamhub_integration_registry table survived.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureSgfXebprj3dl8qsJCiO/pE+phwLvcTd5NcSGL2buF71GuT7a/fqkQWJ0XTwULl70Dw7D4/wJbMX9+fLnwXK/VvfRS1S1UNa8VUtCiuUJU4f4hjrnxYWuBT6oledtiXpb8fVeB46bTzwVJXTc57HHMm4Fz6L/rjutbeu07fLe5dNIAVXUL8niOfGyeMhBLijQDAsvlcOgBvpFXSqHscgF7IwOYTJdRqoyvAJQZgoxdlffHLnL5isK+GnjJCQXt6WzIxhiHbkMQlr+SwjPdvqo5UcvRCAHoiMS6sVQFmt1TJAHzygxHBK2g58Gv4NRvm/HszdMxCbkJVpgZFeqTO/WOrNTQaIiWIHGlK2XWoVVZetF0vvSlOynOXQqS9SVHmvOhfdH594EN1kwALAckCSdIvaeIdJpA3AgeS5er9GPMQI6lRWX6gP9H6WLAFGSFLjY6HpJvcr8mXBUGLzZWjnqd2w/WzDyGf/SfwMvf7NrgrmkEbkxEkRXYtUxkjJhlIX/g6vQicisTwHViMbO1orUbP6DvXcoXWGcu9iwlnumGSrMFbBwDsP/163U7kO52RjXg4tRxpZ2G0UOzKKx5Nc7TUA87bkxLO3SjC5yL536poI+22uNYSoWsxQpk9KGsVi0xiaLLms53Kp4KnXU7LPMQ+ZAlpb3U63sBLVkRHQhstg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.11.0
Release Details
UpdatedApril 22, 2026, 9:04 a.m.
Changelog

Added

  • Upcoming Tasks widget now shows personal tasks alongside Deck tasks. When the NC Tasks app is installed and the team has a calendar, VTODO tasks from the team calendar are fetched server-side (Sabre/VObject, direct DB query on calendarobjects) and merged with Deck cards into a single sorted list. Each task row shows a source pill — blue "Deck" or teal "Personal task" — so users can distinguish at a glance. The two task types also use different badge icons.
  • New GET /api/v1/teams/{teamId}/tasks endpoint — returns upcoming (≤14 days, non-completed) VTODO tasks from the team calendar.
  • New POST /api/v1/teams/{teamId}/tasks endpoint — creates a VTODO in the team calendar via CalDavBackend (QB fallback if unavailable).
  • New Create personal task action in the Upcoming Tasks widget header, which opens a modal (title, optional description, optional due date/time). Shown only when Tasks app is installed and team has a calendar.
  • The existing Add task action renamed to Create Deck task to distinguish it from personal tasks. Shown only when team has a Deck board.
  • resources payload from GET /teams/{teamId}/resources now includes a tasks: bool flag indicating whether the NC Tasks app is installed.
  • New AddPersonalTaskModal.vue component.
  • New lib/Service/TaskService.php service.
  • New migration Version000310001 — ensures teamhub_integ_registry exists and drops the legacy teamhub_integration_registry table if it survived an NC uninstall. Fixes a scenario where NC's "delete all data" uninstall keeps migration history, causing the new-name table to never be created on reinstall.

Fixed

  • Fixed oc_teamhub_integ_registry does not exist error on installs where NC's uninstall-with-delete-data flow preserved migration history, causing migration 000209000 to be skipped on reinstall while the old teamhub_integration_registry table survived.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureP+5/blvdXpd4uoReE5CvW4k1/WbnStC9vXXjXI3Tvi8B47QV8Dej4K2Wi+1wXxFQ8zQw/i+nuz4/ZzQSwSPnjzzpbQaNRo12s/x+9pb+MsBprGSUENMK3s8vwutV5QoiD5QLM/rxq7+ysdw47AwQbM+4+VGK/a2tAhuO2H7Q3x8nqRmJCSIZewc9D6ihBpQ5Sue3ywJIKFv8X73guc8LPSxhY+YnmW3Mc2bBdsxbUamsF9EZfkSVA9zebC455uSwufPZKLaWlBltydLWyZrhFZOU8aC4QeirMYCXovzThRQNk8hwkdppc4Gb737JqrVrC4uL/AMIPrTsJ4PcAuLDsmM0E/ZHbmpPBZ8wWDfMZKS3tHZM5K/2My3Sv7W3NhkQIzMuh2yNDAcw5r2B20mu34nSvATXTm3qacGBRmbLq9dfdMkEWMenTHtBzjWlVm0s0A03+gv68lasrzv7moyzlrjk1V6i3UuEo5XAGZCJSITQb0+RJAaIHmGqOBCu0UggevHuOqOMUwFl9aa4MbGa3BwxamSt5rfii22L0bWVHtFeiCaWZGfrhTJNM1WhRd134ha+puHWKpMWv8cxTxWA6FyycE4i+H+KR6yyvLpL3viVGPm+24BzSk3GPHdfEetvu2/H7WX1vnTR8NBzKt8dHxAj0YSegXYFaPF+0EO0fEo=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.10.1
Release Details
UpdatedApril 21, 2026, 1:22 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureSxVjtNOVjWRSbm2YIc1M9cvaHIgVbVJbMJcD6FMStLGHteX8VzmSeEq+gpTZTER2VsyukDvVKRWOW3TXPTyzWF3UuC8mZSpEaK4bGHi83B3natM149njVrYyxy0BawErj4YH3VlvPzl4ok8z5hwAFWKGyFNJ2CulO2lsUfwDnhhLsvRAIjZzX+KZ2C99byqV3qFRnWo3kI+JT5PpE5+ug8T3KImQYKwGuMDq6+zFF2Qi+edECt+5TiO/rr3MFCZvSwwlwaNOEnCUjpA5wcwreGKqP2IpDJi+TwzjcJ5Mlmh6/qNjdTTkZ1tRvH5zKrZRHxAqSH0T40TMQM/N3huouEQE+fqHfJXgJXy3t99UrpWUfY9SX/rLWPQCkzgco353IBY1YTacz/cCH2yVlrTMty+EmU4iTOo2876PutuV43kDSytBtGzinCY78vrZ6D99fl/UkU5fsdVFVh91FZiPyd/JnCgTl59rm32K6rEhUmaMeXvKjl8CTuWKc6Z0TZ6qS/GPjeAVxHlpzRMIkhbjMOGnlWAKAlabDRIxZf+SSNazjnI8SFkOUOo5yCIoxMF9GjboNA81NkIg6PYdEaiooPTXiGbOd7cmuh4FNPWiniG06hn+BXX9jpO3zJNTKbmxP4g4dyWMm2923/miX93CtmyhsYWn2OcjX+YLLf78TgQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.9.2
Release Details
UpdatedApril 21, 2026, 11:15 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureVqSPboP020ssz+waXZIgJ+LTvo3hMESzHvMEKUi5BrRSPiplINi3X1Etr3zo/IQIgyv7BvaMYyjNs33q4jz8Y5oaawenqkCDw6XrV8F34rYPZbW0AabIGOAw1Ghy7Qg3mlbkq+GydCzfAMiEHro9sfi1C6kffOdijPwNm3EWPGurR7ERfDa19qeEfqoEU3Ni+//+AnwrL+rP+jf9pYM+q+/49CxT1zs53TqMTZyihHnVNbxOLCR7sgJtTVHR9NBR2HjEhFt73nxFBFn3b3j6OwoIgUX2l2lQR254lB/mgs4uD510an48qHLsYbE72Ph+LM+x8g7NtsLKbzyM24dA2+mL8PiwJhZUCfTFpbPVuiSX6OESUBbml7pgqFFv0dA8FD4gtqxKErPvD7CMaXR4mGrkit8bkkfReObVjBQZyCVl1S9q9Sj1ckfJpUlR5jmBfY39QzY3Bv/+V0cvqxxC+P25xmbvh6VHbnBMcJ9uxs4XW1lhjqvvJFTHS3nJJeQX/tm/q9k2qjnvLEe8nliMc7k0NtZxXdJI4pBPawvBaM5T91AKvzpKWrzmzIxTOWYT0HmgSm6cPPT/EBZl/YaXTO4a5xSNmCljGn0uo7bDiWtwcFNUuzCXG7FirlkyxiOkNv6DaZMXczzv89o0vMubHotd/OzddrXphSIrvkfA+Xg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.9.1
Release Details
UpdatedApril 21, 2026, 9:46 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignaturemX7RsaWak2BPhu44QNActtv1oaoiKlo5vmrzmf+iPPoJPMw0cAXoq2UcPpHnsrPme+mCOiDv+yETlWFSPdesr9U3ffdI56rxQMRqkgAv5QErwwE/jqqyte15iT2wHFrEF6aCn8NnF9bIElrCfmdL8kPwEKbgcrUBom/cQRFlWbqnmd6QRzqY+bevPIx6fXaA4ZTQbuGaR1PikE2Tskm0ETCtHf05Axg6eJ+fjgHAdR/bgsl2/2+giwe3fmoyPaC0GVsuoTmGjduMSPaUINC1hA7NPKM2aHBLvXYcGqNzKF6Wtr+la8VqOq4akwYoSlGvWOQ5uw3gTCubRhDRmMrxb6t1QABD7CseBzMKjTv/Z+ib62hrEj5IoP/qRdiovYZVJQ+VQHw8pqBJqS+a014t5m1+h3nPpZTT1heoyR0qA44AXmGhqcCVCGcMuVAtw7trENCY17FbHradrLmEofCLxoGuCAuviFXQo+03kxTL3dc4pgUm6G1+/RoX5hM3jtYmi5tBmFmXLBT8qsr1ZEStRin8aLwKBr92oeejMhLvyPN4wryntUpq8FL3n+SERCsovIvuwmMw/MOuBrL16xEL0FRa/EKlqN5F5z9gtR+ckjap8/SLQDYu7jbZUD3CGjKJbsaCeKv/Lbsw/tDqe/ZXeg7cZaq2tlPTN3g2kFah/Ek=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.9.0
Release Details
UpdatedApril 21, 2026, 8:24 a.m.
Changelog

Fixed

  • Fixed fresh-install failure: teamhub_team_apps.enabled was declared BOOLEAN NOT NULL which Doctrine rejects when storing false on MySQL/MariaDB; changed to SMALLINT NOT NULL DEFAULT 1.
  • Fixed same BOOLEAN/NOT NULL issue on teamhub_integration_registry.is_builtin; changed to SMALLINT NOT NULL DEFAULT 0.
  • Added migration Version000300801 to apply both column type fixes to existing installations.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureVWWGR5wGqe3Eax5KKz+AQ9nvFxwwNzPj4Zsqen4x72T9rHc242F+i+eaIMt/ae1/SelQGyv18ckoH5xA+eZEF+PzJj5vmcq2Zwx+PwlLTD+ieyRfaFcVc0kkYXTqMKa6/laXrNrwHuBHRsG+5wyJLkXm78H2OG0HMCIm71b7x06pIxU/eN2i6pEcTaTajyUbxPd37FsGv591XzyRKZGK+Z1DZXdMI81aE1g68xGeQLpnkKLPjURMzw3NnqZkcJiiU+fhDggu4O32obgcc2MOgrOo+ciHNX+RKFxkdYLs/qZzbS/RDdjxvnE9U5eESH7hAXU/ww8k/vSdtxEU6vrSd94Mg3GDHhjjS9jj/tLJYCk0J3MQp6EJMVRIInhgNIJJf1VkoCJk2MkTdpgF/GWheW9SBVFD6+IbzR55Ss2OYQK42gXtuNItWBm9ZCvShB5bxnmL4JtZ5I9ZfmmxD6BuZFwAkvnDIe6bt7wnVt8rZ0F0X5f7PrEzFoNq5TnagELFx0Z7HM/8OxRXwOLJtblMZeEI+tFRKxlgSOcI4EBroGwsGQ6sHELNWbqD0XvQBxmjVGjAEXfjx5yp+xwmc5433StzDcu6ItEt8wJQYKQ91quGR1MjEKwwVqmzjtNX77lt2aSKzvy4ibb8g1Xa3uHCUd9PmtdzN9FiBK2G6Gj4flA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.8.0
Release Details
UpdatedApril 20, 2026, 7:08 p.m.
Changelog

Added

  • Telemetry payload expanded with six new anonymous metrics: nc_version, user_count, member_total, message_count, builtin_integrations (per-builtin-app team counts), and link_domains (custom-link hostname frequency map).
  • link_domains aggregates custom web-link URLs down to their bare lowercase hostname before sending — no paths, query strings, ports, fragments, localhost entries, or numeric IPs leave the instance.

Changed

  • GET /api/v1/admin/telemetry preview object now includes all new fields; admin UI automatically renders them via the existing JSON preview.
  • TelemetryService now depends on IUserManager for user counting.

Security

  • All new collection paths are read-only DB queries using QueryBuilder with named parameters — no new user-input surface.
  • No new endpoints; existing telemetry endpoint remains #[AuthorizedAdminSetting]-guarded.
<hr />

TeamHub v3.5 — Changes

Admin Maintenance tab — full teams grid

Replaced the old "Orphaned teams" section with a full teams management grid covering every user-created team on the NC instance. What it does: Paginated table with search by name, "orphans only" toggle, and per-page selector (10/20/50/100). Each row shows team name, description, member count, owner (display name + uid), and creation date. Two icon-only action buttons per row: set owner and delete.

<hr />

Set owner

Admin can assign any NC user as owner of any team — whether or not that user is currently a member.

Delete team (admin)

Admin can delete any team regardless of ownership. Cleans up all associated data before destroying the circle.

TeamHub v3.6 — Changes

Activity widget

Deck activity now scoped to the team's board only — card events (deck_card) and board events (deck_board) handled separately Talk activity scoped to the team's room via numeric room ID — eliminates cross-team bleed Calendar/DAV activity subject strings corrected to match real oc_activity values Friendly human-readable labels for all Deck, Calendar, and Circles activity subjects

Manage Team — Maintenance tab

"Danger Zone" tab renamed to "Maintenance" Transfer ownership added — team owner can promote any current team member to owner Ownership transfer requires two-step confirmation and demotes the current owner to admin Leave team now shows the real server error message (e.g. "Transfer ownership before leaving")

Admin Settings — Membership cache integrity

New section in the Maintenance tab: scan all teams for stale membership cache Compares circles_member (source of truth) against circles_membership (share picker cache) Per-team Repair button rebuilds the cache — fixes teams invisible to Files, Calendar and Deck share pickers

Files

Re-enabling the Files app for a team now works correctly Favourite Files and Recently Modified widgets no longer appear on teams without a connected Files resource

Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignaturegblBv20FJFNq/Q3H9jPQvNSRrs/neT76/CRFwCF6dL2UmGY2TAsKmh06rLTNssVtnttoSuD1vlgANctX1gukwUMRAAXpjp6tHRg8u0II0g9C6sdwaLRstUJGExDUxRr5sbbgVwvRDY2GducpZRWSAyNlTSanLLJl9Eb6YAviLXr5AUAmczvdNRCa40GrHhytUe2O+oMfPtQJliOtotxL47VWvOynucGMWlj6j5ZghCx6gkTazlmWTFQQ/5VOe3EqPZyel9YSGJ4TtXwLOgQHMrBo087M34nxklShndZR12uYeZJ72n81ycvpByC10YfhDwaife+W+TeZBVtTrvo4wmqD8wqbkFsrNdp8DvMSvlVBKtibdZleX89LUG5RTsFQelFaOQjz+4A0h/xp2AhsTUtRef3vRCZCcmARieLz+g2ZaYn5EWnYDCkIPjLe/Kl9KCamL24QaSFyjBfVKcYX6DbTRCUG5xBrsEuEDWnZ9HHTUWZJO5UiqVsfvvHIzWuZ9j2vmRbsPBbKs0dRkaqO/04pDqdZaL5GLqHWjkv4wz+wiOnnMDnNKOtpubvW2HHmRSf8/TGQdzmdvr5ha+tjbOYqCKj+YMYI1jR2PWfIzxWSqzUbUrPDN6r7uEm4/r+f9ydI706wPr/f6BQlPDjq8DOIBTUC3Pc9Xdyjx2xOEio=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.7.2
Release Details
UpdatedApril 20, 2026, 5:58 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureRbq64iwUhPtTjRur8beQ5RgKG0BP0V5/7JaxZYTvBH/PFPcDmjy7EILWhL6IHsowijr6XTZWQlFbL4YZKdPQyW0PJxIm65ECq7IbqNLYK24hL8O/N1HweSZhVd5Dls+3pj9uvvR7ysrfxEt/cYDtHMxn0Ts7HcEdPFX3ONUpithodHeI9dfmNZgz6Fxk9cn+l/Pczp+JuqFa2L2h6YBJzQszsjGlVd1PlUE031Dj/6kYqRC8mQy3qpje7Xm3l6AHU2JrqAD4f4/dsSst7Cojx1sB43sy5yHnO5dSYMoYOVrxKciNrbwk7jW3CoX6XJWhBwJzLN8QKBoLOlrYpEyjYJXj+SeOim39vOvq8dsL2DpeOAhoxUNAuKQC+A0Gv4XhdeSX1FYZXmC20tgXXDln//qXChvYbE6usUmFz0iH0jP2yxqKbj48TZDID7wOyGGX0WHzHmD+zMY/alrx2+jZBqm7+BaFHT9UvDrmY6uIDAWtdbMJO3EhK2Sdn+k5DqenejwYO0yF+o5mU+itgx2pmyNWTF9/B8FcoeZIJExjZBv9/AnW0nP0WgkwqR8JmpaaFObbBWhYLXpIskLmXAfkqvfnYA7yli2bf48LR6yCkARYV2T85lkndOgH6oH51quzNvF2J7o/QcSzC83r2QIln7n4BW/X9hR/yweUkZLDU5Q=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.7.1
Release Details
UpdatedApril 20, 2026, 5:20 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureoWjRFEQ/K3TmpTN0v0cyubM8gFWkzxa8wTKg+A4SGZYjJD4rQHOYb5JacVYVkzMAWM20Gso1z5774wa06Tlh4sShGxSvN76lBZIFQSgOwt2sCXOAnc+Ng+aCCQIxvZOqxSbD7qU1u4A6eDsOOAf3TNXof7N2w1WpzgaD38u0O3qP4F/qNYIbtOelWQ4bHwjrEo1Vx/ubytlASypuqY4rvX6vK0G+vqIsJ2fo13Vyl+s+G0kOhHvtbUgw0VCuk1tlqYU5ORW2XLxsLmGwOWL/cqBRKGmvp2+GJhCd0edluHSxdBTM//Eis/WwfMImT/X5IZ8zuysnXmsX4AeXb8S2wszrIJH+mPkDbWICAr+Et06lJP++vxM0VhWirUYIzkXjL6U6qtA7Z/SC1U3iWhUQwIuAfxRjxcWkyKtIcjUpCgPZX9lLVJGWDP6MtGoKaSJ1nIzyOOLnRdTIqoiDdd9ObMxEC5QpfY1m9wGCyZMahwYO/jkmPWRO9aJSJhmP4+TEIyGabGiKuRSpv/3BDSa6MdD5GPTxu9ST5j04fzXHq/XFPMT/oq1jZMiLou+Y/vdEN3azm2BK16+F5LGCN5+sY5oxDNk5TSftF0TGfrPklgjFPqcK2QVGISZatkwwFfILCVJ9ckpju9jkwMXAnejZmffq0ott5qbn0T8g++E9TAw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0

Nextcloud 32

TeamHub 3.38.1
Release Details
UpdatedMay 14, 2026, 8:01 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
Signaturep1xq5GU5FgnU+VBmRTq1YN5VobUyjICVQ1UEEoxNmz+9GoTiMzc4SHrb4aQDDAIA8VppLDpx4+z8TKLAi7OgGy6COZK/7CHQrdDt0Qk+q6ACl4AF3l+RgV0DWrHxbP6V/LkewhJHUl9scVJkfIBwoZXK2bITpo65RdDMVDfTiHR7Nf1/jm/nwjpi2ZMYf7Ct969eB7a+IDoydWoYBETd5mlLBp30cWFthnT3uEpPRJYCgKvOdO9iVjBBOP2VtudKYDkUmdKpHbQutIxQbCcnw5455wCS4byicyEfu6oLxN6VYNk+VSttFf+PQlC7TFYNyHW/XOpneBM/z5yA/e9UaipRtFFzG/ZTepEQL6LoU2UgaXm/cPF4rDtqh3t+7BPR1OerRej8cTXsut7zugiKW2lm98Z3yXixEtTe5b0TJajkVTFYXfVBDYFUR5PLsAczk5ipa8O9UgapijqQDYKvqFyHhrrobWdAHs/cUJMZE7UdLJhpvrEeYfQJTSurKXI4uqLx/PIMj7P2C+LYQn71gnxJStjhCxy5syvDt8EQbljl8tlUtGWmbtpojG0JF9k3j502osAoHz5S02c357aqCGmdaY3Q9PlVyG2C12v2AXB1k5dOKG4nJ8IbrKlBYMe8xiqEllgoc722ab4wtcXqQoeA+kWT9q41VyRt6qrByYU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.37.0
Release Details
UpdatedMay 14, 2026, 6:27 p.m.
Changelog

Added

  • Message @mentions. PostMessageForm and MessageCard edit mode use NcRichContenteditable with the NC core OCS autocomplete API (/ocs/v2.php/core/autocomplete/get), scoped to team members. Mentions render as styled highlight pills in the message body. Backend sends a message_mention NC notification to each mentioned team member (on create and edit).
  • Message pagination. 5 messages per page with prev/next controls in the message stream. Page resets to 1 on team switch and after posting. MessageMapper::countByTeamId() added. listMessages now returns total, page, and limit alongside messages.
  • Per-team message settings. New Messages tab in Manage team for team admins. Configures minimum role to pin messages and minimum role to post messages, stored as per-team IConfig keys. Post Message button hidden (not just disabled) when the user lacks the post role.
  • Calendar view dropdown. Embed bar now has a native select for Month / Week / Day / List variants; selecting reloads the iframe with the chosen view in the URL.
  • Calendar embed auto-reload. After adding or deleting events, the calendar iframe reloads automatically so changes appear immediately.
  • NC-relative team links. Custom team links now accept apps/... or /apps/... paths (e.g. apps/collectives/s5) and open in an iframe tab, just like built-in app tabs. External https:// links continue to open in a new browser tab.
  • VitePress documentation site in docs/. Covers Nextcloud admins, Team management, Developers, and Users — 20 pages total.
  • New migration Version000336200 — remediates auto-generated primary key name on oc_teamhub_team_app_resources for existing PostgreSQL installs.
  • message_mention notifier subject in Notifier.php.
  • getMessageSettings / saveMessageSettings endpoints (GET/POST /api/v1/teams/{teamId}/messages/settings).
  • getCalendarEventsForWeek endpoint (GET /api/v1/teams/{teamId}/calendar/events/week).
  • deleteCalendarEvents endpoint (DELETE /api/v1/teams/{teamId}/calendar/events).

Changed

  • Calendar iframe URL now uses the public share token path /apps/calendar/p/{token}/{view}/now (team-calendar-only, no personal calendars). Falls back to full app when no token available.
  • Calendar connect error handling in ManageTeamView no longer logs the full HTML 500 response body to the console.
  • getPinMinLevel reads per-team IConfig key first, falls back to global key. Admin settings Messages tab removed (settings are now entirely per-team).
  • activeFilesIsGf / activeFilesIsShared in ManageTeamView use .some() across all active files rows so the GF connect buttons correctly hide when a GF is active even if a shared folder row appears first.
  • dav_shares access filter in getRealCalendarIds broadened from IN (1,2) to IN (1,2,3) for compatibility with NC Calendar 5.x circle shares.
  • resumeCalendarAccess corrected from access=1 (read-only) to access=2 (read-write).
  • Select dropdowns in AppEmbed bar and Manage team Messages tab have no background color (theme-transparent).

Fixed

  • MariaDB migration failure on NC 32.0.9: Version000328200 now uses explicit 'th_tar_pk' for setPrimaryKey() — auto-generated name was 31 chars, one over the 30-char DBAL limit.
  • Calendar connectExistingCalendar TypeErrorResourceService was passing $resourceId as string to a method expecting int; cast to (int) at the call site.
  • GF connect buttons visible when GF already activeactiveFilesIsGf now uses .some() instead of .find() so ordering of rows doesn't affect the result.

Added

  • Strict 1:1 enforcement for files resources. ResourceDiscoveryService::reconcileApp now snapshots the team's active files state and routes newly discovered rows accordingly: active shared + incoming GF → pending (with isDualFolderPending flag); active GF + anything → ignored (GF precedence); active shared + another shared → ignored. acceptResource and unignoreResource apply the same guard. All refusals write resource.suppressed_duplicate audit entries with reason codes.
  • Group folder takes precedence in getTeamResources. When both shared and GF rows are active (dual state during manual migration), the loop explicitly picks the gf: row so widgets and the team home always read from the group folder.
  • Dual-folder informational notice in Manage Team → Settings → Team Apps. When a GF is discovered alongside an active shared folder, a blue panel explains the situation and directs the admin to connect the group folder via the existing buttons and migrate files manually.
  • Resource-type badge ("Group folder" / "Shared folder") on each active files row in the settings panel.
  • Picker filtering by active files type. GET /api/v1/pickers/files now accepts activeFilesType=shared|gf|none. Shared folders are suppressed when one is already active; both types hidden when a GF is active.
  • isDualFolderPending flag on panel data rows.
  • normalPendingResources, dualFolderPendingRow, dualFolderSharedRow, activeFilesRow, activeFilesIsShared, activeFilesIsGf computed properties in ManageTeamView.vue.
  • Create New button for Talk — shown in empty state alongside Connect existing.
  • Create New group folder button for Files — shown only when Group Folders is installed; switches label to "+ Create new group folder" when a shared folder is active (signals the workflow).
  • Both 1:1 buttons hidden once a resource is connected, except when a shared folder is active and Group Folders is available — then the GF buttons remain so admin can attach a GF for manual migration.

Changed

  • ResourceService::upsertResourceRow() — now promotes pending/ignored rows to active on explicit connect instead of skipping. Fixes silent failure when the discovery reconciler had already inserted the resource as pending.
  • ResourceService::getTeamResources() — files block prefers gf: row when multiple active rows exist.
  • ResourceDiscoveryService::getSettingsPanelData() — adds dual-folder detection and tagging.
  • ResourceDiscoveryService::resolveFileName() — falls back to basename(path) when filecache.name is empty (some storage backends).
  • FilesService::listConnectableFileFolders() — accepts activeFilesType parameter, filters output accordingly. Also falls back to basename(path) for shared folder names.
  • ResourceStateController::getPanelData() — now triggers reconcileTeam before returning panel data, so externally added GF resources appear immediately.
  • ManageTeamView::connectExisting() — empty catch block replaced with showError().

Fixed

  • Critical pre-existing bug in ArchiveService.php: stray extra } (line ~2770) caused ParseError: unexpected token "try" on every admin archive request. Removed. Archive settings save works again.
  • AdminSettings.vue archive form: archiveBeforeDelete was missing from the data() default and from loadArchiveSettings — the toggle had no reactive backing. Both fixed.

Removed

  • The auto-migration system (FolderMigrationService, FolderMigrationController, FolderMigrationModal.vue, two endpoints) was scoped, built, and removed per user direction. NcDialog wiring proved unreliable; manual file migration is the supported path. The dual-folder notice remains as an informational signal only.

Security

  • All new endpoints check team admin level (≥8) before any action.
  • No raw SQL anywhere; no \OC::$server; constructor DI throughout.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureNB4VEY/kY6IM6/q9rg1aZPixwOBTrNlZIbr9hGsb3TcGQ3kXe591A67Rez1U2FQO3FcRuoxZRNXGMJkziuhoaa9RkoGQuHxtueXomwk5UWjFSTbgf8+JFSFXag8NUNM7DqEnRjG3hLad6HdDwdv8t+t7CDhkih5s2rGI7G55B9uSNdY0LftIal9G2M4DBJmpZtJ+1RitAI/ZqqRCjA+lVc0V7AQFeCxVyrt9weLTdXuvzGTZhazmiYZELVrbpUwurxRgmE6itg5pWp+T4FC1ilm7zyz/v6LOSmRBqgNExbS5lbEutYBoKLSKEPfvjAO2emcj54Ng9PwvRlP1iTvGr7jrZ15DZa0mBL6sXMvDpEdR2yvoAsVDvlroHW0aILMDnc3HruzKkmB8ykRyrkOAwVmCRQUPN5pjr6Qre/hCgYWZR0d+YHFopsJ/VDiH6+PH8aYia/92Z6z21kbvT4wUrqwqARyI510Dcq9TLx+O6CeNqYmBiPYkpAUoX1ck+q3fZAH3cqTXH7N5ezRctAnM3CvctmxMG7Gpd9BmLj0wF1p69qGQ4FvpcVSsFoFt3sc8qxfARDRm0fu+avD47k4YvKfR1NFbUhHe+RMYivFWlmCAhwbaObsGt2mCbyfIwxLFM/S4N2+ji8lwYT2wC9cPTHYTL1+dZNwTCCdaTEZIVSE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.36.8
Release Details
UpdatedMay 13, 2026, 7:15 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignaturelhEnGI/fAC8OFXF2pnGBIlqEN6Bw4EurQEVPeTeuGc+O+1NHT6t7rYfX5gBJinYOJScN0dXIys+FHOvzY/QGT02MbHUDXMqtwzYoegOZBlRE/TXUXp0LKCx+3m+rHjKd9dCtBJi++X2ZUJUqGzsU4Km1WNRKqv6gubdCYUAMjXZmrXtfuEtdOqc5yAgnaA7CxKx+TPcc8bpU+SPkiFeuC9EB+iwnM+3NJThjc6RIQWiCwc9F5i1FsXikkYe9gYENyaraXhZrqj1eeC2hHwBRB5aXYMO9FghzzjvQ2VZo/psiiGWukii17WqKSofNN5N6yeh0Va2q/dT3RRmtRNhZ16D9eCeVLF+w6rUaP3bz3lNZIeksbIkV5E3d3F/FXc51QdNIlQ5D1LdB4ghhVYtvTBFzf5WbB5yzM6uSA/zcR5g02p4iMzLdVoILfkXoMRV7VNISvQfPP9ExuQnw15dpA7nSzIEC2dtLCNoA1xUPTCVCOpz3CMHILjL5F4l8HJtQKx5D9IV8l5Sakf7uqp7SJcx8CWh03/iX6Eibp5HRRS4PsdKyZVKiWgOyG6iXkTktCruXQKGXi5MSwkpPZvYUz8//klH2Bn87PSHJ+q9rtca0j4w/o0QBqnJr03gHcKPh3Y5vD0aaca57svcZPbhr+dwT4WXmEBNkxRlNKwmI0v8=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.36.5
Release Details
UpdatedMay 11, 2026, 7:29 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
Signatures016TbppM9kULPOeWRGdKsV9pcTR+YBhPBA2cPZPRtKPLKxUpr80YJrCOj2+VxmxQrrr0cwaFgQTjtCTw8Uw1ush4zPNdfXfX2HFqsvmP2JYDEFQwk6ftJLwiDfeUk4kDnarODZ2WAJ6Ol22Sq8w4cxdgADyVDii0sRaHyyEnghCuyttUccXzr/1uf1MzlzuH0xhbLSKALpnQVnTKz0jMNgGifh/ug5nh+tmz/nwLSUGJ/n+iyWp8qQhzWtlKQpSSTAW3COCOQvleVoprDWkU9LyOKmQvYXExEmsf9C21olxxEkHygVhDEKKN+2eNmH1XsTyuBmi9SVDOP5uruPsiZs7bnmO9ToBI8oTCtRa6jmu2pJpPjTjIdGW7Mr5US/NEbjljWFdC0KJZ4y0Y5+z6oKExqXb13D/bMndP5uNNZI/0SwLTCCpfd6DYYp9TCESagMG6zARVbIu69ReMWlmvEL2Uhq0hKqlBfhKrHwyrtYRXXzLpn+riNO2WafrOrVmMMT8t1+0aXUdqYBRKz6jpuwRag29IutxSsYwNA9oSlCmjhylald0jhu6AAK9Zi5fg0HuKudr7RBhk4wPY+HrgHtVwvl9h5dJ0ADJmsJEE77CKaT8xdV0SgpRU/JZCMw9qHFnkz7qDR/f/fmshi0L9qaDVOB0hWOKP7Td1BvlC3g=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.32.2
Release Details
UpdatedMay 10, 2026, 11:50 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureaqlS5xLgAtQMFnFSjAjXnjfpSSV5UCZpVyKef4AdzzktPWmKamnaJ/o9bl/knf5Ccxcaac5gNFKSZcycZ4yrXj+BKTne63Wt+G4a/W3uhVV+jEz0aXacH4jwhVJuxDExsQUp83WA/JxrlFp38nEXc3fSMhAPZsP829eID9w6AbRSujgEzOfNCsduJ0Isrw+m60fR8R7LsX0CSC3XzGwLVwoJhbXJ52Ri8JRxLziVP/If/TAJR+pqg25hjGoYRqoPTacmdoFbNxcaZOeAxJSR0VRMwFS7rJJakiZ95w54KztDRvMwJAIMBr4BDtAiqedj3GCj8AtsPmvh3dEh3OPw4xMjQlTRAqW6yL1t4AhvL5dy5dmlQyRZiKwTkSC/9+/SXwR+e+1vfaB5ffmA3JAt9LIZ+24gP7O989Ed6yIo8Rh9//c6HwXky+L1MDOU9onZU3mwWBvI2xujyIhYu9uXMV6q587FsyptGaAoeBVtbtmY6DxiodLmgE5no1Gm0OBt7vy2ZUEhE9ToktSetWQPLtpjptRUBbAyomUGpEiaLSQP7y08h1ulPHoMjM3MelrxfGqSytHakG/M8bImdS7dO46kRG4gEf9C1LaaXH3KkfiNu0F5FPEbf0qidxDY5XePKUiAPirG5nSXLjYCu6f8hDktPh/U70EIWKuO4AAi4qw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.28.0
Release Details
UpdatedMay 7, 2026, 7:47 p.m.
Changelog

Added

  • Connect existing app resources to a team. Team owners can now choose, per app, to connect a Calendar / Files folder / Deck board / Talk room they already own instead of creating a new one. Available in the Create-team wizard step 4 and in Manage Team → Settings → Apps.
  • Resource pickers (GET /api/v1/pickers/{calendar|deck|talk}) listing the current user's owned resources, scoped to the caller's UID.
  • Connect endpoint POST /api/v1/teams/{teamId}/resources/{app}/connect (team-admin required) that inserts the share/ACL row granting the team's circle access to the selected resource.
  • ResourcePicker.vue — unified picker component used by both the wizard and the manage-team dialog. Files mode opens NC's standard getFilePickerBuilder dialog; the other three apps render a populated <select> populated from the picker endpoint.
  • Connected-resource warning under "Delete team" in Manage Team → Maintenance, explaining that connected resources are deleted with the team and how to preserve them.
  • Archive-before-delete admin toggle. New checkbox in Archive Policy controls whether team deletion produces an archive ZIP first or skips archiving entirely. Default OFF for new and existing installs. Same three deletion modes (hard / soft30 / soft60) apply to both archive-on and archive-off paths.
  • POST /api/v1/teams/{teamId}/soft-delete endpoint for soft-delete without archive — creates a pending-deletion row and suspends connected app resources but skips archive production.
  • Owner-side delete dialog when archive-before-delete is OFF, with description and confirmation text adapted to the chosen deletion mode (immediate hard delete vs 30/60 day grace period without archive).

Changed

  • The Delete-team button in Manage Team → Maintenance now branches based on admin policy: archive ON opens the existing archive modal; archive OFF opens a plain NcDialog confirmation.
  • Description text for the Delete-team row dynamically reflects the active archive policy and deletion mode.

Fixed

  • PostgreSQL SQLSTATE[22P02]: invalid input syntax for type smallint: "f" on team creation. The enabled (in teamhub_team_apps) and is_builtin (in teamhub_integ_registry) columns are SMALLINT (per the v3.9.0 cross-database fix), but their bind parameters were still using IQueryBuilder::PARAM_BOOL. PostgreSQL refuses the boolean-to-smallint coercion at the wire-protocol level; MySQL accepted it silently. Fixed by casting to int and binding as PARAM_INT in TeamAppMapper::upsert() and IntegrationRegistryMapper::register().

Security

  • Every connect endpoint re-verifies that the user owns the specified resource (WHERE owner = currentUid or IRootFolder::getById() for Files), preventing forged-resourceId attacks across the four supported apps.
  • Each app refuses to connect a second resource if one is already linked to the team (one-resource-per-team invariant).
  • Picker endpoints scope listing to the caller's UID — never accept a UID from request parameters.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureADlRyz4GyYgl8rljgx6Xw5Yq+hXjFnDGsT/M68SMUIu0PyMV0qJzbt+63EO5ij0SJrNYsf0ggbHaHct97ckYFzxrkFf7+B2O9l5YWdatd+dmtt0FQEMKBReJBSb93ZSRU65JXVlE0/43ikwK+RW9DiQI7QS3/DWSvRf83C43vI57g3PKs0dovrU5BwXWIb0bh7OvzXSfq7guF3JnFxlSeBTsrA9KUDTwQY03n1Wqi6tDYwLvTIQu8tKnPCMmzVQJlAc4d2krRVgEDGn+hNXN8+0sq8YSAq2ZCc2ckBXlMTyzLRrqwkZz7LpgljadbYATQe/GhS+ax5AFKL9efbXx0ny5S553N6Clgaq9vn5AyT5JASVo22Sf/Yxs/bT+EVYxKmwSd7XW9PDvXYwtG9aojqkQnEgZdas2MCeZw3e4yAsh1pd6KpFf3LuQ9U7nxzDSoABLZSDPYctIIZoVVQTPM35Bd/poEbOYl5f60bOYHEmeQkFP/MCVuqM9/XuJ1hIw27U7GdDCAsC1ONdcmlIRYEJHdIQ+yxOjMMYm8F18OjHJYoDuk/GIjFmGCF5QzcE+vdK6z4SO5n6JtTTsM6T8ruv/FNUFtQYbIb4KrhzbUs4TOxV+MCAI0/lB7IJiWdogLEiVuABwSecEPzt/K2qCbK9VgzJV8h77Yg1Z72ic1Dg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.27.4
Release Details
UpdatedMay 7, 2026, 1:14 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureWsF4We8JALnZvd9ZxzvftUVv6y9bJoO2AK9e/PM7P3dJn/cu8zwy1WvJhJDwbFP8Z0Nzcpj/wmN2WjfT0+1nbLor4BJ8Ls7noGy6KZR+laWTW/UHwGcRgFK5FB53Yi7W/rUTcp1dyM05gyl8sZAmrQxA/sD/unJccyNHcQJPpw3s8tsEShXmsFlZJuO2Ria+a0bKRXSQl1Az5v9ORk/Bx0Wd8oTVD+x2yEBq70TMaA4UqHU0Q/qNrZn03XHCYA6bh3QExdWx8sV3dNJ9X8envbqwPG53VL8KIOZD31DsjkVZ73+/stHpj3xQgwoiQ7oQD+ggorUShI16nrkd/VTV+M7VtcZyPxacndnslzeZyS00p2o0U9SzRTiJB3d76gogX/7XdQpRmUIeUroB1UNGaLMoILC8LojcDQsDGgv0w6adCZ5f/BdEgUkZKSMcm++IN5cYtm+q6+Eth29bh7gq5RIpuKb0Ous5wjG9UVgLHi/KDhtj+vZoUkg8CQ3ctPttf+FkJtY/xTuoEzf0ygy8nlHYsBoGQmdjyUqvuB7MZKCL3y1F8mGwEI0FYFMhbRnRVbYQy1ae8RpQj/fKEAWwXEfGIBbQAySath1iBlILNeAreUWmJpiWnE+aSghtd//HPcKvwHW1nRLt4f/UuMYIjCm3u/7C/CrJ49X2ZbIJSyU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.24.0
Release Details
UpdatedMay 5, 2026, 8:48 a.m.
Changelog

Added

  • Mobile single-canvas layout for viewports ≤ 768px and tablet portrait (≤ 1024px portrait). New MobileWidgetView.vue: scrollable canvas, collapsible icon bar at bottom with one icon per accessible widget, FAB action button.
  • FAB widget actions — in-canvas action button rows removed; actions surfaced via FAB: single action fires directly, multiple actions open a slide-up sheet.
  • Tablet landscape layout for viewports ≤ 1200px landscape: 60/40 split with message stream left and collapsible widget column right. Widget cards have spacing and rounded borders.
  • NC sidebar auto-close on mobile/tablet-portrait — uses NcAppNavigation :open.sync prop to close reactively after selecting a team or action, instead of fragile DOM manipulation.

Changed

  • Embedded app iframe content height set to 100% (previously 90%).
  • Edit layout button hidden on both mobile and tablet layouts (editing not available in these modes).
  • Seven modals (ManageLinksModal, AddEventModal, AddTaskModal, AddPersonalTaskModal, InviteMemberModal, ScheduleMeetingModal, TeamMeetingModal) now set min-width: 0 on viewports ≤ 768px to prevent horizontal overflow on phones.
  • MessageStream accepts hide-header prop and exposes openPostForm() method for FAB integration.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureTvyr9L9P+H2RLIOYb8tFSJIV/1sH4rWC2RhttmVfB98kvezRU7Xa/tVV+MKE758D3cT3BKsvBz7e/OtKoPKuCan6HR0AmXNbMYx3F/ep+BoEQP3H/m8pOaYF2xyRAYmsdHxV9EPyyFEX6Trxiwy5aNJSK5S9RJdC+fm8p0gmvDlP1G3+GCerMXdi2lioEpoAnIlE+fd7JUIt48C1YYHKAqDlsaw3wlXiYC4j68I8vVD8GdXYmYgXvxW3IeE/iUbOZJ75bpqxv3ufHqEFPAYas5+SMUy8fGQQZjBvjIN4ztSRwAIZ4e1OFZj2WsYsfJZEi5upcwPoqg5SGo4Xw7vp5Dz3Zxx2hCEhCdO8jlGSinqNul6lPRZmaKXm0GY8v03ZaHu2uUdyNPvOfnVRUbe2ekUKhXe7C0u9umdSLmv2/+HhQRGFFZH6Tfu6Pc1IwWirW2EnhmKoGHnWO0mjq+VK1Ip1ZntyZ1znM9U6fdQaHTjMBq2nlXQWnZgu1tw90QWf1rj3+MGQW9vUyrN5uEx9xxxBVxXjCxCVvkOsqwTR7lqqsQfp/NCR0lRyognr7Hmd985l8nUYHCrg9KfPzOfFxLRauxh1UIiRS1nif3WmJzmaelxyyRNysvksjzsc5GJW9C0wjTPsYOuZv2H+a3GRH1RSzadDXVS11CCDpVMPXG0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.23.0
Release Details
UpdatedMay 4, 2026, 7:35 a.m.
Changelog

Added

  • DELETE /api/v1/comments/{commentId} — hard-delete a comment. Author may always delete their own; team admins (Circles level ≥ 8) may delete any comment. Audit event comment.deleted written with metadata { message_id, author_id, deleted_by_admin, cleared_solved }.
  • Solved-question revert on answer deletion. If the deleted comment is the marked answer to a question, the parent message is automatically reverted to unsolved (question_solved=0, solved_comment_id=NULL). The confirmation dialog warns the user before proceeding.
  • Delete button on comments. Visible to the comment author and team admins. Confirmation dialog; disabled/spinner during async delete. Error messages are HTTP-status-aware (403, 404, generic).
  • currentUserIsTeamAdmin Vuex getter (level ≥ 8) — derived from current_user_level now returned by GET /api/v1/teams/{teamId}/members.
  • Markdown formatting toolbar in PostMessageForm.vue (new messages) and CommentsSection.vue (comments): Bold, Italic, Inline code, Code block, Heading (H2), Bullet list, Link. @mousedown.prevent preserves contenteditable selection; execCommand('insertText') fires at cursor.
  • Markdown toolbar on edit message. Same seven buttons in MessageCard.vue edit mode. Uses native selectionStart/End + setSelectionRange (plain textarea — no execCommand needed).

Fixed

  • XSS via v-html in message and comment bodies. Both renderMarkdown functions now pass output through DOMPurify.sanitize() with an explicit ALLOWED_TAGS/ALLOWED_ATTR allowlist before binding to v-html.
  • Headings (## text) and bullet lists (- item) rendered as literal text. renderMarkdown was a flat .replace() chain ending with \n → <br>, so heading and list regexes (which need multiline anchors) never matched. Rewrote using a null-byte placeholder pattern: code blocks and inline code are stashed before block-level rules run; restored after <br> conversion. Applied to MessageCard.vue and CommentsSection.vue.
  • Deck boards created with permission_edit = 0. Deck's AclMapper does not mark entity fields dirty when set via __call magic, so setPermissionEdit(true) was a no-op. Added enforceAclEditPermissions(): one independent QB UPDATE per column (permission_edit, permission_share, permission_manage), each try/caught so a missing column throws silently without blocking the others. Schema confirmed from live DB.
  • All Deck boards and Calendars provisioned in the same blue colour. createTeamResources() now picks one random colour per team ($teamColour = self::randomTeamColour()) and passes the same value to both createCalendar() and createDeckBoard().
  • Provisioned resources (Talk, Files, Calendar, Deck) not deleted when a team is deleted. deleteTeam() now fetches the team's app list from teamhub_team_apps before destroying the circle, then calls deleteTeamResource() for each app. Resources are deleted before circleService->destroy() so CalDAV/Talk can still resolve the circle principal. All apps are cleaned regardless of their enabled flag.

Changed

  • GET /api/v1/teams/{teamId}/members response now includes current_user_level (integer) alongside is_direct_member.
  • DELETE /teams/{teamId} now deletes all provisioned Nextcloud app resources before destroying the circle.
  • ResourceService::TEAM_COLOUR_PALETTE — 12-colour curated palette for NC-friendly team colours.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureNB29XEJ4DYUSSXCP7cIFfzPYsJyAPHHQtoOtktawP03w3p9lKDvZ86l7WnrBkKcOxtIv7oCuXPh8oQqZkj/L4XmpXAVcvIUPrZPtG3CQ4+OhNvC3BXT4T41GNLAQcG2hyQ4MZX11OBP1F5IfBmGWoY7il1gDNjDTIBqM4J0cFcO/Eg5q4zVYI2x1ks6+SpmlNCLdjVujDfZLN3/wXIQJA4zY5EqUexwmKvz2RiNNESfifz3wwpY5KcYEHrF+gasTIj1ZaaZ5TDC/4tUH71zpn3PAYNRpWPB8d/WhZW8yt0eaRw+4+hLItkzvwsKesAEljUNUrYD8IUD5VIWgysH1IgdXR3tJX2deQK3UW2gVFGuwJvNTtVzDuPGUsZ2m1VdhMPZcsPLqPLH+rvjwrG4qQlaTpXj9v/6ypBBoCo059KU7C5qnITKvANLXgldhEIyV3VNlCjbvww8v2Ogu+FSkSPpQRCq2FWygTVQJNYVIzjNS8J4lGfloPU9lXkEW1UvtK7nzZoumi/H9xmhj3edmOP/MzaR7wrToziaf6cWhhgYfnLxS60TYOUFmY7BCarcQ6y2tlXfPsCHYSDupV2/39kINeZ55xp70YP21S2WyjkkmmsXO76YDImJJIfXJhSUKnfJ7j1gk06Z8QwjQlAxkN2hDHG0JhQVcjWLAri/2A4U=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.22.0
Release Details
UpdatedMay 1, 2026, 12:35 p.m.
Changelog

Fixed

  • Indirect members (added via NC group/sub-team) could not see built-in app tabs (Talk, Files, Calendar, Deck). ResourceService::getTeamResources() checked only for a direct circles_member row; indirect members have none, so the method threw and the controller returned all-null resources. Added isEffectiveTeamMember() helper in ResourceService that mirrors the two-step indirect-membership check (circles_member → circles_membership) used elsewhere, without introducing a circular dependency on MemberService.
  • Member count in members widget was inflated when groups or sub-teams were present. getEffectiveMemberCount() used COUNT(*) FROM circles_membership, which includes group-proxy and sub-team-proxy circles as rows alongside individual users. Replaced with a query that inner-joins circles_member on user_type=1, level=9 to isolate personal user circles, and uses COUNT(DISTINCT user_id) to deduplicate users who appear via multiple membership paths.
  • Pages widget hidden after team creation even when Intravox page was successfully created. create-resources did not write to teamhub_team_apps, so getTeamResources found no intravox row and returned resources.intravox = false.
  • Manage team → Settings → Team apps showed all apps enabled after creation, regardless of wizard selections. Same missing write: ManageTeamView fell back to defaultEnabled = true for every app when no rows existed. The wizard now sends a complete appStates payload (all apps, enabled and disabled) with create-resources; the backend validates and persists these via updateTeamApps().
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureaF+aB3FIewjvx0eqVweCVBEI9ipOSyJoOcNoEC9XKXKaYsVdnElwJwRyq9so1vwmCMkRE2kmmlkqeK+kDc+cDrFhnwG/2NuzoTbG/BQViG1UqASNTodIVMWT3YfFcpVgWYwmY4ebBlHYFmDzpXmozDw74hodGwtZIXiSavfzJhtXhPYvhi/e+Q7v7qICbytjO9C1JFzEEcsGZNNEhkUlSiuO9SMt+yjkG6iWaCzcNjPMPmS7OROieXzAJ/Xxb5vG3aZocJfl2IezIR7sZ1XFrhvRy8+HB0r1EBunJa4YwgM86MaGzlIB2PdMH6OrN6ly6DZwl98oJTMCAjHT95/U/vuzzuwOrsg8P6Y7y+j0mH5nf/ZbSl0FeJk5tfv2GQe2XFXvRw7aKi/K+Y9B0dYReMPmwsBlPvx3mqEj543CaEP/Qzs4xmCJ/V1V0qzGfUkU0UvoDCPh7JLiDED8+O598KEFaxGSOOOqg9hhOLGszJG4jIFyTGsnBLvDFvR4bPFuA5HFjnPH6WdTWnfRhZFhtNojz3LQcsPP5Em9Y7x13KmW8h0HfJ92jzXyY13+4oK8jm9k/TNWyzqz7WYfb83tsia8cUw6PF4yA7fgBs8F4221Ko+19QtZIijE53M2txRNODZ/XsXLdM3ifatbgGi65T0tAzAw3BmWdMtWmHHrvPk=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.21.0
Release Details
UpdatedMay 1, 2026, 9:10 a.m.
Changelog

Added

  • WCAG 2.2 accessibility audit and remediation (Sessions 1–3). Full codebase reviewed against all A and AA criteria. The following fixes were applied:

1.1.1 Non-text content

  • AppEmbed.vue: <iframe> now carries :title="label" so screen readers identify embedded apps (Chat, Files, Calendar, Deck).
  • MessageCard.vue: poll options now carry role="button", aria-pressed, aria-label, tabindex, and @keydown.enter/space handlers — keyboard and AT users can vote in polls.

1.3.1 Info and relationships

  • TeamWidgetGrid.vue: all 11 widget title <span> elements replaced with <h2> (margin/padding reset added to prevent browser defaults from breaking layout). Screen reader users can now navigate widgets by heading.
  • MessageCard.vue edit mode: bare <input> and <textarea> now have associated <label> elements linked by unique per-message id.

1.4.1 Use of color

  • MessageCard.vue: voted poll option now shows a CheckCircleOutline icon alongside the background highlight — vote state is no longer conveyed by colour alone.

1.4.3 Contrast — hardcoded colours

  • DeckWidget.vue: #0e7490 teal replaced with var(--color-info-text, var(--color-main-text)).
  • FilesFavoritesWidget.vue: #f6c342 gold replaced with var(--color-warning, #f6c342).
  • TeamWidgetGrid.vue: #1a1a1a on success/warning badges replaced with var(--color-success-text, #1a1a1a) and var(--color-warning-text, #1a1a1a).

2.1.1 / 2.4.7 Keyboard access and focus visible

  • All 10 components with outline: none on :focus migrated to :focus-visible with 2px solid var(--color-primary-element) ring. Mouse/touch users are unaffected; keyboard users now see focus indicators.
  • App.vue: duplicate :focus-visible blocks consolidated; outline: none removed.
  • TeamTabBar.vue: role="tablist", role="tab", and aria-selected added to all tab buttons. Tab/Shift+Tab moves focus; Left/Right arrow reorders the focused tab and restores focus after re-render via $nextTick.
  • TeamWidgetGrid.vue (edit mode): all 11 drag handles gain tabindex="0" and @keydown handlers for ↑ ↓ ← → to move widgets on the grid. moveWidget() swaps positions with the neighbour in sorted order (fixes vue-grid-layout vertical compaction cancelling y ± 1 nudges).

2.4.6 Headings and labels

  • Same as 1.3.1 widget <h2> and edit input <label> changes above.

2.5.7 Dragging movements

  • Tab bar: Left/Right arrow keys on focused tab provide a keyboard alternative to drag-to-reorder (WCAG requires a pointer/keyboard alternative).
  • Widget grid: ↑ ↓ ← → on focused drag handle provide a keyboard alternative to grid drag-and-drop.

4.1.2 Name, role, value

  • TeamTabBar.vue: role="tablist" + aria-label="Team navigation" on wrapper; role="tab" + aria-selected on each button tab; web link tabs correctly excluded from tab role.
  • TeamWidgetGrid.vue: all 11 collapse/expand buttons now include the widget name in their aria-label (e.g. "Collapse Team Messages" instead of "Collapse").
  • AppEmbed.vue: <iframe title> fix (see 1.1.1).

4.1.3 Status messages

  • PostMessageForm.vue: attachment list wrapped in aria-live="polite" aria-atomic="false" — upload status changes (Uploading…, ✓, error) are now announced to screen readers. Checkmark symbol given :aria-label="Upload complete".

Security

  • renderMarkdown (pre-existing): v-html binding in MessageCard.vue and CommentsSection.vue renders user content without HTML sanitization. Logged as open issue for a dedicated security session — fix requires DOMPurify.sanitize() before return.

Removed

  • Debug console.log calls in TeamWidgetGrid.vue (moveWidget) and TeamTabBar.vue (moveTabLeft, moveTabRight).

Fixed

  • Double margin-top gap below NC top bar. NC page frame and NcContent both applied margin-top: var(--header-height) to the same element. Added #content-vue.app-teamhub { margin-top: 0 } to zero the page-frame copy only.
  • TypeError: e.n is not a function on team pages. translatePlural imported at module scope is invisible to Vue 2 templates — added n to methods: { t, n } in all five affected components; AdminSettings gets an inline n() method matching its existing t() pattern.

Changed

  • All error messages use {error} named placeholder instead of string concatenation. Allows translators to reposition the error detail within the sentence (22 call sites across 10 components).
  • All count-bearing strings converted to n() plural forms (14 strings across 5 components). Translators can now supply correct plural rules per language.

Added

  • Transifex plumbing. .tx/config and .l10nignore added. Stale l10n/en.js / l10n/en.json removed. Ready for NC community bot once @nextcloud-bot is invited to the repo.
  • TRANSLATORS: hints on ambiguous strings: Comment, Leave, Join (team vs. meeting), poll vote labels.
  • Translation standards added to SKILLS.md — every string written in future sessions must be translation-ready immediately.

Removed

  • Debug logging purged. 23 JS (console.log / console.error) and 15 PHP (error_log) calls removed across App.vue, FeedbackModal.vue, FilesSharedWidget.vue, TeamView.vue, FeedbackController.php, FeedbackService.php, TeamService.php, TelemetryService.php. The console.warn in TeamView.menuItemUrl() is intentionally kept as a security signal.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignaturenE6/JanHZPI2gJOiWJZMk28BvA/IenxP9ttZTLP8ukJhVHLtgEHDouOj6MlHhkol7j765YIdplWXD0snC26zoEjqGIeATPoVLA5C4s72+scF+8yA+ABvUZqoI0objebJsNj9vv4e35pMiFRYFjyxcqsepO9SZUd1h6OjJvd9HhLb+FGQ3XWUfhby3fASPzXUHADRgTSFALVT8uKoKBIT6N6RNsmtwZugGGt9sRJclHoFjYtjuw3taOU7IFSU0nzMeY0knJWJQqOiFHqPK02qA6+y1FSqROoxdmh5DzfXT2Lq82tep8PWNaIjy+eZnSPzZ7yMftzsUuw7Op2dt8IhIoeWlcBML4h4voLwnfSBvv4Y1iupF5NupORVXYQbCRwmGBNfpMV3giQAYLitqCBpEzshO22fwTas7ipF9ERzl8Xjnr+kC/FHRwsGaq86iE9uSeEbebDTRS0S1iQJ2QO3uefGq0ak/+D3fbeaEHEZTkmSZ+IHWsrPoPCj+hDThe812ymYqyN6AoCS688N60mHIGUETeN69fCDXFHWylumRxkdCIS9y9g5OtQTVXrKNNfui75jlQcjhQp8DH6aSWBZNIUSFEUw4D+TiXlOfwCJVHEQUxG0mIHvXMyMGS1HUmj0u5/5U3RFxjZeELbUxBdUE6Y39z7mWcI82aLrAf7PHFY=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.20.1
Release Details
UpdatedApril 30, 2026, 11:36 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureQ76CfO42b16YE6NfBvItjvR78K1DPxanhH91XK8A7vyu03DdXe7OUTFmHfzDd0Rrd0V3K8d+/ss0K8d3VUxJ8awlTx0OPmbQ46R+Q4Ar7SiQPOFhn+pi2JFJmQ/okVKIt1ltSZFY+rinZvOy7IrbONsPxD7EWiiE+3ES9wvNVBwvV0vByOQjLvZcMuOekOJmuqGQxAkiGMr/hYPCG9hYUUjjM140GgbKxpy5AR5zEEARvY1E8up0BNapKTdTEaxHq5kYuv708iGtmpuqQ74W0kXi39e0e3q5Ct3iaWo7ZTv3fVMa9UPxM919JoFSw41MDxReeILrujP/mfdgDJc870Heoi74URx8KM7lq1k8Oq2137OVmJFdmaZb1X6GFBozBOFQBWfIAuWg3b8PD7qxy49Qv8bFruv45eAsMtopCjOqrWICqteqyGNkZx1+VLB0yhzXvvkCRRD3ug4tgVwQ7G3gaLhWW1nrt/N1xrCRXaTk0XumsrprLn0ky1aK+i7mKyUsY4HA1C+C21pJ8lgwL8wjmo4Dm3OA5bZ/Fht2lO0YBKJGrt81BshzPYICFVb4pa8F5ESVyN6iaI3UmzvUHrSKYaOlfhhMWs1GsCo3ayDJ7I/iTmTHhltY6uicMp609IA6RTYQ9xVZ3bpaX3gkEGvvyTUY0dUFJdt5bnJP9iE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.18.3
Release Details
UpdatedApril 29, 2026, 12:15 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureBbSeggogNn0JPG7UmMXVzr1S9eGLRgtmaNwEg6Yo8UenbN4JWPjazn+m78aXajFSeh6jbmkpYR5WS7siW2o1xYVqqWTT4/ollugaFrvcDLi9moShgbqcFpi345PSRshFSaFNgIFCcdy4BBGhkVq17dkZRF9vRELuwtsHE+EsAtC4cg0K1x7fhDZ8AbrVUcWthvCAU7mqq/CDbI5QLMHFH/niUjZfxld01piActRQW51/eiXx7RvpY1XIUUd1JJtZjkcLEUpIojQb5Y6vFWnManLZHJ14Y0FC5WJyFvNXszE9twaUCI0ZtnurdSIogtJenXpPCGE397gx0r1KXwDnlXKJIHTNP81xiYQrxsLp6TjDabK9JIz1I6Mv6WVRZbk8O/fZNntQFJDKc+Lwp8d2WD8gEmOXRpvVsOjAuE1WqClJYJZi6MFY0y4H9/iLE7qi2cNj4kP4wdzGupaUWW6J4VprIRNAzSOqERdCLna82JvkMxU1tLiG6hFVmYc5F5QagWPEQlta7IWVmR4/07gZnu029Ec45hrrDyq96wiD5WAA0uqAcL2kir82l8vLeT/4a3uxAWf6YwMF7KldyJZhfoh1gA+uE8vEvKfUFBCDesKclXPsH+Wg4CP0eILT/h2LZ0J3lAd8HmdJnH6hmXp9wx7CxHrGRZYUdixix+59c5Y=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.15.0
Release Details
UpdatedApril 28, 2026, 2:21 p.m.
Changelog

Fixed

  • Calendar widget now reloads automatically after adding an event, scheduling a meeting, or creating a team meeting — all three modal close handlers now call refreshCalendar() via the widget grid ref.
  • Meeting notes public share link now grants read+write access (was read-only), so attendees can edit the notes file directly from the shared link.
  • @nextcloud/vue no longer logs "missing appName / appVersion" console errors — webpack.DefinePlugin now injects appName and appVersion as compile-time bare globals, which is what the library reads at module evaluation time.
  • Members widget: removed redundant border-top from .teamhub-memberships-list; Show all button width set to 90%; left-side padding unified to 12px across avatar stack, membership rows, and show-all button.
  • Removed redundant "Team Messages" heading from the message stream body (the accordion header already shows this label).
  • Removed duplicate "Post First Message" button from the empty-state — the header-level "+ Post Message" button already handles this.
  • All semantic color text uses (--color-error, --color-success, --color-warning) replaced with their high-contrast -text variants across 21 components, improving readability. Backgrounds and borders retain the base variables.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
Signatureo9VGOkozPXYywaP2ZC3o2UICAIdsFUEdehNKJF0GKdgPgzMvL1Slkyeg9XI0ZiY+cw/Uu6rccUulLDeKWR+2iLRpDQb7iNg2ZCL8QgXYi5AjuO9diTPAqrywyowNNXV8gfFpJXJQ3DqEvkXQVptMXM1A5wNXjybgKAQAnTNSlrF+r4HvT/MJHomrojrDn2yCaHyhI5ER47B2YevI+CqWkKC2RFPwrcptBKVi62tk8VGVarMy9/Vrrp7zLbx8M5oZbVcLhdB7zIUerujkchkr2olx+SKYdNmdQ92tkw3kW584WiCqY6fsfLMD3PSRwHqiH3ScVFIXEHYIMeEphCnXukTwik9c4Vd3C/gAjV08K7Ii8ll9Yh4gt7uIMOfRx1o0HYDyMXqnFHlCnAalzN8UIkq+EXJ/i56lETuFvx0gnW8sxVmziuHpn76pjs9ZG1bVsPDSdwMKA1MwdnIt+pkaY7w9nB+25r7Nz7NMVgv9SvDxhMTo9zUGc1ncpnQ+xIqeEm2uCj+OPxjuYkAJ/vlSuzrdcxALAmzpecxR9J4CwZ+cnq9yJZoXIUMSnt694gd58/KsVAaHlI+cSVaPPZz/M26BwF5DJoWBdl+0fTVQ25WzciKzJ+pvmJAvH3KD3TxJKT0W2XTOWeoUfhzsv+nt47eDgDxvD8LUK1WxAtE0axw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.13.0
Release Details
UpdatedApril 24, 2026, 10:02 a.m.
Changelog

Added

  • Group and team members are now fully recognised. When a Nextcloud group or another team is added to a team, its users count towards the team's member total and gain access to the team. The members widget shows direct users as avatars (up to 16, sorted by role then last activity), followed by a flat list of added groups and teams with a GROUP or TEAM pill and their user count. A "Show all N members" link opens a searchable modal listing every effective user, deduplicated.
  • Manage Team → Members tab displays three buckets: Direct Members, Groups & Teams (with name and effective user count), and Pending Join Requests. Admins can remove whole groups or teams, which also clears their users' indirect access.
  • Invite modal can now search for and add other user-created teams (circles) in addition to users, groups, email invites, and federated contacts.
  • New GET /api/v1/teams/{teamId}/members/all endpoint — returns the flat deduplicated list of all effective users (direct plus expanded from groups and sub-teams) for the Show All modal. Requires member-level access.
  • New GET /api/v1/teams/{teamId}/members/manage endpoint — structured response (direct, groups, circles, effective_count) for the Manage Team members tab. Requires admin-level access.
  • BrowseTeamsView teams now return an isDirectMember flag so indirect members see a disabled Leave button with an explanatory tooltip rather than being allowed to "leave" a team they were never directly added to.
  • leaveTeam now detects indirect membership and returns a 403 with an indirect_member sentinel so the UI can show the tooltip explanation.

Changed

  • The GET /api/v1/teams/{teamId}/members response shape changed from a flat array to {members, memberships, effective_count, has_more, is_direct_member}. members is limited to the top 16 direct users (sorted by role then last login), memberships is the flat list of added groups and teams for the widget.
  • Admin Settings → Maintenance team member count column now reflects effective membership (direct users plus users from added groups and sub-teams) instead of only the three top-level rows in circles_member.
  • removeMember() now correctly handles groups (user_type=2) and teams (user_type=16) by using single_id as the delete key. It also calls MembershipService::onUpdate() after deletion so removed indirect users actually disappear from share pickers.
  • Pending Join Requests in Manage Team has extra top padding to separate it from the membership summary.
  • Group and Team icons/pills use the primary-element (blue) and warning (amber) tones respectively — the previous success-green was too low-contrast.

Fixed

  • Integrity check in Admin Settings → Maintenance no longer flags teams as mismatched just because they have a group or sub-team as a member. It now flags only teams whose circles_membership cache is genuinely empty while direct members exist.
  • getTeamMembers no longer fails on the u.last_login column (which does not exist on oc_users); last-login sorting now reads from oc_user_preferences / oc_preferences.
  • browseAllTeams correctly detects membership via groups or sub-teams in addition to direct rows.

Security

  • getTeamMembers now enforces requireMemberLevel — previously any authenticated user could enumerate any team's member list by guessing a circle ID.
  • lastLogin timestamps (used internally for sort order) are stripped from the members response so they are never exposed to the client.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
Signaturea3Sq1npOxTnT7aLDRXv66RWwUdOWvy5yXVlPPHePce9JRxddfqvN4FS4p+bnjFEdkKQmlFNDNzZ97aJmEZb1Kfzb+xpX6WzgDfJe1gTYUhE3XYHBchxclwCzPC/fwdymmrjwwP9b/1q9fH26FRdFciFUmHQO9Z24g696GnkGwApfohzX2U0jd4v55cx1e+vs86SZRWY26tkUm/FXD5+d+bl4FAkDhiK+Z06hFOuuocBhqyt2obf/gohkgTnEZpaHzkaAdgJFvvvRo+azlxGzODk4mqtyZIEDUWbAXQ99vRXZAokuwRrizBbXqbVk5sn3ntgG5rq0NWoYJ3htqhdhqqMh7w6SW/XBD5cGvLZu7BZpfvFLThabB7aZktNZhmVWz3U81C+WjYVhlcKcXPxEeQXXwo+LjSpGNmjkBg2bOsNEnVcYx3LhWsmbqRNf6JH8B0kcERqJcBWRbpthg/ytseDLsFHDX76QmHMb7/r6IKwq3EjaJSpLcuMgYAE0/ad8BtR54j/rWN1AsPD3oj3UfElHO5A27R/Xdu5qwzTd9zpWDRDgp3NE+2a6ler1WpgJtuTXEv+TGCURUK9srKLcpB+QGO/J26pFhqQovLEP72uL3kW8zXDlNW51++6uJJsrE1212s6JzPLSV1jntOrB+exnyQMV9sbNEVVzwyaqonA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.12.0
Release Details
UpdatedApril 23, 2026, 6:50 a.m.
Changelog

Added

  • Shared Files widget — new dashboard widget showing files and folders that team members have shared directly with the team circle (e.g. from Nextcloud Notes or Files). Displays item name, type icon (including a dedicated note icon for .md files), sharer display name with avatar, and share date. Paginated at 10 items per page, sorted newest first.
  • New GET /api/v1/teams/{teamId}/files/shared endpoint — returns paginated list of files/folders shared with the team circle, excluding the team folder itself. Accepts page and limit query parameters.
  • New shared_files app toggle in the Team Apps section of Manage Team — defaults to off; team owners enable it explicitly. Independent of the Files (team folder) toggle.

Fixed

  • Fixed team folder query in ResourceService incorrectly picking up individual file shares (e.g. Notes shares) as the team folder when no folder was configured — query now filters on item_type = 'folder'.
  • Fixed shared_files toggle defaulting to on in Manage Team UI for teams that had no saved state yet — default is now off.

Added

  • Upcoming Tasks widget now shows personal tasks alongside Deck tasks. When the NC Tasks app is installed and the team has a calendar, VTODO tasks from the team calendar are fetched server-side (Sabre/VObject, direct DB query on calendarobjects) and merged with Deck cards into a single sorted list. Each task row shows a source pill — blue "Deck" or teal "Personal task" — so users can distinguish at a glance. The two task types also use different badge icons.
  • New GET /api/v1/teams/{teamId}/tasks endpoint — returns upcoming (≤14 days, non-completed) VTODO tasks from the team calendar.
  • New POST /api/v1/teams/{teamId}/tasks endpoint — creates a VTODO in the team calendar via CalDavBackend (QB fallback if unavailable).
  • New Create personal task action in the Upcoming Tasks widget header, which opens a modal (title, optional description, optional due date/time). Shown only when Tasks app is installed and team has a calendar.
  • The existing Add task action renamed to Create Deck task to distinguish it from personal tasks. Shown only when team has a Deck board.
  • resources payload from GET /teams/{teamId}/resources now includes a tasks: bool flag indicating whether the NC Tasks app is installed.
  • New AddPersonalTaskModal.vue component.
  • New lib/Service/TaskService.php service.
  • New migration Version000310001 — ensures teamhub_integ_registry exists and drops the legacy teamhub_integration_registry table if it survived an NC uninstall. Fixes a scenario where NC's "delete all data" uninstall keeps migration history, causing the new-name table to never be created on reinstall.

Fixed

  • Fixed oc_teamhub_integ_registry does not exist error on installs where NC's uninstall-with-delete-data flow preserved migration history, causing migration 000209000 to be skipped on reinstall while the old teamhub_integration_registry table survived.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureSgfXebprj3dl8qsJCiO/pE+phwLvcTd5NcSGL2buF71GuT7a/fqkQWJ0XTwULl70Dw7D4/wJbMX9+fLnwXK/VvfRS1S1UNa8VUtCiuUJU4f4hjrnxYWuBT6oledtiXpb8fVeB46bTzwVJXTc57HHMm4Fz6L/rjutbeu07fLe5dNIAVXUL8niOfGyeMhBLijQDAsvlcOgBvpFXSqHscgF7IwOYTJdRqoyvAJQZgoxdlffHLnL5isK+GnjJCQXt6WzIxhiHbkMQlr+SwjPdvqo5UcvRCAHoiMS6sVQFmt1TJAHzygxHBK2g58Gv4NRvm/HszdMxCbkJVpgZFeqTO/WOrNTQaIiWIHGlK2XWoVVZetF0vvSlOynOXQqS9SVHmvOhfdH594EN1kwALAckCSdIvaeIdJpA3AgeS5er9GPMQI6lRWX6gP9H6WLAFGSFLjY6HpJvcr8mXBUGLzZWjnqd2w/WzDyGf/SfwMvf7NrgrmkEbkxEkRXYtUxkjJhlIX/g6vQicisTwHViMbO1orUbP6DvXcoXWGcu9iwlnumGSrMFbBwDsP/163U7kO52RjXg4tRxpZ2G0UOzKKx5Nc7TUA87bkxLO3SjC5yL536poI+22uNYSoWsxQpk9KGsVi0xiaLLms53Kp4KnXU7LPMQ+ZAlpb3U63sBLVkRHQhstg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.11.0
Release Details
UpdatedApril 22, 2026, 9:04 a.m.
Changelog

Added

  • Upcoming Tasks widget now shows personal tasks alongside Deck tasks. When the NC Tasks app is installed and the team has a calendar, VTODO tasks from the team calendar are fetched server-side (Sabre/VObject, direct DB query on calendarobjects) and merged with Deck cards into a single sorted list. Each task row shows a source pill — blue "Deck" or teal "Personal task" — so users can distinguish at a glance. The two task types also use different badge icons.
  • New GET /api/v1/teams/{teamId}/tasks endpoint — returns upcoming (≤14 days, non-completed) VTODO tasks from the team calendar.
  • New POST /api/v1/teams/{teamId}/tasks endpoint — creates a VTODO in the team calendar via CalDavBackend (QB fallback if unavailable).
  • New Create personal task action in the Upcoming Tasks widget header, which opens a modal (title, optional description, optional due date/time). Shown only when Tasks app is installed and team has a calendar.
  • The existing Add task action renamed to Create Deck task to distinguish it from personal tasks. Shown only when team has a Deck board.
  • resources payload from GET /teams/{teamId}/resources now includes a tasks: bool flag indicating whether the NC Tasks app is installed.
  • New AddPersonalTaskModal.vue component.
  • New lib/Service/TaskService.php service.
  • New migration Version000310001 — ensures teamhub_integ_registry exists and drops the legacy teamhub_integration_registry table if it survived an NC uninstall. Fixes a scenario where NC's "delete all data" uninstall keeps migration history, causing the new-name table to never be created on reinstall.

Fixed

  • Fixed oc_teamhub_integ_registry does not exist error on installs where NC's uninstall-with-delete-data flow preserved migration history, causing migration 000209000 to be skipped on reinstall while the old teamhub_integration_registry table survived.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureP+5/blvdXpd4uoReE5CvW4k1/WbnStC9vXXjXI3Tvi8B47QV8Dej4K2Wi+1wXxFQ8zQw/i+nuz4/ZzQSwSPnjzzpbQaNRo12s/x+9pb+MsBprGSUENMK3s8vwutV5QoiD5QLM/rxq7+ysdw47AwQbM+4+VGK/a2tAhuO2H7Q3x8nqRmJCSIZewc9D6ihBpQ5Sue3ywJIKFv8X73guc8LPSxhY+YnmW3Mc2bBdsxbUamsF9EZfkSVA9zebC455uSwufPZKLaWlBltydLWyZrhFZOU8aC4QeirMYCXovzThRQNk8hwkdppc4Gb737JqrVrC4uL/AMIPrTsJ4PcAuLDsmM0E/ZHbmpPBZ8wWDfMZKS3tHZM5K/2My3Sv7W3NhkQIzMuh2yNDAcw5r2B20mu34nSvATXTm3qacGBRmbLq9dfdMkEWMenTHtBzjWlVm0s0A03+gv68lasrzv7moyzlrjk1V6i3UuEo5XAGZCJSITQb0+RJAaIHmGqOBCu0UggevHuOqOMUwFl9aa4MbGa3BwxamSt5rfii22L0bWVHtFeiCaWZGfrhTJNM1WhRd134ha+puHWKpMWv8cxTxWA6FyycE4i+H+KR6yyvLpL3viVGPm+24BzSk3GPHdfEetvu2/H7WX1vnTR8NBzKt8dHxAj0YSegXYFaPF+0EO0fEo=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.10.1
Release Details
UpdatedApril 21, 2026, 1:22 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureSxVjtNOVjWRSbm2YIc1M9cvaHIgVbVJbMJcD6FMStLGHteX8VzmSeEq+gpTZTER2VsyukDvVKRWOW3TXPTyzWF3UuC8mZSpEaK4bGHi83B3natM149njVrYyxy0BawErj4YH3VlvPzl4ok8z5hwAFWKGyFNJ2CulO2lsUfwDnhhLsvRAIjZzX+KZ2C99byqV3qFRnWo3kI+JT5PpE5+ug8T3KImQYKwGuMDq6+zFF2Qi+edECt+5TiO/rr3MFCZvSwwlwaNOEnCUjpA5wcwreGKqP2IpDJi+TwzjcJ5Mlmh6/qNjdTTkZ1tRvH5zKrZRHxAqSH0T40TMQM/N3huouEQE+fqHfJXgJXy3t99UrpWUfY9SX/rLWPQCkzgco353IBY1YTacz/cCH2yVlrTMty+EmU4iTOo2876PutuV43kDSytBtGzinCY78vrZ6D99fl/UkU5fsdVFVh91FZiPyd/JnCgTl59rm32K6rEhUmaMeXvKjl8CTuWKc6Z0TZ6qS/GPjeAVxHlpzRMIkhbjMOGnlWAKAlabDRIxZf+SSNazjnI8SFkOUOo5yCIoxMF9GjboNA81NkIg6PYdEaiooPTXiGbOd7cmuh4FNPWiniG06hn+BXX9jpO3zJNTKbmxP4g4dyWMm2923/miX93CtmyhsYWn2OcjX+YLLf78TgQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.9.2
Release Details
UpdatedApril 21, 2026, 11:15 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureVqSPboP020ssz+waXZIgJ+LTvo3hMESzHvMEKUi5BrRSPiplINi3X1Etr3zo/IQIgyv7BvaMYyjNs33q4jz8Y5oaawenqkCDw6XrV8F34rYPZbW0AabIGOAw1Ghy7Qg3mlbkq+GydCzfAMiEHro9sfi1C6kffOdijPwNm3EWPGurR7ERfDa19qeEfqoEU3Ni+//+AnwrL+rP+jf9pYM+q+/49CxT1zs53TqMTZyihHnVNbxOLCR7sgJtTVHR9NBR2HjEhFt73nxFBFn3b3j6OwoIgUX2l2lQR254lB/mgs4uD510an48qHLsYbE72Ph+LM+x8g7NtsLKbzyM24dA2+mL8PiwJhZUCfTFpbPVuiSX6OESUBbml7pgqFFv0dA8FD4gtqxKErPvD7CMaXR4mGrkit8bkkfReObVjBQZyCVl1S9q9Sj1ckfJpUlR5jmBfY39QzY3Bv/+V0cvqxxC+P25xmbvh6VHbnBMcJ9uxs4XW1lhjqvvJFTHS3nJJeQX/tm/q9k2qjnvLEe8nliMc7k0NtZxXdJI4pBPawvBaM5T91AKvzpKWrzmzIxTOWYT0HmgSm6cPPT/EBZl/YaXTO4a5xSNmCljGn0uo7bDiWtwcFNUuzCXG7FirlkyxiOkNv6DaZMXczzv89o0vMubHotd/OzddrXphSIrvkfA+Xg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.9.1
Release Details
UpdatedApril 21, 2026, 9:46 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignaturemX7RsaWak2BPhu44QNActtv1oaoiKlo5vmrzmf+iPPoJPMw0cAXoq2UcPpHnsrPme+mCOiDv+yETlWFSPdesr9U3ffdI56rxQMRqkgAv5QErwwE/jqqyte15iT2wHFrEF6aCn8NnF9bIElrCfmdL8kPwEKbgcrUBom/cQRFlWbqnmd6QRzqY+bevPIx6fXaA4ZTQbuGaR1PikE2Tskm0ETCtHf05Axg6eJ+fjgHAdR/bgsl2/2+giwe3fmoyPaC0GVsuoTmGjduMSPaUINC1hA7NPKM2aHBLvXYcGqNzKF6Wtr+la8VqOq4akwYoSlGvWOQ5uw3gTCubRhDRmMrxb6t1QABD7CseBzMKjTv/Z+ib62hrEj5IoP/qRdiovYZVJQ+VQHw8pqBJqS+a014t5m1+h3nPpZTT1heoyR0qA44AXmGhqcCVCGcMuVAtw7trENCY17FbHradrLmEofCLxoGuCAuviFXQo+03kxTL3dc4pgUm6G1+/RoX5hM3jtYmi5tBmFmXLBT8qsr1ZEStRin8aLwKBr92oeejMhLvyPN4wryntUpq8FL3n+SERCsovIvuwmMw/MOuBrL16xEL0FRa/EKlqN5F5z9gtR+ckjap8/SLQDYu7jbZUD3CGjKJbsaCeKv/Lbsw/tDqe/ZXeg7cZaq2tlPTN3g2kFah/Ek=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.9.0
Release Details
UpdatedApril 21, 2026, 8:24 a.m.
Changelog

Fixed

  • Fixed fresh-install failure: teamhub_team_apps.enabled was declared BOOLEAN NOT NULL which Doctrine rejects when storing false on MySQL/MariaDB; changed to SMALLINT NOT NULL DEFAULT 1.
  • Fixed same BOOLEAN/NOT NULL issue on teamhub_integration_registry.is_builtin; changed to SMALLINT NOT NULL DEFAULT 0.
  • Added migration Version000300801 to apply both column type fixes to existing installations.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureVWWGR5wGqe3Eax5KKz+AQ9nvFxwwNzPj4Zsqen4x72T9rHc242F+i+eaIMt/ae1/SelQGyv18ckoH5xA+eZEF+PzJj5vmcq2Zwx+PwlLTD+ieyRfaFcVc0kkYXTqMKa6/laXrNrwHuBHRsG+5wyJLkXm78H2OG0HMCIm71b7x06pIxU/eN2i6pEcTaTajyUbxPd37FsGv591XzyRKZGK+Z1DZXdMI81aE1g68xGeQLpnkKLPjURMzw3NnqZkcJiiU+fhDggu4O32obgcc2MOgrOo+ciHNX+RKFxkdYLs/qZzbS/RDdjxvnE9U5eESH7hAXU/ww8k/vSdtxEU6vrSd94Mg3GDHhjjS9jj/tLJYCk0J3MQp6EJMVRIInhgNIJJf1VkoCJk2MkTdpgF/GWheW9SBVFD6+IbzR55Ss2OYQK42gXtuNItWBm9ZCvShB5bxnmL4JtZ5I9ZfmmxD6BuZFwAkvnDIe6bt7wnVt8rZ0F0X5f7PrEzFoNq5TnagELFx0Z7HM/8OxRXwOLJtblMZeEI+tFRKxlgSOcI4EBroGwsGQ6sHELNWbqD0XvQBxmjVGjAEXfjx5yp+xwmc5433StzDcu6ItEt8wJQYKQ91quGR1MjEKwwVqmzjtNX77lt2aSKzvy4ibb8g1Xa3uHCUd9PmtdzN9FiBK2G6Gj4flA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.8.0
Release Details
UpdatedApril 20, 2026, 7:08 p.m.
Changelog

Added

  • Telemetry payload expanded with six new anonymous metrics: nc_version, user_count, member_total, message_count, builtin_integrations (per-builtin-app team counts), and link_domains (custom-link hostname frequency map).
  • link_domains aggregates custom web-link URLs down to their bare lowercase hostname before sending — no paths, query strings, ports, fragments, localhost entries, or numeric IPs leave the instance.

Changed

  • GET /api/v1/admin/telemetry preview object now includes all new fields; admin UI automatically renders them via the existing JSON preview.
  • TelemetryService now depends on IUserManager for user counting.

Security

  • All new collection paths are read-only DB queries using QueryBuilder with named parameters — no new user-input surface.
  • No new endpoints; existing telemetry endpoint remains #[AuthorizedAdminSetting]-guarded.
<hr />

TeamHub v3.5 — Changes

Admin Maintenance tab — full teams grid

Replaced the old "Orphaned teams" section with a full teams management grid covering every user-created team on the NC instance. What it does: Paginated table with search by name, "orphans only" toggle, and per-page selector (10/20/50/100). Each row shows team name, description, member count, owner (display name + uid), and creation date. Two icon-only action buttons per row: set owner and delete.

<hr />

Set owner

Admin can assign any NC user as owner of any team — whether or not that user is currently a member.

Delete team (admin)

Admin can delete any team regardless of ownership. Cleans up all associated data before destroying the circle.

TeamHub v3.6 — Changes

Activity widget

Deck activity now scoped to the team's board only — card events (deck_card) and board events (deck_board) handled separately Talk activity scoped to the team's room via numeric room ID — eliminates cross-team bleed Calendar/DAV activity subject strings corrected to match real oc_activity values Friendly human-readable labels for all Deck, Calendar, and Circles activity subjects

Manage Team — Maintenance tab

"Danger Zone" tab renamed to "Maintenance" Transfer ownership added — team owner can promote any current team member to owner Ownership transfer requires two-step confirmation and demotes the current owner to admin Leave team now shows the real server error message (e.g. "Transfer ownership before leaving")

Admin Settings — Membership cache integrity

New section in the Maintenance tab: scan all teams for stale membership cache Compares circles_member (source of truth) against circles_membership (share picker cache) Per-team Repair button rebuilds the cache — fixes teams invisible to Files, Calendar and Deck share pickers

Files

Re-enabling the Files app for a team now works correctly Favourite Files and Recently Modified widgets no longer appear on teams without a connected Files resource

Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignaturegblBv20FJFNq/Q3H9jPQvNSRrs/neT76/CRFwCF6dL2UmGY2TAsKmh06rLTNssVtnttoSuD1vlgANctX1gukwUMRAAXpjp6tHRg8u0II0g9C6sdwaLRstUJGExDUxRr5sbbgVwvRDY2GducpZRWSAyNlTSanLLJl9Eb6YAviLXr5AUAmczvdNRCa40GrHhytUe2O+oMfPtQJliOtotxL47VWvOynucGMWlj6j5ZghCx6gkTazlmWTFQQ/5VOe3EqPZyel9YSGJ4TtXwLOgQHMrBo087M34nxklShndZR12uYeZJ72n81ycvpByC10YfhDwaife+W+TeZBVtTrvo4wmqD8wqbkFsrNdp8DvMSvlVBKtibdZleX89LUG5RTsFQelFaOQjz+4A0h/xp2AhsTUtRef3vRCZCcmARieLz+g2ZaYn5EWnYDCkIPjLe/Kl9KCamL24QaSFyjBfVKcYX6DbTRCUG5xBrsEuEDWnZ9HHTUWZJO5UiqVsfvvHIzWuZ9j2vmRbsPBbKs0dRkaqO/04pDqdZaL5GLqHWjkv4wz+wiOnnMDnNKOtpubvW2HHmRSf8/TGQdzmdvr5ha+tjbOYqCKj+YMYI1jR2PWfIzxWSqzUbUrPDN6r7uEm4/r+f9ydI706wPr/f6BQlPDjq8DOIBTUC3Pc9Xdyjx2xOEio=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.7.2
Release Details
UpdatedApril 20, 2026, 5:58 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureRbq64iwUhPtTjRur8beQ5RgKG0BP0V5/7JaxZYTvBH/PFPcDmjy7EILWhL6IHsowijr6XTZWQlFbL4YZKdPQyW0PJxIm65ECq7IbqNLYK24hL8O/N1HweSZhVd5Dls+3pj9uvvR7ysrfxEt/cYDtHMxn0Ts7HcEdPFX3ONUpithodHeI9dfmNZgz6Fxk9cn+l/Pczp+JuqFa2L2h6YBJzQszsjGlVd1PlUE031Dj/6kYqRC8mQy3qpje7Xm3l6AHU2JrqAD4f4/dsSst7Cojx1sB43sy5yHnO5dSYMoYOVrxKciNrbwk7jW3CoX6XJWhBwJzLN8QKBoLOlrYpEyjYJXj+SeOim39vOvq8dsL2DpeOAhoxUNAuKQC+A0Gv4XhdeSX1FYZXmC20tgXXDln//qXChvYbE6usUmFz0iH0jP2yxqKbj48TZDID7wOyGGX0WHzHmD+zMY/alrx2+jZBqm7+BaFHT9UvDrmY6uIDAWtdbMJO3EhK2Sdn+k5DqenejwYO0yF+o5mU+itgx2pmyNWTF9/B8FcoeZIJExjZBv9/AnW0nP0WgkwqR8JmpaaFObbBWhYLXpIskLmXAfkqvfnYA7yli2bf48LR6yCkARYV2T85lkndOgH6oH51quzNvF2J7o/QcSzC83r2QIln7n4BW/X9hR/yweUkZLDU5Q=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.7.1
Release Details
UpdatedApril 20, 2026, 5:20 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureoWjRFEQ/K3TmpTN0v0cyubM8gFWkzxa8wTKg+A4SGZYjJD4rQHOYb5JacVYVkzMAWM20Gso1z5774wa06Tlh4sShGxSvN76lBZIFQSgOwt2sCXOAnc+Ng+aCCQIxvZOqxSbD7qU1u4A6eDsOOAf3TNXof7N2w1WpzgaD38u0O3qP4F/qNYIbtOelWQ4bHwjrEo1Vx/ubytlASypuqY4rvX6vK0G+vqIsJ2fo13Vyl+s+G0kOhHvtbUgw0VCuk1tlqYU5ORW2XLxsLmGwOWL/cqBRKGmvp2+GJhCd0edluHSxdBTM//Eis/WwfMImT/X5IZ8zuysnXmsX4AeXb8S2wszrIJH+mPkDbWICAr+Et06lJP++vxM0VhWirUYIzkXjL6U6qtA7Z/SC1U3iWhUQwIuAfxRjxcWkyKtIcjUpCgPZX9lLVJGWDP6MtGoKaSJ1nIzyOOLnRdTIqoiDdd9ObMxEC5QpfY1m9wGCyZMahwYO/jkmPWRO9aJSJhmP4+TEIyGabGiKuRSpv/3BDSa6MdD5GPTxu9ST5j04fzXHq/XFPMT/oq1jZMiLou+Y/vdEN3azm2BK16+F5LGCN5+sY5oxDNk5TSftF0TGfrPklgjFPqcK2QVGISZatkwwFfILCVJ9ckpju9jkwMXAnejZmffq0ott5qbn0T8g++E9TAw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0

Nextcloud 31

TeamHub 3.38.1
Release Details
UpdatedMay 14, 2026, 8:01 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
Signaturep1xq5GU5FgnU+VBmRTq1YN5VobUyjICVQ1UEEoxNmz+9GoTiMzc4SHrb4aQDDAIA8VppLDpx4+z8TKLAi7OgGy6COZK/7CHQrdDt0Qk+q6ACl4AF3l+RgV0DWrHxbP6V/LkewhJHUl9scVJkfIBwoZXK2bITpo65RdDMVDfTiHR7Nf1/jm/nwjpi2ZMYf7Ct969eB7a+IDoydWoYBETd5mlLBp30cWFthnT3uEpPRJYCgKvOdO9iVjBBOP2VtudKYDkUmdKpHbQutIxQbCcnw5455wCS4byicyEfu6oLxN6VYNk+VSttFf+PQlC7TFYNyHW/XOpneBM/z5yA/e9UaipRtFFzG/ZTepEQL6LoU2UgaXm/cPF4rDtqh3t+7BPR1OerRej8cTXsut7zugiKW2lm98Z3yXixEtTe5b0TJajkVTFYXfVBDYFUR5PLsAczk5ipa8O9UgapijqQDYKvqFyHhrrobWdAHs/cUJMZE7UdLJhpvrEeYfQJTSurKXI4uqLx/PIMj7P2C+LYQn71gnxJStjhCxy5syvDt8EQbljl8tlUtGWmbtpojG0JF9k3j502osAoHz5S02c357aqCGmdaY3Q9PlVyG2C12v2AXB1k5dOKG4nJ8IbrKlBYMe8xiqEllgoc722ab4wtcXqQoeA+kWT9q41VyRt6qrByYU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.37.0
Release Details
UpdatedMay 14, 2026, 6:27 p.m.
Changelog

Added

  • Message @mentions. PostMessageForm and MessageCard edit mode use NcRichContenteditable with the NC core OCS autocomplete API (/ocs/v2.php/core/autocomplete/get), scoped to team members. Mentions render as styled highlight pills in the message body. Backend sends a message_mention NC notification to each mentioned team member (on create and edit).
  • Message pagination. 5 messages per page with prev/next controls in the message stream. Page resets to 1 on team switch and after posting. MessageMapper::countByTeamId() added. listMessages now returns total, page, and limit alongside messages.
  • Per-team message settings. New Messages tab in Manage team for team admins. Configures minimum role to pin messages and minimum role to post messages, stored as per-team IConfig keys. Post Message button hidden (not just disabled) when the user lacks the post role.
  • Calendar view dropdown. Embed bar now has a native select for Month / Week / Day / List variants; selecting reloads the iframe with the chosen view in the URL.
  • Calendar embed auto-reload. After adding or deleting events, the calendar iframe reloads automatically so changes appear immediately.
  • NC-relative team links. Custom team links now accept apps/... or /apps/... paths (e.g. apps/collectives/s5) and open in an iframe tab, just like built-in app tabs. External https:// links continue to open in a new browser tab.
  • VitePress documentation site in docs/. Covers Nextcloud admins, Team management, Developers, and Users — 20 pages total.
  • New migration Version000336200 — remediates auto-generated primary key name on oc_teamhub_team_app_resources for existing PostgreSQL installs.
  • message_mention notifier subject in Notifier.php.
  • getMessageSettings / saveMessageSettings endpoints (GET/POST /api/v1/teams/{teamId}/messages/settings).
  • getCalendarEventsForWeek endpoint (GET /api/v1/teams/{teamId}/calendar/events/week).
  • deleteCalendarEvents endpoint (DELETE /api/v1/teams/{teamId}/calendar/events).

Changed

  • Calendar iframe URL now uses the public share token path /apps/calendar/p/{token}/{view}/now (team-calendar-only, no personal calendars). Falls back to full app when no token available.
  • Calendar connect error handling in ManageTeamView no longer logs the full HTML 500 response body to the console.
  • getPinMinLevel reads per-team IConfig key first, falls back to global key. Admin settings Messages tab removed (settings are now entirely per-team).
  • activeFilesIsGf / activeFilesIsShared in ManageTeamView use .some() across all active files rows so the GF connect buttons correctly hide when a GF is active even if a shared folder row appears first.
  • dav_shares access filter in getRealCalendarIds broadened from IN (1,2) to IN (1,2,3) for compatibility with NC Calendar 5.x circle shares.
  • resumeCalendarAccess corrected from access=1 (read-only) to access=2 (read-write).
  • Select dropdowns in AppEmbed bar and Manage team Messages tab have no background color (theme-transparent).

Fixed

  • MariaDB migration failure on NC 32.0.9: Version000328200 now uses explicit 'th_tar_pk' for setPrimaryKey() — auto-generated name was 31 chars, one over the 30-char DBAL limit.
  • Calendar connectExistingCalendar TypeErrorResourceService was passing $resourceId as string to a method expecting int; cast to (int) at the call site.
  • GF connect buttons visible when GF already activeactiveFilesIsGf now uses .some() instead of .find() so ordering of rows doesn't affect the result.

Added

  • Strict 1:1 enforcement for files resources. ResourceDiscoveryService::reconcileApp now snapshots the team's active files state and routes newly discovered rows accordingly: active shared + incoming GF → pending (with isDualFolderPending flag); active GF + anything → ignored (GF precedence); active shared + another shared → ignored. acceptResource and unignoreResource apply the same guard. All refusals write resource.suppressed_duplicate audit entries with reason codes.
  • Group folder takes precedence in getTeamResources. When both shared and GF rows are active (dual state during manual migration), the loop explicitly picks the gf: row so widgets and the team home always read from the group folder.
  • Dual-folder informational notice in Manage Team → Settings → Team Apps. When a GF is discovered alongside an active shared folder, a blue panel explains the situation and directs the admin to connect the group folder via the existing buttons and migrate files manually.
  • Resource-type badge ("Group folder" / "Shared folder") on each active files row in the settings panel.
  • Picker filtering by active files type. GET /api/v1/pickers/files now accepts activeFilesType=shared|gf|none. Shared folders are suppressed when one is already active; both types hidden when a GF is active.
  • isDualFolderPending flag on panel data rows.
  • normalPendingResources, dualFolderPendingRow, dualFolderSharedRow, activeFilesRow, activeFilesIsShared, activeFilesIsGf computed properties in ManageTeamView.vue.
  • Create New button for Talk — shown in empty state alongside Connect existing.
  • Create New group folder button for Files — shown only when Group Folders is installed; switches label to "+ Create new group folder" when a shared folder is active (signals the workflow).
  • Both 1:1 buttons hidden once a resource is connected, except when a shared folder is active and Group Folders is available — then the GF buttons remain so admin can attach a GF for manual migration.

Changed

  • ResourceService::upsertResourceRow() — now promotes pending/ignored rows to active on explicit connect instead of skipping. Fixes silent failure when the discovery reconciler had already inserted the resource as pending.
  • ResourceService::getTeamResources() — files block prefers gf: row when multiple active rows exist.
  • ResourceDiscoveryService::getSettingsPanelData() — adds dual-folder detection and tagging.
  • ResourceDiscoveryService::resolveFileName() — falls back to basename(path) when filecache.name is empty (some storage backends).
  • FilesService::listConnectableFileFolders() — accepts activeFilesType parameter, filters output accordingly. Also falls back to basename(path) for shared folder names.
  • ResourceStateController::getPanelData() — now triggers reconcileTeam before returning panel data, so externally added GF resources appear immediately.
  • ManageTeamView::connectExisting() — empty catch block replaced with showError().

Fixed

  • Critical pre-existing bug in ArchiveService.php: stray extra } (line ~2770) caused ParseError: unexpected token "try" on every admin archive request. Removed. Archive settings save works again.
  • AdminSettings.vue archive form: archiveBeforeDelete was missing from the data() default and from loadArchiveSettings — the toggle had no reactive backing. Both fixed.

Removed

  • The auto-migration system (FolderMigrationService, FolderMigrationController, FolderMigrationModal.vue, two endpoints) was scoped, built, and removed per user direction. NcDialog wiring proved unreliable; manual file migration is the supported path. The dual-folder notice remains as an informational signal only.

Security

  • All new endpoints check team admin level (≥8) before any action.
  • No raw SQL anywhere; no \OC::$server; constructor DI throughout.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureNB4VEY/kY6IM6/q9rg1aZPixwOBTrNlZIbr9hGsb3TcGQ3kXe591A67Rez1U2FQO3FcRuoxZRNXGMJkziuhoaa9RkoGQuHxtueXomwk5UWjFSTbgf8+JFSFXag8NUNM7DqEnRjG3hLad6HdDwdv8t+t7CDhkih5s2rGI7G55B9uSNdY0LftIal9G2M4DBJmpZtJ+1RitAI/ZqqRCjA+lVc0V7AQFeCxVyrt9weLTdXuvzGTZhazmiYZELVrbpUwurxRgmE6itg5pWp+T4FC1ilm7zyz/v6LOSmRBqgNExbS5lbEutYBoKLSKEPfvjAO2emcj54Ng9PwvRlP1iTvGr7jrZ15DZa0mBL6sXMvDpEdR2yvoAsVDvlroHW0aILMDnc3HruzKkmB8ykRyrkOAwVmCRQUPN5pjr6Qre/hCgYWZR0d+YHFopsJ/VDiH6+PH8aYia/92Z6z21kbvT4wUrqwqARyI510Dcq9TLx+O6CeNqYmBiPYkpAUoX1ck+q3fZAH3cqTXH7N5ezRctAnM3CvctmxMG7Gpd9BmLj0wF1p69qGQ4FvpcVSsFoFt3sc8qxfARDRm0fu+avD47k4YvKfR1NFbUhHe+RMYivFWlmCAhwbaObsGt2mCbyfIwxLFM/S4N2+ji8lwYT2wC9cPTHYTL1+dZNwTCCdaTEZIVSE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.36.8
Release Details
UpdatedMay 13, 2026, 7:15 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignaturelhEnGI/fAC8OFXF2pnGBIlqEN6Bw4EurQEVPeTeuGc+O+1NHT6t7rYfX5gBJinYOJScN0dXIys+FHOvzY/QGT02MbHUDXMqtwzYoegOZBlRE/TXUXp0LKCx+3m+rHjKd9dCtBJi++X2ZUJUqGzsU4Km1WNRKqv6gubdCYUAMjXZmrXtfuEtdOqc5yAgnaA7CxKx+TPcc8bpU+SPkiFeuC9EB+iwnM+3NJThjc6RIQWiCwc9F5i1FsXikkYe9gYENyaraXhZrqj1eeC2hHwBRB5aXYMO9FghzzjvQ2VZo/psiiGWukii17WqKSofNN5N6yeh0Va2q/dT3RRmtRNhZ16D9eCeVLF+w6rUaP3bz3lNZIeksbIkV5E3d3F/FXc51QdNIlQ5D1LdB4ghhVYtvTBFzf5WbB5yzM6uSA/zcR5g02p4iMzLdVoILfkXoMRV7VNISvQfPP9ExuQnw15dpA7nSzIEC2dtLCNoA1xUPTCVCOpz3CMHILjL5F4l8HJtQKx5D9IV8l5Sakf7uqp7SJcx8CWh03/iX6Eibp5HRRS4PsdKyZVKiWgOyG6iXkTktCruXQKGXi5MSwkpPZvYUz8//klH2Bn87PSHJ+q9rtca0j4w/o0QBqnJr03gHcKPh3Y5vD0aaca57svcZPbhr+dwT4WXmEBNkxRlNKwmI0v8=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.36.5
Release Details
UpdatedMay 11, 2026, 7:29 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
Signatures016TbppM9kULPOeWRGdKsV9pcTR+YBhPBA2cPZPRtKPLKxUpr80YJrCOj2+VxmxQrrr0cwaFgQTjtCTw8Uw1ush4zPNdfXfX2HFqsvmP2JYDEFQwk6ftJLwiDfeUk4kDnarODZ2WAJ6Ol22Sq8w4cxdgADyVDii0sRaHyyEnghCuyttUccXzr/1uf1MzlzuH0xhbLSKALpnQVnTKz0jMNgGifh/ug5nh+tmz/nwLSUGJ/n+iyWp8qQhzWtlKQpSSTAW3COCOQvleVoprDWkU9LyOKmQvYXExEmsf9C21olxxEkHygVhDEKKN+2eNmH1XsTyuBmi9SVDOP5uruPsiZs7bnmO9ToBI8oTCtRa6jmu2pJpPjTjIdGW7Mr5US/NEbjljWFdC0KJZ4y0Y5+z6oKExqXb13D/bMndP5uNNZI/0SwLTCCpfd6DYYp9TCESagMG6zARVbIu69ReMWlmvEL2Uhq0hKqlBfhKrHwyrtYRXXzLpn+riNO2WafrOrVmMMT8t1+0aXUdqYBRKz6jpuwRag29IutxSsYwNA9oSlCmjhylald0jhu6AAK9Zi5fg0HuKudr7RBhk4wPY+HrgHtVwvl9h5dJ0ADJmsJEE77CKaT8xdV0SgpRU/JZCMw9qHFnkz7qDR/f/fmshi0L9qaDVOB0hWOKP7Td1BvlC3g=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.32.2
Release Details
UpdatedMay 10, 2026, 11:50 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureaqlS5xLgAtQMFnFSjAjXnjfpSSV5UCZpVyKef4AdzzktPWmKamnaJ/o9bl/knf5Ccxcaac5gNFKSZcycZ4yrXj+BKTne63Wt+G4a/W3uhVV+jEz0aXacH4jwhVJuxDExsQUp83WA/JxrlFp38nEXc3fSMhAPZsP829eID9w6AbRSujgEzOfNCsduJ0Isrw+m60fR8R7LsX0CSC3XzGwLVwoJhbXJ52Ri8JRxLziVP/If/TAJR+pqg25hjGoYRqoPTacmdoFbNxcaZOeAxJSR0VRMwFS7rJJakiZ95w54KztDRvMwJAIMBr4BDtAiqedj3GCj8AtsPmvh3dEh3OPw4xMjQlTRAqW6yL1t4AhvL5dy5dmlQyRZiKwTkSC/9+/SXwR+e+1vfaB5ffmA3JAt9LIZ+24gP7O989Ed6yIo8Rh9//c6HwXky+L1MDOU9onZU3mwWBvI2xujyIhYu9uXMV6q587FsyptGaAoeBVtbtmY6DxiodLmgE5no1Gm0OBt7vy2ZUEhE9ToktSetWQPLtpjptRUBbAyomUGpEiaLSQP7y08h1ulPHoMjM3MelrxfGqSytHakG/M8bImdS7dO46kRG4gEf9C1LaaXH3KkfiNu0F5FPEbf0qidxDY5XePKUiAPirG5nSXLjYCu6f8hDktPh/U70EIWKuO4AAi4qw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.28.0
Release Details
UpdatedMay 7, 2026, 7:47 p.m.
Changelog

Added

  • Connect existing app resources to a team. Team owners can now choose, per app, to connect a Calendar / Files folder / Deck board / Talk room they already own instead of creating a new one. Available in the Create-team wizard step 4 and in Manage Team → Settings → Apps.
  • Resource pickers (GET /api/v1/pickers/{calendar|deck|talk}) listing the current user's owned resources, scoped to the caller's UID.
  • Connect endpoint POST /api/v1/teams/{teamId}/resources/{app}/connect (team-admin required) that inserts the share/ACL row granting the team's circle access to the selected resource.
  • ResourcePicker.vue — unified picker component used by both the wizard and the manage-team dialog. Files mode opens NC's standard getFilePickerBuilder dialog; the other three apps render a populated <select> populated from the picker endpoint.
  • Connected-resource warning under "Delete team" in Manage Team → Maintenance, explaining that connected resources are deleted with the team and how to preserve them.
  • Archive-before-delete admin toggle. New checkbox in Archive Policy controls whether team deletion produces an archive ZIP first or skips archiving entirely. Default OFF for new and existing installs. Same three deletion modes (hard / soft30 / soft60) apply to both archive-on and archive-off paths.
  • POST /api/v1/teams/{teamId}/soft-delete endpoint for soft-delete without archive — creates a pending-deletion row and suspends connected app resources but skips archive production.
  • Owner-side delete dialog when archive-before-delete is OFF, with description and confirmation text adapted to the chosen deletion mode (immediate hard delete vs 30/60 day grace period without archive).

Changed

  • The Delete-team button in Manage Team → Maintenance now branches based on admin policy: archive ON opens the existing archive modal; archive OFF opens a plain NcDialog confirmation.
  • Description text for the Delete-team row dynamically reflects the active archive policy and deletion mode.

Fixed

  • PostgreSQL SQLSTATE[22P02]: invalid input syntax for type smallint: "f" on team creation. The enabled (in teamhub_team_apps) and is_builtin (in teamhub_integ_registry) columns are SMALLINT (per the v3.9.0 cross-database fix), but their bind parameters were still using IQueryBuilder::PARAM_BOOL. PostgreSQL refuses the boolean-to-smallint coercion at the wire-protocol level; MySQL accepted it silently. Fixed by casting to int and binding as PARAM_INT in TeamAppMapper::upsert() and IntegrationRegistryMapper::register().

Security

  • Every connect endpoint re-verifies that the user owns the specified resource (WHERE owner = currentUid or IRootFolder::getById() for Files), preventing forged-resourceId attacks across the four supported apps.
  • Each app refuses to connect a second resource if one is already linked to the team (one-resource-per-team invariant).
  • Picker endpoints scope listing to the caller's UID — never accept a UID from request parameters.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureADlRyz4GyYgl8rljgx6Xw5Yq+hXjFnDGsT/M68SMUIu0PyMV0qJzbt+63EO5ij0SJrNYsf0ggbHaHct97ckYFzxrkFf7+B2O9l5YWdatd+dmtt0FQEMKBReJBSb93ZSRU65JXVlE0/43ikwK+RW9DiQI7QS3/DWSvRf83C43vI57g3PKs0dovrU5BwXWIb0bh7OvzXSfq7guF3JnFxlSeBTsrA9KUDTwQY03n1Wqi6tDYwLvTIQu8tKnPCMmzVQJlAc4d2krRVgEDGn+hNXN8+0sq8YSAq2ZCc2ckBXlMTyzLRrqwkZz7LpgljadbYATQe/GhS+ax5AFKL9efbXx0ny5S553N6Clgaq9vn5AyT5JASVo22Sf/Yxs/bT+EVYxKmwSd7XW9PDvXYwtG9aojqkQnEgZdas2MCeZw3e4yAsh1pd6KpFf3LuQ9U7nxzDSoABLZSDPYctIIZoVVQTPM35Bd/poEbOYl5f60bOYHEmeQkFP/MCVuqM9/XuJ1hIw27U7GdDCAsC1ONdcmlIRYEJHdIQ+yxOjMMYm8F18OjHJYoDuk/GIjFmGCF5QzcE+vdK6z4SO5n6JtTTsM6T8ruv/FNUFtQYbIb4KrhzbUs4TOxV+MCAI0/lB7IJiWdogLEiVuABwSecEPzt/K2qCbK9VgzJV8h77Yg1Z72ic1Dg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.27.4
Release Details
UpdatedMay 7, 2026, 1:14 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureWsF4We8JALnZvd9ZxzvftUVv6y9bJoO2AK9e/PM7P3dJn/cu8zwy1WvJhJDwbFP8Z0Nzcpj/wmN2WjfT0+1nbLor4BJ8Ls7noGy6KZR+laWTW/UHwGcRgFK5FB53Yi7W/rUTcp1dyM05gyl8sZAmrQxA/sD/unJccyNHcQJPpw3s8tsEShXmsFlZJuO2Ria+a0bKRXSQl1Az5v9ORk/Bx0Wd8oTVD+x2yEBq70TMaA4UqHU0Q/qNrZn03XHCYA6bh3QExdWx8sV3dNJ9X8envbqwPG53VL8KIOZD31DsjkVZ73+/stHpj3xQgwoiQ7oQD+ggorUShI16nrkd/VTV+M7VtcZyPxacndnslzeZyS00p2o0U9SzRTiJB3d76gogX/7XdQpRmUIeUroB1UNGaLMoILC8LojcDQsDGgv0w6adCZ5f/BdEgUkZKSMcm++IN5cYtm+q6+Eth29bh7gq5RIpuKb0Ous5wjG9UVgLHi/KDhtj+vZoUkg8CQ3ctPttf+FkJtY/xTuoEzf0ygy8nlHYsBoGQmdjyUqvuB7MZKCL3y1F8mGwEI0FYFMhbRnRVbYQy1ae8RpQj/fKEAWwXEfGIBbQAySath1iBlILNeAreUWmJpiWnE+aSghtd//HPcKvwHW1nRLt4f/UuMYIjCm3u/7C/CrJ49X2ZbIJSyU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.24.0
Release Details
UpdatedMay 5, 2026, 8:48 a.m.
Changelog

Added

  • Mobile single-canvas layout for viewports ≤ 768px and tablet portrait (≤ 1024px portrait). New MobileWidgetView.vue: scrollable canvas, collapsible icon bar at bottom with one icon per accessible widget, FAB action button.
  • FAB widget actions — in-canvas action button rows removed; actions surfaced via FAB: single action fires directly, multiple actions open a slide-up sheet.
  • Tablet landscape layout for viewports ≤ 1200px landscape: 60/40 split with message stream left and collapsible widget column right. Widget cards have spacing and rounded borders.
  • NC sidebar auto-close on mobile/tablet-portrait — uses NcAppNavigation :open.sync prop to close reactively after selecting a team or action, instead of fragile DOM manipulation.

Changed

  • Embedded app iframe content height set to 100% (previously 90%).
  • Edit layout button hidden on both mobile and tablet layouts (editing not available in these modes).
  • Seven modals (ManageLinksModal, AddEventModal, AddTaskModal, AddPersonalTaskModal, InviteMemberModal, ScheduleMeetingModal, TeamMeetingModal) now set min-width: 0 on viewports ≤ 768px to prevent horizontal overflow on phones.
  • MessageStream accepts hide-header prop and exposes openPostForm() method for FAB integration.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureTvyr9L9P+H2RLIOYb8tFSJIV/1sH4rWC2RhttmVfB98kvezRU7Xa/tVV+MKE758D3cT3BKsvBz7e/OtKoPKuCan6HR0AmXNbMYx3F/ep+BoEQP3H/m8pOaYF2xyRAYmsdHxV9EPyyFEX6Trxiwy5aNJSK5S9RJdC+fm8p0gmvDlP1G3+GCerMXdi2lioEpoAnIlE+fd7JUIt48C1YYHKAqDlsaw3wlXiYC4j68I8vVD8GdXYmYgXvxW3IeE/iUbOZJ75bpqxv3ufHqEFPAYas5+SMUy8fGQQZjBvjIN4ztSRwAIZ4e1OFZj2WsYsfJZEi5upcwPoqg5SGo4Xw7vp5Dz3Zxx2hCEhCdO8jlGSinqNul6lPRZmaKXm0GY8v03ZaHu2uUdyNPvOfnVRUbe2ekUKhXe7C0u9umdSLmv2/+HhQRGFFZH6Tfu6Pc1IwWirW2EnhmKoGHnWO0mjq+VK1Ip1ZntyZ1znM9U6fdQaHTjMBq2nlXQWnZgu1tw90QWf1rj3+MGQW9vUyrN5uEx9xxxBVxXjCxCVvkOsqwTR7lqqsQfp/NCR0lRyognr7Hmd985l8nUYHCrg9KfPzOfFxLRauxh1UIiRS1nif3WmJzmaelxyyRNysvksjzsc5GJW9C0wjTPsYOuZv2H+a3GRH1RSzadDXVS11CCDpVMPXG0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.23.0
Release Details
UpdatedMay 4, 2026, 7:35 a.m.
Changelog

Added

  • DELETE /api/v1/comments/{commentId} — hard-delete a comment. Author may always delete their own; team admins (Circles level ≥ 8) may delete any comment. Audit event comment.deleted written with metadata { message_id, author_id, deleted_by_admin, cleared_solved }.
  • Solved-question revert on answer deletion. If the deleted comment is the marked answer to a question, the parent message is automatically reverted to unsolved (question_solved=0, solved_comment_id=NULL). The confirmation dialog warns the user before proceeding.
  • Delete button on comments. Visible to the comment author and team admins. Confirmation dialog; disabled/spinner during async delete. Error messages are HTTP-status-aware (403, 404, generic).
  • currentUserIsTeamAdmin Vuex getter (level ≥ 8) — derived from current_user_level now returned by GET /api/v1/teams/{teamId}/members.
  • Markdown formatting toolbar in PostMessageForm.vue (new messages) and CommentsSection.vue (comments): Bold, Italic, Inline code, Code block, Heading (H2), Bullet list, Link. @mousedown.prevent preserves contenteditable selection; execCommand('insertText') fires at cursor.
  • Markdown toolbar on edit message. Same seven buttons in MessageCard.vue edit mode. Uses native selectionStart/End + setSelectionRange (plain textarea — no execCommand needed).

Fixed

  • XSS via v-html in message and comment bodies. Both renderMarkdown functions now pass output through DOMPurify.sanitize() with an explicit ALLOWED_TAGS/ALLOWED_ATTR allowlist before binding to v-html.
  • Headings (## text) and bullet lists (- item) rendered as literal text. renderMarkdown was a flat .replace() chain ending with \n → <br>, so heading and list regexes (which need multiline anchors) never matched. Rewrote using a null-byte placeholder pattern: code blocks and inline code are stashed before block-level rules run; restored after <br> conversion. Applied to MessageCard.vue and CommentsSection.vue.
  • Deck boards created with permission_edit = 0. Deck's AclMapper does not mark entity fields dirty when set via __call magic, so setPermissionEdit(true) was a no-op. Added enforceAclEditPermissions(): one independent QB UPDATE per column (permission_edit, permission_share, permission_manage), each try/caught so a missing column throws silently without blocking the others. Schema confirmed from live DB.
  • All Deck boards and Calendars provisioned in the same blue colour. createTeamResources() now picks one random colour per team ($teamColour = self::randomTeamColour()) and passes the same value to both createCalendar() and createDeckBoard().
  • Provisioned resources (Talk, Files, Calendar, Deck) not deleted when a team is deleted. deleteTeam() now fetches the team's app list from teamhub_team_apps before destroying the circle, then calls deleteTeamResource() for each app. Resources are deleted before circleService->destroy() so CalDAV/Talk can still resolve the circle principal. All apps are cleaned regardless of their enabled flag.

Changed

  • GET /api/v1/teams/{teamId}/members response now includes current_user_level (integer) alongside is_direct_member.
  • DELETE /teams/{teamId} now deletes all provisioned Nextcloud app resources before destroying the circle.
  • ResourceService::TEAM_COLOUR_PALETTE — 12-colour curated palette for NC-friendly team colours.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureNB29XEJ4DYUSSXCP7cIFfzPYsJyAPHHQtoOtktawP03w3p9lKDvZ86l7WnrBkKcOxtIv7oCuXPh8oQqZkj/L4XmpXAVcvIUPrZPtG3CQ4+OhNvC3BXT4T41GNLAQcG2hyQ4MZX11OBP1F5IfBmGWoY7il1gDNjDTIBqM4J0cFcO/Eg5q4zVYI2x1ks6+SpmlNCLdjVujDfZLN3/wXIQJA4zY5EqUexwmKvz2RiNNESfifz3wwpY5KcYEHrF+gasTIj1ZaaZ5TDC/4tUH71zpn3PAYNRpWPB8d/WhZW8yt0eaRw+4+hLItkzvwsKesAEljUNUrYD8IUD5VIWgysH1IgdXR3tJX2deQK3UW2gVFGuwJvNTtVzDuPGUsZ2m1VdhMPZcsPLqPLH+rvjwrG4qQlaTpXj9v/6ypBBoCo059KU7C5qnITKvANLXgldhEIyV3VNlCjbvww8v2Ogu+FSkSPpQRCq2FWygTVQJNYVIzjNS8J4lGfloPU9lXkEW1UvtK7nzZoumi/H9xmhj3edmOP/MzaR7wrToziaf6cWhhgYfnLxS60TYOUFmY7BCarcQ6y2tlXfPsCHYSDupV2/39kINeZ55xp70YP21S2WyjkkmmsXO76YDImJJIfXJhSUKnfJ7j1gk06Z8QwjQlAxkN2hDHG0JhQVcjWLAri/2A4U=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.22.0
Release Details
UpdatedMay 1, 2026, 12:35 p.m.
Changelog

Fixed

  • Indirect members (added via NC group/sub-team) could not see built-in app tabs (Talk, Files, Calendar, Deck). ResourceService::getTeamResources() checked only for a direct circles_member row; indirect members have none, so the method threw and the controller returned all-null resources. Added isEffectiveTeamMember() helper in ResourceService that mirrors the two-step indirect-membership check (circles_member → circles_membership) used elsewhere, without introducing a circular dependency on MemberService.
  • Member count in members widget was inflated when groups or sub-teams were present. getEffectiveMemberCount() used COUNT(*) FROM circles_membership, which includes group-proxy and sub-team-proxy circles as rows alongside individual users. Replaced with a query that inner-joins circles_member on user_type=1, level=9 to isolate personal user circles, and uses COUNT(DISTINCT user_id) to deduplicate users who appear via multiple membership paths.
  • Pages widget hidden after team creation even when Intravox page was successfully created. create-resources did not write to teamhub_team_apps, so getTeamResources found no intravox row and returned resources.intravox = false.
  • Manage team → Settings → Team apps showed all apps enabled after creation, regardless of wizard selections. Same missing write: ManageTeamView fell back to defaultEnabled = true for every app when no rows existed. The wizard now sends a complete appStates payload (all apps, enabled and disabled) with create-resources; the backend validates and persists these via updateTeamApps().
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureaF+aB3FIewjvx0eqVweCVBEI9ipOSyJoOcNoEC9XKXKaYsVdnElwJwRyq9so1vwmCMkRE2kmmlkqeK+kDc+cDrFhnwG/2NuzoTbG/BQViG1UqASNTodIVMWT3YfFcpVgWYwmY4ebBlHYFmDzpXmozDw74hodGwtZIXiSavfzJhtXhPYvhi/e+Q7v7qICbytjO9C1JFzEEcsGZNNEhkUlSiuO9SMt+yjkG6iWaCzcNjPMPmS7OROieXzAJ/Xxb5vG3aZocJfl2IezIR7sZ1XFrhvRy8+HB0r1EBunJa4YwgM86MaGzlIB2PdMH6OrN6ly6DZwl98oJTMCAjHT95/U/vuzzuwOrsg8P6Y7y+j0mH5nf/ZbSl0FeJk5tfv2GQe2XFXvRw7aKi/K+Y9B0dYReMPmwsBlPvx3mqEj543CaEP/Qzs4xmCJ/V1V0qzGfUkU0UvoDCPh7JLiDED8+O598KEFaxGSOOOqg9hhOLGszJG4jIFyTGsnBLvDFvR4bPFuA5HFjnPH6WdTWnfRhZFhtNojz3LQcsPP5Em9Y7x13KmW8h0HfJ92jzXyY13+4oK8jm9k/TNWyzqz7WYfb83tsia8cUw6PF4yA7fgBs8F4221Ko+19QtZIijE53M2txRNODZ/XsXLdM3ifatbgGi65T0tAzAw3BmWdMtWmHHrvPk=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.21.0
Release Details
UpdatedMay 1, 2026, 9:10 a.m.
Changelog

Added

  • WCAG 2.2 accessibility audit and remediation (Sessions 1–3). Full codebase reviewed against all A and AA criteria. The following fixes were applied:

1.1.1 Non-text content

  • AppEmbed.vue: <iframe> now carries :title="label" so screen readers identify embedded apps (Chat, Files, Calendar, Deck).
  • MessageCard.vue: poll options now carry role="button", aria-pressed, aria-label, tabindex, and @keydown.enter/space handlers — keyboard and AT users can vote in polls.

1.3.1 Info and relationships

  • TeamWidgetGrid.vue: all 11 widget title <span> elements replaced with <h2> (margin/padding reset added to prevent browser defaults from breaking layout). Screen reader users can now navigate widgets by heading.
  • MessageCard.vue edit mode: bare <input> and <textarea> now have associated <label> elements linked by unique per-message id.

1.4.1 Use of color

  • MessageCard.vue: voted poll option now shows a CheckCircleOutline icon alongside the background highlight — vote state is no longer conveyed by colour alone.

1.4.3 Contrast — hardcoded colours

  • DeckWidget.vue: #0e7490 teal replaced with var(--color-info-text, var(--color-main-text)).
  • FilesFavoritesWidget.vue: #f6c342 gold replaced with var(--color-warning, #f6c342).
  • TeamWidgetGrid.vue: #1a1a1a on success/warning badges replaced with var(--color-success-text, #1a1a1a) and var(--color-warning-text, #1a1a1a).

2.1.1 / 2.4.7 Keyboard access and focus visible

  • All 10 components with outline: none on :focus migrated to :focus-visible with 2px solid var(--color-primary-element) ring. Mouse/touch users are unaffected; keyboard users now see focus indicators.
  • App.vue: duplicate :focus-visible blocks consolidated; outline: none removed.
  • TeamTabBar.vue: role="tablist", role="tab", and aria-selected added to all tab buttons. Tab/Shift+Tab moves focus; Left/Right arrow reorders the focused tab and restores focus after re-render via $nextTick.
  • TeamWidgetGrid.vue (edit mode): all 11 drag handles gain tabindex="0" and @keydown handlers for ↑ ↓ ← → to move widgets on the grid. moveWidget() swaps positions with the neighbour in sorted order (fixes vue-grid-layout vertical compaction cancelling y ± 1 nudges).

2.4.6 Headings and labels

  • Same as 1.3.1 widget <h2> and edit input <label> changes above.

2.5.7 Dragging movements

  • Tab bar: Left/Right arrow keys on focused tab provide a keyboard alternative to drag-to-reorder (WCAG requires a pointer/keyboard alternative).
  • Widget grid: ↑ ↓ ← → on focused drag handle provide a keyboard alternative to grid drag-and-drop.

4.1.2 Name, role, value

  • TeamTabBar.vue: role="tablist" + aria-label="Team navigation" on wrapper; role="tab" + aria-selected on each button tab; web link tabs correctly excluded from tab role.
  • TeamWidgetGrid.vue: all 11 collapse/expand buttons now include the widget name in their aria-label (e.g. "Collapse Team Messages" instead of "Collapse").
  • AppEmbed.vue: <iframe title> fix (see 1.1.1).

4.1.3 Status messages

  • PostMessageForm.vue: attachment list wrapped in aria-live="polite" aria-atomic="false" — upload status changes (Uploading…, ✓, error) are now announced to screen readers. Checkmark symbol given :aria-label="Upload complete".

Security

  • renderMarkdown (pre-existing): v-html binding in MessageCard.vue and CommentsSection.vue renders user content without HTML sanitization. Logged as open issue for a dedicated security session — fix requires DOMPurify.sanitize() before return.

Removed

  • Debug console.log calls in TeamWidgetGrid.vue (moveWidget) and TeamTabBar.vue (moveTabLeft, moveTabRight).

Fixed

  • Double margin-top gap below NC top bar. NC page frame and NcContent both applied margin-top: var(--header-height) to the same element. Added #content-vue.app-teamhub { margin-top: 0 } to zero the page-frame copy only.
  • TypeError: e.n is not a function on team pages. translatePlural imported at module scope is invisible to Vue 2 templates — added n to methods: { t, n } in all five affected components; AdminSettings gets an inline n() method matching its existing t() pattern.

Changed

  • All error messages use {error} named placeholder instead of string concatenation. Allows translators to reposition the error detail within the sentence (22 call sites across 10 components).
  • All count-bearing strings converted to n() plural forms (14 strings across 5 components). Translators can now supply correct plural rules per language.

Added

  • Transifex plumbing. .tx/config and .l10nignore added. Stale l10n/en.js / l10n/en.json removed. Ready for NC community bot once @nextcloud-bot is invited to the repo.
  • TRANSLATORS: hints on ambiguous strings: Comment, Leave, Join (team vs. meeting), poll vote labels.
  • Translation standards added to SKILLS.md — every string written in future sessions must be translation-ready immediately.

Removed

  • Debug logging purged. 23 JS (console.log / console.error) and 15 PHP (error_log) calls removed across App.vue, FeedbackModal.vue, FilesSharedWidget.vue, TeamView.vue, FeedbackController.php, FeedbackService.php, TeamService.php, TelemetryService.php. The console.warn in TeamView.menuItemUrl() is intentionally kept as a security signal.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignaturenE6/JanHZPI2gJOiWJZMk28BvA/IenxP9ttZTLP8ukJhVHLtgEHDouOj6MlHhkol7j765YIdplWXD0snC26zoEjqGIeATPoVLA5C4s72+scF+8yA+ABvUZqoI0objebJsNj9vv4e35pMiFRYFjyxcqsepO9SZUd1h6OjJvd9HhLb+FGQ3XWUfhby3fASPzXUHADRgTSFALVT8uKoKBIT6N6RNsmtwZugGGt9sRJclHoFjYtjuw3taOU7IFSU0nzMeY0knJWJQqOiFHqPK02qA6+y1FSqROoxdmh5DzfXT2Lq82tep8PWNaIjy+eZnSPzZ7yMftzsUuw7Op2dt8IhIoeWlcBML4h4voLwnfSBvv4Y1iupF5NupORVXYQbCRwmGBNfpMV3giQAYLitqCBpEzshO22fwTas7ipF9ERzl8Xjnr+kC/FHRwsGaq86iE9uSeEbebDTRS0S1iQJ2QO3uefGq0ak/+D3fbeaEHEZTkmSZ+IHWsrPoPCj+hDThe812ymYqyN6AoCS688N60mHIGUETeN69fCDXFHWylumRxkdCIS9y9g5OtQTVXrKNNfui75jlQcjhQp8DH6aSWBZNIUSFEUw4D+TiXlOfwCJVHEQUxG0mIHvXMyMGS1HUmj0u5/5U3RFxjZeELbUxBdUE6Y39z7mWcI82aLrAf7PHFY=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.20.1
Release Details
UpdatedApril 30, 2026, 11:36 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureQ76CfO42b16YE6NfBvItjvR78K1DPxanhH91XK8A7vyu03DdXe7OUTFmHfzDd0Rrd0V3K8d+/ss0K8d3VUxJ8awlTx0OPmbQ46R+Q4Ar7SiQPOFhn+pi2JFJmQ/okVKIt1ltSZFY+rinZvOy7IrbONsPxD7EWiiE+3ES9wvNVBwvV0vByOQjLvZcMuOekOJmuqGQxAkiGMr/hYPCG9hYUUjjM140GgbKxpy5AR5zEEARvY1E8up0BNapKTdTEaxHq5kYuv708iGtmpuqQ74W0kXi39e0e3q5Ct3iaWo7ZTv3fVMa9UPxM919JoFSw41MDxReeILrujP/mfdgDJc870Heoi74URx8KM7lq1k8Oq2137OVmJFdmaZb1X6GFBozBOFQBWfIAuWg3b8PD7qxy49Qv8bFruv45eAsMtopCjOqrWICqteqyGNkZx1+VLB0yhzXvvkCRRD3ug4tgVwQ7G3gaLhWW1nrt/N1xrCRXaTk0XumsrprLn0ky1aK+i7mKyUsY4HA1C+C21pJ8lgwL8wjmo4Dm3OA5bZ/Fht2lO0YBKJGrt81BshzPYICFVb4pa8F5ESVyN6iaI3UmzvUHrSKYaOlfhhMWs1GsCo3ayDJ7I/iTmTHhltY6uicMp609IA6RTYQ9xVZ3bpaX3gkEGvvyTUY0dUFJdt5bnJP9iE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.18.3
Release Details
UpdatedApril 29, 2026, 12:15 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureBbSeggogNn0JPG7UmMXVzr1S9eGLRgtmaNwEg6Yo8UenbN4JWPjazn+m78aXajFSeh6jbmkpYR5WS7siW2o1xYVqqWTT4/ollugaFrvcDLi9moShgbqcFpi345PSRshFSaFNgIFCcdy4BBGhkVq17dkZRF9vRELuwtsHE+EsAtC4cg0K1x7fhDZ8AbrVUcWthvCAU7mqq/CDbI5QLMHFH/niUjZfxld01piActRQW51/eiXx7RvpY1XIUUd1JJtZjkcLEUpIojQb5Y6vFWnManLZHJ14Y0FC5WJyFvNXszE9twaUCI0ZtnurdSIogtJenXpPCGE397gx0r1KXwDnlXKJIHTNP81xiYQrxsLp6TjDabK9JIz1I6Mv6WVRZbk8O/fZNntQFJDKc+Lwp8d2WD8gEmOXRpvVsOjAuE1WqClJYJZi6MFY0y4H9/iLE7qi2cNj4kP4wdzGupaUWW6J4VprIRNAzSOqERdCLna82JvkMxU1tLiG6hFVmYc5F5QagWPEQlta7IWVmR4/07gZnu029Ec45hrrDyq96wiD5WAA0uqAcL2kir82l8vLeT/4a3uxAWf6YwMF7KldyJZhfoh1gA+uE8vEvKfUFBCDesKclXPsH+Wg4CP0eILT/h2LZ0J3lAd8HmdJnH6hmXp9wx7CxHrGRZYUdixix+59c5Y=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.15.0
Release Details
UpdatedApril 28, 2026, 2:21 p.m.
Changelog

Fixed

  • Calendar widget now reloads automatically after adding an event, scheduling a meeting, or creating a team meeting — all three modal close handlers now call refreshCalendar() via the widget grid ref.
  • Meeting notes public share link now grants read+write access (was read-only), so attendees can edit the notes file directly from the shared link.
  • @nextcloud/vue no longer logs "missing appName / appVersion" console errors — webpack.DefinePlugin now injects appName and appVersion as compile-time bare globals, which is what the library reads at module evaluation time.
  • Members widget: removed redundant border-top from .teamhub-memberships-list; Show all button width set to 90%; left-side padding unified to 12px across avatar stack, membership rows, and show-all button.
  • Removed redundant "Team Messages" heading from the message stream body (the accordion header already shows this label).
  • Removed duplicate "Post First Message" button from the empty-state — the header-level "+ Post Message" button already handles this.
  • All semantic color text uses (--color-error, --color-success, --color-warning) replaced with their high-contrast -text variants across 21 components, improving readability. Backgrounds and borders retain the base variables.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
Signatureo9VGOkozPXYywaP2ZC3o2UICAIdsFUEdehNKJF0GKdgPgzMvL1Slkyeg9XI0ZiY+cw/Uu6rccUulLDeKWR+2iLRpDQb7iNg2ZCL8QgXYi5AjuO9diTPAqrywyowNNXV8gfFpJXJQ3DqEvkXQVptMXM1A5wNXjybgKAQAnTNSlrF+r4HvT/MJHomrojrDn2yCaHyhI5ER47B2YevI+CqWkKC2RFPwrcptBKVi62tk8VGVarMy9/Vrrp7zLbx8M5oZbVcLhdB7zIUerujkchkr2olx+SKYdNmdQ92tkw3kW584WiCqY6fsfLMD3PSRwHqiH3ScVFIXEHYIMeEphCnXukTwik9c4Vd3C/gAjV08K7Ii8ll9Yh4gt7uIMOfRx1o0HYDyMXqnFHlCnAalzN8UIkq+EXJ/i56lETuFvx0gnW8sxVmziuHpn76pjs9ZG1bVsPDSdwMKA1MwdnIt+pkaY7w9nB+25r7Nz7NMVgv9SvDxhMTo9zUGc1ncpnQ+xIqeEm2uCj+OPxjuYkAJ/vlSuzrdcxALAmzpecxR9J4CwZ+cnq9yJZoXIUMSnt694gd58/KsVAaHlI+cSVaPPZz/M26BwF5DJoWBdl+0fTVQ25WzciKzJ+pvmJAvH3KD3TxJKT0W2XTOWeoUfhzsv+nt47eDgDxvD8LUK1WxAtE0axw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.13.0
Release Details
UpdatedApril 24, 2026, 10:02 a.m.
Changelog

Added

  • Group and team members are now fully recognised. When a Nextcloud group or another team is added to a team, its users count towards the team's member total and gain access to the team. The members widget shows direct users as avatars (up to 16, sorted by role then last activity), followed by a flat list of added groups and teams with a GROUP or TEAM pill and their user count. A "Show all N members" link opens a searchable modal listing every effective user, deduplicated.
  • Manage Team → Members tab displays three buckets: Direct Members, Groups & Teams (with name and effective user count), and Pending Join Requests. Admins can remove whole groups or teams, which also clears their users' indirect access.
  • Invite modal can now search for and add other user-created teams (circles) in addition to users, groups, email invites, and federated contacts.
  • New GET /api/v1/teams/{teamId}/members/all endpoint — returns the flat deduplicated list of all effective users (direct plus expanded from groups and sub-teams) for the Show All modal. Requires member-level access.
  • New GET /api/v1/teams/{teamId}/members/manage endpoint — structured response (direct, groups, circles, effective_count) for the Manage Team members tab. Requires admin-level access.
  • BrowseTeamsView teams now return an isDirectMember flag so indirect members see a disabled Leave button with an explanatory tooltip rather than being allowed to "leave" a team they were never directly added to.
  • leaveTeam now detects indirect membership and returns a 403 with an indirect_member sentinel so the UI can show the tooltip explanation.

Changed

  • The GET /api/v1/teams/{teamId}/members response shape changed from a flat array to {members, memberships, effective_count, has_more, is_direct_member}. members is limited to the top 16 direct users (sorted by role then last login), memberships is the flat list of added groups and teams for the widget.
  • Admin Settings → Maintenance team member count column now reflects effective membership (direct users plus users from added groups and sub-teams) instead of only the three top-level rows in circles_member.
  • removeMember() now correctly handles groups (user_type=2) and teams (user_type=16) by using single_id as the delete key. It also calls MembershipService::onUpdate() after deletion so removed indirect users actually disappear from share pickers.
  • Pending Join Requests in Manage Team has extra top padding to separate it from the membership summary.
  • Group and Team icons/pills use the primary-element (blue) and warning (amber) tones respectively — the previous success-green was too low-contrast.

Fixed

  • Integrity check in Admin Settings → Maintenance no longer flags teams as mismatched just because they have a group or sub-team as a member. It now flags only teams whose circles_membership cache is genuinely empty while direct members exist.
  • getTeamMembers no longer fails on the u.last_login column (which does not exist on oc_users); last-login sorting now reads from oc_user_preferences / oc_preferences.
  • browseAllTeams correctly detects membership via groups or sub-teams in addition to direct rows.

Security

  • getTeamMembers now enforces requireMemberLevel — previously any authenticated user could enumerate any team's member list by guessing a circle ID.
  • lastLogin timestamps (used internally for sort order) are stripped from the members response so they are never exposed to the client.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
Signaturea3Sq1npOxTnT7aLDRXv66RWwUdOWvy5yXVlPPHePce9JRxddfqvN4FS4p+bnjFEdkKQmlFNDNzZ97aJmEZb1Kfzb+xpX6WzgDfJe1gTYUhE3XYHBchxclwCzPC/fwdymmrjwwP9b/1q9fH26FRdFciFUmHQO9Z24g696GnkGwApfohzX2U0jd4v55cx1e+vs86SZRWY26tkUm/FXD5+d+bl4FAkDhiK+Z06hFOuuocBhqyt2obf/gohkgTnEZpaHzkaAdgJFvvvRo+azlxGzODk4mqtyZIEDUWbAXQ99vRXZAokuwRrizBbXqbVk5sn3ntgG5rq0NWoYJ3htqhdhqqMh7w6SW/XBD5cGvLZu7BZpfvFLThabB7aZktNZhmVWz3U81C+WjYVhlcKcXPxEeQXXwo+LjSpGNmjkBg2bOsNEnVcYx3LhWsmbqRNf6JH8B0kcERqJcBWRbpthg/ytseDLsFHDX76QmHMb7/r6IKwq3EjaJSpLcuMgYAE0/ad8BtR54j/rWN1AsPD3oj3UfElHO5A27R/Xdu5qwzTd9zpWDRDgp3NE+2a6ler1WpgJtuTXEv+TGCURUK9srKLcpB+QGO/J26pFhqQovLEP72uL3kW8zXDlNW51++6uJJsrE1212s6JzPLSV1jntOrB+exnyQMV9sbNEVVzwyaqonA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.12.0
Release Details
UpdatedApril 23, 2026, 6:50 a.m.
Changelog

Added

  • Shared Files widget — new dashboard widget showing files and folders that team members have shared directly with the team circle (e.g. from Nextcloud Notes or Files). Displays item name, type icon (including a dedicated note icon for .md files), sharer display name with avatar, and share date. Paginated at 10 items per page, sorted newest first.
  • New GET /api/v1/teams/{teamId}/files/shared endpoint — returns paginated list of files/folders shared with the team circle, excluding the team folder itself. Accepts page and limit query parameters.
  • New shared_files app toggle in the Team Apps section of Manage Team — defaults to off; team owners enable it explicitly. Independent of the Files (team folder) toggle.

Fixed

  • Fixed team folder query in ResourceService incorrectly picking up individual file shares (e.g. Notes shares) as the team folder when no folder was configured — query now filters on item_type = 'folder'.
  • Fixed shared_files toggle defaulting to on in Manage Team UI for teams that had no saved state yet — default is now off.

Added

  • Upcoming Tasks widget now shows personal tasks alongside Deck tasks. When the NC Tasks app is installed and the team has a calendar, VTODO tasks from the team calendar are fetched server-side (Sabre/VObject, direct DB query on calendarobjects) and merged with Deck cards into a single sorted list. Each task row shows a source pill — blue "Deck" or teal "Personal task" — so users can distinguish at a glance. The two task types also use different badge icons.
  • New GET /api/v1/teams/{teamId}/tasks endpoint — returns upcoming (≤14 days, non-completed) VTODO tasks from the team calendar.
  • New POST /api/v1/teams/{teamId}/tasks endpoint — creates a VTODO in the team calendar via CalDavBackend (QB fallback if unavailable).
  • New Create personal task action in the Upcoming Tasks widget header, which opens a modal (title, optional description, optional due date/time). Shown only when Tasks app is installed and team has a calendar.
  • The existing Add task action renamed to Create Deck task to distinguish it from personal tasks. Shown only when team has a Deck board.
  • resources payload from GET /teams/{teamId}/resources now includes a tasks: bool flag indicating whether the NC Tasks app is installed.
  • New AddPersonalTaskModal.vue component.
  • New lib/Service/TaskService.php service.
  • New migration Version000310001 — ensures teamhub_integ_registry exists and drops the legacy teamhub_integration_registry table if it survived an NC uninstall. Fixes a scenario where NC's "delete all data" uninstall keeps migration history, causing the new-name table to never be created on reinstall.

Fixed

  • Fixed oc_teamhub_integ_registry does not exist error on installs where NC's uninstall-with-delete-data flow preserved migration history, causing migration 000209000 to be skipped on reinstall while the old teamhub_integration_registry table survived.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureSgfXebprj3dl8qsJCiO/pE+phwLvcTd5NcSGL2buF71GuT7a/fqkQWJ0XTwULl70Dw7D4/wJbMX9+fLnwXK/VvfRS1S1UNa8VUtCiuUJU4f4hjrnxYWuBT6oledtiXpb8fVeB46bTzwVJXTc57HHMm4Fz6L/rjutbeu07fLe5dNIAVXUL8niOfGyeMhBLijQDAsvlcOgBvpFXSqHscgF7IwOYTJdRqoyvAJQZgoxdlffHLnL5isK+GnjJCQXt6WzIxhiHbkMQlr+SwjPdvqo5UcvRCAHoiMS6sVQFmt1TJAHzygxHBK2g58Gv4NRvm/HszdMxCbkJVpgZFeqTO/WOrNTQaIiWIHGlK2XWoVVZetF0vvSlOynOXQqS9SVHmvOhfdH594EN1kwALAckCSdIvaeIdJpA3AgeS5er9GPMQI6lRWX6gP9H6WLAFGSFLjY6HpJvcr8mXBUGLzZWjnqd2w/WzDyGf/SfwMvf7NrgrmkEbkxEkRXYtUxkjJhlIX/g6vQicisTwHViMbO1orUbP6DvXcoXWGcu9iwlnumGSrMFbBwDsP/163U7kO52RjXg4tRxpZ2G0UOzKKx5Nc7TUA87bkxLO3SjC5yL536poI+22uNYSoWsxQpk9KGsVi0xiaLLms53Kp4KnXU7LPMQ+ZAlpb3U63sBLVkRHQhstg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.11.0
Release Details
UpdatedApril 22, 2026, 9:04 a.m.
Changelog

Added

  • Upcoming Tasks widget now shows personal tasks alongside Deck tasks. When the NC Tasks app is installed and the team has a calendar, VTODO tasks from the team calendar are fetched server-side (Sabre/VObject, direct DB query on calendarobjects) and merged with Deck cards into a single sorted list. Each task row shows a source pill — blue "Deck" or teal "Personal task" — so users can distinguish at a glance. The two task types also use different badge icons.
  • New GET /api/v1/teams/{teamId}/tasks endpoint — returns upcoming (≤14 days, non-completed) VTODO tasks from the team calendar.
  • New POST /api/v1/teams/{teamId}/tasks endpoint — creates a VTODO in the team calendar via CalDavBackend (QB fallback if unavailable).
  • New Create personal task action in the Upcoming Tasks widget header, which opens a modal (title, optional description, optional due date/time). Shown only when Tasks app is installed and team has a calendar.
  • The existing Add task action renamed to Create Deck task to distinguish it from personal tasks. Shown only when team has a Deck board.
  • resources payload from GET /teams/{teamId}/resources now includes a tasks: bool flag indicating whether the NC Tasks app is installed.
  • New AddPersonalTaskModal.vue component.
  • New lib/Service/TaskService.php service.
  • New migration Version000310001 — ensures teamhub_integ_registry exists and drops the legacy teamhub_integration_registry table if it survived an NC uninstall. Fixes a scenario where NC's "delete all data" uninstall keeps migration history, causing the new-name table to never be created on reinstall.

Fixed

  • Fixed oc_teamhub_integ_registry does not exist error on installs where NC's uninstall-with-delete-data flow preserved migration history, causing migration 000209000 to be skipped on reinstall while the old teamhub_integration_registry table survived.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureP+5/blvdXpd4uoReE5CvW4k1/WbnStC9vXXjXI3Tvi8B47QV8Dej4K2Wi+1wXxFQ8zQw/i+nuz4/ZzQSwSPnjzzpbQaNRo12s/x+9pb+MsBprGSUENMK3s8vwutV5QoiD5QLM/rxq7+ysdw47AwQbM+4+VGK/a2tAhuO2H7Q3x8nqRmJCSIZewc9D6ihBpQ5Sue3ywJIKFv8X73guc8LPSxhY+YnmW3Mc2bBdsxbUamsF9EZfkSVA9zebC455uSwufPZKLaWlBltydLWyZrhFZOU8aC4QeirMYCXovzThRQNk8hwkdppc4Gb737JqrVrC4uL/AMIPrTsJ4PcAuLDsmM0E/ZHbmpPBZ8wWDfMZKS3tHZM5K/2My3Sv7W3NhkQIzMuh2yNDAcw5r2B20mu34nSvATXTm3qacGBRmbLq9dfdMkEWMenTHtBzjWlVm0s0A03+gv68lasrzv7moyzlrjk1V6i3UuEo5XAGZCJSITQb0+RJAaIHmGqOBCu0UggevHuOqOMUwFl9aa4MbGa3BwxamSt5rfii22L0bWVHtFeiCaWZGfrhTJNM1WhRd134ha+puHWKpMWv8cxTxWA6FyycE4i+H+KR6yyvLpL3viVGPm+24BzSk3GPHdfEetvu2/H7WX1vnTR8NBzKt8dHxAj0YSegXYFaPF+0EO0fEo=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.10.1
Release Details
UpdatedApril 21, 2026, 1:22 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureSxVjtNOVjWRSbm2YIc1M9cvaHIgVbVJbMJcD6FMStLGHteX8VzmSeEq+gpTZTER2VsyukDvVKRWOW3TXPTyzWF3UuC8mZSpEaK4bGHi83B3natM149njVrYyxy0BawErj4YH3VlvPzl4ok8z5hwAFWKGyFNJ2CulO2lsUfwDnhhLsvRAIjZzX+KZ2C99byqV3qFRnWo3kI+JT5PpE5+ug8T3KImQYKwGuMDq6+zFF2Qi+edECt+5TiO/rr3MFCZvSwwlwaNOEnCUjpA5wcwreGKqP2IpDJi+TwzjcJ5Mlmh6/qNjdTTkZ1tRvH5zKrZRHxAqSH0T40TMQM/N3huouEQE+fqHfJXgJXy3t99UrpWUfY9SX/rLWPQCkzgco353IBY1YTacz/cCH2yVlrTMty+EmU4iTOo2876PutuV43kDSytBtGzinCY78vrZ6D99fl/UkU5fsdVFVh91FZiPyd/JnCgTl59rm32K6rEhUmaMeXvKjl8CTuWKc6Z0TZ6qS/GPjeAVxHlpzRMIkhbjMOGnlWAKAlabDRIxZf+SSNazjnI8SFkOUOo5yCIoxMF9GjboNA81NkIg6PYdEaiooPTXiGbOd7cmuh4FNPWiniG06hn+BXX9jpO3zJNTKbmxP4g4dyWMm2923/miX93CtmyhsYWn2OcjX+YLLf78TgQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.9.2
Release Details
UpdatedApril 21, 2026, 11:15 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureVqSPboP020ssz+waXZIgJ+LTvo3hMESzHvMEKUi5BrRSPiplINi3X1Etr3zo/IQIgyv7BvaMYyjNs33q4jz8Y5oaawenqkCDw6XrV8F34rYPZbW0AabIGOAw1Ghy7Qg3mlbkq+GydCzfAMiEHro9sfi1C6kffOdijPwNm3EWPGurR7ERfDa19qeEfqoEU3Ni+//+AnwrL+rP+jf9pYM+q+/49CxT1zs53TqMTZyihHnVNbxOLCR7sgJtTVHR9NBR2HjEhFt73nxFBFn3b3j6OwoIgUX2l2lQR254lB/mgs4uD510an48qHLsYbE72Ph+LM+x8g7NtsLKbzyM24dA2+mL8PiwJhZUCfTFpbPVuiSX6OESUBbml7pgqFFv0dA8FD4gtqxKErPvD7CMaXR4mGrkit8bkkfReObVjBQZyCVl1S9q9Sj1ckfJpUlR5jmBfY39QzY3Bv/+V0cvqxxC+P25xmbvh6VHbnBMcJ9uxs4XW1lhjqvvJFTHS3nJJeQX/tm/q9k2qjnvLEe8nliMc7k0NtZxXdJI4pBPawvBaM5T91AKvzpKWrzmzIxTOWYT0HmgSm6cPPT/EBZl/YaXTO4a5xSNmCljGn0uo7bDiWtwcFNUuzCXG7FirlkyxiOkNv6DaZMXczzv89o0vMubHotd/OzddrXphSIrvkfA+Xg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.9.1
Release Details
UpdatedApril 21, 2026, 9:46 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignaturemX7RsaWak2BPhu44QNActtv1oaoiKlo5vmrzmf+iPPoJPMw0cAXoq2UcPpHnsrPme+mCOiDv+yETlWFSPdesr9U3ffdI56rxQMRqkgAv5QErwwE/jqqyte15iT2wHFrEF6aCn8NnF9bIElrCfmdL8kPwEKbgcrUBom/cQRFlWbqnmd6QRzqY+bevPIx6fXaA4ZTQbuGaR1PikE2Tskm0ETCtHf05Axg6eJ+fjgHAdR/bgsl2/2+giwe3fmoyPaC0GVsuoTmGjduMSPaUINC1hA7NPKM2aHBLvXYcGqNzKF6Wtr+la8VqOq4akwYoSlGvWOQ5uw3gTCubRhDRmMrxb6t1QABD7CseBzMKjTv/Z+ib62hrEj5IoP/qRdiovYZVJQ+VQHw8pqBJqS+a014t5m1+h3nPpZTT1heoyR0qA44AXmGhqcCVCGcMuVAtw7trENCY17FbHradrLmEofCLxoGuCAuviFXQo+03kxTL3dc4pgUm6G1+/RoX5hM3jtYmi5tBmFmXLBT8qsr1ZEStRin8aLwKBr92oeejMhLvyPN4wryntUpq8FL3n+SERCsovIvuwmMw/MOuBrL16xEL0FRa/EKlqN5F5z9gtR+ckjap8/SLQDYu7jbZUD3CGjKJbsaCeKv/Lbsw/tDqe/ZXeg7cZaq2tlPTN3g2kFah/Ek=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.9.0
Release Details
UpdatedApril 21, 2026, 8:24 a.m.
Changelog

Fixed

  • Fixed fresh-install failure: teamhub_team_apps.enabled was declared BOOLEAN NOT NULL which Doctrine rejects when storing false on MySQL/MariaDB; changed to SMALLINT NOT NULL DEFAULT 1.
  • Fixed same BOOLEAN/NOT NULL issue on teamhub_integration_registry.is_builtin; changed to SMALLINT NOT NULL DEFAULT 0.
  • Added migration Version000300801 to apply both column type fixes to existing installations.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureVWWGR5wGqe3Eax5KKz+AQ9nvFxwwNzPj4Zsqen4x72T9rHc242F+i+eaIMt/ae1/SelQGyv18ckoH5xA+eZEF+PzJj5vmcq2Zwx+PwlLTD+ieyRfaFcVc0kkYXTqMKa6/laXrNrwHuBHRsG+5wyJLkXm78H2OG0HMCIm71b7x06pIxU/eN2i6pEcTaTajyUbxPd37FsGv591XzyRKZGK+Z1DZXdMI81aE1g68xGeQLpnkKLPjURMzw3NnqZkcJiiU+fhDggu4O32obgcc2MOgrOo+ciHNX+RKFxkdYLs/qZzbS/RDdjxvnE9U5eESH7hAXU/ww8k/vSdtxEU6vrSd94Mg3GDHhjjS9jj/tLJYCk0J3MQp6EJMVRIInhgNIJJf1VkoCJk2MkTdpgF/GWheW9SBVFD6+IbzR55Ss2OYQK42gXtuNItWBm9ZCvShB5bxnmL4JtZ5I9ZfmmxD6BuZFwAkvnDIe6bt7wnVt8rZ0F0X5f7PrEzFoNq5TnagELFx0Z7HM/8OxRXwOLJtblMZeEI+tFRKxlgSOcI4EBroGwsGQ6sHELNWbqD0XvQBxmjVGjAEXfjx5yp+xwmc5433StzDcu6ItEt8wJQYKQ91quGR1MjEKwwVqmzjtNX77lt2aSKzvy4ibb8g1Xa3uHCUd9PmtdzN9FiBK2G6Gj4flA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.8.0
Release Details
UpdatedApril 20, 2026, 7:08 p.m.
Changelog

Added

  • Telemetry payload expanded with six new anonymous metrics: nc_version, user_count, member_total, message_count, builtin_integrations (per-builtin-app team counts), and link_domains (custom-link hostname frequency map).
  • link_domains aggregates custom web-link URLs down to their bare lowercase hostname before sending — no paths, query strings, ports, fragments, localhost entries, or numeric IPs leave the instance.

Changed

  • GET /api/v1/admin/telemetry preview object now includes all new fields; admin UI automatically renders them via the existing JSON preview.
  • TelemetryService now depends on IUserManager for user counting.

Security

  • All new collection paths are read-only DB queries using QueryBuilder with named parameters — no new user-input surface.
  • No new endpoints; existing telemetry endpoint remains #[AuthorizedAdminSetting]-guarded.
<hr />

TeamHub v3.5 — Changes

Admin Maintenance tab — full teams grid

Replaced the old "Orphaned teams" section with a full teams management grid covering every user-created team on the NC instance. What it does: Paginated table with search by name, "orphans only" toggle, and per-page selector (10/20/50/100). Each row shows team name, description, member count, owner (display name + uid), and creation date. Two icon-only action buttons per row: set owner and delete.

<hr />

Set owner

Admin can assign any NC user as owner of any team — whether or not that user is currently a member.

Delete team (admin)

Admin can delete any team regardless of ownership. Cleans up all associated data before destroying the circle.

TeamHub v3.6 — Changes

Activity widget

Deck activity now scoped to the team's board only — card events (deck_card) and board events (deck_board) handled separately Talk activity scoped to the team's room via numeric room ID — eliminates cross-team bleed Calendar/DAV activity subject strings corrected to match real oc_activity values Friendly human-readable labels for all Deck, Calendar, and Circles activity subjects

Manage Team — Maintenance tab

"Danger Zone" tab renamed to "Maintenance" Transfer ownership added — team owner can promote any current team member to owner Ownership transfer requires two-step confirmation and demotes the current owner to admin Leave team now shows the real server error message (e.g. "Transfer ownership before leaving")

Admin Settings — Membership cache integrity

New section in the Maintenance tab: scan all teams for stale membership cache Compares circles_member (source of truth) against circles_membership (share picker cache) Per-team Repair button rebuilds the cache — fixes teams invisible to Files, Calendar and Deck share pickers

Files

Re-enabling the Files app for a team now works correctly Favourite Files and Recently Modified widgets no longer appear on teams without a connected Files resource

Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignaturegblBv20FJFNq/Q3H9jPQvNSRrs/neT76/CRFwCF6dL2UmGY2TAsKmh06rLTNssVtnttoSuD1vlgANctX1gukwUMRAAXpjp6tHRg8u0II0g9C6sdwaLRstUJGExDUxRr5sbbgVwvRDY2GducpZRWSAyNlTSanLLJl9Eb6YAviLXr5AUAmczvdNRCa40GrHhytUe2O+oMfPtQJliOtotxL47VWvOynucGMWlj6j5ZghCx6gkTazlmWTFQQ/5VOe3EqPZyel9YSGJ4TtXwLOgQHMrBo087M34nxklShndZR12uYeZJ72n81ycvpByC10YfhDwaife+W+TeZBVtTrvo4wmqD8wqbkFsrNdp8DvMSvlVBKtibdZleX89LUG5RTsFQelFaOQjz+4A0h/xp2AhsTUtRef3vRCZCcmARieLz+g2ZaYn5EWnYDCkIPjLe/Kl9KCamL24QaSFyjBfVKcYX6DbTRCUG5xBrsEuEDWnZ9HHTUWZJO5UiqVsfvvHIzWuZ9j2vmRbsPBbKs0dRkaqO/04pDqdZaL5GLqHWjkv4wz+wiOnnMDnNKOtpubvW2HHmRSf8/TGQdzmdvr5ha+tjbOYqCKj+YMYI1jR2PWfIzxWSqzUbUrPDN6r7uEm4/r+f9ydI706wPr/f6BQlPDjq8DOIBTUC3Pc9Xdyjx2xOEio=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
TeamHub 3.7.2
Release Details
UpdatedApril 20, 2026, 5:58 p.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhM1MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNDE2MTY0NDUyWhcNMzYwNzIyMTY0NDUyWjASMRAwDgYD
VQQDDAd0ZWFtaHViMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtxex
F/UgRRSrha+3N7Foppb7DNqmBGJtJDBiENbaIubb8Po77IS10+KWsD8nCPkIMYUH
VNUTWC4MSB/gxhpvzI0mqakrRKSpJKoHpWjng+sLwmzCWU+3t2Z4tGlMmSIeacf0
nNI+OaHc8a8j1oxuTBL3lVZoVoSuzVodsjwhZnJbOyQQw5yd65RNFlWyRfQRuVuW
jr1els7IS/3qQSdXXCt35w/hxjjoPev3nP9hFjWKWkP/BNiACXbRK85HuCcjSs+C
Pr/G3q1sFLL5C0sPeheO8ncv89zrwHwnfSIrHQKMN468yryt1Veyc30HDoIBW0ss
7h8ewN7h+nJH4sqS4PaGAHg9+L1VRBNBTHxMSBtOFbCNSAIDYGcae19onAcQxrRE
fCs1rzDiraNG1m+keJddPF59XS7X4VFzRbZG5/EsTkDp1/ZKzXgdOo1aRdH4az5N
BgvztML2OQiJJ1Z+1R29QKVTotbtUEVp5BCC6fPNYF+uLEduiEGeKoN16YNPN1Ra
GwnXhv49WyE2FQpoCI6ZpdZMXjg4spyVJZdVpPyLCRmRaboJi7iq5lO1D9svsAVf
JQpaNZKrfrOUNtlm6UNPhObRxoRk7b7Fj0gCU+Dx+gsDrkTgoPEdUPqohvXTx/Vw
OSu507jOFPYSgI2xolVb+sswsbZk34G8kSMGICUCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAFwdX/tji8chWCh3yVRgMWJsi05Y13PNL/faqmoiVcGK8H+43cYCZTJSI
PaiW/GhDQ6FqblF5nJjgM/UYwvKDXuwuPHMrXUHS+h+l2IN4drJuqO6MwOtVw2Ev
5TqxA0PHlGBbhpPc6hflVmuWrgsvuf617+5vZRpBsPrgg+Zl66GCbOfobhRgPKfu
JXs4bUZsq2RIZ3yfqdjvm232QS4/CdQPItPcbdwnw7LLyHHX8O/90Re4/Jwfv+f4
5JnkTx7ganD0aA/3akES5rmQ45DOTTSFhvSv0r1GBdhpqcTV9jEZ/9tUdDWX/PK3
J+WLOE7bxReGnw1M1P60YKriBrCs1w==
-----END CERTIFICATE-----
SignatureRbq64iwUhPtTjRur8beQ5RgKG0BP0V5/7JaxZYTvBH/PFPcDmjy7EILWhL6IHsowijr6XTZWQlFbL4YZKdPQyW0PJxIm65ECq7IbqNLYK24hL8O/N1HweSZhVd5Dls+3pj9uvvR7ysrfxEt/cYDtHMxn0Ts7HcEdPFX3ONUpithodHeI9dfmNZgz6Fxk9cn+l/Pczp+JuqFa2L2h6YBJzQszsjGlVd1PlUE031Dj/6kYqRC8mQy3qpje7Xm3l6AHU2JrqAD4f4/dsSst7Cojx1sB43sy5yHnO5dSYMoYOVrxKciNrbwk7jW3CoX6XJWhBwJzLN8QKBoLOlrYpEyjYJXj+SeOim39vOvq8dsL2DpeOAhoxUNAuKQC+A0Gv4XhdeSX1FYZXmC20tgXXDln//qXChvYbE6usUmFz0iH0jP2yxqKbj48TZDID7wOyGGX0WHzHmD+zMY/alrx2+jZBqm7+BaFHT9UvDrmY6uIDAWtdbMJO3EhK2Sdn+k5DqenejwYO0yF+o5mU+itgx2pmyNWTF9/B8FcoeZIJExjZBv9/AnW0nP0WgkwqR8JmpaaFObbBWhYLXpIskLmXAfkqvfnYA7yli2bf48LR6yCkARYV2T85lkndOgH6oH51quzNvF2J7o/QcSzC83r2QIln7n4BW/X9hR/yweUkZLDU5Q=
Signature digestsha512
Dependencies
Required Nextcloud versions >=31.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0