Skip to main content

AppDrop - Releases

← App details

Nextcloud 35

AppDrop 1.5.0
Release Details
UpdatedNov. 12, 2026, 4:14 p.m.
Changelog

Added

  • Nextcloud 34 and 35 support (max-version="35"); verified end-to-end on 35.0.2, 34.0.5, 33 and 30

Fixed

  • Nextcloud 34+: the "Settings" button in the sidebar did nothing and the sidebar could not be opened on screens narrower than 1024px (core removed OC.Apps and the global snapper); AppDrop now drives both itself
  • Nextcloud 33+: success/error/warning messages and buttons were nearly invisible because core turned --color-success/--color-error/--color-warning into pale background tints
  • Header links of other apps (Files, ...) could render with an empty URL for users who see the AppDrop entry: the navigation entry is now registered lazily
  • Zips without folder entries (zip -D, Python zipfile, and AppDrop's own template generator) were rejected with "does not contain 'appinfo/info.xml'" by both the installer and the health check
  • Zips with Windows backslash entry names and no folder entries are now accepted as well
  • Flat zips made with zip -r inside the app folder (first entry lib/, css/, ...) had that first folder mistaken for a wrapper and stripped, installing a broken app; flat zips starting with appinfo/ were rejected
  • A new app uploaded on Nextcloud 30/31 was only flagged as enabled: its migrations never ran and installed_version was never stored, so later updates skipped migrations too. New apps are now installed through occ app:enable (when PHP exec() is available), and apps left in that half-installed state by earlier AppDrop versions are repaired the next time they are enabled or updated with auto-enable on
  • Uploading an update within a few seconds of the previous install/update reported success but left the whole instance answering 503 "upgrade needed" (stale app-config cache, and Nextcloud's info.xml cache keyed by a 1-second mtime); the installed version is now read straight from the database, the new info.xml always gets a newer mtime, and AppDrop reports an error instead of success if the recorded version still did not move
  • Two backups of the same app within one second collided, so the second update/restore failed or lost the previous copy
  • Removing an app that is not in the writable apps folder (e.g. a shipped app) failed with "not found" but disabled it anyway
  • Files with .. inside their name (e.g. app..min.js) aborted the extraction after the old version had already been moved away
  • The Install / Update button showed its icon twice after an upload
  • The Apps tab could disable or delete AppDrop itself, and disabling an app that core protects (e.g. files) returned an HTTP 500 page instead of an error message
  • Install message said "installed and enabled" even with auto-enable off
  • Enable/Disable/Remove/Install buttons never got their colours (core button styles won on specificity); badges, status buttons and dark-theme status text now meet WCAG AA contrast
  • Health check hint for a missing Nextcloud dependency suggested a hard-coded max-version="33"

Security

  • Zips in which two entries resolve to the same path (a duplicated appinfo/info.xml, aliases such as ./appinfo/info.xml and appinfo//info.xml, or a name used both as a file and as a folder) are rejected by the installer and flagged by the health check: validation and extraction could read different copies, bypassing the app-ID match and self-update guards

Changed

  • CI also runs on PHP 8.5 and against nextcloud/ocp ^35; the package test now verifies every hash in signature.json
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhNOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTQyNDQwWhcNMzYwOTAxMTQyNDQwWjASMRAwDgYD
VQQDDAdhcHBkcm9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5lIb
DdoElB3celqDlzY0ng/mf0deHK8hcxGsQD3O8iNeWEVCHqPvyzKEMujr3rBqbGzH
IizD6sMK7DSsbzROlty/WeUXvtqWAZ8s6EeX328l6Ny+ufekOig3+X1LN7NLqDha
ShqCkqsMYBuG++xIQRuIa5KJeygrC30++k7HKuAuRodaawc/njaRgs5e0slHeA/D
nyWPKpR5MMpDKJbVTCFrVLXbUxcQYnSho9Viz194pShaXdX6VkDSPzAL/PdVqW92
W7ERUexW+uVvfPn+K0LnqZYesKGR9SQNs5FTArFpGIUOktVGxT50KUkMpKpTnmiW
5JxunhQSciEsMXzDwmXd71NUS3T1y1M3gt3nG1OxsZacypW9FSFI0E/gTvFR7O4P
hJD4CSuFnw848CYN0427O7M3SBxJ7zdy0e6lpYUL5ad4Y2kqgu0hTqhskbJokyEN
eKTlfYRoGA5bMP1AMxMIBjuFc++z0VCmvUkaMnvQFcDEwQlEPLX1gvbGsh9QkmQy
mPvVinqXxFPoICdLPDvBn+VmrfO4DFqbA+d8O3e/JiNjq56USG1ZSTpbtiJtW3jm
Jg4wEjslXAf35U8U/xCDo4bUHXOrkqCVegzAqjmyAZiLBGnHYSbKGyDlCDJYpYD6
4HVthBSL6MbvPMSz65mkil8dGlyTp1rNk/gRMYkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAQc6IPHSKbCLRetEaqjR5GzDY7KuyLcnz0cY95TcxPLiQlke1PH+I7wgy
Hu2PXQ0reJwCrxKxRAcpRuCt6yjaO8kKmH4swhmo9YNye55p3WebkxvkmZG9qdm4
MLzMJNf4n0QH1ej6K64z4WnTStWGRsgc0UEIVY0jwrHIBgG69nEMI1nfUgB+bTUK
pDRe+F3Xf9j4ief5hF7NFyNOgGsqP4dbvvOHq0Vh9IBZrq0FlwoPsIaK87bo76zl
mbgdpkUPMrC8hY+BRaDnD2iw0kF7n++TQ9gKvyU/GEwPtGvpcMo7CTQH5wV9IzD/
om4FAETonjOAsVMn+fBrXooX76V7Dw==
-----END CERTIFICATE-----
SignatureybkZhYfkG1kT2ouMJ2pKOMoq66C5Iv5F2jD7DjS38woA2rKdn13ne1AAihJBPOvX6Gjo11nDLFgZHBGNC9idKzBogzvAp6vU+iDatUtHfxqNQVsXkwc+OLPqgRRJH0vv6/ZRApTJQAqeDSsvbR8qZUJ5swSvaKeUW1zleEKYz8OICe0aqQq2n1hSLvC9Osp14/T8rlQPc95izWRXyLXFRAs3NQ1PNQaeitIiovG07u0Ghor0eIFAL170G6MdTfMnQRXie/eEijlj8VUZbgXDC5TmzC6fqPuTc9j0IUG1VbMpyraAhlblwKZnbq46CDzPS3dzcRyhVAxxsEOtjYgzpCpmDeziHG46eusFvUjonqLlZjh84yihn78MOLvLntdoQFqm8EVi8SQr5Rn7eFbvfo/6K0l3WeEuCA5mkLBiWVOEC+OI3vAXI+mZ38VexLBV6OyhxqEuM5NUPf554iC4EBlxyh7iAQZwc7Fa/hemeH66ZqoKLjMBHN/nFAkF+rI6soU8t6qleYUR5OsXNjJiw1vy6IQW2Rk8keS6ueIaxs0WdtZu8KWvf4nT2DrbUGBgL7akx98NMH30ujOXW81J8dy3HfAsaN7WTt/3iB2vbfTyCsv6bHZuEbUA+KsBCFDdmNsLHzHoNQNNSMs+l1kDIx991mVhgypP4x6aNKCeINQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.1.0

Nextcloud 34

AppDrop 1.5.0
Release Details
UpdatedNov. 12, 2026, 4:14 p.m.
Changelog

Added

  • Nextcloud 34 and 35 support (max-version="35"); verified end-to-end on 35.0.2, 34.0.5, 33 and 30

Fixed

  • Nextcloud 34+: the "Settings" button in the sidebar did nothing and the sidebar could not be opened on screens narrower than 1024px (core removed OC.Apps and the global snapper); AppDrop now drives both itself
  • Nextcloud 33+: success/error/warning messages and buttons were nearly invisible because core turned --color-success/--color-error/--color-warning into pale background tints
  • Header links of other apps (Files, ...) could render with an empty URL for users who see the AppDrop entry: the navigation entry is now registered lazily
  • Zips without folder entries (zip -D, Python zipfile, and AppDrop's own template generator) were rejected with "does not contain 'appinfo/info.xml'" by both the installer and the health check
  • Zips with Windows backslash entry names and no folder entries are now accepted as well
  • Flat zips made with zip -r inside the app folder (first entry lib/, css/, ...) had that first folder mistaken for a wrapper and stripped, installing a broken app; flat zips starting with appinfo/ were rejected
  • A new app uploaded on Nextcloud 30/31 was only flagged as enabled: its migrations never ran and installed_version was never stored, so later updates skipped migrations too. New apps are now installed through occ app:enable (when PHP exec() is available), and apps left in that half-installed state by earlier AppDrop versions are repaired the next time they are enabled or updated with auto-enable on
  • Uploading an update within a few seconds of the previous install/update reported success but left the whole instance answering 503 "upgrade needed" (stale app-config cache, and Nextcloud's info.xml cache keyed by a 1-second mtime); the installed version is now read straight from the database, the new info.xml always gets a newer mtime, and AppDrop reports an error instead of success if the recorded version still did not move
  • Two backups of the same app within one second collided, so the second update/restore failed or lost the previous copy
  • Removing an app that is not in the writable apps folder (e.g. a shipped app) failed with "not found" but disabled it anyway
  • Files with .. inside their name (e.g. app..min.js) aborted the extraction after the old version had already been moved away
  • The Install / Update button showed its icon twice after an upload
  • The Apps tab could disable or delete AppDrop itself, and disabling an app that core protects (e.g. files) returned an HTTP 500 page instead of an error message
  • Install message said "installed and enabled" even with auto-enable off
  • Enable/Disable/Remove/Install buttons never got their colours (core button styles won on specificity); badges, status buttons and dark-theme status text now meet WCAG AA contrast
  • Health check hint for a missing Nextcloud dependency suggested a hard-coded max-version="33"

Security

  • Zips in which two entries resolve to the same path (a duplicated appinfo/info.xml, aliases such as ./appinfo/info.xml and appinfo//info.xml, or a name used both as a file and as a folder) are rejected by the installer and flagged by the health check: validation and extraction could read different copies, bypassing the app-ID match and self-update guards

Changed

  • CI also runs on PHP 8.5 and against nextcloud/ocp ^35; the package test now verifies every hash in signature.json
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhNOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTQyNDQwWhcNMzYwOTAxMTQyNDQwWjASMRAwDgYD
VQQDDAdhcHBkcm9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5lIb
DdoElB3celqDlzY0ng/mf0deHK8hcxGsQD3O8iNeWEVCHqPvyzKEMujr3rBqbGzH
IizD6sMK7DSsbzROlty/WeUXvtqWAZ8s6EeX328l6Ny+ufekOig3+X1LN7NLqDha
ShqCkqsMYBuG++xIQRuIa5KJeygrC30++k7HKuAuRodaawc/njaRgs5e0slHeA/D
nyWPKpR5MMpDKJbVTCFrVLXbUxcQYnSho9Viz194pShaXdX6VkDSPzAL/PdVqW92
W7ERUexW+uVvfPn+K0LnqZYesKGR9SQNs5FTArFpGIUOktVGxT50KUkMpKpTnmiW
5JxunhQSciEsMXzDwmXd71NUS3T1y1M3gt3nG1OxsZacypW9FSFI0E/gTvFR7O4P
hJD4CSuFnw848CYN0427O7M3SBxJ7zdy0e6lpYUL5ad4Y2kqgu0hTqhskbJokyEN
eKTlfYRoGA5bMP1AMxMIBjuFc++z0VCmvUkaMnvQFcDEwQlEPLX1gvbGsh9QkmQy
mPvVinqXxFPoICdLPDvBn+VmrfO4DFqbA+d8O3e/JiNjq56USG1ZSTpbtiJtW3jm
Jg4wEjslXAf35U8U/xCDo4bUHXOrkqCVegzAqjmyAZiLBGnHYSbKGyDlCDJYpYD6
4HVthBSL6MbvPMSz65mkil8dGlyTp1rNk/gRMYkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAQc6IPHSKbCLRetEaqjR5GzDY7KuyLcnz0cY95TcxPLiQlke1PH+I7wgy
Hu2PXQ0reJwCrxKxRAcpRuCt6yjaO8kKmH4swhmo9YNye55p3WebkxvkmZG9qdm4
MLzMJNf4n0QH1ej6K64z4WnTStWGRsgc0UEIVY0jwrHIBgG69nEMI1nfUgB+bTUK
pDRe+F3Xf9j4ief5hF7NFyNOgGsqP4dbvvOHq0Vh9IBZrq0FlwoPsIaK87bo76zl
mbgdpkUPMrC8hY+BRaDnD2iw0kF7n++TQ9gKvyU/GEwPtGvpcMo7CTQH5wV9IzD/
om4FAETonjOAsVMn+fBrXooX76V7Dw==
-----END CERTIFICATE-----
SignatureybkZhYfkG1kT2ouMJ2pKOMoq66C5Iv5F2jD7DjS38woA2rKdn13ne1AAihJBPOvX6Gjo11nDLFgZHBGNC9idKzBogzvAp6vU+iDatUtHfxqNQVsXkwc+OLPqgRRJH0vv6/ZRApTJQAqeDSsvbR8qZUJ5swSvaKeUW1zleEKYz8OICe0aqQq2n1hSLvC9Osp14/T8rlQPc95izWRXyLXFRAs3NQ1PNQaeitIiovG07u0Ghor0eIFAL170G6MdTfMnQRXie/eEijlj8VUZbgXDC5TmzC6fqPuTc9j0IUG1VbMpyraAhlblwKZnbq46CDzPS3dzcRyhVAxxsEOtjYgzpCpmDeziHG46eusFvUjonqLlZjh84yihn78MOLvLntdoQFqm8EVi8SQr5Rn7eFbvfo/6K0l3WeEuCA5mkLBiWVOEC+OI3vAXI+mZ38VexLBV6OyhxqEuM5NUPf554iC4EBlxyh7iAQZwc7Fa/hemeH66ZqoKLjMBHN/nFAkF+rI6soU8t6qleYUR5OsXNjJiw1vy6IQW2Rk8keS6ueIaxs0WdtZu8KWvf4nT2DrbUGBgL7akx98NMH30ujOXW81J8dy3HfAsaN7WTt/3iB2vbfTyCsv6bHZuEbUA+KsBCFDdmNsLHzHoNQNNSMs+l1kDIx991mVhgypP4x6aNKCeINQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.1.0

Nextcloud 33

AppDrop 1.5.0
Release Details
UpdatedNov. 12, 2026, 4:14 p.m.
Changelog

Added

  • Nextcloud 34 and 35 support (max-version="35"); verified end-to-end on 35.0.2, 34.0.5, 33 and 30

Fixed

  • Nextcloud 34+: the "Settings" button in the sidebar did nothing and the sidebar could not be opened on screens narrower than 1024px (core removed OC.Apps and the global snapper); AppDrop now drives both itself
  • Nextcloud 33+: success/error/warning messages and buttons were nearly invisible because core turned --color-success/--color-error/--color-warning into pale background tints
  • Header links of other apps (Files, ...) could render with an empty URL for users who see the AppDrop entry: the navigation entry is now registered lazily
  • Zips without folder entries (zip -D, Python zipfile, and AppDrop's own template generator) were rejected with "does not contain 'appinfo/info.xml'" by both the installer and the health check
  • Zips with Windows backslash entry names and no folder entries are now accepted as well
  • Flat zips made with zip -r inside the app folder (first entry lib/, css/, ...) had that first folder mistaken for a wrapper and stripped, installing a broken app; flat zips starting with appinfo/ were rejected
  • A new app uploaded on Nextcloud 30/31 was only flagged as enabled: its migrations never ran and installed_version was never stored, so later updates skipped migrations too. New apps are now installed through occ app:enable (when PHP exec() is available), and apps left in that half-installed state by earlier AppDrop versions are repaired the next time they are enabled or updated with auto-enable on
  • Uploading an update within a few seconds of the previous install/update reported success but left the whole instance answering 503 "upgrade needed" (stale app-config cache, and Nextcloud's info.xml cache keyed by a 1-second mtime); the installed version is now read straight from the database, the new info.xml always gets a newer mtime, and AppDrop reports an error instead of success if the recorded version still did not move
  • Two backups of the same app within one second collided, so the second update/restore failed or lost the previous copy
  • Removing an app that is not in the writable apps folder (e.g. a shipped app) failed with "not found" but disabled it anyway
  • Files with .. inside their name (e.g. app..min.js) aborted the extraction after the old version had already been moved away
  • The Install / Update button showed its icon twice after an upload
  • The Apps tab could disable or delete AppDrop itself, and disabling an app that core protects (e.g. files) returned an HTTP 500 page instead of an error message
  • Install message said "installed and enabled" even with auto-enable off
  • Enable/Disable/Remove/Install buttons never got their colours (core button styles won on specificity); badges, status buttons and dark-theme status text now meet WCAG AA contrast
  • Health check hint for a missing Nextcloud dependency suggested a hard-coded max-version="33"

Security

  • Zips in which two entries resolve to the same path (a duplicated appinfo/info.xml, aliases such as ./appinfo/info.xml and appinfo//info.xml, or a name used both as a file and as a folder) are rejected by the installer and flagged by the health check: validation and extraction could read different copies, bypassing the app-ID match and self-update guards

Changed

  • CI also runs on PHP 8.5 and against nextcloud/ocp ^35; the package test now verifies every hash in signature.json
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhNOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTQyNDQwWhcNMzYwOTAxMTQyNDQwWjASMRAwDgYD
VQQDDAdhcHBkcm9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5lIb
DdoElB3celqDlzY0ng/mf0deHK8hcxGsQD3O8iNeWEVCHqPvyzKEMujr3rBqbGzH
IizD6sMK7DSsbzROlty/WeUXvtqWAZ8s6EeX328l6Ny+ufekOig3+X1LN7NLqDha
ShqCkqsMYBuG++xIQRuIa5KJeygrC30++k7HKuAuRodaawc/njaRgs5e0slHeA/D
nyWPKpR5MMpDKJbVTCFrVLXbUxcQYnSho9Viz194pShaXdX6VkDSPzAL/PdVqW92
W7ERUexW+uVvfPn+K0LnqZYesKGR9SQNs5FTArFpGIUOktVGxT50KUkMpKpTnmiW
5JxunhQSciEsMXzDwmXd71NUS3T1y1M3gt3nG1OxsZacypW9FSFI0E/gTvFR7O4P
hJD4CSuFnw848CYN0427O7M3SBxJ7zdy0e6lpYUL5ad4Y2kqgu0hTqhskbJokyEN
eKTlfYRoGA5bMP1AMxMIBjuFc++z0VCmvUkaMnvQFcDEwQlEPLX1gvbGsh9QkmQy
mPvVinqXxFPoICdLPDvBn+VmrfO4DFqbA+d8O3e/JiNjq56USG1ZSTpbtiJtW3jm
Jg4wEjslXAf35U8U/xCDo4bUHXOrkqCVegzAqjmyAZiLBGnHYSbKGyDlCDJYpYD6
4HVthBSL6MbvPMSz65mkil8dGlyTp1rNk/gRMYkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAQc6IPHSKbCLRetEaqjR5GzDY7KuyLcnz0cY95TcxPLiQlke1PH+I7wgy
Hu2PXQ0reJwCrxKxRAcpRuCt6yjaO8kKmH4swhmo9YNye55p3WebkxvkmZG9qdm4
MLzMJNf4n0QH1ej6K64z4WnTStWGRsgc0UEIVY0jwrHIBgG69nEMI1nfUgB+bTUK
pDRe+F3Xf9j4ief5hF7NFyNOgGsqP4dbvvOHq0Vh9IBZrq0FlwoPsIaK87bo76zl
mbgdpkUPMrC8hY+BRaDnD2iw0kF7n++TQ9gKvyU/GEwPtGvpcMo7CTQH5wV9IzD/
om4FAETonjOAsVMn+fBrXooX76V7Dw==
-----END CERTIFICATE-----
SignatureybkZhYfkG1kT2ouMJ2pKOMoq66C5Iv5F2jD7DjS38woA2rKdn13ne1AAihJBPOvX6Gjo11nDLFgZHBGNC9idKzBogzvAp6vU+iDatUtHfxqNQVsXkwc+OLPqgRRJH0vv6/ZRApTJQAqeDSsvbR8qZUJ5swSvaKeUW1zleEKYz8OICe0aqQq2n1hSLvC9Osp14/T8rlQPc95izWRXyLXFRAs3NQ1PNQaeitIiovG07u0Ghor0eIFAL170G6MdTfMnQRXie/eEijlj8VUZbgXDC5TmzC6fqPuTc9j0IUG1VbMpyraAhlblwKZnbq46CDzPS3dzcRyhVAxxsEOtjYgzpCpmDeziHG46eusFvUjonqLlZjh84yihn78MOLvLntdoQFqm8EVi8SQr5Rn7eFbvfo/6K0l3WeEuCA5mkLBiWVOEC+OI3vAXI+mZ38VexLBV6OyhxqEuM5NUPf554iC4EBlxyh7iAQZwc7Fa/hemeH66ZqoKLjMBHN/nFAkF+rI6soU8t6qleYUR5OsXNjJiw1vy6IQW2Rk8keS6ueIaxs0WdtZu8KWvf4nT2DrbUGBgL7akx98NMH30ujOXW81J8dy3HfAsaN7WTt/3iB2vbfTyCsv6bHZuEbUA+KsBCFDdmNsLHzHoNQNNSMs+l1kDIx991mVhgypP4x6aNKCeINQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.1.0
AppDrop 1.4.0
Release Details
UpdatedSept. 9, 2026, 6:29 p.m.
Changelog

Added

  • Nextcloud 33 support (max-version="33"); verified end-to-end on 33.0.8 and 30.0.17

Fixed

  • Updating an app (or restoring a backup / re-installing after a remove) left installed_version behind, so Nextcloud answered 503 "upgrade needed" to every request until occ upgrade was run manually. AppDrop now runs the app's upgrade routine itself (IAppManager::upgradeApp() on NC 32+, OC_App::updateApp() on NC 30/31)
  • AppInstallException moved to its own file: it was only autoloadable after AppInstallService had been loaded, which turned errors in the Backups/Apps tabs into a fatal "Class not found"
  • Generated app skeletons hard-coded max-version="32" and could not be enabled on NC 33; the value now follows the running server
  • Settings tab showed a stale hard-coded version label

Changed

  • Controllers use #[NoAdminRequired] / #[NoCSRFRequired] attributes instead of docblock annotations (deprecated, logged on every request by NC 33); the generated skeleton controller does the same
  • Upload form uses the template requesttoken instead of the deprecated Util::callRegister()
  • Dev dependency nextcloud/ocp pinned to ^33.0 (dev-master now requires PHP 8.3); CI matrix is PHP 8.2–8.4. Runtime requirement stays PHP 8.1+ for NC 30
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhNOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTQyNDQwWhcNMzYwOTAxMTQyNDQwWjASMRAwDgYD
VQQDDAdhcHBkcm9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5lIb
DdoElB3celqDlzY0ng/mf0deHK8hcxGsQD3O8iNeWEVCHqPvyzKEMujr3rBqbGzH
IizD6sMK7DSsbzROlty/WeUXvtqWAZ8s6EeX328l6Ny+ufekOig3+X1LN7NLqDha
ShqCkqsMYBuG++xIQRuIa5KJeygrC30++k7HKuAuRodaawc/njaRgs5e0slHeA/D
nyWPKpR5MMpDKJbVTCFrVLXbUxcQYnSho9Viz194pShaXdX6VkDSPzAL/PdVqW92
W7ERUexW+uVvfPn+K0LnqZYesKGR9SQNs5FTArFpGIUOktVGxT50KUkMpKpTnmiW
5JxunhQSciEsMXzDwmXd71NUS3T1y1M3gt3nG1OxsZacypW9FSFI0E/gTvFR7O4P
hJD4CSuFnw848CYN0427O7M3SBxJ7zdy0e6lpYUL5ad4Y2kqgu0hTqhskbJokyEN
eKTlfYRoGA5bMP1AMxMIBjuFc++z0VCmvUkaMnvQFcDEwQlEPLX1gvbGsh9QkmQy
mPvVinqXxFPoICdLPDvBn+VmrfO4DFqbA+d8O3e/JiNjq56USG1ZSTpbtiJtW3jm
Jg4wEjslXAf35U8U/xCDo4bUHXOrkqCVegzAqjmyAZiLBGnHYSbKGyDlCDJYpYD6
4HVthBSL6MbvPMSz65mkil8dGlyTp1rNk/gRMYkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAQc6IPHSKbCLRetEaqjR5GzDY7KuyLcnz0cY95TcxPLiQlke1PH+I7wgy
Hu2PXQ0reJwCrxKxRAcpRuCt6yjaO8kKmH4swhmo9YNye55p3WebkxvkmZG9qdm4
MLzMJNf4n0QH1ej6K64z4WnTStWGRsgc0UEIVY0jwrHIBgG69nEMI1nfUgB+bTUK
pDRe+F3Xf9j4ief5hF7NFyNOgGsqP4dbvvOHq0Vh9IBZrq0FlwoPsIaK87bo76zl
mbgdpkUPMrC8hY+BRaDnD2iw0kF7n++TQ9gKvyU/GEwPtGvpcMo7CTQH5wV9IzD/
om4FAETonjOAsVMn+fBrXooX76V7Dw==
-----END CERTIFICATE-----
Signaturel6mutbt/+48zurhfoAchQ9UD9wwvRw24qBhcP1Bs2+ityBDDoVCPv7d0cViJlQQpu7NztuP37Cc/CoG+VGSdaFqFPScdj870Dhs3UWTCAXqkgdx6dvtHjykP215W8qmBoJI6kjyNf3vz31rVMKwI3XaoTZHha8NfWXCMQDRnhMY1W26YxfH06QAgnCkpaCbCtawNY4uTJiT44jbjFPOa1pVB9MEPRoBT1IsKhxsBXOkaa1EzXHaLTz4pFhupKakY181pOEOo3gL95LUmTOXlcT5qvHzH13Ry3P4ipxtWeWsA7yW7SuIqXVwMlg8mF24RxPuq6imRu0vWw3E31OpUF6cGTvnyKAJTxQleprl9MMe4LfRUAgMBAl+rZT/5Er32jMxg8/uiLZ5LE41eCZA8nTpSpqMvSJE1auVDu6uRdVr2FPVQvHbPIH+6YZtMsjgyfPo1zfCp42oVDCkE0HErUlNtJI0NeF68PYpHcPAddi+ZQcNwTVZVNtPaKK8RKkVa4+4jorypQMy3ToFncU7vI26UiSICP6ckKRHN+RkqNpDSIFsw/80/z1hIRVdr791Id5pJF4EW6qVW1VtFo7S8v5P8avp/48mRnBE3GPnTmEQuHYx3Dmbx6HuQZFLfrqs5Cv9DKK5WdXWv7oxRmi1gmJQZK4HUNh5MwULscveNpX4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0

Nextcloud 32

AppDrop 1.5.0
Release Details
UpdatedNov. 12, 2026, 4:14 p.m.
Changelog

Added

  • Nextcloud 34 and 35 support (max-version="35"); verified end-to-end on 35.0.2, 34.0.5, 33 and 30

Fixed

  • Nextcloud 34+: the "Settings" button in the sidebar did nothing and the sidebar could not be opened on screens narrower than 1024px (core removed OC.Apps and the global snapper); AppDrop now drives both itself
  • Nextcloud 33+: success/error/warning messages and buttons were nearly invisible because core turned --color-success/--color-error/--color-warning into pale background tints
  • Header links of other apps (Files, ...) could render with an empty URL for users who see the AppDrop entry: the navigation entry is now registered lazily
  • Zips without folder entries (zip -D, Python zipfile, and AppDrop's own template generator) were rejected with "does not contain 'appinfo/info.xml'" by both the installer and the health check
  • Zips with Windows backslash entry names and no folder entries are now accepted as well
  • Flat zips made with zip -r inside the app folder (first entry lib/, css/, ...) had that first folder mistaken for a wrapper and stripped, installing a broken app; flat zips starting with appinfo/ were rejected
  • A new app uploaded on Nextcloud 30/31 was only flagged as enabled: its migrations never ran and installed_version was never stored, so later updates skipped migrations too. New apps are now installed through occ app:enable (when PHP exec() is available), and apps left in that half-installed state by earlier AppDrop versions are repaired the next time they are enabled or updated with auto-enable on
  • Uploading an update within a few seconds of the previous install/update reported success but left the whole instance answering 503 "upgrade needed" (stale app-config cache, and Nextcloud's info.xml cache keyed by a 1-second mtime); the installed version is now read straight from the database, the new info.xml always gets a newer mtime, and AppDrop reports an error instead of success if the recorded version still did not move
  • Two backups of the same app within one second collided, so the second update/restore failed or lost the previous copy
  • Removing an app that is not in the writable apps folder (e.g. a shipped app) failed with "not found" but disabled it anyway
  • Files with .. inside their name (e.g. app..min.js) aborted the extraction after the old version had already been moved away
  • The Install / Update button showed its icon twice after an upload
  • The Apps tab could disable or delete AppDrop itself, and disabling an app that core protects (e.g. files) returned an HTTP 500 page instead of an error message
  • Install message said "installed and enabled" even with auto-enable off
  • Enable/Disable/Remove/Install buttons never got their colours (core button styles won on specificity); badges, status buttons and dark-theme status text now meet WCAG AA contrast
  • Health check hint for a missing Nextcloud dependency suggested a hard-coded max-version="33"

Security

  • Zips in which two entries resolve to the same path (a duplicated appinfo/info.xml, aliases such as ./appinfo/info.xml and appinfo//info.xml, or a name used both as a file and as a folder) are rejected by the installer and flagged by the health check: validation and extraction could read different copies, bypassing the app-ID match and self-update guards

Changed

  • CI also runs on PHP 8.5 and against nextcloud/ocp ^35; the package test now verifies every hash in signature.json
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhNOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTQyNDQwWhcNMzYwOTAxMTQyNDQwWjASMRAwDgYD
VQQDDAdhcHBkcm9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5lIb
DdoElB3celqDlzY0ng/mf0deHK8hcxGsQD3O8iNeWEVCHqPvyzKEMujr3rBqbGzH
IizD6sMK7DSsbzROlty/WeUXvtqWAZ8s6EeX328l6Ny+ufekOig3+X1LN7NLqDha
ShqCkqsMYBuG++xIQRuIa5KJeygrC30++k7HKuAuRodaawc/njaRgs5e0slHeA/D
nyWPKpR5MMpDKJbVTCFrVLXbUxcQYnSho9Viz194pShaXdX6VkDSPzAL/PdVqW92
W7ERUexW+uVvfPn+K0LnqZYesKGR9SQNs5FTArFpGIUOktVGxT50KUkMpKpTnmiW
5JxunhQSciEsMXzDwmXd71NUS3T1y1M3gt3nG1OxsZacypW9FSFI0E/gTvFR7O4P
hJD4CSuFnw848CYN0427O7M3SBxJ7zdy0e6lpYUL5ad4Y2kqgu0hTqhskbJokyEN
eKTlfYRoGA5bMP1AMxMIBjuFc++z0VCmvUkaMnvQFcDEwQlEPLX1gvbGsh9QkmQy
mPvVinqXxFPoICdLPDvBn+VmrfO4DFqbA+d8O3e/JiNjq56USG1ZSTpbtiJtW3jm
Jg4wEjslXAf35U8U/xCDo4bUHXOrkqCVegzAqjmyAZiLBGnHYSbKGyDlCDJYpYD6
4HVthBSL6MbvPMSz65mkil8dGlyTp1rNk/gRMYkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAQc6IPHSKbCLRetEaqjR5GzDY7KuyLcnz0cY95TcxPLiQlke1PH+I7wgy
Hu2PXQ0reJwCrxKxRAcpRuCt6yjaO8kKmH4swhmo9YNye55p3WebkxvkmZG9qdm4
MLzMJNf4n0QH1ej6K64z4WnTStWGRsgc0UEIVY0jwrHIBgG69nEMI1nfUgB+bTUK
pDRe+F3Xf9j4ief5hF7NFyNOgGsqP4dbvvOHq0Vh9IBZrq0FlwoPsIaK87bo76zl
mbgdpkUPMrC8hY+BRaDnD2iw0kF7n++TQ9gKvyU/GEwPtGvpcMo7CTQH5wV9IzD/
om4FAETonjOAsVMn+fBrXooX76V7Dw==
-----END CERTIFICATE-----
SignatureybkZhYfkG1kT2ouMJ2pKOMoq66C5Iv5F2jD7DjS38woA2rKdn13ne1AAihJBPOvX6Gjo11nDLFgZHBGNC9idKzBogzvAp6vU+iDatUtHfxqNQVsXkwc+OLPqgRRJH0vv6/ZRApTJQAqeDSsvbR8qZUJ5swSvaKeUW1zleEKYz8OICe0aqQq2n1hSLvC9Osp14/T8rlQPc95izWRXyLXFRAs3NQ1PNQaeitIiovG07u0Ghor0eIFAL170G6MdTfMnQRXie/eEijlj8VUZbgXDC5TmzC6fqPuTc9j0IUG1VbMpyraAhlblwKZnbq46CDzPS3dzcRyhVAxxsEOtjYgzpCpmDeziHG46eusFvUjonqLlZjh84yihn78MOLvLntdoQFqm8EVi8SQr5Rn7eFbvfo/6K0l3WeEuCA5mkLBiWVOEC+OI3vAXI+mZ38VexLBV6OyhxqEuM5NUPf554iC4EBlxyh7iAQZwc7Fa/hemeH66ZqoKLjMBHN/nFAkF+rI6soU8t6qleYUR5OsXNjJiw1vy6IQW2Rk8keS6ueIaxs0WdtZu8KWvf4nT2DrbUGBgL7akx98NMH30ujOXW81J8dy3HfAsaN7WTt/3iB2vbfTyCsv6bHZuEbUA+KsBCFDdmNsLHzHoNQNNSMs+l1kDIx991mVhgypP4x6aNKCeINQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.1.0
AppDrop 1.4.0
Release Details
UpdatedSept. 9, 2026, 6:29 p.m.
Changelog

Added

  • Nextcloud 33 support (max-version="33"); verified end-to-end on 33.0.8 and 30.0.17

Fixed

  • Updating an app (or restoring a backup / re-installing after a remove) left installed_version behind, so Nextcloud answered 503 "upgrade needed" to every request until occ upgrade was run manually. AppDrop now runs the app's upgrade routine itself (IAppManager::upgradeApp() on NC 32+, OC_App::updateApp() on NC 30/31)
  • AppInstallException moved to its own file: it was only autoloadable after AppInstallService had been loaded, which turned errors in the Backups/Apps tabs into a fatal "Class not found"
  • Generated app skeletons hard-coded max-version="32" and could not be enabled on NC 33; the value now follows the running server
  • Settings tab showed a stale hard-coded version label

Changed

  • Controllers use #[NoAdminRequired] / #[NoCSRFRequired] attributes instead of docblock annotations (deprecated, logged on every request by NC 33); the generated skeleton controller does the same
  • Upload form uses the template requesttoken instead of the deprecated Util::callRegister()
  • Dev dependency nextcloud/ocp pinned to ^33.0 (dev-master now requires PHP 8.3); CI matrix is PHP 8.2–8.4. Runtime requirement stays PHP 8.1+ for NC 30
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhNOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTQyNDQwWhcNMzYwOTAxMTQyNDQwWjASMRAwDgYD
VQQDDAdhcHBkcm9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5lIb
DdoElB3celqDlzY0ng/mf0deHK8hcxGsQD3O8iNeWEVCHqPvyzKEMujr3rBqbGzH
IizD6sMK7DSsbzROlty/WeUXvtqWAZ8s6EeX328l6Ny+ufekOig3+X1LN7NLqDha
ShqCkqsMYBuG++xIQRuIa5KJeygrC30++k7HKuAuRodaawc/njaRgs5e0slHeA/D
nyWPKpR5MMpDKJbVTCFrVLXbUxcQYnSho9Viz194pShaXdX6VkDSPzAL/PdVqW92
W7ERUexW+uVvfPn+K0LnqZYesKGR9SQNs5FTArFpGIUOktVGxT50KUkMpKpTnmiW
5JxunhQSciEsMXzDwmXd71NUS3T1y1M3gt3nG1OxsZacypW9FSFI0E/gTvFR7O4P
hJD4CSuFnw848CYN0427O7M3SBxJ7zdy0e6lpYUL5ad4Y2kqgu0hTqhskbJokyEN
eKTlfYRoGA5bMP1AMxMIBjuFc++z0VCmvUkaMnvQFcDEwQlEPLX1gvbGsh9QkmQy
mPvVinqXxFPoICdLPDvBn+VmrfO4DFqbA+d8O3e/JiNjq56USG1ZSTpbtiJtW3jm
Jg4wEjslXAf35U8U/xCDo4bUHXOrkqCVegzAqjmyAZiLBGnHYSbKGyDlCDJYpYD6
4HVthBSL6MbvPMSz65mkil8dGlyTp1rNk/gRMYkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAQc6IPHSKbCLRetEaqjR5GzDY7KuyLcnz0cY95TcxPLiQlke1PH+I7wgy
Hu2PXQ0reJwCrxKxRAcpRuCt6yjaO8kKmH4swhmo9YNye55p3WebkxvkmZG9qdm4
MLzMJNf4n0QH1ej6K64z4WnTStWGRsgc0UEIVY0jwrHIBgG69nEMI1nfUgB+bTUK
pDRe+F3Xf9j4ief5hF7NFyNOgGsqP4dbvvOHq0Vh9IBZrq0FlwoPsIaK87bo76zl
mbgdpkUPMrC8hY+BRaDnD2iw0kF7n++TQ9gKvyU/GEwPtGvpcMo7CTQH5wV9IzD/
om4FAETonjOAsVMn+fBrXooX76V7Dw==
-----END CERTIFICATE-----
Signaturel6mutbt/+48zurhfoAchQ9UD9wwvRw24qBhcP1Bs2+ityBDDoVCPv7d0cViJlQQpu7NztuP37Cc/CoG+VGSdaFqFPScdj870Dhs3UWTCAXqkgdx6dvtHjykP215W8qmBoJI6kjyNf3vz31rVMKwI3XaoTZHha8NfWXCMQDRnhMY1W26YxfH06QAgnCkpaCbCtawNY4uTJiT44jbjFPOa1pVB9MEPRoBT1IsKhxsBXOkaa1EzXHaLTz4pFhupKakY181pOEOo3gL95LUmTOXlcT5qvHzH13Ry3P4ipxtWeWsA7yW7SuIqXVwMlg8mF24RxPuq6imRu0vWw3E31OpUF6cGTvnyKAJTxQleprl9MMe4LfRUAgMBAl+rZT/5Er32jMxg8/uiLZ5LE41eCZA8nTpSpqMvSJE1auVDu6uRdVr2FPVQvHbPIH+6YZtMsjgyfPo1zfCp42oVDCkE0HErUlNtJI0NeF68PYpHcPAddi+ZQcNwTVZVNtPaKK8RKkVa4+4jorypQMy3ToFncU7vI26UiSICP6ckKRHN+RkqNpDSIFsw/80/z1hIRVdr791Id5pJF4EW6qVW1VtFo7S8v5P8avp/48mRnBE3GPnTmEQuHYx3Dmbx6HuQZFLfrqs5Cv9DKK5WdXWv7oxRmi1gmJQZK4HUNh5MwULscveNpX4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0
AppDrop 1.3.4
Release Details
UpdatedMay 28, 2026, 2:20 p.m.
Changelog

Fixed

  • Use the App Store schema's enumerated SPDX casing (AGPL-3.0-or-later) in info.xml — the lowercase form was rejected by the store's info.xsd validation
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhNOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTQyNDQwWhcNMzYwOTAxMTQyNDQwWjASMRAwDgYD
VQQDDAdhcHBkcm9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5lIb
DdoElB3celqDlzY0ng/mf0deHK8hcxGsQD3O8iNeWEVCHqPvyzKEMujr3rBqbGzH
IizD6sMK7DSsbzROlty/WeUXvtqWAZ8s6EeX328l6Ny+ufekOig3+X1LN7NLqDha
ShqCkqsMYBuG++xIQRuIa5KJeygrC30++k7HKuAuRodaawc/njaRgs5e0slHeA/D
nyWPKpR5MMpDKJbVTCFrVLXbUxcQYnSho9Viz194pShaXdX6VkDSPzAL/PdVqW92
W7ERUexW+uVvfPn+K0LnqZYesKGR9SQNs5FTArFpGIUOktVGxT50KUkMpKpTnmiW
5JxunhQSciEsMXzDwmXd71NUS3T1y1M3gt3nG1OxsZacypW9FSFI0E/gTvFR7O4P
hJD4CSuFnw848CYN0427O7M3SBxJ7zdy0e6lpYUL5ad4Y2kqgu0hTqhskbJokyEN
eKTlfYRoGA5bMP1AMxMIBjuFc++z0VCmvUkaMnvQFcDEwQlEPLX1gvbGsh9QkmQy
mPvVinqXxFPoICdLPDvBn+VmrfO4DFqbA+d8O3e/JiNjq56USG1ZSTpbtiJtW3jm
Jg4wEjslXAf35U8U/xCDo4bUHXOrkqCVegzAqjmyAZiLBGnHYSbKGyDlCDJYpYD6
4HVthBSL6MbvPMSz65mkil8dGlyTp1rNk/gRMYkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAQc6IPHSKbCLRetEaqjR5GzDY7KuyLcnz0cY95TcxPLiQlke1PH+I7wgy
Hu2PXQ0reJwCrxKxRAcpRuCt6yjaO8kKmH4swhmo9YNye55p3WebkxvkmZG9qdm4
MLzMJNf4n0QH1ej6K64z4WnTStWGRsgc0UEIVY0jwrHIBgG69nEMI1nfUgB+bTUK
pDRe+F3Xf9j4ief5hF7NFyNOgGsqP4dbvvOHq0Vh9IBZrq0FlwoPsIaK87bo76zl
mbgdpkUPMrC8hY+BRaDnD2iw0kF7n++TQ9gKvyU/GEwPtGvpcMo7CTQH5wV9IzD/
om4FAETonjOAsVMn+fBrXooX76V7Dw==
-----END CERTIFICATE-----
SignatureG1BlmIBS2zIKviq9I36GsDhvzWpYDspI+8FQc2wORX4nSPosWxVulL3GFMPEnZkCoTRWahiNCKexleuoBw5nnVosb9En9c/NzETGc8tCMGefwJ5GbFM9eeN8B8lg2/yvByxiqiVTrpgJRUJ6gr/9YokHTZPvsEf4o0QWchY5yxK+o6RA6p7BbmR0UHxgUAPE1O1fajkH0tjLNXiuFNX8ShjH1yo3qmopx4l7e3VlCfL+gfs8vIs/2zCfgeOvOTpHBqFlPlPvl9HXLXQeGP9XIg1KR2bcWUO+8sfPINyL7Iq2FvoCPc+3vub9ezWrqcQElRc5r+I9hwoSN8noa1LowiOslSZjAwqJWwoiRJjS0+5bi2lK8Knp6IgslpXAaNyVwxJDfYxu+srvEjcBEfjcD0nJEYX2djWvwKdBvWzswqDq4p8hnx5VQ0N9uxgsCCM2GH36ljuDiVygtJgPc+8EmN+vPjVWUQT3r7OwnGsr3ATjw4nMpaUbS1jKrA+6EEsyTmf9ieuayy/c6YmYTavisy0bx/6mHeZDQrbjEcmkc7ZNCNJu/dydgIDE39kximsvbLJUtzh1pAysomBsFD+NhS8XShv6ky24wDGGntINI0yUeULpSAxXx2fEUjZQEe86dyuSt3iwv8Bm/3DfS9dysfAWc3q5mqgNiJxGGYA8qqg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0

Nextcloud 31

AppDrop 1.5.0
Release Details
UpdatedNov. 12, 2026, 4:14 p.m.
Changelog

Added

  • Nextcloud 34 and 35 support (max-version="35"); verified end-to-end on 35.0.2, 34.0.5, 33 and 30

Fixed

  • Nextcloud 34+: the "Settings" button in the sidebar did nothing and the sidebar could not be opened on screens narrower than 1024px (core removed OC.Apps and the global snapper); AppDrop now drives both itself
  • Nextcloud 33+: success/error/warning messages and buttons were nearly invisible because core turned --color-success/--color-error/--color-warning into pale background tints
  • Header links of other apps (Files, ...) could render with an empty URL for users who see the AppDrop entry: the navigation entry is now registered lazily
  • Zips without folder entries (zip -D, Python zipfile, and AppDrop's own template generator) were rejected with "does not contain 'appinfo/info.xml'" by both the installer and the health check
  • Zips with Windows backslash entry names and no folder entries are now accepted as well
  • Flat zips made with zip -r inside the app folder (first entry lib/, css/, ...) had that first folder mistaken for a wrapper and stripped, installing a broken app; flat zips starting with appinfo/ were rejected
  • A new app uploaded on Nextcloud 30/31 was only flagged as enabled: its migrations never ran and installed_version was never stored, so later updates skipped migrations too. New apps are now installed through occ app:enable (when PHP exec() is available), and apps left in that half-installed state by earlier AppDrop versions are repaired the next time they are enabled or updated with auto-enable on
  • Uploading an update within a few seconds of the previous install/update reported success but left the whole instance answering 503 "upgrade needed" (stale app-config cache, and Nextcloud's info.xml cache keyed by a 1-second mtime); the installed version is now read straight from the database, the new info.xml always gets a newer mtime, and AppDrop reports an error instead of success if the recorded version still did not move
  • Two backups of the same app within one second collided, so the second update/restore failed or lost the previous copy
  • Removing an app that is not in the writable apps folder (e.g. a shipped app) failed with "not found" but disabled it anyway
  • Files with .. inside their name (e.g. app..min.js) aborted the extraction after the old version had already been moved away
  • The Install / Update button showed its icon twice after an upload
  • The Apps tab could disable or delete AppDrop itself, and disabling an app that core protects (e.g. files) returned an HTTP 500 page instead of an error message
  • Install message said "installed and enabled" even with auto-enable off
  • Enable/Disable/Remove/Install buttons never got their colours (core button styles won on specificity); badges, status buttons and dark-theme status text now meet WCAG AA contrast
  • Health check hint for a missing Nextcloud dependency suggested a hard-coded max-version="33"

Security

  • Zips in which two entries resolve to the same path (a duplicated appinfo/info.xml, aliases such as ./appinfo/info.xml and appinfo//info.xml, or a name used both as a file and as a folder) are rejected by the installer and flagged by the health check: validation and extraction could read different copies, bypassing the app-ID match and self-update guards

Changed

  • CI also runs on PHP 8.5 and against nextcloud/ocp ^35; the package test now verifies every hash in signature.json
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhNOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTQyNDQwWhcNMzYwOTAxMTQyNDQwWjASMRAwDgYD
VQQDDAdhcHBkcm9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5lIb
DdoElB3celqDlzY0ng/mf0deHK8hcxGsQD3O8iNeWEVCHqPvyzKEMujr3rBqbGzH
IizD6sMK7DSsbzROlty/WeUXvtqWAZ8s6EeX328l6Ny+ufekOig3+X1LN7NLqDha
ShqCkqsMYBuG++xIQRuIa5KJeygrC30++k7HKuAuRodaawc/njaRgs5e0slHeA/D
nyWPKpR5MMpDKJbVTCFrVLXbUxcQYnSho9Viz194pShaXdX6VkDSPzAL/PdVqW92
W7ERUexW+uVvfPn+K0LnqZYesKGR9SQNs5FTArFpGIUOktVGxT50KUkMpKpTnmiW
5JxunhQSciEsMXzDwmXd71NUS3T1y1M3gt3nG1OxsZacypW9FSFI0E/gTvFR7O4P
hJD4CSuFnw848CYN0427O7M3SBxJ7zdy0e6lpYUL5ad4Y2kqgu0hTqhskbJokyEN
eKTlfYRoGA5bMP1AMxMIBjuFc++z0VCmvUkaMnvQFcDEwQlEPLX1gvbGsh9QkmQy
mPvVinqXxFPoICdLPDvBn+VmrfO4DFqbA+d8O3e/JiNjq56USG1ZSTpbtiJtW3jm
Jg4wEjslXAf35U8U/xCDo4bUHXOrkqCVegzAqjmyAZiLBGnHYSbKGyDlCDJYpYD6
4HVthBSL6MbvPMSz65mkil8dGlyTp1rNk/gRMYkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAQc6IPHSKbCLRetEaqjR5GzDY7KuyLcnz0cY95TcxPLiQlke1PH+I7wgy
Hu2PXQ0reJwCrxKxRAcpRuCt6yjaO8kKmH4swhmo9YNye55p3WebkxvkmZG9qdm4
MLzMJNf4n0QH1ej6K64z4WnTStWGRsgc0UEIVY0jwrHIBgG69nEMI1nfUgB+bTUK
pDRe+F3Xf9j4ief5hF7NFyNOgGsqP4dbvvOHq0Vh9IBZrq0FlwoPsIaK87bo76zl
mbgdpkUPMrC8hY+BRaDnD2iw0kF7n++TQ9gKvyU/GEwPtGvpcMo7CTQH5wV9IzD/
om4FAETonjOAsVMn+fBrXooX76V7Dw==
-----END CERTIFICATE-----
SignatureybkZhYfkG1kT2ouMJ2pKOMoq66C5Iv5F2jD7DjS38woA2rKdn13ne1AAihJBPOvX6Gjo11nDLFgZHBGNC9idKzBogzvAp6vU+iDatUtHfxqNQVsXkwc+OLPqgRRJH0vv6/ZRApTJQAqeDSsvbR8qZUJ5swSvaKeUW1zleEKYz8OICe0aqQq2n1hSLvC9Osp14/T8rlQPc95izWRXyLXFRAs3NQ1PNQaeitIiovG07u0Ghor0eIFAL170G6MdTfMnQRXie/eEijlj8VUZbgXDC5TmzC6fqPuTc9j0IUG1VbMpyraAhlblwKZnbq46CDzPS3dzcRyhVAxxsEOtjYgzpCpmDeziHG46eusFvUjonqLlZjh84yihn78MOLvLntdoQFqm8EVi8SQr5Rn7eFbvfo/6K0l3WeEuCA5mkLBiWVOEC+OI3vAXI+mZ38VexLBV6OyhxqEuM5NUPf554iC4EBlxyh7iAQZwc7Fa/hemeH66ZqoKLjMBHN/nFAkF+rI6soU8t6qleYUR5OsXNjJiw1vy6IQW2Rk8keS6ueIaxs0WdtZu8KWvf4nT2DrbUGBgL7akx98NMH30ujOXW81J8dy3HfAsaN7WTt/3iB2vbfTyCsv6bHZuEbUA+KsBCFDdmNsLHzHoNQNNSMs+l1kDIx991mVhgypP4x6aNKCeINQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.1.0
AppDrop 1.4.0
Release Details
UpdatedSept. 9, 2026, 6:29 p.m.
Changelog

Added

  • Nextcloud 33 support (max-version="33"); verified end-to-end on 33.0.8 and 30.0.17

Fixed

  • Updating an app (or restoring a backup / re-installing after a remove) left installed_version behind, so Nextcloud answered 503 "upgrade needed" to every request until occ upgrade was run manually. AppDrop now runs the app's upgrade routine itself (IAppManager::upgradeApp() on NC 32+, OC_App::updateApp() on NC 30/31)
  • AppInstallException moved to its own file: it was only autoloadable after AppInstallService had been loaded, which turned errors in the Backups/Apps tabs into a fatal "Class not found"
  • Generated app skeletons hard-coded max-version="32" and could not be enabled on NC 33; the value now follows the running server
  • Settings tab showed a stale hard-coded version label

Changed

  • Controllers use #[NoAdminRequired] / #[NoCSRFRequired] attributes instead of docblock annotations (deprecated, logged on every request by NC 33); the generated skeleton controller does the same
  • Upload form uses the template requesttoken instead of the deprecated Util::callRegister()
  • Dev dependency nextcloud/ocp pinned to ^33.0 (dev-master now requires PHP 8.3); CI matrix is PHP 8.2–8.4. Runtime requirement stays PHP 8.1+ for NC 30
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhNOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTQyNDQwWhcNMzYwOTAxMTQyNDQwWjASMRAwDgYD
VQQDDAdhcHBkcm9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5lIb
DdoElB3celqDlzY0ng/mf0deHK8hcxGsQD3O8iNeWEVCHqPvyzKEMujr3rBqbGzH
IizD6sMK7DSsbzROlty/WeUXvtqWAZ8s6EeX328l6Ny+ufekOig3+X1LN7NLqDha
ShqCkqsMYBuG++xIQRuIa5KJeygrC30++k7HKuAuRodaawc/njaRgs5e0slHeA/D
nyWPKpR5MMpDKJbVTCFrVLXbUxcQYnSho9Viz194pShaXdX6VkDSPzAL/PdVqW92
W7ERUexW+uVvfPn+K0LnqZYesKGR9SQNs5FTArFpGIUOktVGxT50KUkMpKpTnmiW
5JxunhQSciEsMXzDwmXd71NUS3T1y1M3gt3nG1OxsZacypW9FSFI0E/gTvFR7O4P
hJD4CSuFnw848CYN0427O7M3SBxJ7zdy0e6lpYUL5ad4Y2kqgu0hTqhskbJokyEN
eKTlfYRoGA5bMP1AMxMIBjuFc++z0VCmvUkaMnvQFcDEwQlEPLX1gvbGsh9QkmQy
mPvVinqXxFPoICdLPDvBn+VmrfO4DFqbA+d8O3e/JiNjq56USG1ZSTpbtiJtW3jm
Jg4wEjslXAf35U8U/xCDo4bUHXOrkqCVegzAqjmyAZiLBGnHYSbKGyDlCDJYpYD6
4HVthBSL6MbvPMSz65mkil8dGlyTp1rNk/gRMYkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAQc6IPHSKbCLRetEaqjR5GzDY7KuyLcnz0cY95TcxPLiQlke1PH+I7wgy
Hu2PXQ0reJwCrxKxRAcpRuCt6yjaO8kKmH4swhmo9YNye55p3WebkxvkmZG9qdm4
MLzMJNf4n0QH1ej6K64z4WnTStWGRsgc0UEIVY0jwrHIBgG69nEMI1nfUgB+bTUK
pDRe+F3Xf9j4ief5hF7NFyNOgGsqP4dbvvOHq0Vh9IBZrq0FlwoPsIaK87bo76zl
mbgdpkUPMrC8hY+BRaDnD2iw0kF7n++TQ9gKvyU/GEwPtGvpcMo7CTQH5wV9IzD/
om4FAETonjOAsVMn+fBrXooX76V7Dw==
-----END CERTIFICATE-----
Signaturel6mutbt/+48zurhfoAchQ9UD9wwvRw24qBhcP1Bs2+ityBDDoVCPv7d0cViJlQQpu7NztuP37Cc/CoG+VGSdaFqFPScdj870Dhs3UWTCAXqkgdx6dvtHjykP215W8qmBoJI6kjyNf3vz31rVMKwI3XaoTZHha8NfWXCMQDRnhMY1W26YxfH06QAgnCkpaCbCtawNY4uTJiT44jbjFPOa1pVB9MEPRoBT1IsKhxsBXOkaa1EzXHaLTz4pFhupKakY181pOEOo3gL95LUmTOXlcT5qvHzH13Ry3P4ipxtWeWsA7yW7SuIqXVwMlg8mF24RxPuq6imRu0vWw3E31OpUF6cGTvnyKAJTxQleprl9MMe4LfRUAgMBAl+rZT/5Er32jMxg8/uiLZ5LE41eCZA8nTpSpqMvSJE1auVDu6uRdVr2FPVQvHbPIH+6YZtMsjgyfPo1zfCp42oVDCkE0HErUlNtJI0NeF68PYpHcPAddi+ZQcNwTVZVNtPaKK8RKkVa4+4jorypQMy3ToFncU7vI26UiSICP6ckKRHN+RkqNpDSIFsw/80/z1hIRVdr791Id5pJF4EW6qVW1VtFo7S8v5P8avp/48mRnBE3GPnTmEQuHYx3Dmbx6HuQZFLfrqs5Cv9DKK5WdXWv7oxRmi1gmJQZK4HUNh5MwULscveNpX4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0
AppDrop 1.3.4
Release Details
UpdatedMay 28, 2026, 2:20 p.m.
Changelog

Fixed

  • Use the App Store schema's enumerated SPDX casing (AGPL-3.0-or-later) in info.xml — the lowercase form was rejected by the store's info.xsd validation
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhNOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTQyNDQwWhcNMzYwOTAxMTQyNDQwWjASMRAwDgYD
VQQDDAdhcHBkcm9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5lIb
DdoElB3celqDlzY0ng/mf0deHK8hcxGsQD3O8iNeWEVCHqPvyzKEMujr3rBqbGzH
IizD6sMK7DSsbzROlty/WeUXvtqWAZ8s6EeX328l6Ny+ufekOig3+X1LN7NLqDha
ShqCkqsMYBuG++xIQRuIa5KJeygrC30++k7HKuAuRodaawc/njaRgs5e0slHeA/D
nyWPKpR5MMpDKJbVTCFrVLXbUxcQYnSho9Viz194pShaXdX6VkDSPzAL/PdVqW92
W7ERUexW+uVvfPn+K0LnqZYesKGR9SQNs5FTArFpGIUOktVGxT50KUkMpKpTnmiW
5JxunhQSciEsMXzDwmXd71NUS3T1y1M3gt3nG1OxsZacypW9FSFI0E/gTvFR7O4P
hJD4CSuFnw848CYN0427O7M3SBxJ7zdy0e6lpYUL5ad4Y2kqgu0hTqhskbJokyEN
eKTlfYRoGA5bMP1AMxMIBjuFc++z0VCmvUkaMnvQFcDEwQlEPLX1gvbGsh9QkmQy
mPvVinqXxFPoICdLPDvBn+VmrfO4DFqbA+d8O3e/JiNjq56USG1ZSTpbtiJtW3jm
Jg4wEjslXAf35U8U/xCDo4bUHXOrkqCVegzAqjmyAZiLBGnHYSbKGyDlCDJYpYD6
4HVthBSL6MbvPMSz65mkil8dGlyTp1rNk/gRMYkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAQc6IPHSKbCLRetEaqjR5GzDY7KuyLcnz0cY95TcxPLiQlke1PH+I7wgy
Hu2PXQ0reJwCrxKxRAcpRuCt6yjaO8kKmH4swhmo9YNye55p3WebkxvkmZG9qdm4
MLzMJNf4n0QH1ej6K64z4WnTStWGRsgc0UEIVY0jwrHIBgG69nEMI1nfUgB+bTUK
pDRe+F3Xf9j4ief5hF7NFyNOgGsqP4dbvvOHq0Vh9IBZrq0FlwoPsIaK87bo76zl
mbgdpkUPMrC8hY+BRaDnD2iw0kF7n++TQ9gKvyU/GEwPtGvpcMo7CTQH5wV9IzD/
om4FAETonjOAsVMn+fBrXooX76V7Dw==
-----END CERTIFICATE-----
SignatureG1BlmIBS2zIKviq9I36GsDhvzWpYDspI+8FQc2wORX4nSPosWxVulL3GFMPEnZkCoTRWahiNCKexleuoBw5nnVosb9En9c/NzETGc8tCMGefwJ5GbFM9eeN8B8lg2/yvByxiqiVTrpgJRUJ6gr/9YokHTZPvsEf4o0QWchY5yxK+o6RA6p7BbmR0UHxgUAPE1O1fajkH0tjLNXiuFNX8ShjH1yo3qmopx4l7e3VlCfL+gfs8vIs/2zCfgeOvOTpHBqFlPlPvl9HXLXQeGP9XIg1KR2bcWUO+8sfPINyL7Iq2FvoCPc+3vub9ezWrqcQElRc5r+I9hwoSN8noa1LowiOslSZjAwqJWwoiRJjS0+5bi2lK8Knp6IgslpXAaNyVwxJDfYxu+srvEjcBEfjcD0nJEYX2djWvwKdBvWzswqDq4p8hnx5VQ0N9uxgsCCM2GH36ljuDiVygtJgPc+8EmN+vPjVWUQT3r7OwnGsr3ATjw4nMpaUbS1jKrA+6EEsyTmf9ieuayy/c6YmYTavisy0bx/6mHeZDQrbjEcmkc7ZNCNJu/dydgIDE39kximsvbLJUtzh1pAysomBsFD+NhS8XShv6ky24wDGGntINI0yUeULpSAxXx2fEUjZQEe86dyuSt3iwv8Bm/3DfS9dysfAWc3q5mqgNiJxGGYA8qqg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0

Nextcloud 30

AppDrop 1.5.0
Release Details
UpdatedNov. 12, 2026, 4:14 p.m.
Changelog

Added

  • Nextcloud 34 and 35 support (max-version="35"); verified end-to-end on 35.0.2, 34.0.5, 33 and 30

Fixed

  • Nextcloud 34+: the "Settings" button in the sidebar did nothing and the sidebar could not be opened on screens narrower than 1024px (core removed OC.Apps and the global snapper); AppDrop now drives both itself
  • Nextcloud 33+: success/error/warning messages and buttons were nearly invisible because core turned --color-success/--color-error/--color-warning into pale background tints
  • Header links of other apps (Files, ...) could render with an empty URL for users who see the AppDrop entry: the navigation entry is now registered lazily
  • Zips without folder entries (zip -D, Python zipfile, and AppDrop's own template generator) were rejected with "does not contain 'appinfo/info.xml'" by both the installer and the health check
  • Zips with Windows backslash entry names and no folder entries are now accepted as well
  • Flat zips made with zip -r inside the app folder (first entry lib/, css/, ...) had that first folder mistaken for a wrapper and stripped, installing a broken app; flat zips starting with appinfo/ were rejected
  • A new app uploaded on Nextcloud 30/31 was only flagged as enabled: its migrations never ran and installed_version was never stored, so later updates skipped migrations too. New apps are now installed through occ app:enable (when PHP exec() is available), and apps left in that half-installed state by earlier AppDrop versions are repaired the next time they are enabled or updated with auto-enable on
  • Uploading an update within a few seconds of the previous install/update reported success but left the whole instance answering 503 "upgrade needed" (stale app-config cache, and Nextcloud's info.xml cache keyed by a 1-second mtime); the installed version is now read straight from the database, the new info.xml always gets a newer mtime, and AppDrop reports an error instead of success if the recorded version still did not move
  • Two backups of the same app within one second collided, so the second update/restore failed or lost the previous copy
  • Removing an app that is not in the writable apps folder (e.g. a shipped app) failed with "not found" but disabled it anyway
  • Files with .. inside their name (e.g. app..min.js) aborted the extraction after the old version had already been moved away
  • The Install / Update button showed its icon twice after an upload
  • The Apps tab could disable or delete AppDrop itself, and disabling an app that core protects (e.g. files) returned an HTTP 500 page instead of an error message
  • Install message said "installed and enabled" even with auto-enable off
  • Enable/Disable/Remove/Install buttons never got their colours (core button styles won on specificity); badges, status buttons and dark-theme status text now meet WCAG AA contrast
  • Health check hint for a missing Nextcloud dependency suggested a hard-coded max-version="33"

Security

  • Zips in which two entries resolve to the same path (a duplicated appinfo/info.xml, aliases such as ./appinfo/info.xml and appinfo//info.xml, or a name used both as a file and as a folder) are rejected by the installer and flagged by the health check: validation and extraction could read different copies, bypassing the app-ID match and self-update guards

Changed

  • CI also runs on PHP 8.5 and against nextcloud/ocp ^35; the package test now verifies every hash in signature.json
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhNOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTQyNDQwWhcNMzYwOTAxMTQyNDQwWjASMRAwDgYD
VQQDDAdhcHBkcm9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5lIb
DdoElB3celqDlzY0ng/mf0deHK8hcxGsQD3O8iNeWEVCHqPvyzKEMujr3rBqbGzH
IizD6sMK7DSsbzROlty/WeUXvtqWAZ8s6EeX328l6Ny+ufekOig3+X1LN7NLqDha
ShqCkqsMYBuG++xIQRuIa5KJeygrC30++k7HKuAuRodaawc/njaRgs5e0slHeA/D
nyWPKpR5MMpDKJbVTCFrVLXbUxcQYnSho9Viz194pShaXdX6VkDSPzAL/PdVqW92
W7ERUexW+uVvfPn+K0LnqZYesKGR9SQNs5FTArFpGIUOktVGxT50KUkMpKpTnmiW
5JxunhQSciEsMXzDwmXd71NUS3T1y1M3gt3nG1OxsZacypW9FSFI0E/gTvFR7O4P
hJD4CSuFnw848CYN0427O7M3SBxJ7zdy0e6lpYUL5ad4Y2kqgu0hTqhskbJokyEN
eKTlfYRoGA5bMP1AMxMIBjuFc++z0VCmvUkaMnvQFcDEwQlEPLX1gvbGsh9QkmQy
mPvVinqXxFPoICdLPDvBn+VmrfO4DFqbA+d8O3e/JiNjq56USG1ZSTpbtiJtW3jm
Jg4wEjslXAf35U8U/xCDo4bUHXOrkqCVegzAqjmyAZiLBGnHYSbKGyDlCDJYpYD6
4HVthBSL6MbvPMSz65mkil8dGlyTp1rNk/gRMYkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAQc6IPHSKbCLRetEaqjR5GzDY7KuyLcnz0cY95TcxPLiQlke1PH+I7wgy
Hu2PXQ0reJwCrxKxRAcpRuCt6yjaO8kKmH4swhmo9YNye55p3WebkxvkmZG9qdm4
MLzMJNf4n0QH1ej6K64z4WnTStWGRsgc0UEIVY0jwrHIBgG69nEMI1nfUgB+bTUK
pDRe+F3Xf9j4ief5hF7NFyNOgGsqP4dbvvOHq0Vh9IBZrq0FlwoPsIaK87bo76zl
mbgdpkUPMrC8hY+BRaDnD2iw0kF7n++TQ9gKvyU/GEwPtGvpcMo7CTQH5wV9IzD/
om4FAETonjOAsVMn+fBrXooX76V7Dw==
-----END CERTIFICATE-----
SignatureybkZhYfkG1kT2ouMJ2pKOMoq66C5Iv5F2jD7DjS38woA2rKdn13ne1AAihJBPOvX6Gjo11nDLFgZHBGNC9idKzBogzvAp6vU+iDatUtHfxqNQVsXkwc+OLPqgRRJH0vv6/ZRApTJQAqeDSsvbR8qZUJ5swSvaKeUW1zleEKYz8OICe0aqQq2n1hSLvC9Osp14/T8rlQPc95izWRXyLXFRAs3NQ1PNQaeitIiovG07u0Ghor0eIFAL170G6MdTfMnQRXie/eEijlj8VUZbgXDC5TmzC6fqPuTc9j0IUG1VbMpyraAhlblwKZnbq46CDzPS3dzcRyhVAxxsEOtjYgzpCpmDeziHG46eusFvUjonqLlZjh84yihn78MOLvLntdoQFqm8EVi8SQr5Rn7eFbvfo/6K0l3WeEuCA5mkLBiWVOEC+OI3vAXI+mZ38VexLBV6OyhxqEuM5NUPf554iC4EBlxyh7iAQZwc7Fa/hemeH66ZqoKLjMBHN/nFAkF+rI6soU8t6qleYUR5OsXNjJiw1vy6IQW2Rk8keS6ueIaxs0WdtZu8KWvf4nT2DrbUGBgL7akx98NMH30ujOXW81J8dy3HfAsaN7WTt/3iB2vbfTyCsv6bHZuEbUA+KsBCFDdmNsLHzHoNQNNSMs+l1kDIx991mVhgypP4x6aNKCeINQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.1.0
AppDrop 1.4.0
Release Details
UpdatedSept. 9, 2026, 6:29 p.m.
Changelog

Added

  • Nextcloud 33 support (max-version="33"); verified end-to-end on 33.0.8 and 30.0.17

Fixed

  • Updating an app (or restoring a backup / re-installing after a remove) left installed_version behind, so Nextcloud answered 503 "upgrade needed" to every request until occ upgrade was run manually. AppDrop now runs the app's upgrade routine itself (IAppManager::upgradeApp() on NC 32+, OC_App::updateApp() on NC 30/31)
  • AppInstallException moved to its own file: it was only autoloadable after AppInstallService had been loaded, which turned errors in the Backups/Apps tabs into a fatal "Class not found"
  • Generated app skeletons hard-coded max-version="32" and could not be enabled on NC 33; the value now follows the running server
  • Settings tab showed a stale hard-coded version label

Changed

  • Controllers use #[NoAdminRequired] / #[NoCSRFRequired] attributes instead of docblock annotations (deprecated, logged on every request by NC 33); the generated skeleton controller does the same
  • Upload form uses the template requesttoken instead of the deprecated Util::callRegister()
  • Dev dependency nextcloud/ocp pinned to ^33.0 (dev-master now requires PHP 8.3); CI matrix is PHP 8.2–8.4. Runtime requirement stays PHP 8.1+ for NC 30
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhNOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTQyNDQwWhcNMzYwOTAxMTQyNDQwWjASMRAwDgYD
VQQDDAdhcHBkcm9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5lIb
DdoElB3celqDlzY0ng/mf0deHK8hcxGsQD3O8iNeWEVCHqPvyzKEMujr3rBqbGzH
IizD6sMK7DSsbzROlty/WeUXvtqWAZ8s6EeX328l6Ny+ufekOig3+X1LN7NLqDha
ShqCkqsMYBuG++xIQRuIa5KJeygrC30++k7HKuAuRodaawc/njaRgs5e0slHeA/D
nyWPKpR5MMpDKJbVTCFrVLXbUxcQYnSho9Viz194pShaXdX6VkDSPzAL/PdVqW92
W7ERUexW+uVvfPn+K0LnqZYesKGR9SQNs5FTArFpGIUOktVGxT50KUkMpKpTnmiW
5JxunhQSciEsMXzDwmXd71NUS3T1y1M3gt3nG1OxsZacypW9FSFI0E/gTvFR7O4P
hJD4CSuFnw848CYN0427O7M3SBxJ7zdy0e6lpYUL5ad4Y2kqgu0hTqhskbJokyEN
eKTlfYRoGA5bMP1AMxMIBjuFc++z0VCmvUkaMnvQFcDEwQlEPLX1gvbGsh9QkmQy
mPvVinqXxFPoICdLPDvBn+VmrfO4DFqbA+d8O3e/JiNjq56USG1ZSTpbtiJtW3jm
Jg4wEjslXAf35U8U/xCDo4bUHXOrkqCVegzAqjmyAZiLBGnHYSbKGyDlCDJYpYD6
4HVthBSL6MbvPMSz65mkil8dGlyTp1rNk/gRMYkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAQc6IPHSKbCLRetEaqjR5GzDY7KuyLcnz0cY95TcxPLiQlke1PH+I7wgy
Hu2PXQ0reJwCrxKxRAcpRuCt6yjaO8kKmH4swhmo9YNye55p3WebkxvkmZG9qdm4
MLzMJNf4n0QH1ej6K64z4WnTStWGRsgc0UEIVY0jwrHIBgG69nEMI1nfUgB+bTUK
pDRe+F3Xf9j4ief5hF7NFyNOgGsqP4dbvvOHq0Vh9IBZrq0FlwoPsIaK87bo76zl
mbgdpkUPMrC8hY+BRaDnD2iw0kF7n++TQ9gKvyU/GEwPtGvpcMo7CTQH5wV9IzD/
om4FAETonjOAsVMn+fBrXooX76V7Dw==
-----END CERTIFICATE-----
Signaturel6mutbt/+48zurhfoAchQ9UD9wwvRw24qBhcP1Bs2+ityBDDoVCPv7d0cViJlQQpu7NztuP37Cc/CoG+VGSdaFqFPScdj870Dhs3UWTCAXqkgdx6dvtHjykP215W8qmBoJI6kjyNf3vz31rVMKwI3XaoTZHha8NfWXCMQDRnhMY1W26YxfH06QAgnCkpaCbCtawNY4uTJiT44jbjFPOa1pVB9MEPRoBT1IsKhxsBXOkaa1EzXHaLTz4pFhupKakY181pOEOo3gL95LUmTOXlcT5qvHzH13Ry3P4ipxtWeWsA7yW7SuIqXVwMlg8mF24RxPuq6imRu0vWw3E31OpUF6cGTvnyKAJTxQleprl9MMe4LfRUAgMBAl+rZT/5Er32jMxg8/uiLZ5LE41eCZA8nTpSpqMvSJE1auVDu6uRdVr2FPVQvHbPIH+6YZtMsjgyfPo1zfCp42oVDCkE0HErUlNtJI0NeF68PYpHcPAddi+ZQcNwTVZVNtPaKK8RKkVa4+4jorypQMy3ToFncU7vI26UiSICP6ckKRHN+RkqNpDSIFsw/80/z1hIRVdr791Id5pJF4EW6qVW1VtFo7S8v5P8avp/48mRnBE3GPnTmEQuHYx3Dmbx6HuQZFLfrqs5Cv9DKK5WdXWv7oxRmi1gmJQZK4HUNh5MwULscveNpX4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0
AppDrop 1.3.4
Release Details
UpdatedMay 28, 2026, 2:20 p.m.
Changelog

Fixed

  • Use the App Store schema's enumerated SPDX casing (AGPL-3.0-or-later) in info.xml — the lowercase form was rejected by the store's info.xsd validation
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEAjCCAuoCAhNOMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwNTI3MTQyNDQwWhcNMzYwOTAxMTQyNDQwWjASMRAwDgYD
VQQDDAdhcHBkcm9wMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5lIb
DdoElB3celqDlzY0ng/mf0deHK8hcxGsQD3O8iNeWEVCHqPvyzKEMujr3rBqbGzH
IizD6sMK7DSsbzROlty/WeUXvtqWAZ8s6EeX328l6Ny+ufekOig3+X1LN7NLqDha
ShqCkqsMYBuG++xIQRuIa5KJeygrC30++k7HKuAuRodaawc/njaRgs5e0slHeA/D
nyWPKpR5MMpDKJbVTCFrVLXbUxcQYnSho9Viz194pShaXdX6VkDSPzAL/PdVqW92
W7ERUexW+uVvfPn+K0LnqZYesKGR9SQNs5FTArFpGIUOktVGxT50KUkMpKpTnmiW
5JxunhQSciEsMXzDwmXd71NUS3T1y1M3gt3nG1OxsZacypW9FSFI0E/gTvFR7O4P
hJD4CSuFnw848CYN0427O7M3SBxJ7zdy0e6lpYUL5ad4Y2kqgu0hTqhskbJokyEN
eKTlfYRoGA5bMP1AMxMIBjuFc++z0VCmvUkaMnvQFcDEwQlEPLX1gvbGsh9QkmQy
mPvVinqXxFPoICdLPDvBn+VmrfO4DFqbA+d8O3e/JiNjq56USG1ZSTpbtiJtW3jm
Jg4wEjslXAf35U8U/xCDo4bUHXOrkqCVegzAqjmyAZiLBGnHYSbKGyDlCDJYpYD6
4HVthBSL6MbvPMSz65mkil8dGlyTp1rNk/gRMYkCAwEAATANBgkqhkiG9w0BAQsF
AAOCAQEAQc6IPHSKbCLRetEaqjR5GzDY7KuyLcnz0cY95TcxPLiQlke1PH+I7wgy
Hu2PXQ0reJwCrxKxRAcpRuCt6yjaO8kKmH4swhmo9YNye55p3WebkxvkmZG9qdm4
MLzMJNf4n0QH1ej6K64z4WnTStWGRsgc0UEIVY0jwrHIBgG69nEMI1nfUgB+bTUK
pDRe+F3Xf9j4ief5hF7NFyNOgGsqP4dbvvOHq0Vh9IBZrq0FlwoPsIaK87bo76zl
mbgdpkUPMrC8hY+BRaDnD2iw0kF7n++TQ9gKvyU/GEwPtGvpcMo7CTQH5wV9IzD/
om4FAETonjOAsVMn+fBrXooX76V7Dw==
-----END CERTIFICATE-----
SignatureG1BlmIBS2zIKviq9I36GsDhvzWpYDspI+8FQc2wORX4nSPosWxVulL3GFMPEnZkCoTRWahiNCKexleuoBw5nnVosb9En9c/NzETGc8tCMGefwJ5GbFM9eeN8B8lg2/yvByxiqiVTrpgJRUJ6gr/9YokHTZPvsEf4o0QWchY5yxK+o6RA6p7BbmR0UHxgUAPE1O1fajkH0tjLNXiuFNX8ShjH1yo3qmopx4l7e3VlCfL+gfs8vIs/2zCfgeOvOTpHBqFlPlPvl9HXLXQeGP9XIg1KR2bcWUO+8sfPINyL7Iq2FvoCPc+3vub9ezWrqcQElRc5r+I9hwoSN8noa1LowiOslSZjAwqJWwoiRJjS0+5bi2lK8Knp6IgslpXAaNyVwxJDfYxu+srvEjcBEfjcD0nJEYX2djWvwKdBvWzswqDq4p8hnx5VQ0N9uxgsCCM2GH36ljuDiVygtJgPc+8EmN+vPjVWUQT3r7OwnGsr3ATjw4nMpaUbS1jKrA+6EEsyTmf9ieuayy/c6YmYTavisy0bx/6mHeZDQrbjEcmkc7ZNCNJu/dydgIDE39kximsvbLJUtzh1pAysomBsFD+NhS8XShv6ky24wDGGntINI0yUeULpSAxXx2fEUjZQEe86dyuSt3iwv8Bm/3DfS9dysfAWc3q5mqgNiJxGGYA8qqg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0