2016-01-26 19:05:35 +01:00
< a class = "btn btn-lg btn-default" href = "packaging_apps_en" > Application packaging< / a >
2016-01-26 17:33:06 +01:00
## Manifest
The `manifest.json` file defines the app's constants, a bunch of values that YunoHost needs to identify the app and install it correctly. It looks like this:
```json
{
"name": "Roundcube",
"id": "roundcube",
2016-04-28 18:23:31 +02:00
"packaging_format": 1,
2016-01-26 17:33:06 +01:00
"description": {
"en": "Open Source Webmail software",
"fr": "Webmail Open Source"
},
2016-01-26 17:46:37 +01:00
"url": "http://roundcube.net/",
2018-01-13 00:18:27 +01:00
"version": "1.0.1~ynh7",
2016-01-26 17:49:01 +01:00
"license": "free",
2016-01-26 17:33:06 +01:00
"maintainer": {
"name": "kload",
2016-01-26 17:46:37 +01:00
"email": "kload@kload.fr"
2016-01-26 17:33:06 +01:00
},
2016-04-28 18:57:33 +02:00
"requirements": {
2016-06-01 11:15:27 +02:00
"yunohost": ">= 2.4.0"
2016-04-28 18:57:33 +02:00
},
2016-06-01 11:15:27 +02:00
"multi_instance": true,
2016-01-26 17:46:37 +01:00
"services": [
"nginx",
"php5-fpm",
"mysql"
],
2016-01-26 17:33:06 +01:00
"arguments": {
"install" : [
{
"name": "domain",
2016-01-26 17:46:37 +01:00
"type": "domain",
2016-01-26 17:33:06 +01:00
"ask": {
2016-01-26 17:46:37 +01:00
"en": "Choose a domain for Roundcube",
"fr": "Choisissez un domaine pour Roundcube"
2016-01-26 17:33:06 +01:00
},
"example": "domain.org"
},
{
"name": "path",
2016-01-26 17:46:37 +01:00
"type": "path",
2016-01-26 17:33:06 +01:00
"ask": {
2016-01-26 17:46:37 +01:00
"en": "Choose a path for Roundcube",
"fr": "Choisissez un chemin pour Roundcube"
2016-01-26 17:33:06 +01:00
},
"example": "/webmail",
"default": "/webmail"
}
]
}
}
```
2016-01-26 18:36:57 +01:00
* **name**: app name. It does not have to be unique, but it should be, since it is the name shown to all the YunoHost administrators in the app list.
2016-01-26 17:33:06 +01:00
2016-01-26 18:36:57 +01:00
* **id**: ID of the app. You have to ensure that this ID is unique before submit an app integration request.
2016-01-26 17:33:06 +01:00
2016-04-28 18:23:31 +02:00
- **packaging_format**: package version. Actual version is **1** . This key has been set up to make independant packaging evolution versions from YunoHost versions evolution.
2016-01-26 18:36:57 +01:00
* **description**: complete app description. You can make it as detailed as you feel it should be. Only `en` is required right now, but you can translate the description by prepending the locale prefix.
2016-01-26 17:33:06 +01:00
2016-01-26 17:46:37 +01:00
* **url**: software website.
2018-01-13 00:18:27 +01:00
* **version**: version of the package builded from the upstream version number and an incremental number for each change in the package without upstream change. Example "1.0.1~ynh7". Must be a string.
2017-11-01 00:19:51 +01:00
2016-01-26 18:36:57 +01:00
* **license**: application license: `free` or `non-free` . Be careful to not confuse with package license which must be put in `LICENSE` file.
2016-01-26 17:33:06 +01:00
2016-01-26 18:36:57 +01:00
* **maintainer**: informations about the app maintainer for contact.
2016-01-26 17:33:06 +01:00
2016-04-28 18:57:33 +02:00
- **requirements**: dependency of the application package to a Debian YunoHost package version. For instance, "yunohost": ">> 2.3.12", `yunohost` package version must be up to `2.3.12` .
2016-02-24 23:31:43 +01:00
* [**multi_instance** ](packaging_apps_multiinstance_en ): it defines app's ability to be installed multiple times.
2016-01-26 17:33:06 +01:00
2016-01-28 22:16:27 +01:00
* **services**: services needed by the application among `nginx` , `php5-fpm` , `mysql` , `uwsgi` , `metronome` , `postfix` , `dovecot` …
2016-01-26 17:46:37 +01:00
2016-01-26 18:36:57 +01:00
* **arguments**:
* **install**: argument for the YunoHost's administrator to enter at installation.
* **name**: argument identification.
2016-08-16 11:17:21 +02:00
* **type**: (optional) argument type among `domain` , `path` , `user` , `app` , `boolean` and `password` . The field will be hiden in the password case.
* **choices** : (optional) restrict value to several choices.
2016-01-29 13:19:31 +01:00
* **optional** : (optional) field which indicate if this argument is optional. It can have `true` and `false` value.
2016-01-26 18:36:57 +01:00
* **ask**: question (at least in `en` ) that you can translate.
* **example**: (optional) example value to help administrator to fill the input.
2016-04-28 18:23:31 +02:00
* **default**: (optional) default value.