Skip to main content

S3 API - Releases

← App details

Nextcloud 35

S3 API 1.5.3
Release Details
UpdatedSept. 7, 2026, 7:44 a.m.
Changelog

Fixed

  • A conditional write took its lock on the wrong identity, so compare-and-swap could lose an update. The lock key hashed the bucket id, but one file can be reached through two buckets: nothing stopped registering /Documents as foo and /Documents/sub as bar, after which foo/sub/x.txt and bar/x.txt are the same file with two independent locks. Two concurrent If-None-Match: * requests, one per bucket, would then both observe "absent" and both succeed — exactly the silent lost update that content-derived ETags were introduced in 1.2.0 to prevent. The lock is now keyed on the object's resolved storage path, which is what actually identifies the file. Note that hashing the bucket's folder would not have been enough either: in the example above the two buckets have different folders, and it is the full path of the object that has to agree.
  • Registering a folder that another bucket already serves is refused, including the nesting case above. Two names for one folder have no use that a single bucket with a key prefix does not cover better, and they leave the app treating one directory as two buckets — separate multipart scratch areas inside it, two ETag rows racing over one file id. Existing overlapping buckets are left alone: they still work, and now share a lock correctly. The comparison normalizes the path first, because /Documents//sub, /Documents/./sub and /Documents/other/../sub all pass the folder-exists check — Nextcloud collapses those itself — and would otherwise have slipped past the overlap check while naming a folder that is already served.
  • Creating a bucket whose name is already taken answers 409 with a readable message. It used to hit the unique index and surface as a 500 carrying the raw driver error, for what is the most ordinary mistake in that form. The index is still what decides — two racing requests can both pass the pre-check — and that collision now maps to the same 409 rather than a 500.
  • Unexpected failures while creating a bucket no longer return the exception message to the browser; it could carry a filesystem path or driver detail. They are logged instead.

Changed

  • PHP 8.2 is supported again, down from the 8.3 that 1.5.2 briefly required. <php min-version> is resolved against the server, so it has to be satisfiable on the oldest Nextcloud in the range — and 32 (which asks for 8.1) through 34 (8.2) all run on 8.2. Nextcloud 35 does need 8.3, but it enforces that itself, so the lower floor costs its users nothing while 32–34 keep working on the PHP their Nextcloud actually asks for. Verified by linting on 8.1, 8.2 and 8.3; nothing in the app uses a language feature past 8.1, and 8.1 stays out only because it is end of life.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEATCCAukCAhP5MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTA0MTMxMzIxWhcNMzYxMjEwMTMxMzIxWjARMQ8wDQYD
VQQDDAZzM19hcGkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC+U2GK
/dqKekpMDR1KZtVG6e7tditjS8Q1HteEZSu3Tk/vgK0X8IIocrp7V3cFLIQ1dasq
Kw4dWd+SVEfDL8+DRYfTgyHz+MFB0FrFCUFIT4aLL02/0NCJqk7/bkWjFYf/lwRc
kRZIgbecsM1XNjGu5vaehQJU95LL/J3FkHd4QBbKaIEVqagER8wcixnGrDwAwmye
25qXeM+NYC6xiaHfxKsuqHbFWvHYkqvlmtxZ4uKmG9C8XriU850f2dj2NcrygQY4
Oiyp2qvtoaJHnSrld4ihh4X8U0jlWRGyTIa2PU15vFBWvHAq78I39XLeiuwB05eV
r2O7YDkLuBhw2u3X78jgZlCQNky4hsBVeGf9mUpi/K228mq1wkt91ABJe5CDPAjB
lVW8h6ODPS7iNL1jMijioUbmRaDwI41dzmVLTw8sTNizDcJNDBUDtKFr3YPJWP7F
BY4adIhNqrZ2GvOks6O0zCdTZg1a8LJmgBFk7qmX6hn9l8Me6miE6sZVvdK0r31z
N/wPTw8SM9Nt1ggOKGo2XRVEqtt/liQr3b0YZwfDF5bPbkKDNDRyVNi7Ggwo6t9E
veYhWliNGMm10JIvLDcfEWaLLrCf9wcZUEGWEVvj7oc47vYFnMSaS5Ny8TbhtapQ
vOu3EEK8ontze/7bwV5ZHT9Xi9qXIX/7kuEA4QIDAQABMA0GCSqGSIb3DQEBCwUA
A4IBAQBApDNQ3r9+6OOEO3BcnyL1RoRErSU7A4anT6XzQO6xSFmTfYopg6T+i9he
Rq3hhF0eVxB5dRRUxTslCGipAAk/rVilycfggwdjbmt4gD5g/FKvcMqfWHjo/Pdi
F6bEvicyKU88i74XTVMxAsrXITOXtcz90QTZOcweBQ8PIPIOWHKjBzo8+0Ytq8o2
GAcb0RBLQcs9wWDAWnXUxy1307tztCrQDvmGHvv+uDe7jPcu2S/DSDH9niVZEzFS
25W9ueKZsmV6ob4bBMYzdl8x/MOL38ZNXFMnsHuYkvmVdYGuND8Wr/N7wbEJquNW
o0eLPhV1dUod0Fqy4ZswszXQhA10
-----END CERTIFICATE-----
SignatureBxv7eS0izf6Tc6vZ8IQfPug86DhdLGRXQV7NCt8eXIHoFUhIFRx92T6RCoeEM2CnR8Um3S3IgA7zSCx08ckJ7ZITpZV5e2Q76lX9ql5O2sIXX/Rai0udBIl1rb6QXmFwTRFJ/E+zO/dE49hQgIft2LXs+Shctrha5OmvxFzOd8FI8FxjQCPHsYHXX+1lsXqKCUcGepxOof5YOCvDV34tq2jz9VqtmPBe0heUpR7eBJZoCvdPfQHyW4xDW09aAIe/5avZNtUg2EG38kqrPGKrTwOctVVwhNxHGhMQ7pTCgwHtm9SGdUCondbVCDebb23eTEA56ytNRAJKOO9P3DaP2FihIIgkTh8XhEajFbKyhI41EjV65ya4+UUAld0up+J1RNHOgjVQNZhQCPckV6zynBh+Qd2iE5hsmpkDZE/QfJ9SJaU+IkRIoIfdTYmQZsG3uKLTkzSCCL15YjfTNNxTRptoQ3J4u1BO7MSnexD7xqbGpUBwFyRQrA1N+mTQp9DrjvRAXEgNgoFyniYPoRyfyTDRIeyC7ETYKaZH4dyzi8jd7NiYai7dwQ6XuOkoNPw6nyiVSxPxdE0JyHOceb1owVlgfqAOCrefMovJ9EufqJnfSMXOLLcCfU6l4BHug0CjxtA+iAjXa5KzwELxGZazarGJZl/t0vYtolhjWGC8gAE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.2.0
S3 API 1.5.2
Release Details
UpdatedSept. 7, 2026, 7:03 a.m.
Changelog

Changed

  • Nextcloud 35 is supported: max-version moves from 34 to 35. No code changes were needed — every OCP interface this app uses was checked against stable35 and all 37 of them still exist. TimedJob is the one worth naming: it dropped the deprecated execute() in 33, but this app implements run(), which is still the abstract method. Access control was already declared with #[NoAdminRequired], #[NoCSRFRequired] and #[PublicPage] attributes rather than the docblock annotations Nextcloud logs a deprecation for.
  • The supported range narrows to Nextcloud 32–35 and PHP 8.3+, from 30–34 and PHP 8.1+. Nextcloud 35 requires PHP 8.3, and the app store resolves <php min-version> against the server rather than against Nextcloud's own floor, so a single declared minimum has to cover the whole range. Choosing 8.3 means users on 32, 33 or 34 need a PHP newer than their Nextcloud asks for; that is the deliberate cost of testing against one interpreter instead of four, and PHP 8.1 is out of security support regardless. Nothing in the app needs a language feature past 8.1 — this bounds what is tested, not what parses. Nextcloud 30 and 31 are end of life and go with it.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEATCCAukCAhP5MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTA0MTMxMzIxWhcNMzYxMjEwMTMxMzIxWjARMQ8wDQYD
VQQDDAZzM19hcGkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC+U2GK
/dqKekpMDR1KZtVG6e7tditjS8Q1HteEZSu3Tk/vgK0X8IIocrp7V3cFLIQ1dasq
Kw4dWd+SVEfDL8+DRYfTgyHz+MFB0FrFCUFIT4aLL02/0NCJqk7/bkWjFYf/lwRc
kRZIgbecsM1XNjGu5vaehQJU95LL/J3FkHd4QBbKaIEVqagER8wcixnGrDwAwmye
25qXeM+NYC6xiaHfxKsuqHbFWvHYkqvlmtxZ4uKmG9C8XriU850f2dj2NcrygQY4
Oiyp2qvtoaJHnSrld4ihh4X8U0jlWRGyTIa2PU15vFBWvHAq78I39XLeiuwB05eV
r2O7YDkLuBhw2u3X78jgZlCQNky4hsBVeGf9mUpi/K228mq1wkt91ABJe5CDPAjB
lVW8h6ODPS7iNL1jMijioUbmRaDwI41dzmVLTw8sTNizDcJNDBUDtKFr3YPJWP7F
BY4adIhNqrZ2GvOks6O0zCdTZg1a8LJmgBFk7qmX6hn9l8Me6miE6sZVvdK0r31z
N/wPTw8SM9Nt1ggOKGo2XRVEqtt/liQr3b0YZwfDF5bPbkKDNDRyVNi7Ggwo6t9E
veYhWliNGMm10JIvLDcfEWaLLrCf9wcZUEGWEVvj7oc47vYFnMSaS5Ny8TbhtapQ
vOu3EEK8ontze/7bwV5ZHT9Xi9qXIX/7kuEA4QIDAQABMA0GCSqGSIb3DQEBCwUA
A4IBAQBApDNQ3r9+6OOEO3BcnyL1RoRErSU7A4anT6XzQO6xSFmTfYopg6T+i9he
Rq3hhF0eVxB5dRRUxTslCGipAAk/rVilycfggwdjbmt4gD5g/FKvcMqfWHjo/Pdi
F6bEvicyKU88i74XTVMxAsrXITOXtcz90QTZOcweBQ8PIPIOWHKjBzo8+0Ytq8o2
GAcb0RBLQcs9wWDAWnXUxy1307tztCrQDvmGHvv+uDe7jPcu2S/DSDH9niVZEzFS
25W9ueKZsmV6ob4bBMYzdl8x/MOL38ZNXFMnsHuYkvmVdYGuND8Wr/N7wbEJquNW
o0eLPhV1dUod0Fqy4ZswszXQhA10
-----END CERTIFICATE-----
Signaturego7SuMzb3Y5g2yrfg9WxL9FjOI7BBbUsyJ0n8LHGRGTH8yus7Nv7zRXzOtP1CmVcR4idihqDAc79SBW8bKaS/ukkYmXAmxXlWUQ9dbF9TyqCPxDJHjsND2WiNS3vC8/TBNzMmHw17QHxF5XpnCV6NzKCqQO6PdinIPBGI83F8V9T2vYDPJY58sV01fXT2fcac4qbTZ7arxvbHjpUatbhwKQLKm6vCqwpuSDZtnFNM0eqNtI9ZWCkuBP170VQr+gZdGD0QDHs2V6JlNx3QWiVAhpdElU3n4+mwtpRFpKvPygB8JzwjBpeO41PywLAqdOv5FD2MhnR1W2ym14942m/IUQUK/kTHR68Q1GP37qn7Gbx5ZYwEhSaMeJLPB6wM21exZMRai46kWTHkxVTFB86w8xZX6ovKqc9SKtM4U+0oLUqia5N3H7EgTFpuT9NSon1VvqHDkjfWtrzCCHIOR3nWpc/rwC+htbDrqTimFM2TNxfAdVJwCIDI8GzHwoHe6biGI73W3Nb9ncNrwnkQS+WgEhHy2FwjA5h5yHhf6ELQckj6Dd21iNQXcs8iqVB5/VnCtWTjDoD5EFIhPdTZeU+n/1DpDlmzNxS4omPigo5w0RQa8m+2W7Ry37xeIvKQyIDRdpD1SUsz4q2OPjYG1wOJTGXkixdjbV1zcEFrJCfupE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.3.0

Nextcloud 34

S3 API 1.5.3
Release Details
UpdatedSept. 7, 2026, 7:44 a.m.
Changelog

Fixed

  • A conditional write took its lock on the wrong identity, so compare-and-swap could lose an update. The lock key hashed the bucket id, but one file can be reached through two buckets: nothing stopped registering /Documents as foo and /Documents/sub as bar, after which foo/sub/x.txt and bar/x.txt are the same file with two independent locks. Two concurrent If-None-Match: * requests, one per bucket, would then both observe "absent" and both succeed — exactly the silent lost update that content-derived ETags were introduced in 1.2.0 to prevent. The lock is now keyed on the object's resolved storage path, which is what actually identifies the file. Note that hashing the bucket's folder would not have been enough either: in the example above the two buckets have different folders, and it is the full path of the object that has to agree.
  • Registering a folder that another bucket already serves is refused, including the nesting case above. Two names for one folder have no use that a single bucket with a key prefix does not cover better, and they leave the app treating one directory as two buckets — separate multipart scratch areas inside it, two ETag rows racing over one file id. Existing overlapping buckets are left alone: they still work, and now share a lock correctly. The comparison normalizes the path first, because /Documents//sub, /Documents/./sub and /Documents/other/../sub all pass the folder-exists check — Nextcloud collapses those itself — and would otherwise have slipped past the overlap check while naming a folder that is already served.
  • Creating a bucket whose name is already taken answers 409 with a readable message. It used to hit the unique index and surface as a 500 carrying the raw driver error, for what is the most ordinary mistake in that form. The index is still what decides — two racing requests can both pass the pre-check — and that collision now maps to the same 409 rather than a 500.
  • Unexpected failures while creating a bucket no longer return the exception message to the browser; it could carry a filesystem path or driver detail. They are logged instead.

Changed

  • PHP 8.2 is supported again, down from the 8.3 that 1.5.2 briefly required. <php min-version> is resolved against the server, so it has to be satisfiable on the oldest Nextcloud in the range — and 32 (which asks for 8.1) through 34 (8.2) all run on 8.2. Nextcloud 35 does need 8.3, but it enforces that itself, so the lower floor costs its users nothing while 32–34 keep working on the PHP their Nextcloud actually asks for. Verified by linting on 8.1, 8.2 and 8.3; nothing in the app uses a language feature past 8.1, and 8.1 stays out only because it is end of life.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEATCCAukCAhP5MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTA0MTMxMzIxWhcNMzYxMjEwMTMxMzIxWjARMQ8wDQYD
VQQDDAZzM19hcGkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC+U2GK
/dqKekpMDR1KZtVG6e7tditjS8Q1HteEZSu3Tk/vgK0X8IIocrp7V3cFLIQ1dasq
Kw4dWd+SVEfDL8+DRYfTgyHz+MFB0FrFCUFIT4aLL02/0NCJqk7/bkWjFYf/lwRc
kRZIgbecsM1XNjGu5vaehQJU95LL/J3FkHd4QBbKaIEVqagER8wcixnGrDwAwmye
25qXeM+NYC6xiaHfxKsuqHbFWvHYkqvlmtxZ4uKmG9C8XriU850f2dj2NcrygQY4
Oiyp2qvtoaJHnSrld4ihh4X8U0jlWRGyTIa2PU15vFBWvHAq78I39XLeiuwB05eV
r2O7YDkLuBhw2u3X78jgZlCQNky4hsBVeGf9mUpi/K228mq1wkt91ABJe5CDPAjB
lVW8h6ODPS7iNL1jMijioUbmRaDwI41dzmVLTw8sTNizDcJNDBUDtKFr3YPJWP7F
BY4adIhNqrZ2GvOks6O0zCdTZg1a8LJmgBFk7qmX6hn9l8Me6miE6sZVvdK0r31z
N/wPTw8SM9Nt1ggOKGo2XRVEqtt/liQr3b0YZwfDF5bPbkKDNDRyVNi7Ggwo6t9E
veYhWliNGMm10JIvLDcfEWaLLrCf9wcZUEGWEVvj7oc47vYFnMSaS5Ny8TbhtapQ
vOu3EEK8ontze/7bwV5ZHT9Xi9qXIX/7kuEA4QIDAQABMA0GCSqGSIb3DQEBCwUA
A4IBAQBApDNQ3r9+6OOEO3BcnyL1RoRErSU7A4anT6XzQO6xSFmTfYopg6T+i9he
Rq3hhF0eVxB5dRRUxTslCGipAAk/rVilycfggwdjbmt4gD5g/FKvcMqfWHjo/Pdi
F6bEvicyKU88i74XTVMxAsrXITOXtcz90QTZOcweBQ8PIPIOWHKjBzo8+0Ytq8o2
GAcb0RBLQcs9wWDAWnXUxy1307tztCrQDvmGHvv+uDe7jPcu2S/DSDH9niVZEzFS
25W9ueKZsmV6ob4bBMYzdl8x/MOL38ZNXFMnsHuYkvmVdYGuND8Wr/N7wbEJquNW
o0eLPhV1dUod0Fqy4ZswszXQhA10
-----END CERTIFICATE-----
SignatureBxv7eS0izf6Tc6vZ8IQfPug86DhdLGRXQV7NCt8eXIHoFUhIFRx92T6RCoeEM2CnR8Um3S3IgA7zSCx08ckJ7ZITpZV5e2Q76lX9ql5O2sIXX/Rai0udBIl1rb6QXmFwTRFJ/E+zO/dE49hQgIft2LXs+Shctrha5OmvxFzOd8FI8FxjQCPHsYHXX+1lsXqKCUcGepxOof5YOCvDV34tq2jz9VqtmPBe0heUpR7eBJZoCvdPfQHyW4xDW09aAIe/5avZNtUg2EG38kqrPGKrTwOctVVwhNxHGhMQ7pTCgwHtm9SGdUCondbVCDebb23eTEA56ytNRAJKOO9P3DaP2FihIIgkTh8XhEajFbKyhI41EjV65ya4+UUAld0up+J1RNHOgjVQNZhQCPckV6zynBh+Qd2iE5hsmpkDZE/QfJ9SJaU+IkRIoIfdTYmQZsG3uKLTkzSCCL15YjfTNNxTRptoQ3J4u1BO7MSnexD7xqbGpUBwFyRQrA1N+mTQp9DrjvRAXEgNgoFyniYPoRyfyTDRIeyC7ETYKaZH4dyzi8jd7NiYai7dwQ6XuOkoNPw6nyiVSxPxdE0JyHOceb1owVlgfqAOCrefMovJ9EufqJnfSMXOLLcCfU6l4BHug0CjxtA+iAjXa5KzwELxGZazarGJZl/t0vYtolhjWGC8gAE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.2.0
S3 API 1.5.2
Release Details
UpdatedSept. 7, 2026, 7:03 a.m.
Changelog

Changed

  • Nextcloud 35 is supported: max-version moves from 34 to 35. No code changes were needed — every OCP interface this app uses was checked against stable35 and all 37 of them still exist. TimedJob is the one worth naming: it dropped the deprecated execute() in 33, but this app implements run(), which is still the abstract method. Access control was already declared with #[NoAdminRequired], #[NoCSRFRequired] and #[PublicPage] attributes rather than the docblock annotations Nextcloud logs a deprecation for.
  • The supported range narrows to Nextcloud 32–35 and PHP 8.3+, from 30–34 and PHP 8.1+. Nextcloud 35 requires PHP 8.3, and the app store resolves <php min-version> against the server rather than against Nextcloud's own floor, so a single declared minimum has to cover the whole range. Choosing 8.3 means users on 32, 33 or 34 need a PHP newer than their Nextcloud asks for; that is the deliberate cost of testing against one interpreter instead of four, and PHP 8.1 is out of security support regardless. Nothing in the app needs a language feature past 8.1 — this bounds what is tested, not what parses. Nextcloud 30 and 31 are end of life and go with it.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEATCCAukCAhP5MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTA0MTMxMzIxWhcNMzYxMjEwMTMxMzIxWjARMQ8wDQYD
VQQDDAZzM19hcGkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC+U2GK
/dqKekpMDR1KZtVG6e7tditjS8Q1HteEZSu3Tk/vgK0X8IIocrp7V3cFLIQ1dasq
Kw4dWd+SVEfDL8+DRYfTgyHz+MFB0FrFCUFIT4aLL02/0NCJqk7/bkWjFYf/lwRc
kRZIgbecsM1XNjGu5vaehQJU95LL/J3FkHd4QBbKaIEVqagER8wcixnGrDwAwmye
25qXeM+NYC6xiaHfxKsuqHbFWvHYkqvlmtxZ4uKmG9C8XriU850f2dj2NcrygQY4
Oiyp2qvtoaJHnSrld4ihh4X8U0jlWRGyTIa2PU15vFBWvHAq78I39XLeiuwB05eV
r2O7YDkLuBhw2u3X78jgZlCQNky4hsBVeGf9mUpi/K228mq1wkt91ABJe5CDPAjB
lVW8h6ODPS7iNL1jMijioUbmRaDwI41dzmVLTw8sTNizDcJNDBUDtKFr3YPJWP7F
BY4adIhNqrZ2GvOks6O0zCdTZg1a8LJmgBFk7qmX6hn9l8Me6miE6sZVvdK0r31z
N/wPTw8SM9Nt1ggOKGo2XRVEqtt/liQr3b0YZwfDF5bPbkKDNDRyVNi7Ggwo6t9E
veYhWliNGMm10JIvLDcfEWaLLrCf9wcZUEGWEVvj7oc47vYFnMSaS5Ny8TbhtapQ
vOu3EEK8ontze/7bwV5ZHT9Xi9qXIX/7kuEA4QIDAQABMA0GCSqGSIb3DQEBCwUA
A4IBAQBApDNQ3r9+6OOEO3BcnyL1RoRErSU7A4anT6XzQO6xSFmTfYopg6T+i9he
Rq3hhF0eVxB5dRRUxTslCGipAAk/rVilycfggwdjbmt4gD5g/FKvcMqfWHjo/Pdi
F6bEvicyKU88i74XTVMxAsrXITOXtcz90QTZOcweBQ8PIPIOWHKjBzo8+0Ytq8o2
GAcb0RBLQcs9wWDAWnXUxy1307tztCrQDvmGHvv+uDe7jPcu2S/DSDH9niVZEzFS
25W9ueKZsmV6ob4bBMYzdl8x/MOL38ZNXFMnsHuYkvmVdYGuND8Wr/N7wbEJquNW
o0eLPhV1dUod0Fqy4ZswszXQhA10
-----END CERTIFICATE-----
Signaturego7SuMzb3Y5g2yrfg9WxL9FjOI7BBbUsyJ0n8LHGRGTH8yus7Nv7zRXzOtP1CmVcR4idihqDAc79SBW8bKaS/ukkYmXAmxXlWUQ9dbF9TyqCPxDJHjsND2WiNS3vC8/TBNzMmHw17QHxF5XpnCV6NzKCqQO6PdinIPBGI83F8V9T2vYDPJY58sV01fXT2fcac4qbTZ7arxvbHjpUatbhwKQLKm6vCqwpuSDZtnFNM0eqNtI9ZWCkuBP170VQr+gZdGD0QDHs2V6JlNx3QWiVAhpdElU3n4+mwtpRFpKvPygB8JzwjBpeO41PywLAqdOv5FD2MhnR1W2ym14942m/IUQUK/kTHR68Q1GP37qn7Gbx5ZYwEhSaMeJLPB6wM21exZMRai46kWTHkxVTFB86w8xZX6ovKqc9SKtM4U+0oLUqia5N3H7EgTFpuT9NSon1VvqHDkjfWtrzCCHIOR3nWpc/rwC+htbDrqTimFM2TNxfAdVJwCIDI8GzHwoHe6biGI73W3Nb9ncNrwnkQS+WgEhHy2FwjA5h5yHhf6ELQckj6Dd21iNQXcs8iqVB5/VnCtWTjDoD5EFIhPdTZeU+n/1DpDlmzNxS4omPigo5w0RQa8m+2W7Ry37xeIvKQyIDRdpD1SUsz4q2OPjYG1wOJTGXkixdjbV1zcEFrJCfupE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.3.0
S3 API 1.5.1
Release Details
UpdatedSept. 5, 2026, 6:51 a.m.
Changelog

Changed

  • First release published to the Nextcloud app store. No code changes: the app metadata gained the bugs element the store requires, an SPDX licence identifier in place of the deprecated agpl shorthand, and the element order the XSD prescribes — info.xml did not validate before. The store also reads CHANGELOG.md and LICENSE from inside the archive, and neither existed at the v1.5.0 tag. Cutting a version rather than moving that tag leaves what v1.5.0 points at unchanged for anyone who already fetched it.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEATCCAukCAhP5MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTA0MTMxMzIxWhcNMzYxMjEwMTMxMzIxWjARMQ8wDQYD
VQQDDAZzM19hcGkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC+U2GK
/dqKekpMDR1KZtVG6e7tditjS8Q1HteEZSu3Tk/vgK0X8IIocrp7V3cFLIQ1dasq
Kw4dWd+SVEfDL8+DRYfTgyHz+MFB0FrFCUFIT4aLL02/0NCJqk7/bkWjFYf/lwRc
kRZIgbecsM1XNjGu5vaehQJU95LL/J3FkHd4QBbKaIEVqagER8wcixnGrDwAwmye
25qXeM+NYC6xiaHfxKsuqHbFWvHYkqvlmtxZ4uKmG9C8XriU850f2dj2NcrygQY4
Oiyp2qvtoaJHnSrld4ihh4X8U0jlWRGyTIa2PU15vFBWvHAq78I39XLeiuwB05eV
r2O7YDkLuBhw2u3X78jgZlCQNky4hsBVeGf9mUpi/K228mq1wkt91ABJe5CDPAjB
lVW8h6ODPS7iNL1jMijioUbmRaDwI41dzmVLTw8sTNizDcJNDBUDtKFr3YPJWP7F
BY4adIhNqrZ2GvOks6O0zCdTZg1a8LJmgBFk7qmX6hn9l8Me6miE6sZVvdK0r31z
N/wPTw8SM9Nt1ggOKGo2XRVEqtt/liQr3b0YZwfDF5bPbkKDNDRyVNi7Ggwo6t9E
veYhWliNGMm10JIvLDcfEWaLLrCf9wcZUEGWEVvj7oc47vYFnMSaS5Ny8TbhtapQ
vOu3EEK8ontze/7bwV5ZHT9Xi9qXIX/7kuEA4QIDAQABMA0GCSqGSIb3DQEBCwUA
A4IBAQBApDNQ3r9+6OOEO3BcnyL1RoRErSU7A4anT6XzQO6xSFmTfYopg6T+i9he
Rq3hhF0eVxB5dRRUxTslCGipAAk/rVilycfggwdjbmt4gD5g/FKvcMqfWHjo/Pdi
F6bEvicyKU88i74XTVMxAsrXITOXtcz90QTZOcweBQ8PIPIOWHKjBzo8+0Ytq8o2
GAcb0RBLQcs9wWDAWnXUxy1307tztCrQDvmGHvv+uDe7jPcu2S/DSDH9niVZEzFS
25W9ueKZsmV6ob4bBMYzdl8x/MOL38ZNXFMnsHuYkvmVdYGuND8Wr/N7wbEJquNW
o0eLPhV1dUod0Fqy4ZswszXQhA10
-----END CERTIFICATE-----
SignatureTafOcWH7r66+n77ARNqExXbcfbgUe7mAjFnI2ZJekbTpEELaNuWcxbWhZJ5cPs7UJLOFRYtI4lWBYFfN46Dlq68SrGetxpgXsQ/fGDrPVOjuM3XWZdMG35uBtOJnOzrr56M/kdhHZ7ppN/kE3cJPFJfeLLXQtHnqpUsnb+LBP0w70uHdih+a/PZ+VZRGI+9C6qcM9GGVvwxl+OP2kH0UYA5ZTF7lNUaNu6t6IGsxW3Kfiv+h5RGsxFTrYJw3iUlgxoLkqO+IxgwbuwoxfFvwhkZuxm2NKMDVhykrmMyeqUntpmgccscZ9YY7h3isS8r8oI0aJEEjNPLOSgeExpV9KQXe8xO55uV+7MXtQaiO+W8j30qAz6loGW6rapfhd6ONFDgd0sOQ7+ScC/5txn7z8n7IX0yFyCdAHwyUhwF93TdUn1Cr/95+uv7EI+jWcXGDIq+3JY7ppFIZg8QJ6fTmjt3J0+iPfhIokY+QL+TBcYWukt01EkcjJJc9NLBDgMqVyl3sV2v5iQfV1IiWClpPvhGyc4uq+JwZx96bPoLuvGEVlvyLz/3vu4TwdFESmUraroNVjzLKx6xfnrHPMZ/IfAqrVAmSqXEijm1L7InKsGm0lmO+yFlpB4Sn1C/MV8tLNIm5tzrB9AspQLxTJqdlXtVpVgVgRdNUwjaczPLXCPA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0

Nextcloud 33

S3 API 1.5.3
Release Details
UpdatedSept. 7, 2026, 7:44 a.m.
Changelog

Fixed

  • A conditional write took its lock on the wrong identity, so compare-and-swap could lose an update. The lock key hashed the bucket id, but one file can be reached through two buckets: nothing stopped registering /Documents as foo and /Documents/sub as bar, after which foo/sub/x.txt and bar/x.txt are the same file with two independent locks. Two concurrent If-None-Match: * requests, one per bucket, would then both observe "absent" and both succeed — exactly the silent lost update that content-derived ETags were introduced in 1.2.0 to prevent. The lock is now keyed on the object's resolved storage path, which is what actually identifies the file. Note that hashing the bucket's folder would not have been enough either: in the example above the two buckets have different folders, and it is the full path of the object that has to agree.
  • Registering a folder that another bucket already serves is refused, including the nesting case above. Two names for one folder have no use that a single bucket with a key prefix does not cover better, and they leave the app treating one directory as two buckets — separate multipart scratch areas inside it, two ETag rows racing over one file id. Existing overlapping buckets are left alone: they still work, and now share a lock correctly. The comparison normalizes the path first, because /Documents//sub, /Documents/./sub and /Documents/other/../sub all pass the folder-exists check — Nextcloud collapses those itself — and would otherwise have slipped past the overlap check while naming a folder that is already served.
  • Creating a bucket whose name is already taken answers 409 with a readable message. It used to hit the unique index and surface as a 500 carrying the raw driver error, for what is the most ordinary mistake in that form. The index is still what decides — two racing requests can both pass the pre-check — and that collision now maps to the same 409 rather than a 500.
  • Unexpected failures while creating a bucket no longer return the exception message to the browser; it could carry a filesystem path or driver detail. They are logged instead.

Changed

  • PHP 8.2 is supported again, down from the 8.3 that 1.5.2 briefly required. <php min-version> is resolved against the server, so it has to be satisfiable on the oldest Nextcloud in the range — and 32 (which asks for 8.1) through 34 (8.2) all run on 8.2. Nextcloud 35 does need 8.3, but it enforces that itself, so the lower floor costs its users nothing while 32–34 keep working on the PHP their Nextcloud actually asks for. Verified by linting on 8.1, 8.2 and 8.3; nothing in the app uses a language feature past 8.1, and 8.1 stays out only because it is end of life.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEATCCAukCAhP5MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTA0MTMxMzIxWhcNMzYxMjEwMTMxMzIxWjARMQ8wDQYD
VQQDDAZzM19hcGkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC+U2GK
/dqKekpMDR1KZtVG6e7tditjS8Q1HteEZSu3Tk/vgK0X8IIocrp7V3cFLIQ1dasq
Kw4dWd+SVEfDL8+DRYfTgyHz+MFB0FrFCUFIT4aLL02/0NCJqk7/bkWjFYf/lwRc
kRZIgbecsM1XNjGu5vaehQJU95LL/J3FkHd4QBbKaIEVqagER8wcixnGrDwAwmye
25qXeM+NYC6xiaHfxKsuqHbFWvHYkqvlmtxZ4uKmG9C8XriU850f2dj2NcrygQY4
Oiyp2qvtoaJHnSrld4ihh4X8U0jlWRGyTIa2PU15vFBWvHAq78I39XLeiuwB05eV
r2O7YDkLuBhw2u3X78jgZlCQNky4hsBVeGf9mUpi/K228mq1wkt91ABJe5CDPAjB
lVW8h6ODPS7iNL1jMijioUbmRaDwI41dzmVLTw8sTNizDcJNDBUDtKFr3YPJWP7F
BY4adIhNqrZ2GvOks6O0zCdTZg1a8LJmgBFk7qmX6hn9l8Me6miE6sZVvdK0r31z
N/wPTw8SM9Nt1ggOKGo2XRVEqtt/liQr3b0YZwfDF5bPbkKDNDRyVNi7Ggwo6t9E
veYhWliNGMm10JIvLDcfEWaLLrCf9wcZUEGWEVvj7oc47vYFnMSaS5Ny8TbhtapQ
vOu3EEK8ontze/7bwV5ZHT9Xi9qXIX/7kuEA4QIDAQABMA0GCSqGSIb3DQEBCwUA
A4IBAQBApDNQ3r9+6OOEO3BcnyL1RoRErSU7A4anT6XzQO6xSFmTfYopg6T+i9he
Rq3hhF0eVxB5dRRUxTslCGipAAk/rVilycfggwdjbmt4gD5g/FKvcMqfWHjo/Pdi
F6bEvicyKU88i74XTVMxAsrXITOXtcz90QTZOcweBQ8PIPIOWHKjBzo8+0Ytq8o2
GAcb0RBLQcs9wWDAWnXUxy1307tztCrQDvmGHvv+uDe7jPcu2S/DSDH9niVZEzFS
25W9ueKZsmV6ob4bBMYzdl8x/MOL38ZNXFMnsHuYkvmVdYGuND8Wr/N7wbEJquNW
o0eLPhV1dUod0Fqy4ZswszXQhA10
-----END CERTIFICATE-----
SignatureBxv7eS0izf6Tc6vZ8IQfPug86DhdLGRXQV7NCt8eXIHoFUhIFRx92T6RCoeEM2CnR8Um3S3IgA7zSCx08ckJ7ZITpZV5e2Q76lX9ql5O2sIXX/Rai0udBIl1rb6QXmFwTRFJ/E+zO/dE49hQgIft2LXs+Shctrha5OmvxFzOd8FI8FxjQCPHsYHXX+1lsXqKCUcGepxOof5YOCvDV34tq2jz9VqtmPBe0heUpR7eBJZoCvdPfQHyW4xDW09aAIe/5avZNtUg2EG38kqrPGKrTwOctVVwhNxHGhMQ7pTCgwHtm9SGdUCondbVCDebb23eTEA56ytNRAJKOO9P3DaP2FihIIgkTh8XhEajFbKyhI41EjV65ya4+UUAld0up+J1RNHOgjVQNZhQCPckV6zynBh+Qd2iE5hsmpkDZE/QfJ9SJaU+IkRIoIfdTYmQZsG3uKLTkzSCCL15YjfTNNxTRptoQ3J4u1BO7MSnexD7xqbGpUBwFyRQrA1N+mTQp9DrjvRAXEgNgoFyniYPoRyfyTDRIeyC7ETYKaZH4dyzi8jd7NiYai7dwQ6XuOkoNPw6nyiVSxPxdE0JyHOceb1owVlgfqAOCrefMovJ9EufqJnfSMXOLLcCfU6l4BHug0CjxtA+iAjXa5KzwELxGZazarGJZl/t0vYtolhjWGC8gAE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.2.0
S3 API 1.5.2
Release Details
UpdatedSept. 7, 2026, 7:03 a.m.
Changelog

Changed

  • Nextcloud 35 is supported: max-version moves from 34 to 35. No code changes were needed — every OCP interface this app uses was checked against stable35 and all 37 of them still exist. TimedJob is the one worth naming: it dropped the deprecated execute() in 33, but this app implements run(), which is still the abstract method. Access control was already declared with #[NoAdminRequired], #[NoCSRFRequired] and #[PublicPage] attributes rather than the docblock annotations Nextcloud logs a deprecation for.
  • The supported range narrows to Nextcloud 32–35 and PHP 8.3+, from 30–34 and PHP 8.1+. Nextcloud 35 requires PHP 8.3, and the app store resolves <php min-version> against the server rather than against Nextcloud's own floor, so a single declared minimum has to cover the whole range. Choosing 8.3 means users on 32, 33 or 34 need a PHP newer than their Nextcloud asks for; that is the deliberate cost of testing against one interpreter instead of four, and PHP 8.1 is out of security support regardless. Nothing in the app needs a language feature past 8.1 — this bounds what is tested, not what parses. Nextcloud 30 and 31 are end of life and go with it.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEATCCAukCAhP5MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTA0MTMxMzIxWhcNMzYxMjEwMTMxMzIxWjARMQ8wDQYD
VQQDDAZzM19hcGkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC+U2GK
/dqKekpMDR1KZtVG6e7tditjS8Q1HteEZSu3Tk/vgK0X8IIocrp7V3cFLIQ1dasq
Kw4dWd+SVEfDL8+DRYfTgyHz+MFB0FrFCUFIT4aLL02/0NCJqk7/bkWjFYf/lwRc
kRZIgbecsM1XNjGu5vaehQJU95LL/J3FkHd4QBbKaIEVqagER8wcixnGrDwAwmye
25qXeM+NYC6xiaHfxKsuqHbFWvHYkqvlmtxZ4uKmG9C8XriU850f2dj2NcrygQY4
Oiyp2qvtoaJHnSrld4ihh4X8U0jlWRGyTIa2PU15vFBWvHAq78I39XLeiuwB05eV
r2O7YDkLuBhw2u3X78jgZlCQNky4hsBVeGf9mUpi/K228mq1wkt91ABJe5CDPAjB
lVW8h6ODPS7iNL1jMijioUbmRaDwI41dzmVLTw8sTNizDcJNDBUDtKFr3YPJWP7F
BY4adIhNqrZ2GvOks6O0zCdTZg1a8LJmgBFk7qmX6hn9l8Me6miE6sZVvdK0r31z
N/wPTw8SM9Nt1ggOKGo2XRVEqtt/liQr3b0YZwfDF5bPbkKDNDRyVNi7Ggwo6t9E
veYhWliNGMm10JIvLDcfEWaLLrCf9wcZUEGWEVvj7oc47vYFnMSaS5Ny8TbhtapQ
vOu3EEK8ontze/7bwV5ZHT9Xi9qXIX/7kuEA4QIDAQABMA0GCSqGSIb3DQEBCwUA
A4IBAQBApDNQ3r9+6OOEO3BcnyL1RoRErSU7A4anT6XzQO6xSFmTfYopg6T+i9he
Rq3hhF0eVxB5dRRUxTslCGipAAk/rVilycfggwdjbmt4gD5g/FKvcMqfWHjo/Pdi
F6bEvicyKU88i74XTVMxAsrXITOXtcz90QTZOcweBQ8PIPIOWHKjBzo8+0Ytq8o2
GAcb0RBLQcs9wWDAWnXUxy1307tztCrQDvmGHvv+uDe7jPcu2S/DSDH9niVZEzFS
25W9ueKZsmV6ob4bBMYzdl8x/MOL38ZNXFMnsHuYkvmVdYGuND8Wr/N7wbEJquNW
o0eLPhV1dUod0Fqy4ZswszXQhA10
-----END CERTIFICATE-----
Signaturego7SuMzb3Y5g2yrfg9WxL9FjOI7BBbUsyJ0n8LHGRGTH8yus7Nv7zRXzOtP1CmVcR4idihqDAc79SBW8bKaS/ukkYmXAmxXlWUQ9dbF9TyqCPxDJHjsND2WiNS3vC8/TBNzMmHw17QHxF5XpnCV6NzKCqQO6PdinIPBGI83F8V9T2vYDPJY58sV01fXT2fcac4qbTZ7arxvbHjpUatbhwKQLKm6vCqwpuSDZtnFNM0eqNtI9ZWCkuBP170VQr+gZdGD0QDHs2V6JlNx3QWiVAhpdElU3n4+mwtpRFpKvPygB8JzwjBpeO41PywLAqdOv5FD2MhnR1W2ym14942m/IUQUK/kTHR68Q1GP37qn7Gbx5ZYwEhSaMeJLPB6wM21exZMRai46kWTHkxVTFB86w8xZX6ovKqc9SKtM4U+0oLUqia5N3H7EgTFpuT9NSon1VvqHDkjfWtrzCCHIOR3nWpc/rwC+htbDrqTimFM2TNxfAdVJwCIDI8GzHwoHe6biGI73W3Nb9ncNrwnkQS+WgEhHy2FwjA5h5yHhf6ELQckj6Dd21iNQXcs8iqVB5/VnCtWTjDoD5EFIhPdTZeU+n/1DpDlmzNxS4omPigo5w0RQa8m+2W7Ry37xeIvKQyIDRdpD1SUsz4q2OPjYG1wOJTGXkixdjbV1zcEFrJCfupE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.3.0
S3 API 1.5.1
Release Details
UpdatedSept. 5, 2026, 6:51 a.m.
Changelog

Changed

  • First release published to the Nextcloud app store. No code changes: the app metadata gained the bugs element the store requires, an SPDX licence identifier in place of the deprecated agpl shorthand, and the element order the XSD prescribes — info.xml did not validate before. The store also reads CHANGELOG.md and LICENSE from inside the archive, and neither existed at the v1.5.0 tag. Cutting a version rather than moving that tag leaves what v1.5.0 points at unchanged for anyone who already fetched it.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEATCCAukCAhP5MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTA0MTMxMzIxWhcNMzYxMjEwMTMxMzIxWjARMQ8wDQYD
VQQDDAZzM19hcGkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC+U2GK
/dqKekpMDR1KZtVG6e7tditjS8Q1HteEZSu3Tk/vgK0X8IIocrp7V3cFLIQ1dasq
Kw4dWd+SVEfDL8+DRYfTgyHz+MFB0FrFCUFIT4aLL02/0NCJqk7/bkWjFYf/lwRc
kRZIgbecsM1XNjGu5vaehQJU95LL/J3FkHd4QBbKaIEVqagER8wcixnGrDwAwmye
25qXeM+NYC6xiaHfxKsuqHbFWvHYkqvlmtxZ4uKmG9C8XriU850f2dj2NcrygQY4
Oiyp2qvtoaJHnSrld4ihh4X8U0jlWRGyTIa2PU15vFBWvHAq78I39XLeiuwB05eV
r2O7YDkLuBhw2u3X78jgZlCQNky4hsBVeGf9mUpi/K228mq1wkt91ABJe5CDPAjB
lVW8h6ODPS7iNL1jMijioUbmRaDwI41dzmVLTw8sTNizDcJNDBUDtKFr3YPJWP7F
BY4adIhNqrZ2GvOks6O0zCdTZg1a8LJmgBFk7qmX6hn9l8Me6miE6sZVvdK0r31z
N/wPTw8SM9Nt1ggOKGo2XRVEqtt/liQr3b0YZwfDF5bPbkKDNDRyVNi7Ggwo6t9E
veYhWliNGMm10JIvLDcfEWaLLrCf9wcZUEGWEVvj7oc47vYFnMSaS5Ny8TbhtapQ
vOu3EEK8ontze/7bwV5ZHT9Xi9qXIX/7kuEA4QIDAQABMA0GCSqGSIb3DQEBCwUA
A4IBAQBApDNQ3r9+6OOEO3BcnyL1RoRErSU7A4anT6XzQO6xSFmTfYopg6T+i9he
Rq3hhF0eVxB5dRRUxTslCGipAAk/rVilycfggwdjbmt4gD5g/FKvcMqfWHjo/Pdi
F6bEvicyKU88i74XTVMxAsrXITOXtcz90QTZOcweBQ8PIPIOWHKjBzo8+0Ytq8o2
GAcb0RBLQcs9wWDAWnXUxy1307tztCrQDvmGHvv+uDe7jPcu2S/DSDH9niVZEzFS
25W9ueKZsmV6ob4bBMYzdl8x/MOL38ZNXFMnsHuYkvmVdYGuND8Wr/N7wbEJquNW
o0eLPhV1dUod0Fqy4ZswszXQhA10
-----END CERTIFICATE-----
SignatureTafOcWH7r66+n77ARNqExXbcfbgUe7mAjFnI2ZJekbTpEELaNuWcxbWhZJ5cPs7UJLOFRYtI4lWBYFfN46Dlq68SrGetxpgXsQ/fGDrPVOjuM3XWZdMG35uBtOJnOzrr56M/kdhHZ7ppN/kE3cJPFJfeLLXQtHnqpUsnb+LBP0w70uHdih+a/PZ+VZRGI+9C6qcM9GGVvwxl+OP2kH0UYA5ZTF7lNUaNu6t6IGsxW3Kfiv+h5RGsxFTrYJw3iUlgxoLkqO+IxgwbuwoxfFvwhkZuxm2NKMDVhykrmMyeqUntpmgccscZ9YY7h3isS8r8oI0aJEEjNPLOSgeExpV9KQXe8xO55uV+7MXtQaiO+W8j30qAz6loGW6rapfhd6ONFDgd0sOQ7+ScC/5txn7z8n7IX0yFyCdAHwyUhwF93TdUn1Cr/95+uv7EI+jWcXGDIq+3JY7ppFIZg8QJ6fTmjt3J0+iPfhIokY+QL+TBcYWukt01EkcjJJc9NLBDgMqVyl3sV2v5iQfV1IiWClpPvhGyc4uq+JwZx96bPoLuvGEVlvyLz/3vu4TwdFESmUraroNVjzLKx6xfnrHPMZ/IfAqrVAmSqXEijm1L7InKsGm0lmO+yFlpB4Sn1C/MV8tLNIm5tzrB9AspQLxTJqdlXtVpVgVgRdNUwjaczPLXCPA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0

Nextcloud 32

S3 API 1.5.3
Release Details
UpdatedSept. 7, 2026, 7:44 a.m.
Changelog

Fixed

  • A conditional write took its lock on the wrong identity, so compare-and-swap could lose an update. The lock key hashed the bucket id, but one file can be reached through two buckets: nothing stopped registering /Documents as foo and /Documents/sub as bar, after which foo/sub/x.txt and bar/x.txt are the same file with two independent locks. Two concurrent If-None-Match: * requests, one per bucket, would then both observe "absent" and both succeed — exactly the silent lost update that content-derived ETags were introduced in 1.2.0 to prevent. The lock is now keyed on the object's resolved storage path, which is what actually identifies the file. Note that hashing the bucket's folder would not have been enough either: in the example above the two buckets have different folders, and it is the full path of the object that has to agree.
  • Registering a folder that another bucket already serves is refused, including the nesting case above. Two names for one folder have no use that a single bucket with a key prefix does not cover better, and they leave the app treating one directory as two buckets — separate multipart scratch areas inside it, two ETag rows racing over one file id. Existing overlapping buckets are left alone: they still work, and now share a lock correctly. The comparison normalizes the path first, because /Documents//sub, /Documents/./sub and /Documents/other/../sub all pass the folder-exists check — Nextcloud collapses those itself — and would otherwise have slipped past the overlap check while naming a folder that is already served.
  • Creating a bucket whose name is already taken answers 409 with a readable message. It used to hit the unique index and surface as a 500 carrying the raw driver error, for what is the most ordinary mistake in that form. The index is still what decides — two racing requests can both pass the pre-check — and that collision now maps to the same 409 rather than a 500.
  • Unexpected failures while creating a bucket no longer return the exception message to the browser; it could carry a filesystem path or driver detail. They are logged instead.

Changed

  • PHP 8.2 is supported again, down from the 8.3 that 1.5.2 briefly required. <php min-version> is resolved against the server, so it has to be satisfiable on the oldest Nextcloud in the range — and 32 (which asks for 8.1) through 34 (8.2) all run on 8.2. Nextcloud 35 does need 8.3, but it enforces that itself, so the lower floor costs its users nothing while 32–34 keep working on the PHP their Nextcloud actually asks for. Verified by linting on 8.1, 8.2 and 8.3; nothing in the app uses a language feature past 8.1, and 8.1 stays out only because it is end of life.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEATCCAukCAhP5MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTA0MTMxMzIxWhcNMzYxMjEwMTMxMzIxWjARMQ8wDQYD
VQQDDAZzM19hcGkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC+U2GK
/dqKekpMDR1KZtVG6e7tditjS8Q1HteEZSu3Tk/vgK0X8IIocrp7V3cFLIQ1dasq
Kw4dWd+SVEfDL8+DRYfTgyHz+MFB0FrFCUFIT4aLL02/0NCJqk7/bkWjFYf/lwRc
kRZIgbecsM1XNjGu5vaehQJU95LL/J3FkHd4QBbKaIEVqagER8wcixnGrDwAwmye
25qXeM+NYC6xiaHfxKsuqHbFWvHYkqvlmtxZ4uKmG9C8XriU850f2dj2NcrygQY4
Oiyp2qvtoaJHnSrld4ihh4X8U0jlWRGyTIa2PU15vFBWvHAq78I39XLeiuwB05eV
r2O7YDkLuBhw2u3X78jgZlCQNky4hsBVeGf9mUpi/K228mq1wkt91ABJe5CDPAjB
lVW8h6ODPS7iNL1jMijioUbmRaDwI41dzmVLTw8sTNizDcJNDBUDtKFr3YPJWP7F
BY4adIhNqrZ2GvOks6O0zCdTZg1a8LJmgBFk7qmX6hn9l8Me6miE6sZVvdK0r31z
N/wPTw8SM9Nt1ggOKGo2XRVEqtt/liQr3b0YZwfDF5bPbkKDNDRyVNi7Ggwo6t9E
veYhWliNGMm10JIvLDcfEWaLLrCf9wcZUEGWEVvj7oc47vYFnMSaS5Ny8TbhtapQ
vOu3EEK8ontze/7bwV5ZHT9Xi9qXIX/7kuEA4QIDAQABMA0GCSqGSIb3DQEBCwUA
A4IBAQBApDNQ3r9+6OOEO3BcnyL1RoRErSU7A4anT6XzQO6xSFmTfYopg6T+i9he
Rq3hhF0eVxB5dRRUxTslCGipAAk/rVilycfggwdjbmt4gD5g/FKvcMqfWHjo/Pdi
F6bEvicyKU88i74XTVMxAsrXITOXtcz90QTZOcweBQ8PIPIOWHKjBzo8+0Ytq8o2
GAcb0RBLQcs9wWDAWnXUxy1307tztCrQDvmGHvv+uDe7jPcu2S/DSDH9niVZEzFS
25W9ueKZsmV6ob4bBMYzdl8x/MOL38ZNXFMnsHuYkvmVdYGuND8Wr/N7wbEJquNW
o0eLPhV1dUod0Fqy4ZswszXQhA10
-----END CERTIFICATE-----
SignatureBxv7eS0izf6Tc6vZ8IQfPug86DhdLGRXQV7NCt8eXIHoFUhIFRx92T6RCoeEM2CnR8Um3S3IgA7zSCx08ckJ7ZITpZV5e2Q76lX9ql5O2sIXX/Rai0udBIl1rb6QXmFwTRFJ/E+zO/dE49hQgIft2LXs+Shctrha5OmvxFzOd8FI8FxjQCPHsYHXX+1lsXqKCUcGepxOof5YOCvDV34tq2jz9VqtmPBe0heUpR7eBJZoCvdPfQHyW4xDW09aAIe/5avZNtUg2EG38kqrPGKrTwOctVVwhNxHGhMQ7pTCgwHtm9SGdUCondbVCDebb23eTEA56ytNRAJKOO9P3DaP2FihIIgkTh8XhEajFbKyhI41EjV65ya4+UUAld0up+J1RNHOgjVQNZhQCPckV6zynBh+Qd2iE5hsmpkDZE/QfJ9SJaU+IkRIoIfdTYmQZsG3uKLTkzSCCL15YjfTNNxTRptoQ3J4u1BO7MSnexD7xqbGpUBwFyRQrA1N+mTQp9DrjvRAXEgNgoFyniYPoRyfyTDRIeyC7ETYKaZH4dyzi8jd7NiYai7dwQ6XuOkoNPw6nyiVSxPxdE0JyHOceb1owVlgfqAOCrefMovJ9EufqJnfSMXOLLcCfU6l4BHug0CjxtA+iAjXa5KzwELxGZazarGJZl/t0vYtolhjWGC8gAE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.2.0
S3 API 1.5.2
Release Details
UpdatedSept. 7, 2026, 7:03 a.m.
Changelog

Changed

  • Nextcloud 35 is supported: max-version moves from 34 to 35. No code changes were needed — every OCP interface this app uses was checked against stable35 and all 37 of them still exist. TimedJob is the one worth naming: it dropped the deprecated execute() in 33, but this app implements run(), which is still the abstract method. Access control was already declared with #[NoAdminRequired], #[NoCSRFRequired] and #[PublicPage] attributes rather than the docblock annotations Nextcloud logs a deprecation for.
  • The supported range narrows to Nextcloud 32–35 and PHP 8.3+, from 30–34 and PHP 8.1+. Nextcloud 35 requires PHP 8.3, and the app store resolves <php min-version> against the server rather than against Nextcloud's own floor, so a single declared minimum has to cover the whole range. Choosing 8.3 means users on 32, 33 or 34 need a PHP newer than their Nextcloud asks for; that is the deliberate cost of testing against one interpreter instead of four, and PHP 8.1 is out of security support regardless. Nothing in the app needs a language feature past 8.1 — this bounds what is tested, not what parses. Nextcloud 30 and 31 are end of life and go with it.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEATCCAukCAhP5MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTA0MTMxMzIxWhcNMzYxMjEwMTMxMzIxWjARMQ8wDQYD
VQQDDAZzM19hcGkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC+U2GK
/dqKekpMDR1KZtVG6e7tditjS8Q1HteEZSu3Tk/vgK0X8IIocrp7V3cFLIQ1dasq
Kw4dWd+SVEfDL8+DRYfTgyHz+MFB0FrFCUFIT4aLL02/0NCJqk7/bkWjFYf/lwRc
kRZIgbecsM1XNjGu5vaehQJU95LL/J3FkHd4QBbKaIEVqagER8wcixnGrDwAwmye
25qXeM+NYC6xiaHfxKsuqHbFWvHYkqvlmtxZ4uKmG9C8XriU850f2dj2NcrygQY4
Oiyp2qvtoaJHnSrld4ihh4X8U0jlWRGyTIa2PU15vFBWvHAq78I39XLeiuwB05eV
r2O7YDkLuBhw2u3X78jgZlCQNky4hsBVeGf9mUpi/K228mq1wkt91ABJe5CDPAjB
lVW8h6ODPS7iNL1jMijioUbmRaDwI41dzmVLTw8sTNizDcJNDBUDtKFr3YPJWP7F
BY4adIhNqrZ2GvOks6O0zCdTZg1a8LJmgBFk7qmX6hn9l8Me6miE6sZVvdK0r31z
N/wPTw8SM9Nt1ggOKGo2XRVEqtt/liQr3b0YZwfDF5bPbkKDNDRyVNi7Ggwo6t9E
veYhWliNGMm10JIvLDcfEWaLLrCf9wcZUEGWEVvj7oc47vYFnMSaS5Ny8TbhtapQ
vOu3EEK8ontze/7bwV5ZHT9Xi9qXIX/7kuEA4QIDAQABMA0GCSqGSIb3DQEBCwUA
A4IBAQBApDNQ3r9+6OOEO3BcnyL1RoRErSU7A4anT6XzQO6xSFmTfYopg6T+i9he
Rq3hhF0eVxB5dRRUxTslCGipAAk/rVilycfggwdjbmt4gD5g/FKvcMqfWHjo/Pdi
F6bEvicyKU88i74XTVMxAsrXITOXtcz90QTZOcweBQ8PIPIOWHKjBzo8+0Ytq8o2
GAcb0RBLQcs9wWDAWnXUxy1307tztCrQDvmGHvv+uDe7jPcu2S/DSDH9niVZEzFS
25W9ueKZsmV6ob4bBMYzdl8x/MOL38ZNXFMnsHuYkvmVdYGuND8Wr/N7wbEJquNW
o0eLPhV1dUod0Fqy4ZswszXQhA10
-----END CERTIFICATE-----
Signaturego7SuMzb3Y5g2yrfg9WxL9FjOI7BBbUsyJ0n8LHGRGTH8yus7Nv7zRXzOtP1CmVcR4idihqDAc79SBW8bKaS/ukkYmXAmxXlWUQ9dbF9TyqCPxDJHjsND2WiNS3vC8/TBNzMmHw17QHxF5XpnCV6NzKCqQO6PdinIPBGI83F8V9T2vYDPJY58sV01fXT2fcac4qbTZ7arxvbHjpUatbhwKQLKm6vCqwpuSDZtnFNM0eqNtI9ZWCkuBP170VQr+gZdGD0QDHs2V6JlNx3QWiVAhpdElU3n4+mwtpRFpKvPygB8JzwjBpeO41PywLAqdOv5FD2MhnR1W2ym14942m/IUQUK/kTHR68Q1GP37qn7Gbx5ZYwEhSaMeJLPB6wM21exZMRai46kWTHkxVTFB86w8xZX6ovKqc9SKtM4U+0oLUqia5N3H7EgTFpuT9NSon1VvqHDkjfWtrzCCHIOR3nWpc/rwC+htbDrqTimFM2TNxfAdVJwCIDI8GzHwoHe6biGI73W3Nb9ncNrwnkQS+WgEhHy2FwjA5h5yHhf6ELQckj6Dd21iNQXcs8iqVB5/VnCtWTjDoD5EFIhPdTZeU+n/1DpDlmzNxS4omPigo5w0RQa8m+2W7Ry37xeIvKQyIDRdpD1SUsz4q2OPjYG1wOJTGXkixdjbV1zcEFrJCfupE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<36.0.0
Minimum Integer bits32
PHP>=8.3.0
S3 API 1.5.1
Release Details
UpdatedSept. 5, 2026, 6:51 a.m.
Changelog

Changed

  • First release published to the Nextcloud app store. No code changes: the app metadata gained the bugs element the store requires, an SPDX licence identifier in place of the deprecated agpl shorthand, and the element order the XSD prescribes — info.xml did not validate before. The store also reads CHANGELOG.md and LICENSE from inside the archive, and neither existed at the v1.5.0 tag. Cutting a version rather than moving that tag leaves what v1.5.0 points at unchanged for anyone who already fetched it.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEATCCAukCAhP5MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTA0MTMxMzIxWhcNMzYxMjEwMTMxMzIxWjARMQ8wDQYD
VQQDDAZzM19hcGkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC+U2GK
/dqKekpMDR1KZtVG6e7tditjS8Q1HteEZSu3Tk/vgK0X8IIocrp7V3cFLIQ1dasq
Kw4dWd+SVEfDL8+DRYfTgyHz+MFB0FrFCUFIT4aLL02/0NCJqk7/bkWjFYf/lwRc
kRZIgbecsM1XNjGu5vaehQJU95LL/J3FkHd4QBbKaIEVqagER8wcixnGrDwAwmye
25qXeM+NYC6xiaHfxKsuqHbFWvHYkqvlmtxZ4uKmG9C8XriU850f2dj2NcrygQY4
Oiyp2qvtoaJHnSrld4ihh4X8U0jlWRGyTIa2PU15vFBWvHAq78I39XLeiuwB05eV
r2O7YDkLuBhw2u3X78jgZlCQNky4hsBVeGf9mUpi/K228mq1wkt91ABJe5CDPAjB
lVW8h6ODPS7iNL1jMijioUbmRaDwI41dzmVLTw8sTNizDcJNDBUDtKFr3YPJWP7F
BY4adIhNqrZ2GvOks6O0zCdTZg1a8LJmgBFk7qmX6hn9l8Me6miE6sZVvdK0r31z
N/wPTw8SM9Nt1ggOKGo2XRVEqtt/liQr3b0YZwfDF5bPbkKDNDRyVNi7Ggwo6t9E
veYhWliNGMm10JIvLDcfEWaLLrCf9wcZUEGWEVvj7oc47vYFnMSaS5Ny8TbhtapQ
vOu3EEK8ontze/7bwV5ZHT9Xi9qXIX/7kuEA4QIDAQABMA0GCSqGSIb3DQEBCwUA
A4IBAQBApDNQ3r9+6OOEO3BcnyL1RoRErSU7A4anT6XzQO6xSFmTfYopg6T+i9he
Rq3hhF0eVxB5dRRUxTslCGipAAk/rVilycfggwdjbmt4gD5g/FKvcMqfWHjo/Pdi
F6bEvicyKU88i74XTVMxAsrXITOXtcz90QTZOcweBQ8PIPIOWHKjBzo8+0Ytq8o2
GAcb0RBLQcs9wWDAWnXUxy1307tztCrQDvmGHvv+uDe7jPcu2S/DSDH9niVZEzFS
25W9ueKZsmV6ob4bBMYzdl8x/MOL38ZNXFMnsHuYkvmVdYGuND8Wr/N7wbEJquNW
o0eLPhV1dUod0Fqy4ZswszXQhA10
-----END CERTIFICATE-----
SignatureTafOcWH7r66+n77ARNqExXbcfbgUe7mAjFnI2ZJekbTpEELaNuWcxbWhZJ5cPs7UJLOFRYtI4lWBYFfN46Dlq68SrGetxpgXsQ/fGDrPVOjuM3XWZdMG35uBtOJnOzrr56M/kdhHZ7ppN/kE3cJPFJfeLLXQtHnqpUsnb+LBP0w70uHdih+a/PZ+VZRGI+9C6qcM9GGVvwxl+OP2kH0UYA5ZTF7lNUaNu6t6IGsxW3Kfiv+h5RGsxFTrYJw3iUlgxoLkqO+IxgwbuwoxfFvwhkZuxm2NKMDVhykrmMyeqUntpmgccscZ9YY7h3isS8r8oI0aJEEjNPLOSgeExpV9KQXe8xO55uV+7MXtQaiO+W8j30qAz6loGW6rapfhd6ONFDgd0sOQ7+ScC/5txn7z8n7IX0yFyCdAHwyUhwF93TdUn1Cr/95+uv7EI+jWcXGDIq+3JY7ppFIZg8QJ6fTmjt3J0+iPfhIokY+QL+TBcYWukt01EkcjJJc9NLBDgMqVyl3sV2v5iQfV1IiWClpPvhGyc4uq+JwZx96bPoLuvGEVlvyLz/3vu4TwdFESmUraroNVjzLKx6xfnrHPMZ/IfAqrVAmSqXEijm1L7InKsGm0lmO+yFlpB4Sn1C/MV8tLNIm5tzrB9AspQLxTJqdlXtVpVgVgRdNUwjaczPLXCPA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0

Nextcloud 31

S3 API 1.5.1
Release Details
UpdatedSept. 5, 2026, 6:51 a.m.
Changelog

Changed

  • First release published to the Nextcloud app store. No code changes: the app metadata gained the bugs element the store requires, an SPDX licence identifier in place of the deprecated agpl shorthand, and the element order the XSD prescribes — info.xml did not validate before. The store also reads CHANGELOG.md and LICENSE from inside the archive, and neither existed at the v1.5.0 tag. Cutting a version rather than moving that tag leaves what v1.5.0 points at unchanged for anyone who already fetched it.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEATCCAukCAhP5MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTA0MTMxMzIxWhcNMzYxMjEwMTMxMzIxWjARMQ8wDQYD
VQQDDAZzM19hcGkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC+U2GK
/dqKekpMDR1KZtVG6e7tditjS8Q1HteEZSu3Tk/vgK0X8IIocrp7V3cFLIQ1dasq
Kw4dWd+SVEfDL8+DRYfTgyHz+MFB0FrFCUFIT4aLL02/0NCJqk7/bkWjFYf/lwRc
kRZIgbecsM1XNjGu5vaehQJU95LL/J3FkHd4QBbKaIEVqagER8wcixnGrDwAwmye
25qXeM+NYC6xiaHfxKsuqHbFWvHYkqvlmtxZ4uKmG9C8XriU850f2dj2NcrygQY4
Oiyp2qvtoaJHnSrld4ihh4X8U0jlWRGyTIa2PU15vFBWvHAq78I39XLeiuwB05eV
r2O7YDkLuBhw2u3X78jgZlCQNky4hsBVeGf9mUpi/K228mq1wkt91ABJe5CDPAjB
lVW8h6ODPS7iNL1jMijioUbmRaDwI41dzmVLTw8sTNizDcJNDBUDtKFr3YPJWP7F
BY4adIhNqrZ2GvOks6O0zCdTZg1a8LJmgBFk7qmX6hn9l8Me6miE6sZVvdK0r31z
N/wPTw8SM9Nt1ggOKGo2XRVEqtt/liQr3b0YZwfDF5bPbkKDNDRyVNi7Ggwo6t9E
veYhWliNGMm10JIvLDcfEWaLLrCf9wcZUEGWEVvj7oc47vYFnMSaS5Ny8TbhtapQ
vOu3EEK8ontze/7bwV5ZHT9Xi9qXIX/7kuEA4QIDAQABMA0GCSqGSIb3DQEBCwUA
A4IBAQBApDNQ3r9+6OOEO3BcnyL1RoRErSU7A4anT6XzQO6xSFmTfYopg6T+i9he
Rq3hhF0eVxB5dRRUxTslCGipAAk/rVilycfggwdjbmt4gD5g/FKvcMqfWHjo/Pdi
F6bEvicyKU88i74XTVMxAsrXITOXtcz90QTZOcweBQ8PIPIOWHKjBzo8+0Ytq8o2
GAcb0RBLQcs9wWDAWnXUxy1307tztCrQDvmGHvv+uDe7jPcu2S/DSDH9niVZEzFS
25W9ueKZsmV6ob4bBMYzdl8x/MOL38ZNXFMnsHuYkvmVdYGuND8Wr/N7wbEJquNW
o0eLPhV1dUod0Fqy4ZswszXQhA10
-----END CERTIFICATE-----
SignatureTafOcWH7r66+n77ARNqExXbcfbgUe7mAjFnI2ZJekbTpEELaNuWcxbWhZJ5cPs7UJLOFRYtI4lWBYFfN46Dlq68SrGetxpgXsQ/fGDrPVOjuM3XWZdMG35uBtOJnOzrr56M/kdhHZ7ppN/kE3cJPFJfeLLXQtHnqpUsnb+LBP0w70uHdih+a/PZ+VZRGI+9C6qcM9GGVvwxl+OP2kH0UYA5ZTF7lNUaNu6t6IGsxW3Kfiv+h5RGsxFTrYJw3iUlgxoLkqO+IxgwbuwoxfFvwhkZuxm2NKMDVhykrmMyeqUntpmgccscZ9YY7h3isS8r8oI0aJEEjNPLOSgeExpV9KQXe8xO55uV+7MXtQaiO+W8j30qAz6loGW6rapfhd6ONFDgd0sOQ7+ScC/5txn7z8n7IX0yFyCdAHwyUhwF93TdUn1Cr/95+uv7EI+jWcXGDIq+3JY7ppFIZg8QJ6fTmjt3J0+iPfhIokY+QL+TBcYWukt01EkcjJJc9NLBDgMqVyl3sV2v5iQfV1IiWClpPvhGyc4uq+JwZx96bPoLuvGEVlvyLz/3vu4TwdFESmUraroNVjzLKx6xfnrHPMZ/IfAqrVAmSqXEijm1L7InKsGm0lmO+yFlpB4Sn1C/MV8tLNIm5tzrB9AspQLxTJqdlXtVpVgVgRdNUwjaczPLXCPA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0

Nextcloud 30

S3 API 1.5.1
Release Details
UpdatedSept. 5, 2026, 6:51 a.m.
Changelog

Changed

  • First release published to the Nextcloud app store. No code changes: the app metadata gained the bugs element the store requires, an SPDX licence identifier in place of the deprecated agpl shorthand, and the element order the XSD prescribes — info.xml did not validate before. The store also reads CHANGELOG.md and LICENSE from inside the archive, and neither existed at the v1.5.0 tag. Cutting a version rather than moving that tag leaves what v1.5.0 points at unchanged for anyone who already fetched it.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIEATCCAukCAhP5MA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwOTA0MTMxMzIxWhcNMzYxMjEwMTMxMzIxWjARMQ8wDQYD
VQQDDAZzM19hcGkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC+U2GK
/dqKekpMDR1KZtVG6e7tditjS8Q1HteEZSu3Tk/vgK0X8IIocrp7V3cFLIQ1dasq
Kw4dWd+SVEfDL8+DRYfTgyHz+MFB0FrFCUFIT4aLL02/0NCJqk7/bkWjFYf/lwRc
kRZIgbecsM1XNjGu5vaehQJU95LL/J3FkHd4QBbKaIEVqagER8wcixnGrDwAwmye
25qXeM+NYC6xiaHfxKsuqHbFWvHYkqvlmtxZ4uKmG9C8XriU850f2dj2NcrygQY4
Oiyp2qvtoaJHnSrld4ihh4X8U0jlWRGyTIa2PU15vFBWvHAq78I39XLeiuwB05eV
r2O7YDkLuBhw2u3X78jgZlCQNky4hsBVeGf9mUpi/K228mq1wkt91ABJe5CDPAjB
lVW8h6ODPS7iNL1jMijioUbmRaDwI41dzmVLTw8sTNizDcJNDBUDtKFr3YPJWP7F
BY4adIhNqrZ2GvOks6O0zCdTZg1a8LJmgBFk7qmX6hn9l8Me6miE6sZVvdK0r31z
N/wPTw8SM9Nt1ggOKGo2XRVEqtt/liQr3b0YZwfDF5bPbkKDNDRyVNi7Ggwo6t9E
veYhWliNGMm10JIvLDcfEWaLLrCf9wcZUEGWEVvj7oc47vYFnMSaS5Ny8TbhtapQ
vOu3EEK8ontze/7bwV5ZHT9Xi9qXIX/7kuEA4QIDAQABMA0GCSqGSIb3DQEBCwUA
A4IBAQBApDNQ3r9+6OOEO3BcnyL1RoRErSU7A4anT6XzQO6xSFmTfYopg6T+i9he
Rq3hhF0eVxB5dRRUxTslCGipAAk/rVilycfggwdjbmt4gD5g/FKvcMqfWHjo/Pdi
F6bEvicyKU88i74XTVMxAsrXITOXtcz90QTZOcweBQ8PIPIOWHKjBzo8+0Ytq8o2
GAcb0RBLQcs9wWDAWnXUxy1307tztCrQDvmGHvv+uDe7jPcu2S/DSDH9niVZEzFS
25W9ueKZsmV6ob4bBMYzdl8x/MOL38ZNXFMnsHuYkvmVdYGuND8Wr/N7wbEJquNW
o0eLPhV1dUod0Fqy4ZswszXQhA10
-----END CERTIFICATE-----
SignatureTafOcWH7r66+n77ARNqExXbcfbgUe7mAjFnI2ZJekbTpEELaNuWcxbWhZJ5cPs7UJLOFRYtI4lWBYFfN46Dlq68SrGetxpgXsQ/fGDrPVOjuM3XWZdMG35uBtOJnOzrr56M/kdhHZ7ppN/kE3cJPFJfeLLXQtHnqpUsnb+LBP0w70uHdih+a/PZ+VZRGI+9C6qcM9GGVvwxl+OP2kH0UYA5ZTF7lNUaNu6t6IGsxW3Kfiv+h5RGsxFTrYJw3iUlgxoLkqO+IxgwbuwoxfFvwhkZuxm2NKMDVhykrmMyeqUntpmgccscZ9YY7h3isS8r8oI0aJEEjNPLOSgeExpV9KQXe8xO55uV+7MXtQaiO+W8j30qAz6loGW6rapfhd6ONFDgd0sOQ7+ScC/5txn7z8n7IX0yFyCdAHwyUhwF93TdUn1Cr/95+uv7EI+jWcXGDIq+3JY7ppFIZg8QJ6fTmjt3J0+iPfhIokY+QL+TBcYWukt01EkcjJJc9NLBDgMqVyl3sV2v5iQfV1IiWClpPvhGyc4uq+JwZx96bPoLuvGEVlvyLz/3vu4TwdFESmUraroNVjzLKx6xfnrHPMZ/IfAqrVAmSqXEijm1L7InKsGm0lmO+yFlpB4Sn1C/MV8tLNIm5tzrB9AspQLxTJqdlXtVpVgVgRdNUwjaczPLXCPA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0