App metadata
The 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:
<?xml version="1.0"?>
<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>news</id>
<name>News</name>
<summary>An RSS/Atom feed reader</summary>
<description>An RSS/Atom feed reader</description>
<version>8.8.2</version>
<licence>agpl</licence>
<author>Bernhard Posselt</author>
<category>multimedia</category>
<bugs>https://github.com/nextcloud/news/issues</bugs>
<dependencies>
<nextcloud min-version="10"/>
</dependencies>
</info>
A full blown example would look like this (needs to be utf-8 encoded):
<?xml version="1.0"?>
<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>news</id>
<name lang="de">Nachrichten</name>
<name>News</name>
<summary lang="en">An RSS/Atom feed reader</summary>
<description lang="en"># Description\nAn RSS/Atom feed reader</description>
<description lang="de"><![CDATA[# Beschreibung\nEine Nachrichten App, welche mit [RSS/Atom](https://en.wikipedia.org/wiki/RSS) umgehen kann]]></description>
<version>8.8.2</version>
<licence>agpl</licence>
<author mail="mail@provider.com" homepage="http://example.com">Bernhard Posselt</author>
<author>Alessandro Cosentino</author>
<author>Jan-Christoph Borchardt</author>
<documentation>
<user>https://github.com/nextcloud/news/wiki#user-documentation</user>
<admin>https://github.com/nextcloud/news#readme</admin>
<developer>https://github.com/nextcloud/news/wiki#developer-documentation</developer>
</documentation>
<category>multimedia</category>
<category>tools</category>
<website>https://github.com/nextcloud/news</website>
<discussion>https://your.forum.com</discussion>
<bugs>https://github.com/nextcloud/news/issues</bugs>
<repository>https://github.com/nextcloud/news</repository>
<screenshot small-thumbnail="https://example.com/1-small.png">https://example.com/1.png</screenshot>
<screenshot>https://example.com/2.jpg</screenshot>
<dependencies>
<php min-version="5.6" min-int-size="64"/>
<database min-version="9.4">pgsql</database>
<database>sqlite</database>
<database min-version="5.5">mysql</database>
<command>grep</command>
<command>ls</command>
<lib min-version="2.7.8">libxml</lib>
<lib>curl</lib>
<lib>SimpleXML</lib>
<lib>iconv</lib>
<nextcloud min-version="9" max-version="10"/>
</dependencies>
<background-jobs>
<job>OCA\DAV\CardDAV\Sync\SyncJob</job>
</background-jobs>
<repair-steps>
<pre-migration>
<step>OCA\DAV\Migration\Classification</step>
</pre-migration>
<post-migration>
<step>OCA\DAV\Migration\Classification</step>
</post-migration>
<live-migration>
<step>OCA\DAV\Migration\GenerateBirthdays</step>
</live-migration>
<install>
<step>OCA\DAV\Migration\GenerateBirthdays</step>
</install>
<uninstall>
<step>OCA\DAV\Migration\GenerateBirthdays</step>
</uninstall>
</repair-steps>
<two-factor-providers>
<provider>OCA\AuthF\TwoFactor\Provider</provider>
</two-factor-providers>
<commands>
<command>A\Php\Class</command>
</commands>
<settings>
<admin>OCA\Theming\Settings\Admin</admin>
<admin-section>OCA\Theming\Settings\Section</admin-section>
</settings>
<activity>
<settings>
<setting>OCA\Files\Activity\Settings\FavoriteAction</setting>
<setting>OCA\Files\Activity\Settings\FileChanged</setting>
<setting>OCA\Files\Activity\Settings\FileCreated</setting>
<setting>OCA\Files\Activity\Settings\FileDeleted</setting>
<setting>OCA\Files\Activity\Settings\FileFavorite</setting>
<setting>OCA\Files\Activity\Settings\FileRestored</setting>
</settings>
<filters>
<filter>OCA\Files\Activity\Filter\FileChanges</filter>
<filter>OCA\Files\Activity\Filter\Favorites</filter>
</filters>
<providers>
<provider>OCA\Files\Activity\FavoriteProvider</provider>
<provider>OCA\Files\Activity\Provider</provider>
</providers>
</activity>
<navigations>
<navigation role="admin">
<id>files</id>
<name>Files</name>
<route>files.view.index</route>
<order>0</order>
<icon>app.svg</icon>
<type>link</type>
</navigation>
</navigations>
<collaboration>
<plugins>
<plugin type="collaborator-search" share-type="SHARE_TYPE_CIRCLE">OCA\Circles\Collaboration\v1\CollaboratorSearchPlugin</plugin>
</plugins>
</collaboration>
</info>
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
- licence
required
must contain agpl, mpl* and/or apache as the only valid values. These refer to the AGPLv3, MPL 2.0 and Apache License 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 an URL
will not (yet) be rendered on the App Store
will be provided through the REST API
- documentation/user
optional
must contain an URL to the user documentation
will be rendered on the app detail page
- documentation/admin
optional
must contain an URL to the admin documentation
will be rendered on the app detail page
- documentation/developer
optional
must contain an 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 an URL to the project’s homepage
will be rendered on the app detail page
- discussion
optional
must contain an 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/ and create a new category in the apps category
- bugs
required
must contain an URL to the project’s bug tracker
will be rendered on the app detail page
- repository
optional
must contain an 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 on Nextcloud 11 or higher
if absent white-listed owncloud versions will be taken from the owncloud element (see below)
must contain a min-version attribute (maximum 3 digits separated by dots)
can contain a max-version attribute (maximum 3 digits separated by dots)
- 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 OCPActivityISetting and is used to add additional settings ui elements to the activity app
- activity/filters/filter
optional
must contain a php class which implements OCPActivityIFilter and is used to add additional filters to the activity app
- activity/providers/provider
optional
must contain a php class which implements OCPActivityIProvider and is used to react to events from the activity app
- settings/admin
optional
must contain a php class which implements OCPSettingsISettings and returns the form to render for the global settings area
- settings/admin-section
optional
must contain a php class which implements OCPSettingsISection 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 OCPCollaborationCollaboratorsISearchPlugin.
must contain share-type attribute, according to the specific OCPShare 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