# YunoHost: toward a mature, robust, frugal, elegant and ergonomic selfhosting solution for communities
## 1. Background
### 1.1. YunoHost, in short
[YunoHost is a turnkey self-hosting solution](https://yunohost.org/en/whatsyunohost). The project [is over 10 years old](https://yunohost.org/en/whatsyunohost#origin) - yet it is still very active, useful and visible, but remains financially fragile.
### 1.2. The team behind the distribution
The YunoHost project is run mainly by a volunteer team of 18 people, most of whom are involved for several hours a day, or even full-time sometimes.
Its activities fall into 4 main categories:
* core development, features and interfaces ([1,400 commits in the last 12 months](https://next.ossinsight.io/analyze/yunohost?period=past_12_months&repoIds=44062591&repoIds=80506152&repoIds=134640856&repoIds=13584169&repoIds=50347214&repoIds=14433715&repoIds=61957588&repoIds=74774134&repoIds=65508510&repoIds=4771140&repoIds=6103387&repoIds=333246656&repoIds=169302614&repoIds=666550178&repoIds=11096323&repoIds=19854246&repoIds=30212292&repoIds=843845631&repoIds=139773954&repoIds=127154903&repoIds=120942854#code-submission));
* apps packaging and maintenance ([23k commits in the last 12 months](https://next.ossinsight.io/analyze/yunohost-apps?period=past_12_months#code-submission));
* support, documentation, traduction: the team provides constant support via the community forum and through synchronous chats. Although it's difficult to produce statistics, the frequency of use bears witness to sustained activity (see `Reach`).
* infrastructure management (1 dedicated server, ~6 VMs outside this network)
In addition to these tasks, project members are also involved both in the facilitation of numerous aspects of the project life, and the external workshops and conferences (like the [public presentations of the solution](https://videos.globenet.org/c/yunohost_channel/videos)).
### 1.3. Reach
#### 1.3.1. Attendance and activities
* core, features and interface development activities: around 170 people present at the Matrix `YunoHost development` room, 30 commiters over the last 12 months,
* app packaging and maintenance: ~220 participants in the `apps packaging room`, 160 packagers members of the YunoHost-Apps organization on GitHub,
* user assistance and production of support tools: 1,000 subscribers to the `support room`, 103 participants on `YunoHost/issues` in the last 12 months,
* documentation production and curation: the `documentation room` has almost 50 members, with 70 participants on `YunoHost/doc` over the past 12 months,
* translation: [~260 contributors](https://translate.yunohost.org/manage/users/). Currently, 42 languages are supported in YunoHost's translation tool (weblate). Nearly a quarter of these translations cover 90% of front-end and CLI functionalities. Among the groups heavily involved in translation (apart from French and English, which are mainly handled by the core team), the Basque and Italian communities are particularly dynamic.
* the tool that powers the YunoHost forum [counts 6,700 people with an account](https://forum.yunohost.org/admin?period=yearly). In September 2024, traffic amounted to 634,454 pages consulted (including 25,750 pages consulted by identified users, 219,900 anonymous and 389k by indexing robots).
#### 1.3.2. Social media coverage
* A few dozen videos made by vloggers (from several hundred to several tens of thousands of views): https://www.youtube.com/results?search_query=yunohost&sp=CAM%253D
* Nearly 5k subscribers to [Mastodon account](https://toot.aquilenet.fr/@yunohost/)
* More than 450 members in the `r/yunohost/` subbreed (in the top third of reddit communities)
#### 1.3.3. Number of active instances (and number of people involved)
As YunoHost doesn't implement any metrics, the only (imperfect) information we have gives a rough idea of the volume of instances deployed on the Web.
* [Shodan counts 9200+ instances](https://www.shodan.io/search?query=yunohost), [mainly hosted in the European Union (80%)](https://www.shodan.io/search/facet?query=yunohost&facet=country). The app catalog download logs are relatively consistent with these figures (8,745 distinct IPs over the last 44 hours).
* Assuming an average of 5 to 10 accounts, we find the estimate that YunoHost reaches 50,000 to 100,000 users to be entirely credible. In reality, we observe that as collective instances age, they welcome more and more new accounts. Some CHATONS instances can host up to 500 accounts.
* On the other hand, the number of accounts on an instance in no way prejudges the number of accounts on the installed apps: some Mattermost instances can easily accommodate up to 700 users in a hundred teams, while some shared NextCloud installations can reach 800 accounts.
#### 1.3.4. CHATONS / non-profit ISPs
YunoHost contributes to facilitating and accelerating the decentralization of the Web, by helping to spread the use of open-source hosting services.
**YunoHost usage among hosting non-profit organizations ([CHATONS](https://www.chatons.org/))**
According to information gathered by [the CHATONS statistics tool](https://stats.chatons.org/chatons-stats.xhtml), nearly 6.5% of hosting sites are powered by YunoHost. However, 40% of the OS used are unknown.
To the best of our knowledge, and [according to collective applications](https://forum.chatons.org/search?q=yunohost%20%23collectif%3Acandidatures), at least 14 CHATONS (i.e. nearly 15% of collective members) use YunoHost: [ARN - sans-nuage.fr](https://www.chatons.org/chatons/arn-sans-nuagefr), [Bechamail.fr](https://www.chatons.org/chatons/bechamailfr), [Caracos.net](https://www.chatons.org/chatons/caracosnet), [Cloud Girofle](https://www.chatons.org/chatons/le-cloud-girofle), [FLAP](https://www.chatons.org/node/6356), [Infothema. net](https://www.chatons.org/chatons/infothemanet), [Krashboyz Bordel Klub](https://www.chatons.org/chatons/krashboyz-bordel-klub), [Linux07](https://www.chatons.org/chatons/linux07), [Numericloud](https://www.chatons.org/chatons/numericloud), [Oisux](https://www.chatons.org/chatons/Oisux), [Pâquerette](https://www.chatons.org/chatons/paquerette), [ReflexLibre](https://www.chatons.org/chatons/reflexlibre), [Siick's services](https://www.chatons.org/chatons/siicks-services) and [Syntax informatique](https://www.chatons.org/chatons/syntax-informatique).
**Use of YunoHost among non-profit Internet Service Providers**
[According to Shodan](https://www.shodan.io/search/facet?query=yunohost&facet=org), nearly two-thirds [of the 30 or so associative ISPs that are members of the FDN federation](https://www.ffdn.org/fr/membres) host around 370 instances of YunoHost (i.e. ~4% of the 9,200 instances).
#### 1.3.5. Education and research
YunoHost has been identified and referenced [in the french interministerial open source software database](https://code.gouv.fr/sill/detail?name=Yunohost).
Having worked with them, we have noted that YunoHost enables teachers and researchers to host certain software for teaching purposes - as for ["L'atelier des chercheurs"](https://forum.latelier-des-chercheurs.fr/t/empaquetage-de-dodoc-pour-yunohost/548) or to enable them to carry out social science research in contexts isolated from network infrastructures (Madagascar, Venezuela, as is the case for LPED or DDL - IRD or CNRS research laboratories).
#### 1.3.6. Business activities based on YunoHost
To our knowledge, a few players ([Abilian](https://abilian.com), [DDATAA](https://www.ddataa.org/), [Hereli](https://hereli.fr/), [Ionzee](https://comptoir-du-libre.org/fr/users/3681), [Librezo](https://librezo.fr/), [Logmotion](https://www.logmotion.fr/), [ReflexLibre](https://reflexlibre.net/), [Your Own Net](https://yourownnet.net/)) make commercial use of the YunoHost solution.
French national environmental transition associations (such as [le Mouvement Colibris](https://colibris-groupeslocaux.org/?PagePrincipale) with [la distribution CLIC](https://projetclic.cc/?PagePrincipale)) and international solidarity associations (such as [le réseau ritimo](https://www.ritimo.org/Ou-nous-trouver) with the ritimobile) also use YunoHost for their activities.
YunoHost would benefit from getting to know its users better and segmenting its targets, as the team has reaffirmed its desire to address collectives, and, among them, has expressed its desire to better support associations whose aim is social and environmental justice.
### 1.4. YunoHost, a lever for democratizing access to free services
#### 1.4.1. Fediverse
**Peertube**: currently, 116 of the 1,067 Peertube instances reachable at the time of our test (i.e. more than ~10% of Peertube instances) are powered by YunoHost.
```bash
i=0;j=0;for url in $(curl -s "https://instances.joinpeertube.org/api/v1/instances?start=0&count=10000&sort=-createdAt" | jq -r '.data[].host') ; do ip=$(\dig +short A $url | tail -n 1) ; if [[ "$(timeout 3 curl -k -v -s https://$ip 2>&1 >/dev/null | grep -E "< (L|l)ocation: " | grep -o yunohost)" == "yunohost" ]] ; then i=$((i+1)); fi ;j=$((j+1));echo "$i/$j $ip"; done
```
**Mastodon**: tests carried out on the file generated by the Aquilenet instance, which counts almost 18,000 instances in operation, returned 378, or 2.1% of instances powered by YunoHost.
Cross-checking the information obtained on instances.social, the number of instances using YunoHost comes to 135 out of 5,596 (i.e. 2.4% of the total), which seems fairly consistent.
```bash
i=0;j=0;for url in $(curl 'https://instances.social/list.json?q\[min_users\]=&q\[max_users\]=&q\[search\]=&strict=false"' | jq -r '.instances[].name') ; do ip=$(\drill -Q A $url | tail -n 1) ; if [[ "$(timeout 1 curl -k -v -s https://$ip 2>&1 >/dev/null | grep -E "< (L|l)ocation: " | grep -o yunohost)" == "yunohost" ]] ; then i=$((i+1)); fi ;j=$((j+1));echo "$i/$j $ip"; done
```
#### 1.4.2. Raising awareness about the richness of FLOSS services
We've noticed that YunoHost is beginning to be seen as a distribution channel for free software on the web: the richness of [YunoHost's application catalog](https://apps.yunohost.org/) is seen as a means of raising the profile of services seeking notoriety, and users sometimes ask free software publishers why their service isn't packaged for YunoHost.
In our view, the YunoHost application catalog is now an interesting and credible source of benchmarking, and a useful directory for people looking for options when choosing a software solution for their community.
#### 1.4.3. Derivative uses of YunoHost
We have heard indirect reports of YunoHost-derived distributions enabling specific use of the solution in particular contexts.
Among these, [Towerify](https://github.com/computablefacts/towerify) is designed to automatically deploy YunoHost instances and seems to implement a unified supervision interface.
The [CLIC](https://projetclic.cc/?PagePrincipale) distribution, for its part, aims to offer a portal for associations and collectives wishing to involve their members in the simplest possible way, by making the information required for their activities directly accessible (using a YesWiki "central station") and instantiating documents and services without leaving the interface (this functionality was [the subject of a student work](https://digitalcampus.yeswiki.net/?Commande) in Master2 TechLead in January 2024).
The [Internet Cube](https://internetcu.be/) distribution helps individuals to self-host and ensure the neutrality of their internet access by combining an opensource arm card (olimex), YunoHost and a vpn provided by the [French-speaking federation of associative ISPs (FFDN)](https://www.ffdn.org/).
Finally, [the amateur radio digital communications federation](https://www.ardc.net/) seems to be making sustained use of YunoHost for its activities in the USA (240 instances deployed).
### 1.5. Technical choices
YunoHost aims to facilitate the day-to-day management of a web (and Internet) server. Technically, it's a Debian based distribution that helps to administer a server through a friendly web interface as well as a handy CLI, deploy apps in just a few clicks from a-more-than 500 apps catalog, manage users (through LDAP), manage domain names, connect to all apps simultaneously through the user portal (NGINX, SSOwat). The distribution includes a full e-mail stack (Postfix, Dovecot, Rspamd, DKIM), manages SSL certificates (based on Let's Encrypt) and security systems (fail2ban, yunohost-firewall).
YunoHost's technical choices are the result of well-considered choices: we want to maintain a solution that doesn't depend on too many components. For example, YunoHost does not offer containerization by default, to enable the widest possible appropriation, and, in terms of its frugality, to enable those wishing to offer this type of solution in countries where infrastructures are aging and the network infrastructure is slow and costly. Finally, YunoHost seeks to promote the re-use of computers in order to limit as far as possible the impact of manufacturing new hardware, which is aligned with the growing demands of certain technologies.
That's why the solution is based on a tried-and-tested, robust OS. However, precisely for this reason, YunoHost does not preclude more specific and modular installations (via automated deployment tools such as ansible or puppet, the use of orchestrators such as ProxMox upstream, or containerization behind a YunoHost using Docker downstream).
### 1.6. YunoHost, a tool for empowerment and digital sovereignity of citizens
YunoHost's intention remains to focus on, evolve and promote a more standardized form of usage, to enable individuals, groups or companies wishing to develop their digital independence to install as simply and quickly as possible an environment that makes it possible to deploy a myriad of services enabling a wide variety of use cases.
Ease of use is central to the credibility of open-source software: too often perceived as solutions for experts, requiring a high level of specialization, with little in the way of functionality or ergonomics, YunoHost pursues its goal of simplification (a hosting solution that can be deployed in a few clicks), while at the same time aiming to shed light on automated technical steps (by making operations performed on the system side visible, and simplifying log communication to facilitate assistance for instance owners).
This dual promise (simplicity and empowerment) is essential to support users in developing their ability to empower themselves and understand technology, and even to individually and collectively reappropriate the means of producing and disseminating information.
#### 1.6.1. Shed light on the issues and impacts of digital technology and contribute to citizens power to act
We can see, thanks to the combined efforts of associations and federations, that the changing landscape of digital players is contributing to the development of a toxic business model - and one increasingly conceived of as such by the public. This issue is being addressed by legislators at European level (RGPD, DSA, etc.), but often with a latency inherent in the production of a legislative framework and despite resistance and pressure from industry players.
Demand is growing for services that respect digital privacy and protect social relationships from the unhealthy, mercantile curiosity of target marketers.
When the COVID19 crisis broke out, Framasoft in France suffered the full force of the confinement, with traffic soaring in the absence of third-party infrastructures. CHATONS, the desire to bring open-source hosting providers closer to the communities that use them, is one of the ways in which we can decentralize and restore human relationships to the technical choices and management of the tools a community uses to communicate.
This is one of YunoHost's main aims: to facilitate the transition to action for groups wishing to acquire the means to manage their own data and services.
In the final analysis, what is at stake is democracy: the concentration of technical resources in the hands of ever fewer economic players poses very real risks to citizens' ability to express themselves, defines our ways of interacting and perceiving the world, and poses the threat of a reduction in individual and collective freedoms (invisibilization of minorities, increased surveillance and a proliferation of cases of censorship) operated by players who are hindered only by the legislative power, often with great delay and at the cost of great complexity. Conversely, enabling individuals to regain control of their means of information and expression helps protect their digital intimacy and social behavior from the unhealthy curiosity of data industry trusts.
#### 1.6.2. Reaching the public
YunoHost's main target is the intermediate public: self-hosting is still often too complex for people who are not computer literate, while people with extensive knowledge in the field are inclined to deploy the solutions they like and configure them for their specific needs. YunoHost is therefore a solution that enables groups who don't necessarily have any IT-savvy people in their midst to host their members' software tools and data, backed by a community of freedom evangelists who will have no difficulty in managing the more delicate tasks of system and network administration. Standardization ensures that these collectives are not dependent on the availability of a specialist - a rare resource - and do not run the medium-term risk of losing their tools and data. YunoHost is the ideal solution for a successful transition to free and decentralized software, and prevents the abject failure of a lasting return to freedom-denying platforms.
YunoHost would like to give itself the means to organize and support the organization of interventions in the public space that help develop an understanding of the issues and impacts of digital technology on our lives and on society.
Following the example of ECSI (education for citizenship and international solidarity) and EMI (media and information literacy) in France, YunoHost would like to develop methods and create tools (guides, supports, educational tools) to enable community members to take action and lead presentations and debates, with a view to shedding light on issues such as double-extractivism (resources and labor at one end of the chain, data at the other), the social and environmental impacts of digital technology in general and hosting in particular, etc.
In France, the organizations that aimes to address these issues are in crisis (La Dérivation has ceased its activities, L'Établi Numérique is struggling to find an economic model, La Boussole is refocusing on legal issues, ritimo is about to cease its activities in this area, and Framasoft has no real vocation for anything more than advocacy, LUGs and hackespaces, with a few exceptions, program very few interventions of this nature), which, in a context of digitalization of public services (health, unemplyement agencies, local and national administrations) and the explosion in the use of LLM (and its consequences in terms of resources that such technologies require) poses a real democratic problem: the choices made by public authorities and private players must be the subject of public debate.
This aspect of YunoHost's activities could be financially supported by the association if a smaller proportion of its donations were allocated to development costs. This is why YunoHost needs to diversify its sources of funding, including subsidies, to ensure the technical evolution of its solution.
### 1.7. YunoHost's business model
The project is currently financed solely by donations. Financial donations (a little over half of which are recurring, and one-off donations) and in-kind donations (virtual machines, bandwidth and electricity).
In view of its ambitions, YunoHost is looking to diversify its resources, and plans to :
* getting to know its community and the uses of the solution better, testifying to them, raising their profile and inspiring similar uses, and setting up a feature bounty system for the most sought-after developments
* develop our reputation through a communications strategy, to make our operations clearer, but also as a lever for clearer appeals for donations (without, however, embarking on donation campaigns, which are time-consuming and unconnected with the association's purpose)
* address professional players (mainly in the social economy) who plan to use the solution (by providing a facilities management service), and those who use the solution (by offering them support or even specific developments)
Projections on a current expenditure trajectory show that YunoHost will have no funds of its own within 12 months. This is why, in this transitional phase, a subsidy from NLnet would be decisive in getting us through this phase.
## 2. Milestones
### Milestones #1: Automatic remote backup & restore
**EDD (estimated duration of dev):** 43.1 days, 600TJM: 25.860€
**Delivery:** ~may 2025
It would be superfluous to dwell on the importance of making backups - let alone having a backup strategy.
This feature is central: it is both absolutely necessary to consolidate confidence in a free software solution (and is therefore logically very much in demand by the community) and non-negotiable from a technical point of view.
Although it is already possible to perform automatic, remote, encrypted and deduplicated backups with YunoHost thanks to 3 application packages, the implementation through applications shows that it is necessary to integrate these functionalities into the core of YunoHost to make their implementation accessible to the greatest number and cover the use cases reported by the community.
The YunoHost team has tried 3 times to tackle this key feature, but the time and pace required to implement it clashes with the development of the solution's other front and back-end functionalities. And the organization doesn't have the resources to pay one or more volunteers to work full-time on this dev task.
Among the uses identified, community members have expressed the need for support in deploying YNH for their collective. At present, a simple VPS already provides a software ecosystem capable of covering a wide range of use cases (associative management, collaborative monitoring, family media center, etc.). However, although it can be alredy achievable, portability of an installation, installed applications and data is not trivial: it is the subject of a recurring request, and one of the aims of this funding application. The aim would be to enable communities wishing to do so to discover and appropriate YunoHost in hosted mode, before becoming autonomous and choosing a local host (CHATONS) or self-hosting (on a nanocomputer or an old computer).
| # | Milestones | EDD |
| - | -------- | -------- |
| 1 | Backup repository abstraction | 12.25 days |
| 2 | Remote, encrypted and deduplicated backup | 3.5 days |
| 3 | Automatic backup triggering | 3.85 days |
| 4 | Harmonized backup archive pruning | 2 days |
| 5 | Improve backup creation reliability | 2 days |
| 6 | Complete restoration made easy | 5 days |
| 7 | Partial restoration made easy | 9 days |
| 8 | Include or exclude custom paths | 1.75 days |
| 9 | SSH key management | 1.75 days |
| 10 | Diagnostic and backup monitoring | 1 days |
| 11 | Backing up with a desktop | 1 days |
#### Milestone #1.1: Backup repository abstraction
**Background:** Currently, YunoHost's integrated backup functions are only capable of backing up to a single location: `/home/yunohost.backup/archives/`.
**Objectives:** Implement the backup repository concept (local or remote). It involves reworking YunoHost's cli, API and web administration interface.
- Add, list, review, modify and delete backup repositories of different types
- [Add, list, download, review, delete archives in multiple repositories](https://github.com/YunoHost/issues/issues/1601)
- Repositories containing tar-format archives (backward compatibility)
- Hooksystem repositories (backward compatibility, example with rsync)
- [(bug) Can't list archives if one archive is incomplete](https://github.com/YunoHost/issues/issues/1276)
**Amount:** 7.350€
#### Milestone #1.2: Remote, encrypted and deduplicated backup
**Background:** Backups are currently only stored on the server. It is possible to download them from the administration interface, but this is not sufficient.
**Objectives:** Integrate at the heart of YunoHost **at least one** of the following backup tools (remote, encrypted and deduplicated), enabling remote backup replication:
- [borgbackup 2.x testing](https://github.com/YunoHost/issues/issues/615) (supports the same backends as restic)
- borgbackup 1 .x
- restic
- [proxmox-backup-client](https://pbs.proxmox.com/docs/backup-client.html)
**Amount:** 2.100€
#### Milestone #1.3: Automatic backup triggering
**Background:** Currently, when you want to make a backup, you have to trigger it manually and check off what you want to save.
**Objectives:** Define backup templates where you can choose in advance which items are to be backed up and when they are to be triggered. Automatically trigger backups.
- [New set of commands and interfaces for pre-configure backups(templates)](https://github.com/YunoHost/issues/issues/2454) :
- trigger method: timer (ex: oncalendar format) or manual
- choice of directories: cf #01.1
- access list of backups made from a template
**Amount:** 2.310€
#### Milestone #1.4: Harmonized backup archive pruning
**Background:** Archives remain indefinitely and must be deleted manually.
**Objectives:** Create common pruning functions for all repository types
- [keep-hourly, keep-daily, keep-weekly, keep-monthly, keep-last, keep-within](https://github.com/YunoHost/issues/issues/835)
- [Smart prune with quota consideration](https://github.com/YunoHost/issues/issues/840)
- Integration of options in backup templates
**Amount:** 1.200€
#### Milestone #1.5: Improve backup creation reliability
**Background:** Some malfunctions prevent the creation of backup archives
**Objectives:** Fix known situations
- [Compress big database dump during backup onto machine with not enough space](https://github.com/YunoHost/issues/issues/2236)
- [Backup domain settings](https://github.com/YunoHost/issues/issues/2288)
- [Strange file with date in future can't be backup](https://github.com/YunoHost/issues/issues/1570)
- [Translation warning with custom hooks](https://github.com/YunoHost/issues/issues/2406)
**Amount:** 1.200€
#### Milestone #1.6: Complete restoration made easy
**Background:** In the case of a complete restoration via the administration interface, it is necessary to carry out the initial configuration before restoring. You must also upload the archive to the correct location.
**Objectives:** After installing YunoHost, offer to either perform the initial configuration, or restore by connecting to an existing backup repository (remote, usb, etc.).
- [Be able to restore backup from a fresh new server via webadmin](https://github.com/YunoHost/issues/issues/1603)
**Amount:** 3.000€
#### Milestone #1.7: Partial restoration made easy
**Background:** A few malfunctions can prevent an instance admin from restoring part of a system. In addition, it's not easy to recover a specific file that has been lost.
**Objectives:** Correct malfunctions and enable archive exploration
- [During restore process, automatically detect if we can remove the app in order to restore it (by adding an uuid to each instance)](https://github.com/YunoHost/issues/issues/1441)
- Change the app id format to ease migration scenarii (from nextcloud__2 to nextcloud__BvHx4)
- Explore an archive with webadmin in order to extract (or restore?) a specific file
- Mount an archive in order to explore it
- [yunohost backup restore checks for available space as if we'll restore the entire archive even though we ask to restore only a single app](https://github.com/YunoHost/issues/issues/1911)
- [Restore should check that the domain exists / path is available](https://github.com/YunoHost/issues/issues/1759)
**Amount:** 5.400€
#### Milestone #1.8: Include or exclude custom paths
**Background:** Currently, a custom_path_ynh app has been cobbled together to include custom paths, but users won't think of using it. This feature should be in the core.
Similarly, a very simplistic system allows you to exclude folders from /home, but you need a broader exclusion system.
**Objectives:** Efficiently add or exclude paths.
- [Custom path](https://github.com/YunoHost/issues/issues/2424)
- [Exclude a path from backup](https://github.com/YunoHost/issues/issues/837)
- Integration of these options into backup templates
- [Implement --exclude-hooks --exclude-apps in backup](https://github.com/YunoHost/issues/issues/842)
**Amount:** 1.050€
#### Milestone #1.9: SSH key management
**Background:** YunoHost includes basic command-line management of ssh keys, but these functions are not fully developed and are not available in the web administration interface.
**Objectives:** Provide views for managing SSH keys (for users and backup repositories).
- [SSH key management for backups and users](https://github.com/YunoHost/issues/issues/175)
**Amount:** 1.050€
#### Milestone #1.10: Diagnostic and backup monitoring
**Background:** For now, archives are not checked automatically, even though you might want to make sure that a webapp has a complete dump.sql file.
**Objectives:** Check backups with YunoHost diagnostics.
- Check archive integrity (backup.csv, info.json + db.sql or dump.sql)
- [Was a backup made recently ? (not a pre-upgrade backup from an app)](https://github.com/YunoHost/issues/issues/841)
**Amount:** 600€
#### Milestone #1.11: Backing up with a desktop
**Background:** It is highly recommended to have a backup on another piece of equipment (ideally in another location). At the moment, this is pushing instance admins to set up a dedicated backup machine, when in general they have their own desktop on which they could store backups.
**Objectives:** Implement a method for easy backup to a desktop computer.
- Sending a non-deduplicated backup to a shared cifs folder (without discovering machine on network: the user need to write the path itself)
NB: other methods integrating deduplication have been considered, but they are also much more complex to implement.
**Amount:** 600€
----
### Milestone #2: Medium communities: User self-registration and password reset
**EDD (estimated duration of dev):** 27 days, 600TJM: 16.200€
**Delivery:** ~oct. 2025
User self-registration and password reset are two of the most (if not the most) requested features by the community.
YunoHost's evolving use to host small to medium-sized open user communities implies a certain degree of autonomy in the creation of accounts and the basic operations involved.
In terms of respect for personal data, this feature addresses the issue of autonomous password definition - in place of the current system, which requires users to change their password on first use.
Until now, as with the backup, YunoHost members have not been able to commit the time required for the (time-consuming) development of such a feature.
Now, the work done upstream on the new Portal API makes the prospect much more concrete and conceivable, but requires time that the volunteers don't have without putting all their energy into the project.
| # | Milestones | EDD |
| - | -------- | -------- |
| 1 | Reset password | 5.75 days |
| 2 | Avoid smtp downgrade to plain text attack | 5.5 days |
| 3 | Advice after changing LDAP password | 4 days |
| 4 | Self-registration: invitation link method | 5.5 days |
| 5 | Self-registration: admin validation method | 3 days |
| 6 | Publish one or several register link on portal | 1.25 days |
| 7 | Research performances issues for big instances | 2 days |
#### Milestones #2.1: Reset password
**Background:** Currently, it's possible to change your password if you know how to log in, but if you've forgotten your password, there's no reset procedure. In many cases, no third-party email is known (email managed by the instance).
**Objectives:** Integrate a password reset procedure for ldap accounts
- Adapt LDAP and SSO fields to integrate the notion of recovery email by pre-filling them with external forwarding emails.
- [Ability to reset an account password by sending an e-mail](https://github.com/YunoHost/issues/issues/878)
- Addition of pages in the portal:
- password change request form (username + email)
- simple password form (with confirmation)
- Ability to change email recovery in user info view
**Amount:** 3.450€
#### Milestones #2.2: Avoid smtp downgrade to plain text attack
**Background:** Some instances are hosted at the location of likely attackers (able to perform network sniffing), while others rely on public DNS resolvers (without DoH). This makes it possible to carry out attacks where password recovery links can be recovered.
**Objectives:** Implement countermeasures to prevent such attacks
- [Use DoH for DNS resolution](https://github.com/YunoHost/issues/issues/1585)
- When adding external mail, check that the smtp server supports an encrypted communication method and prevent external mail from being sent in cleartext.
- Empower accounts with administrative rights (on the yunohost instance or on an app) to be able to reset their password in this way
- Let the user edit the recovery mail in user info view
**Amount:** 3.300€
#### Milestones #2.3: Advice after changing LDAP password
**Background:** A lot of user forgot to change their clients softwares after changing a password. This could trigger fail2ban (for example with thunderbird or nextcloud client trying to login with the old password).
**Objectives:** After changing the password, display some doc provided by installed app package about reconfiguring client application.
- Portal user should access to some app package documentation about changing password in client software
- Proper display of documentation in the portal
- Create advice for the most famous app in YunoHost
**Amount:** 2.400€
#### Milestones #2.4: Self-registration: invitation link method
**Background:** Currently, it's not easy to enable standalone registration or account creation. A few instances have done so by developing an external forms using either the API or the command line.
**Objectives:** Enable the creation of links containing a form proposing registration on the instance
- On the `UserList` page, new option in the “New Account” dropdown: “Invite”.
- invitation link form:
- multiple email
- destination groups
- Storage quota
- Maximum number of accounts that can be created with this link
- accessible antibot feature if needed
- List, view, edit and delete invitation links
- Display a register form on the invitation link (via YunoHost portal), list of fields:
- Username (check availability)
- Name
- Recovery email / forwarding email
- Password
- Terms of service validation
**Amount:** 3.300€
#### Milestones #2.5: Self-registration: admin validation method
**Background:** Without account validation by an admin, free registration to the instance represents a major risk (bot, attacker), since it significantly increases the attack surface.
**Objectives:** Enable account validation by an admin or an admin of the group to which the account will be attached.
- New cli and admin view “pending user creation” list
- Reuse user info view to check information (except password) + validation button
**Amount:** 1.800€
#### Milestones #2.6: Publish one or several register link on portal
**Background:** The new portal lacks a way of showing how to join the YunoHost instance.
**Objectives:** Be able to make invitation links public and show the different ways of creating an account. Be able to publish an external registration method
- New “user creation” portal view (used in #2.5 and #2.6)
- protected, accessible via invite link code
- unprotected, accounts subject to admin validation
**Amount:** 750€
#### Milestones #2.7: Research performances issues for big instances
**Background:** YunoHost was originally designed for personal self-hosting. New uses for YunoHost have shown performance problems as the number of users increases.
**Objectives:** Trying to support more than 350 YunoHost accounts
- Research into the performance shortcomings of python ldap insertion.
**Amount:** 1.200€