Upgrade to Nextcloud 26


Critical changes were collected on GitHub. See the original ticket for links to the pull requests and tickets.



Make sure your appinfo/info.xml allows for Nextcloud 26.

    <nextcloud min-version="23" max-version="26" />

Personal settings section Groupware moved to Availability

Up to Nextcloud 25 there had been a settings section Groupware with the ID groupware. As of Nextcloud 26 this section doesn’t exist anymore. Existing server settings were moved to a new section Availability/availability.

If your app provides groupware-related settings, see if they make can be shown on the Availability page or need a new app-provided section.

Front-end changes

Removed APIs

Back-end changes

PHP 7.4

In this release support for PHP 7.4 was dropped. Make sure your app compatible with PHP 8.0 or higher.

PHP 8.2

In this release support for PHP 8.2 was added. See release notes from PHP about new deprecations.

Migration from PHPDoc annotations to native PHP attributes

Nextcloud 26 supports PHP 8.0 and later. This allows the migration from PHPDoc annotations to native attributes.

Planned removal of PSR-0 class loading

Nextcloud is still loading classes that follow the long deprecated and replaced PSR-0 standard. Nextcloud 26 is the last version that register a generic PSR-0 class loader. From Nextcloud 27 on apps have to either change class file names to match PSR-4 or ship their own (composer) class loader for PSR-0 files or. (PR#36114 by ChristophWurst)

Dependency Injection Parameters

App container parameters with pascal case names AppName, UserId and WebRoot are deprecated. Use the camel case variants appName, userId and webRoot instead if you have them injected into one of your app classes.

Changed APIs

  • OCP\Files\SimpleFS\ISimpleFile::getSize() may now return a float (to support sizes >2G on 32bit systems)

  • OCP\Files\SimpleFS\InMemoryFile::getSize() may now return a float (to support sizes >2G on 32bit systems)

  • It is not required anymore to call setParsedSubject and setParsedMessage on notifications and activity events when setRichSubject and setRichMessage are used a parsed version is computed automatically. (PR#34807 by come-nc)

  • Moved ICreateFromString::handleIMipMessage(string $name, string $calendarData): void; to its own Interface IHandleImipMessage (PR#34893 by miaulalala)

  • Signatures of methods of OCP\AppFramework\Db\Entity changed as follows (ref):
    • public static function fromParams(array $params) -> public static function fromParams(array $params): static

    • public static function fromRow(array $row) -> public static function fromRow(array $row): static

    • protected function setter($name, $args) -> protected function setter(string $name, array $args): void

    • protected function getter($name) -> protected function getter(string $name): mixed

    • protected function markFieldUpdated($attribute) -> protected function markFieldUpdated(string $attribute): void

  • Middlewares can be registered globally (see Global Middlewares, PR#36310 by ChristophWurst)

Removed APIs

  • OCP\BackgroundJob\IJobList::getAll method was removed (PR#36073 by come-nc)

  • 3rdparty dependency php-ds/php-ds was removed (PR#36198 by kesselb)

  • OCP\Contacts\IManager::getAddressBooks method was removed (PR#34329 by come-nc)

  • OCP\Util loglevel constants were removed (PR#34329 by come-nc)

  • 3rdparty dependency nikic/php-parser was removed (PR#36393 by kesselb)

  • Deprecated OCP\AppFramework\Db\Mapper was removed. You can easily migrate to OCP\AppFramework\Db\QBMapper, which is doing the same thing using the query builder instead of string based queries. (PR#34490 by rullzer)

  • Deprecated classes of OCP\Dashboard were removed (PR#35966 by juliushaertl)

Added APIs

  • New OCP\Authentication\Token\IProvider for authentication providers: Created a new public interface OCP\Authentication\Token\IProvider with a method invalidateTokensOfUser to invalidate all tokens of a specific user. OC\Authentication\Token\Manager implements OCP\Authentication\Token\IProvider. (PR#36033 by individual-it)

  • Auto-Submitted header for emails: There now is a new method on the OCP\Mail\IMessage interface IMessage::setAutoSubmitted(). With this method you can specify that an email was an automatic email or response, to allow mail servers to better detect if an out-of-office reply should be sent, better store/filter the emails and so on. Possible values are documented in the OCP\Mail\Headers\AutoSubmitted interface. (PR#36033 by bennet0496)

  • OCP\BackgroundJob\IJobList::getJobsIterator method was added (PR#36073)

  • New OCP\BeforeSabrePubliclyLoadedEvent event dispatched on public webdav endpoints (it can be used just like OCP\SabrePluginEvent to inject additional Sabre plugins in apps for example) (PR#35789)


  • OCP\BackgroundJob\IJobList::getJobs method was deprecated (PR#36073)

  • Controller action annotation @UseSession is deprecated. Use new UseSession attribute instead (PR#36363 by ChristophWurst)

  • Notifications jQuery event deprecated: The OCA.Notification.Action event of the notifications app is deprecated in favor of a notifications:action:executed event-bus event with (PR#728 by nickvergessen)