The purpose of this document is to teach you how to package an application for YunoHost.
This page is outdated and should be reworked
To package an application, here are the requirements:
A YunoHost package is composed of:
scriptsdirectory, which contains five Shell scripts:
LICENSEfile containing the license of the package
Since YunoHost has a unified architecture, you will be able to guess most of the settings you need. But if you need variable ones, like the domain or web path, you will have to ask the administrator at installation (see
arguments section in the manifest above).
YunoHost provides a hook system, which is accessible via the packager's script callbacks in command line.
The scripts have to be placed in the
hooks repository at the root of the YunoHost package, and must be named
priority-hook_name, for example:
hooks/50-post_user_create will be executed after each user creation.
priority is optional, default is
Take a look at the Nextcloud package for a working example.
In order to test your package, you can execute your script standalone as
admin (do not forget to append required arguments):
su - admin -c "/bin/bash /path/to/my/script my_arg1 my_arg2"
Or you can use command line:
yunohost app install /path/to/my/app/package
Note that it also works with a Git URL:
yunohost app install https://github.com/author/my_app_package.git
Here is a list of best practices for application install scripts:
sudo cp -a ../sources/. $final_pathinstead of
sudo cp -a ../sources/* $final_path;
set -eand trap;
This Python script checks:
A continuous integration server is available for packagers who want to test their apps.
If your application is released under a free software license, you may ask the YunoHost app team to integrate your application to the app repository (c.f. also the app list). You can add your application even if it is not stable or working yet : the current state can be specified to
If your application is not free software, then in the future, a non-official list might be created to handle them but is non-existent yet.
!! This section is obsolete as of 08/03/19 - The project's organization regarging this point is to be changed.
To become an official application, it must be tested well enough, be stable and should work on Debian Buster 64 bits, 32 bits and ARM architectures. If you think those conditions are met, ask for official integration of your application.
Found errors? Think you can improve this documentation? Simply click the Edit link at the top of the page, and then the icon on Github to suggest changes.