.. _app metadata: ============ App metadata ============ .. sectionauthor:: Bernhard Posselt The :file:`appinfo/info.xml` contains metadata about the app. A detailed documentation can be found at the `app store documentation `_. The info.xml is validated using an XML Schema which can be accessed `online `_. A minimum valid **info.xml** would look like this: .. code-block:: xml :caption: appinfo/info.xml news News An RSS/Atom feed reader An RSS/Atom feed reader 8.8.2 AGPL-3.0-or-later Bernhard Posselt multimedia https://github.com/nextcloud/news/issues A full blown example would look like this (needs to be utf-8 encoded): .. code-block:: xml :caption: appinfo/info.xml news Nachrichten News An RSS/Atom feed reader # Description\nAn RSS/Atom feed reader 8.8.2 AGPL-3.0-or-later Bernhard Posselt Alessandro Cosentino Jan-Christoph Borchardt https://github.com/nextcloud/news/wiki#user-documentation https://github.com/nextcloud/news#readme https://github.com/nextcloud/news/wiki#developer-documentation multimedia tools https://github.com/nextcloud/news https://your.forum.com https://github.com/nextcloud/news/issues https://github.com/nextcloud/news https://example.com/1.png https://example.com/2.jpg pgsql sqlite mysql grep ls libxml curl SimpleXML iconv OCA\DAV\CardDAV\Sync\SyncJob OCA\DAV\Migration\Classification OCA\DAV\Migration\Classification OCA\DAV\Migration\GenerateBirthdays OCA\DAV\Migration\GenerateBirthdays OCA\DAV\Migration\GenerateBirthdays OCA\AuthF\TwoFactor\Provider A\Php\Class OCA\Theming\Settings\Admin OCA\Theming\Settings\Section OCA\Files\Activity\Settings\FavoriteAction OCA\Files\Activity\Settings\FileChanged OCA\Files\Activity\Settings\FileCreated OCA\Files\Activity\Settings\FileDeleted OCA\Files\Activity\Settings\FileFavorite OCA\Files\Activity\Settings\FileRestored OCA\Files\Activity\Filter\FileChanges OCA\Files\Activity\Filter\Favorites OCA\Files\Activity\FavoriteProvider OCA\Files\Activity\Provider files Files files.view.index 0 app.svg link OCA\Circles\Collaboration\v1\CollaboratorSearchPlugin The following tags are validated and used in the following way: id * required * must contain only lowercase ASCII characters and underscore * must match the first folder in the archive * will be used to identify the app name * required * must occur at least once with **lang="en"** or no lang attribute * can be translated by using multiple elements with different **lang** attribute values, language code needs to be set **lang** attribute * will be rendered on the app detail page summary * optional * if not provided the description element's text will be used * must occur at least once with **lang="en"** or no lang attribute * can be translated by using multiple elements with different **lang** attribute values, language code needs to be set **lang** attribute * will be rendered on the app list page as short description description * required * must occur at least once with **lang="en"** or no lang attribute * can contain Markdown * can be translated by using multiple elements with different **lang** attribute values, language code needs to be set **lang** attribute * will be rendered on the app detail page version * required * must be a `semantic version `_ without build metadata, e.g. 9.0.1 or 9.1.0-alpha.1 * :ref:`more info on app versioning ` licence * required * can occur multiple times with different licenses * must contain one of the following licenses (for apps targeting v31 or higher, see the `SPDX License List `_ for details): * **AGPL-3.0-only** * **AGPL-3.0-or-later** * **Apache-2.0** * **GPL-3.0-only** * **GPL-3.0-or-later** * **MIT** * **MPL-2.0** * (deprecated, for apps targeting v30 or lower) the following shorthand aliases are also used: * **agpl** (AGPL-3.0) * **apache** (Apache-2.0) * **gpl3** (GPL-3.0) * **mit** (MIT) * **mpl** (MPL-2.0) author * required * can occur multiple times with different authors * can contain a **mail** attribute which must be an email * can contain a **homepage** which must be a URL * will not (yet) be rendered on the App Store * will be provided through the REST API documentation/user * optional * must contain a URL to the user documentation * will be rendered on the app detail page documentation/admin * optional * must contain a URL to the admin documentation * will be rendered on the app detail page documentation/developer * optional * must contain a URL to the developer documentation * will be rendered on the app detail page category * optional * if not provided the category **tools** will be used * must contain one of the following values: * **customization** * **files** * **games** * **integration** * **monitoring** * **multimedia** * **office** * **organization** * **security** * **social** * **tools** * old categories are migrated: * **auth** will be converted to **security** * can occur more than once with different categories website * optional * must contain a URL to the project's homepage * will be rendered on the app detail page discussion * optional * must contain a URL to the project's discussion page/forum * will be rendered on the app detail page as the "ask question or discuss" button * if absent, it will default to our forum at https://help.nextcloud.com/ bugs * required * must contain a URL to the project's bug tracker * will be rendered on the app detail page repository * optional * must contain a URL to the project's repository * can contain a **type** attribute, **git**, **mercurial**, **subversion** and **bzr** are allowed values, defaults to **git** * currently not used screenshot * optional * must contain an HTTPS URL to an image * can contain a **small-thumbnail** attribute which must contain an https url to an image. This image will be used as small preview (e.g. on the app list overview). Keep it small so it renders fast * will be rendered on the app list and detail page in the given order dependencies/php * optional * can contain a **min-version** attribute (maximum 3 digits separated by dots) * can contain a **max-version** attribute (maximum 3 digits separated by dots) * can contain a **min-int-size** attribute, 32 or 64 are allowed as valid values * will be rendered on the app releases page dependencies/database * optional * must contain the database name as text, **sqlite**, **pgsql** and **mysql** are allowed as valid values * can occur multiple times with different databases * can contain a **min-version** attribute (maximum 3 digits separated by dots) * can contain a **max-version** attribute (maximum 3 digits separated by dots) * will be rendered on the app releases page dependencies/command * optional * must contain a linux command as text value * can occur multiple times with different commands * will be rendered on the app releases page dependencies/lib * optional * will be rendered on the app releases page * must contain a required php extension * can occur multiple times with different php extensions * can contain a **min-version** attribute (maximum 3 digits separated by dots) * can contain a **max-version** attribute (maximum 3 digits separated by dots) dependencies/nextcloud * required * must contain a **min-version** attribute (maximum 3 digits separated by dots) * must contain a **max-version** attribute (maximum 3 digits separated by dots) .. note:: Dependencies `dependencies/php`, `dependencies/database` and `dependencies/lib` are checked at installation time (not on update time), hence applications need to stick to the dependencies supported by a major version of Nextcloud the moment an app releases support for that version, i.e. app needs to support the same PHP version-range the supported Nextcloud version supports. background-jobs/job * optional * must contain a php class which is run as background jobs * will not be used, only validated repair-steps/pre-migration/step * optional * must contain a php class which is run before executing database migrations * will not be used, only validated repair-steps/post-migration/step * optional * must contain a php class which is run after executing database migrations * will not be used, only validated repair-steps/live-migration/step * optional * must contain a php class which is run after executing post-migration jobs * will not be used, only validated repair-steps/install/step * optional * must contain a php class which is run after installing the app * will not be used, only validated repair-steps/uninstall/step * optional * must contain a php class which is run after uninstalling the app * will not be used, only validated two-factor-providers/provider * optional * must contain a php class which is registered as two factor auth provider * will not be used, only validated commands/command * optional * must contain a php class which is registered as occ command * will not be used, only validated activity/settings/setting * optional * must contain a php class which implements OCP\Activity\ISetting and is used to add additional settings ui elements to the activity app activity/filters/filter * optional * must contain a php class which implements OCP\Activity\IFilter and is used to add additional filters to the activity app activity/providers/provider * optional * must contain a php class which implements OCP\Activity\IProvider and is used to react to events from the activity app settings/admin * optional * must contain a php class which implements OCP\Settings\ISettings and returns the form to render for the global settings area settings/admin-section * optional * must contain a php class which implements OCP\Settings\ISection and returns data to render navigation entries in the global settings area navigations * optional * must contain at least one navigation element navigations/navigation * required * must contain a name and route element * denotes a navigation entry * role denotes the visibility, all means everyone can see it, admin means only an admin can see the navigation entry, defaults to all navigations/navigation/id * optional * the app id * you can also create entries for other apps by setting an id other than your app one's navigations/navigation/name * required * will be displayed below the navigation entry icon * will be translated by the default translation tools navigations/navigation/route * required * name of the route that will be used to generate the link navigations/navigation/icon * optional * name of the icon which is looked up in the app's **img/** folder * defaults to app.svg navigations/navigation/order * optional * used to sort the navigation entries * a higher order number means that the entry will be ordered further to the bottom navigations/navigation/type * optional * can be either link or settings * link means that the entry is added to the default app menu * settings means that the entry is added to the right-side menu which also contains the personal, admin, users, help and logout entry collaboration * optional * can contain plugins for collaboration search (e.g. supplying share dialog) collaboration/plugins * optional * must contain at least one plugin collaboration/plugins/plugin * required * the PHP class name of the plugin * must contain **type** attribute (currently only *collaboration-search*). The class must implement OCP\Collaboration\Collaborators\ISearchPlugin. * must contain **share-type** attribute, according to the specific \OCP\Share constants The following character maximum lengths are enforced: * All description Strings are database text fields and therefore not limited in size * All other Strings have a maximum of 256 characters The following elements are either deprecated or for internal use only and will fail the validation if present: * **standalone** * **default_enable** * **shipped** * **public** * **remote** * **requiremin** * **requiremax** .. _app changelog: Changelog --------- Apps can provide a changelog. This should be written in the `keep a changelog `_. If the apps provide a ``CHANGELOG.md`` file in the project root, this file will be used to show changes for the released version in the app store and for administrators in the app settings. Moreover, since Nextcloud 29, if the ``updatenotification`` app is enabled, apps can also provide a changelog for the users. The app will notify users about after the app update if either a ``CHANGELOG.language.md`` (where ``language`` is the language code of that user) or a fallback ``CHANGELOG.en.md`` is available.