diff --git a/.github/diff_pot_files.py b/.github/diff_pot_files.py new file mode 100644 index 00000000..6d37c5c3 --- /dev/null +++ b/.github/diff_pot_files.py @@ -0,0 +1,29 @@ +#! /usr/bin/env python3 + +""" +Super small script for github action to detect if 2 .pot files have changed for +github/workflows/auto_messages_pot.yml +""" + +import sys +from babel.messages.pofile import PoFileParser + + +def load_pot_file(file_path): + poparser = PoFileParser({}) + poparser.parse(open(file_path)) + return poparser.catalog + + +def main(): + file_1 = load_pot_file(sys.argv[1]) + file_2 = load_pot_file(sys.argv[2]) + + if [x for x in file_1.keys() if x] == [x for x in file_2.keys() if x]: + print("false") + else: + print("true") + + +if __name__ == "__main__": + main() diff --git a/.github/workflows/added_dates.yml b/.github/workflows/added_dates.yml new file mode 100644 index 00000000..6a32fd44 --- /dev/null +++ b/.github/workflows/added_dates.yml @@ -0,0 +1,36 @@ +name: Add Added dates to the catalog files + +on: + push: + branches: [master] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: ${{ secrets.YUNOHOST_BOT_TOKEN }} + - name: Set up Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: 3.11 + - name: Install toml python lib + run: | + pip3 install toml tomlkit gitpython + - name: Add added dates to catalog files + run: | + ./tools/save_added_date.py + + - uses: uncenter/setup-taplo@v1 + - run: taplo fmt + + - uses: stefanzweifel/git-auto-commit-action@v5 + with: + commit_message: "Automatically add dates to the catalog files" + file_pattern: 'apps.toml wishlist.toml graveyard.toml' + commit_user_name: yunohost-bot + commit_user_email: yunohost-bot@users.noreply.github.com + commit_author: 'yunohost-bot ' diff --git a/.github/workflows/auto_messages_pot.yml b/.github/workflows/auto_messages_pot.yml new file mode 100644 index 00000000..c290b6f8 --- /dev/null +++ b/.github/workflows/auto_messages_pot.yml @@ -0,0 +1,44 @@ +name: Auto updates messages.pot for readme_generator +on: + push: + branches: + - master + +jobs: + pybabel: + name: Auto updates messages.pot for readme_generator + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: 3.11 + - name: Install dependencies + run: | + cd tools/readme_generator/ + pip install -r requirements.txt + - name: Save old messges.pot for diffing later + run: | + cd tools/readme_generator/ + cp messages.pot messages.pot.old + - name: Try to generate messages.pot + run: | + cd tools/readme_generator/ + pybabel extract --ignore-dirs venv -F babel.cfg -o messages.pot . + - shell: pwsh + id: check_files_changed + run: | + $HasDiff = python .github/diff_pot_files.py tools/readme_generator/messages.pot.old tools/readme_generator/messages.pot + Write-Host "::set-output name=files_changed::$HasDiff" + - name: Create Pull Request + if: steps.check_files_changed.outputs.files_changed == 'true' + uses: peter-evans/create-pull-request@v6 + with: + token: ${{ secrets.GITHUB_TOKEN }} + title: "Update messages.pot for readme_generator" + commit-message: "chore(readme_generator): update messages.pot" + body: | + This pull request has been generated using the command `pybabel extract --ignore-dirs venv -F babel.cfg -o messages.pot .` + base: ${{ github.head_ref }} # Creates pull request onto pull request or commit branch + branch: actions/auto_messages_pot diff --git a/.github/workflows/test_toml.yaml b/.github/workflows/test_toml.yaml new file mode 100644 index 00000000..8cd0e4b4 --- /dev/null +++ b/.github/workflows/test_toml.yaml @@ -0,0 +1,31 @@ +name: Check formatting + +on: + pull_request: + push: + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: uncenter/setup-taplo@v1 + - run: taplo fmt + - shell: pwsh + id: check_files_changed + run: | + # Diff HEAD with the previous commit + $diff = git diff + $HasDiff = $diff.Length -gt 0 + Write-Host "::set-output name=files_changed::$HasDiff" + - name: Create Pull Request + if: steps.check_files_changed.outputs.files_changed == 'true' + uses: peter-evans/create-pull-request@v6 + with: + token: ${{ secrets.GITHUB_TOKEN }} + title: "Format TOML with Taplo" + commit-message: ":art: Format TOML with Taplo" + body: | + This pull request uses the [Taplo](https://taplo.tamasfe.dev) formatter. + base: ${{ github.head_ref }} # Creates pull request onto pull request or commit branch + branch: actions/toml \ No newline at end of file diff --git a/.github/workflows/tests_make_readme.yml b/.github/workflows/tests_make_readme.yml new file mode 100644 index 00000000..12304a8d --- /dev/null +++ b/.github/workflows/tests_make_readme.yml @@ -0,0 +1,22 @@ +name: Run tests for make_readme.py + +on: [push] + +jobs: + test: + name: Run tests for make_readme.py + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: 'Set up Python 3.9' + uses: actions/setup-python@v5 + with: + python-version: '3.9' + cache: 'pip' + - name: install dependencies + run: | + python -m pip install --upgrade pip + pip install -r tools/readme_generator/requirements.txt + pip install pytest + - name: launch pytest + run: cd tools/readme_generator && pytest tests diff --git a/.gitignore b/.gitignore index a007ae50..30308255 100644 --- a/.gitignore +++ b/.gitignore @@ -11,14 +11,8 @@ __pycache__/ .mypy_cache/ # Github authentication files -/.github_* +/tools/.github_* # yunohost specific cache/output dirs .apps_cache builds* - -tools/bot-repo-cleanup/.github_token -tools/autoupdater-upgrader/.* - -tools/autopatches/login -tools/autopatches/token diff --git a/README.md b/README.md index d756dd53..4152e7f5 100644 --- a/README.md +++ b/README.md @@ -31,16 +31,17 @@ them such as their category or maintenance state. This file is regularly read by To add your application to the catalog: -* Fork [this repository](https://github.com/YunoHost/apps) -* Edit the [`apps.toml`](/apps.toml) file - * Add your app's ID and git information at the right alphabetical place - * Indicate the app's functioning state: `notworking`, `inprogress`, or `working` - * Indicate the app category, which you can pick from `categories.toml` - * Indicate any anti-feature that your app may be subject to, see `antifeatures.toml` (or remove the `antifeatures` key if there's none) - * Indicate if your app can be thought of as an alternative to popular proprietary services (or remove the `potential_alternative_to` key if there's none) - * *Do not* add the `level` entry by yourself. Our automatic test suite ("the CI") will handle it. -* Commit and push your modifications to your repository -* Create a [Pull Request](https://github.com/YunoHost/apps/pulls/) +- Fork [this repository](https://github.com/YunoHost/apps) +- Edit the [`apps.toml`](/apps.toml) file + - Add your app's ID and git information at the right alphabetical place + - Indicate the app's functioning state: `notworking`, `inprogress`, or `working` + - Indicate the app category, which you can pick from `categories.toml` + - Indicate any anti-feature that your app may be subject to, see `antifeatures.toml` (or remove the `antifeatures` key if there's none) + - Indicate if your app can be thought of as an alternative to popular proprietary services (or remove the `potential_alternative_to` key if there's none) + - *Do not* add the `level` entry by yourself. Our automatic test suite ("the CI") will handle it. +- Add the app's logo inside the `logos` folder. Please keep this logo as small as possible. It also must be square (or almost square). The filename must be the name of the app in lower case. +- Commit and push your modifications to your repository +- Create a [Pull Request](https://github.com/YunoHost/apps/pulls/) App example addition: diff --git a/antifeatures.toml b/antifeatures.toml index fa9f300b..76ae4adc 100644 --- a/antifeatures.toml +++ b/antifeatures.toml @@ -1,151 +1,153 @@ +#:schema https://github.com/YunoHost/apps/blob/master/schemas/antifeatures.toml.schema.json + [tracking] -icon = "user-secret" -title.en = "Tracking" -title.eu = "Jarraipena" -title.fr = "Pistage" -title.it = "Tracciamento" description.en = "Tracks you and/or reports your activity to upstream maintainer or third parties, either without your permission or by default." description.eu = "Zure jardueraren jarraipena egiten du eta/edo jardueraren berri ematen die aplikazioaren arduradunari edo hirugarrenei, baimenik gabe edo defektuz." description.fr = "Vous piste et/ou rapporte vos activités au mainteneur source ou à des tiers, sans votre permission ou par défaut." description.it = "Ti traccia e/o riporta la tua attività a chi mantiene il codice sorgente o a terze parti, facendolo senza il tuo permesso o di default." +icon = "user-secret" +title.en = "Tracking" +title.eu = "Jarraipena" +title.fr = "Pistage " +title.it = "Tracciamento" [non-free-network] -icon = "sitemap" -title.en = "Non-free Network Services" -title.eu = "Libreak ez diren sareko zerbitzuak" -title.fr = "Services réseau non libres" -title.it = "Servizi di rete non liberi" description.en = "Promotes or depends entirely on a non-free network service." description.eu = "Librea ez den sare-zerbitzu bat sustatzen du edo horren mende dago erabat." description.fr = "Promeut ou utilise des services réseau non libres." description.it = "Promuove o dipende interamente da servizi di rete non liberi." +icon = "sitemap" +title.en = "Non-free Network Services" +title.eu = "Libreak ez diren sareko zerbitzuak" +title.fr = "Services réseau non libres " +title.it = "Servizi di rete non liberi" [non-free-addons] -icon = "puzzle-piece" -title.en = "Non-free Addons" -title.eu = "Libreak ez diren gehigarriak" -title.fr = "Extensions non libres" -title.it = "Estensioni non libere" description.en = "Promotes other non-free applications or plugins." description.eu = "Libreak ez diren beste aplikazio edo gehigarri batzuk sustatzen ditu." description.fr = "Promeut d'autres applications ou plugins non libres." description.it = "Promoove altre applicazioni o plugin non liberi" +icon = "puzzle-piece" +title.en = "Non-free Addons" +title.eu = "Libreak ez diren gehigarriak" +title.fr = "Extensions non libres " +title.it = "Estensioni non libere" [non-free-dependencies] -icon = "book" -title.en = "Non-free dependencies" -title.eu = "Libreak ez diren dependentziak" -title.fr = "Dépendances non libres" -title.it = "Dipendenze non libere" description.en = "Relies on software dependencies that are not free in order to run." description.eu = "Libreak ez diren dependentzien mende dago exekutatu ahal izateko." description.fr = "Dépend pour fonctionner de dépendances logicielles non libres." description.it = "Per funzionare, si basa su dipendenze software non libere." +icon = "book" +title.en = "Non-free dependencies" +title.eu = "Libreak ez diren dependentziak" +title.fr = "Dépendances non libres " +title.it = "Dipendenze non libere" [non-free-assets] -icon = "file-image-o" -title.en = "Non-free assets" -title.eu = "Libreak ez diren baliabideak" -title.fr = "Ressources non libres" -title.it = "Risorse non libere" description.en = "Contains and makes use of non-free assets. The most common case is apps using artwork - images, sounds, music, etc. - under a commercial license." description.eu = "Libreak ez diren baliabideak ditu eta erabiltzen ditu. Kasurik ohikoena artelanak (irudiak, soinuak, musika, etab.) erabiltzen dituzten aplikazioak dira. - jabedun-lizentziapean." description.fr = "Contient ou utilise des médias non libres. Le cas le plus fréquent concerne des applications utilisant des œuvres (images, sons, musiques, etc.) sous une licence commerciale." description.it = "Contiene ed utilizza risorse mediatiche non libere. Il caso più comune è l’utilizzo da parte dell’app di contenuti artistici (immagini, suoni, musica, ecc.) coperti da licenza commerciale." +icon = "file-image-o" +title.en = "Non-free assets" +title.eu = "Libreak ez diren baliabideak" +title.fr = "Ressources non libres " +title.it = "Risorse non libere" [bad-security-reputation] -icon = "bug" -title.en = "Bad security reputation" -title.eu = "Segurtasun txarreko ospea" -title.fr = "Mauvaise réputation en matière de sécurité" -title.it = "Cattiva reputazione di sicurezza" description.en = "Has a bad security reputation, such as deprecated addons." description.eu = "Segurtasun ospe txarra du, utzitako gehigarriak esaterako." description.fr = "A une mauvaise réputation en matière de sécurité, en utilisant des plugins dépréciés par exemple." description.it = "Ha una cattiva reputazione in termini di sicurezza (per esempio, potrebbe utilizzare addon obsoleti)." +icon = "bug" +title.en = "Bad security reputation" +title.eu = "Segurtasun txarreko ospea" +title.fr = "Mauvaise réputation en matière de sécurité " +title.it = "Cattiva reputazione di sicurezza" [deprecated-software] -icon = "trash-o" -title.en = "Upstream not maintained" -title.eu = "Jatorrizko garapena utzita" -title.fr = "Application non maintenue" -title.it = "Applicazione non mantenuta" description.en = "This software is not maintained anymore. Expect it to break down over time, be exposed to unfixed security breaches, etc." description.eu = "Software honek ez du arduradunik. Denborak aurrera egin ahala funtzionatzeari utziko dio, konpondu gabeko segurtasun arazoak izango ditu, etab." description.fr = "Ce logiciel n'est plus maintenu. Attendez-vous à ce qu'il ne fonctionne plus avec le temps, et que l'on découvre des failles de sécurité qui ne seront pas corrigées, etc." description.it = "Questo software non è più mantenuto. Ci si può aspettare che con il passare del tempo smetta di funzionare, sia esposto a falle di sicurezza, ecc." +icon = "trash-o" +title.en = "Upstream not maintained" +title.eu = "Jatorrizko garapena utzita" +title.fr = "Application non maintenue " +title.it = "Applicazione non mantenuta" [package-not-maintained] +description.en = "This YunoHost package is not actively maintained and needs adoption. This means that minimal maintenance is made by volunteers who don't use the app, so you should expect the app to lose reliability over time. You can [learn how to package](https://yunohost.org/packaging_apps_intro) if you'd like to adopt it." +description.eu = "YunoHost pakete honek ez du mantenduko duenik, bere gain hartuko duen norbaiten beharra dauka. Honek esan nahi duena da mantentze-lanak minimoak izango direla eta aplikazioa erabiltzen ez duten boluntarioek egingo dituztela lanok; denborak aurrera egin ahala fidagarri izateari utziko dio. [Aplikazioak nola paketatu](https://yunohost.org/packaging_apps_intro) ikas dezakezu, zure gain hartu nahi baduzu." +description.fr = "Ce package YunoHost n'est pas activement maintenu et a besoin d'être adopté. Cela veut dire que la maintenance minimale est réalisée par des bénévoles qui n'utilisent pas l'application, il faut donc s'attendre à ce que l'app perde en fiabilité avec le temps. Vous pouvez [apprendre comment packager](https://yunohost.org/packaging_apps_intro) si vous voulez l'adopter." +description.it = "Questo pacchetto YunoHost non viene mantenuto attivamente e deve essere adottato. Ciò significa che la manutenzione minima è effettuata da volontari che non usano l'applicazione, quindi ci si deve aspettare che l'applicazione perda affidabilità nel tempo. È possibile [imparare a pacchettizzare](https://yunohost.org/packaging_apps_intro) se si desidera adottarla." icon = "user-times" title.en = "Package not maintained" title.eu = "Mantendu gabeko paketea" -title.fr = "Paquet non maintenu" +title.fr = "Package non maintenu " title.it = "Pacchetto non mantenuto" -description.en = "This YunoHost package is not maintained and needs adoption." -description.eu = "Pakete honek ez du mantenduko duenik, boluntario baten beharra dauka." -description.fr = "Ce package YunoHost n'est plus maintenu et doit être adopté." -description.it = "Questo pacchetto di YunoHost non è più mantenuto e necessita di essere adottato." [paid-content] -icon = "money" -title.en = "Paid content" -title.eu = "Ordainpeko edukia" -title.fr = "Contenu payant" -title.it = "Contenuti a pagamento" description.en = "Promotes or depends, entirely or partially, on a paid service." description.eu = "Ordainpeko zerbitzu bat sustatzen du edo bere mende dago, osorik edo neurri batean." description.fr = "Promeut ou dépend, entièrement ou partiellement, d'un service payant." description.it = "Promuove o dipende, interamente o parzialmente, da un servizio a pagamento." +icon = "money" +title.en = "Paid content" +title.eu = "Ordainpeko edukia" +title.fr = "Contenu payant " +title.it = "Contenuti a pagamento" [arbitrary-limitations] -icon = "star-half-empty" -title.en = "Arbitrary limitations" -title.eu = "Muga arbitrarioak" -title.fr = "Limitations arbitraires" -title.it = "Limitazioni arbitrarie" description.en = "Features arbitrary limitations. Please refer to the README." description.eu = "Muga arbitrarioak ditu. Irakurri README fitxategia." description.fr = "Contient des limitations arbitraires. Se référer au fichier README." description.it = "Contiene limitazioni arbitrarie. Fare riferimento al file “README”." +icon = "star-half-empty" +title.en = "Arbitrary limitations" +title.eu = "Muga arbitrarioak" +title.fr = "Limitations arbitraires " +title.it = "Limitazioni arbitrarie" [replaced-by-another-app] -icon = "repeat" -title.en = "Replaced by another app" -title.eu = "Beste aplikazio batek ordeztu du" -title.fr = "Remplacé par une autre application" -title.it = "Sostituita da un’altra app" description.en = "Was replaced by another app. Please refer to the README." description.eu = "Beste aplikazio batek ordeztu du. Irakurri README fitxategia." description.fr = "A été remplacé par une autre application. Se référer au fichier README." description.it = "Quest’app è stata sostituita da un’altra app. Fare riferimento al file “README”." +icon = "repeat" +title.en = "Replaced by another app" +title.eu = "Beste aplikazio batek ordeztu du" +title.fr = "Remplacé par une autre application " +title.it = "Sostituita da un’altra app" [alpha-software] -icon = "flask" -title.en = "Alpha software" -title.eu = "Alfa softwarea" -title.fr = "Logiciel en version alpha" -title.it = "Software in versione alpha" description.en = "Early development stage. May contain changing or unstable features, bugs, and security vulnerability." description.eu = "Garapenaren hasierako fasean dago. Ezaugarri aldakor edo ezegonkorrak, erroreak eta segurtasuneko arazoak izan ditzazke." description.fr = "Le logiciel est au tout début de son développement. Il pourrait contenir des fonctionnalités changeantes ou instables, des bugs, et des failles de sécurité." description.it = "Questo software è all’inizio della sua fase di sviluppo. Potrebbe dunque essere instabile, contenere bug e vulnerabilità di sicurezza." +icon = "flask" +title.en = "Alpha software" +title.eu = "Alfa softwarea" +title.fr = "Logiciel en version alpha " +title.it = "Software in versione alpha" [not-totally-free-upstream] -icon = "lock" -title.en = "Not totally free upstream" -title.eu = "Jatorrizkoa ez da erabat librea" -title.fr = "Application sous licence libre restreinte" -title.it = "Applicazione con licenza parzialmente libera" -description.en = "The packaged app is under an overall free licence, but with clauses that restrict its use." +description.en = "The packaged app is under an overall free license, but with clauses that may restrict its use." description.eu = "Aplikazioak lizentzia librea du orokorrean, baina bere erabilera mugatzen duten klausulekin." description.fr = "L'application packagée est sous une licence globalement libre, mais avec des clauses qui pourraient restreindre son utilisation." description.it = "Quest’applicazione è protetta da licenza generalmente libera, ma con delle clausole che potrebbero limitare il suo utilizzo." +icon = "lock" +title.en = "Not totally free upstream" +title.eu = "Jatorrizkoa ez da erabat librea" +title.fr = "Application sous licence libre restreinte " +title.it = "Applicazione con licenza parzialmente libera" [not-totally-free-package] +description.en = "The YunoHost package of this app is under an overall free license, but with clauses that may restrict its use." +description.eu = "Aplikazio honen YunoHost paketeak lizentzia librea du orokorrean, baina bere erabilera mugatzen duten klausulekin." +description.fr = "Le package YunoHost de cette application est sous une licence globalement libre, mais avec des clauses qui pourraient restreindre son utilisation." icon = "archive" title.en = "Not totally free package" title.eu = "Paketea ez da erabat librea" -title.fr = "Package sous licence libre restreinte" -description.en = "The YunoHost package of this app is under an overall free licence, but with clauses that restrict its use." -description.eu = "Aplikazio honen YunoHost paketeak lizentzia librea du orokorrean, baina bere erabilera mugatzen duten klausulekin." -description.fr = "Le package YunoHost de cette application est sous une licence globalement libre, mais avec des clauses qui pourraient restreindre son utilisation." +title.fr = "Package sous licence libre restreinte " diff --git a/apps.toml b/apps.toml index 4fad7eb9..8c5353ea 100644 --- a/apps.toml +++ b/apps.toml @@ -1,4 +1,7 @@ +#:schema https://github.com/YunoHost/apps/raw/master/schemas/apps.toml.schema.json + [13ft] +added_date = 1674232499 # 2023/01/20 category = "reading" level = 7 potential_alternative_to = [ "12ft" ] @@ -6,6 +9,7 @@ state = "working" url = "https://github.com/YunoHost-Apps/13ft_ynh" [20euros] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "non-free-assets" ] category = "games" level = 8 @@ -13,18 +17,21 @@ state = "working" url = "https://github.com/YunoHost-Apps/20euros_ynh" [243-game] +added_date = 1680384741 # 2023/04/01 category = "games" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/243-game_ynh" [2fauth] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/2fauth_ynh" [abantecart] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" @@ -32,22 +39,27 @@ subtags = [ "ecommerce" ] url = "https://github.com/YunoHost-Apps/abantecart_ynh" [acropolis] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "social_media" -level = 6 +deprecated_date = 1717071136 # 2024/05/30 +level = 8 state = "working" subtags = [ "microblogging", "pictures" ] url = "https://github.com/YunoHost-Apps/acropolis_ynh" antifeatures = ["deprecated-software"] [actual] +added_date = 1685962455 # 2023/06/05 category = "productivity_and_management" -level = 7 +level = 8 potential_alternative_to = [ "Bankin", "Budgea", "Linxo", "Microsoft Money", "Mint", "You Need A Budget" ] state = "working" subtags = [ "accounting" ] url = "https://github.com/YunoHost-Apps/actual_ynh" [adguardhome] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" @@ -55,7 +67,10 @@ subtags = [ "network" ] url = "https://github.com/YunoHost-Apps/adguardhome_ynh" [adminer] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "system_tools" +deprecated_date = 1717071136 # 2024/05/30 level = 8 state = "working" subtags = [ "db" ] @@ -63,13 +78,17 @@ url = "https://github.com/YunoHost-Apps/adminer_ynh" antifeatures = ["deprecated-software"] [aeneria] +added_date = 1674232499 # 2023/01/20 category = "iot" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/aeneria_ynh" [agendav] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "synchronization" +deprecated_date = 1717071136 # 2024/05/30 level = 8 potential_alternative_to = [ "Google Agenda", "Microsoft Outlook" ] state = "working" @@ -78,12 +97,14 @@ url = "https://github.com/YunoHost-Apps/agendav_ynh" antifeatures = ["deprecated-software"] [agora] +added_date = 1674232499 # 2023/01/20 category = "wat" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/agora_ynh" [airsonic] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 8 potential_alternative_to = [ "Deezer", "SoundCloud", "Spotify" ] @@ -92,23 +113,27 @@ subtags = [ "music" ] url = "https://github.com/YunoHost-Apps/airsonic_ynh" [akkoma] +added_date = 1674232499 # 2023/01/20 category = "social_media" level = 0 -potential_alternative_to = [ "X", "Mastodon", "Pleroma", "Firefish", "Misskey", "Gotosocial" ] +potential_alternative_to = [ "Firefish", "Gotosocial", "Mastodon", "Misskey", "Pleroma", "X" ] state = "notworking" subtags = [ "microblogging" ] url = "https://github.com/YunoHost-Apps/akkoma_ynh" [alltube] -antifeatures = [ "non-free-network", "deprecated-software" ] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software", "non-free-network" ] category = "multimedia" -level = 8 -potential_alternative_to = [ "YouTube", "Dailymotion" ] +deprecated_date = 1708018611 # 2024/02/15 +level = 7 +potential_alternative_to = [ "Dailymotion", "YouTube" ] state = "working" subtags = [ "download" ] url = "https://github.com/YunoHost-Apps/alltube_ynh" [ampache] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 8 potential_alternative_to = [ "Deezer", "SoundCloud", "Spotify" ] @@ -117,6 +142,7 @@ subtags = [ "music" ] url = "https://github.com/YunoHost-Apps/ampache_ynh" [anarchism] +added_date = 1674232499 # 2023/01/20 category = "wat" level = 8 potential_alternative_to = [ "Capitalism" ] @@ -124,19 +150,22 @@ state = "working" url = "https://github.com/YunoHost-Apps/anarchism_ynh" [archivebox] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/archivebox_ynh" [archivist] +added_date = 1674232499 # 2023/01/20 category = "system_tools" -level = 6 +level = 7 state = "working" subtags = [ "backup" ] url = "https://github.com/YunoHost-Apps/archivist_ynh" [armadietto] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "alpha-software" ] category = "small_utilities" level = 7 @@ -144,25 +173,29 @@ state = "working" url = "https://github.com/YunoHost-Apps/armadietto_ynh" [audiobookshelf] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/audiobookshelf_ynh" [autobrr] +added_date = 1681591997 # 2023/04/15 category = "multimedia" -level = 7 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/autobrr_ynh" [automad] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" -subtags = [ "website", "blog" ] +subtags = [ "blog", "website" ] url = "https://github.com/YunoHost-Apps/automad_ynh" [backdrop] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" @@ -170,6 +203,7 @@ subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/backdrop_ynh" [baikal] +added_date = 1674232499 # 2023/01/20 category = "synchronization" level = 8 potential_alternative_to = [ "Microsoft Outlook" ] @@ -178,19 +212,24 @@ subtags = [ "calendar", "contacts" ] url = "https://github.com/YunoHost-Apps/baikal_ynh" [bazarr] +added_date = 1674232499 # 2023/01/20 category = "multimedia" -level = 6 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/bazarr_ynh" [beehive] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "iot" +deprecated_date = 1717071136 # 2024/05/30 level = 8 state = "working" url = "https://github.com/YunoHost-Apps/beehive_ynh" antifeatures = ["deprecated-software"] [biboumi] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 state = "working" @@ -198,6 +237,7 @@ subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/biboumi_ynh" [bicbucstriim] +added_date = 1674232499 # 2023/01/20 category = "reading" level = 7 state = "working" @@ -206,7 +246,10 @@ url = "https://github.com/YunoHost-Apps/bicbucstriim_ynh" antifeatures = ["deprecated-software"] [blogotext] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "publishing" +deprecated_date = 1717071136 # 2024/05/30 level = 8 potential_alternative_to = [ "Blogger", "Coldfusion", "Wix" ] state = "working" @@ -215,6 +258,7 @@ url = "https://github.com/YunoHost-Apps/blogotext_ynh" antifeatures = ["deprecated-software"] [bludit] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" @@ -222,21 +266,24 @@ subtags = [ "blog" ] url = "https://github.com/YunoHost-Apps/bludit_ynh" [bonfire] +added_date = 1706290061 # 2024/01/26 category = "social_media" level = 0 -potential_alternative_to = [ "Mastodon", "Pleroma", "Akkoma", "Misskey", "Calckey", "Iceshrimp" ] +potential_alternative_to = [ "Akkoma", "Calckey", "Iceshrimp", "Mastodon", "Misskey", "Pleroma" ] state = "inprogress" url = "https://github.com/YunoHost-Apps/bonfire_ynh" [bookstack] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 -potential_alternative_to = [ "Notion", "GitBook" ] +potential_alternative_to = [ "GitBook", "Notion" ] state = "working" subtags = [ "wiki" ] url = "https://github.com/YunoHost-Apps/bookstack_ynh" [bookwyrm] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "not-totally-free-upstream" ] category = "social_media" level = 8 @@ -245,14 +292,16 @@ state = "working" url = "https://github.com/YunoHost-Apps/bookwyrm_ynh" [borg] +added_date = 1674232499 # 2023/01/20 category = "system_tools" -level = 6 +level = 8 potential_alternative_to = [ "Time Machine", "Veeam" ] state = "working" subtags = [ "backup" ] url = "https://github.com/YunoHost-Apps/borg_ynh" [borgserver] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 6 state = "working" @@ -260,6 +309,7 @@ subtags = [ "backup" ] url = "https://github.com/YunoHost-Apps/borgserver_ynh" [borgwarehouse] +added_date = 1697570631 # 2023/10/17 category = "system_tools" level = 7 state = "working" @@ -267,8 +317,10 @@ subtags = [ "backup" ] url = "https://github.com/YunoHost-Apps/borgwarehouse_ynh" [bozon] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software" ] category = "synchronization" +deprecated_date = 1660401772 # 2022/08/13 level = 7 potential_alternative_to = [ "WeTransfer" ] state = "working" @@ -276,6 +328,7 @@ subtags = [ "files" ] url = "https://github.com/YunoHost-Apps/bozon_ynh" [cac-proxy] +added_date = 1674232499 # 2023/01/20 branch = "main" category = "small_utilities" level = 8 @@ -284,6 +337,7 @@ subtags = [ "proxy" ] url = "https://github.com/yunoHost-Apps/cac-proxy_ynh" [cachet] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 potential_alternative_to = [ "StatusHub" ] @@ -292,54 +346,65 @@ subtags = [ "monitoring" ] url = "https://github.com/YunoHost-Apps/cachet_ynh" [calckey] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software" ] category = "social_media" +deprecated_date = 1695719324 # 2023/09/26 level = 6 -potential_alternative_to = [ "Twitter", "Mastodon", "Pleroma" ] +potential_alternative_to = [ "Mastodon", "Pleroma", "Twitter" ] state = "working" url = "https://github.com/YunoHost-Apps/calckey_ynh" [calibreweb] +added_date = 1674232499 # 2023/01/20 category = "reading" -level = 8 +level = 6 state = "working" subtags = [ "books" ] url = "https://github.com/YunoHost-Apps/calibreweb_ynh" [castopod] +added_date = 1674232499 # 2023/01/20 category = "multimedia" -level = 6 -potential_alternative_to = [ "Anchor", "Deezer", "SoundCloud", "Spotify", "Audible", "Apple Podcasts" ] +level = 8 +potential_alternative_to = [ "Anchor", "Apple Podcasts", "Audible", "Deezer", "SoundCloud", "Spotify" ] state = "working" url = "https://github.com/YunoHost-Apps/castopod_ynh" [cesium] +added_date = 1674232499 # 2023/01/20 category = "wat" -level = 6 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/cesium_ynh" [chatgpt-web] +added_date = 1684063245 # 2023/05/14 antifeatures = [ "non-free-network" ] category = "small_utilities" -level = 7 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/chatgpt-web_ynh" [chatonsinfos] +added_date = 1701295269 # 2023/11/29 category = "wat" level = 7 state = "working" url = "https://github.com/YunoHost-Apps/chatonsinfos_ynh" [cheky] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "small_utilities" +deprecated_date = 1717071136 # 2024/05/30 level = 8 state = "working" url = "https://github.com/YunoHost-Apps/cheky_ynh" antifeatures = ["deprecated-software"] [chitchatter] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 state = "working" @@ -347,37 +412,44 @@ subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/chitchatter_ynh" [chtickynotes] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software" ] category = "office" +deprecated_date = 1660635329 # 2022/08/16 level = 7 state = "working" subtags = [ "text" ] url = "https://github.com/YunoHost-Apps/chtickynotes_ynh" [chuwiki] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software" ] category = "publishing" +deprecated_date = 1660635175 # 2022/08/16 level = 7 state = "working" subtags = [ "wiki" ] url = "https://github.com/YunoHost-Apps/chuwiki_ynh" [chyrplite] +added_date = 1682991333 # 2023/05/02 category = "publishing" level = 0 state = "notworking" -subtags = [ "website", "blog" ] +subtags = [ "blog", "website" ] url = "https://github.com/YunoHost-Apps/chyrplite_ynh" [cinny] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 -potential_alternative_to = [ "Discord", "Signal", "Whatsapp", "Facebook Messenger", "Telegram", "Skype" ] +potential_alternative_to = [ "Discord", "Facebook Messenger", "Signal", "Skype", "Telegram", "Whatsapp" ] state = "working" subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/cinny_ynh" [civicrm_drupal7] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 7 state = "working" @@ -385,19 +457,22 @@ subtags = [ "business_and_ngos" ] url = "https://github.com/YunoHost-Apps/civicrm_drupal7_ynh" [cjdns] +added_date = 1703094732 # 2023/12/20 category = "system_tools" -level = 0 +level = 6 state = "working" subtags = [ "network" ] url = "https://github.com/YunoHost-Apps/cjdns_ynh" [cloudlog] +added_date = 1685981922 # 2023/06/05 category = "small_utilities" -level = 7 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/cloudlog_ynh" [cockpit] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 6 state = "working" @@ -405,6 +480,7 @@ subtags = [ "monitoring" ] url = "https://github.com/YunoHost-Apps/cockpit_ynh" [code-server] +added_date = 1674232499 # 2023/01/20 category = "dev" level = 6 state = "working" @@ -412,6 +488,7 @@ subtags = [ "programming" ] url = "https://github.com/YunoHost-Apps/code-server_ynh" [codimd] +added_date = 1674232499 # 2023/01/20 category = "office" level = 8 potential_alternative_to = [ "Google Docs" ] @@ -420,6 +497,7 @@ subtags = [ "text" ] url = "https://github.com/YunoHost-Apps/codimd_ynh" [coin] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 state = "working" @@ -427,15 +505,19 @@ subtags = [ "business_and_ngos" ] url = "https://github.com/YunoHost-Apps/coin_ynh" [collabora] +added_date = 1674232499 # 2023/01/20 category = "office" -level = 6 -potential_alternative_to = [ "Google Docs", "G Suite", "Microsoft Word", "Microsoft Excel", "Microsoft Office", "Apple Pages" ] +level = 8 +potential_alternative_to = [ "Apple Pages", "G Suite", "Google Docs", "Microsoft Excel", "Microsoft Office", "Microsoft Word" ] state = "working" -subtags = [ "text", "spreadsheet", "impress" ] +subtags = [ "impress", "spreadsheet", "text" ] url = "https://github.com/YunoHost-Apps/collabora_ynh" [commento] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "publishing" +deprecated_date = 1717071136 # 2024/05/30 level = 8 potential_alternative_to = [ "Disqus" ] state = "working" @@ -444,12 +526,14 @@ url = "https://github.com/YunoHost-Apps/commento_ynh" antifeatures = ["deprecated-software"] [compteur_du_gase] +added_date = 1674232499 # 2023/01/20 category = "office" level = 6 state = "working" url = "https://github.com/YunoHost-Apps/compteur_du_gase_ynh" [concrete5] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" @@ -457,22 +541,25 @@ subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/concrete5_ynh" [conduit] +added_date = 1691780437 # 2023/08/11 category = "communication" level = 7 -potential_alternative_to = [ "Discord", "Signal", "Whatsapp", "Facebook Messenger", "Telegram", "Skype" ] +potential_alternative_to = [ "Discord", "Facebook Messenger", "Signal", "Skype", "Telegram", "Whatsapp" ] state = "working" subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/conduit_ynh" [converse] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 6 -potential_alternative_to = [ "Discord", "Signal", "Whatsapp", "Facebook Messenger", "Telegram", "Skype" ] +potential_alternative_to = [ "Discord", "Facebook Messenger", "Signal", "Skype", "Telegram", "Whatsapp" ] state = "working" subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/converse_ynh" [cops] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "package-not-maintained" ] category = "reading" level = 7 @@ -481,6 +568,7 @@ subtags = [ "books" ] url = "https://github.com/YunoHost-Apps/cops_ynh" [coturn] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" @@ -488,6 +576,7 @@ subtags = [ "network" ] url = "https://github.com/YunoHost-Apps/coturn_ynh" [couchdb] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 6 state = "working" @@ -495,8 +584,10 @@ subtags = [ "db" ] url = "https://github.com/YunoHost-Apps/couchdb_ynh" [couchpotato] -antifeatures = [ "package-not-maintained", "deprecated-software" ] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software", "package-not-maintained" ] category = "multimedia" +deprecated_date = 1717071136 # 2024/05/30 level = 0 potential_alternative_to = [ "Netflix" ] state = "notworking" @@ -504,13 +595,24 @@ subtags = [ "download" ] url = "https://github.com/YunoHost-Apps/couchpotato_ynh" [cowyo] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" subtags = [ "wiki" ] url = "https://github.com/YunoHost-Apps/cowyo_ynh" +[crabfit] +added_date = 1710114839 # 2024/03/10 +category = "productivity_and_management" +level = 7 +potential_alternative_to = [ "Doodle", "OpenSondage" ] +state = "working" +subtags = [ "poll" ] +url = "https://github.com/YunoHost-Apps/crabfit_ynh" + [cryptpad] +added_date = 1674232499 # 2023/01/20 category = "office" level = 8 potential_alternative_to = [ "Google Docs" ] @@ -519,6 +621,7 @@ subtags = [ "text" ] url = "https://github.com/YunoHost-Apps/cryptpad_ynh" [cubiks-2048] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "tracking" ] category = "games" level = 8 @@ -526,18 +629,21 @@ state = "working" url = "https://github.com/YunoHost-Apps/cubiks-2048_ynh" [cultivons] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/cultivons_ynh" [cyberchef] +added_date = 1679078317 # 2023/03/17 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/cyberchef_ynh" [cypht] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 potential_alternative_to = [ "GMail", "Hotmail", "Microsoft Outlook", "Yahoo! Mail" ] @@ -546,13 +652,15 @@ subtags = [ "email" ] url = "https://github.com/YunoHost-Apps/cypht_ynh" [dato] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" -level = 6 +level = 8 potential_alternative_to = [ "FileMaker", "Microsoft Access" ] state = "working" url = "https://github.com/YunoHost-Apps/dato_ynh" [decidim] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 0 potential_alternative_to = [ "Cap Collectif", "Fluicity" ] @@ -560,6 +668,7 @@ state = "notworking" url = "https://github.com/YunoHost-Apps/decidim_ynh" [deluge] +added_date = 1691487217 # 2023/08/08 category = "multimedia" level = 7 potential_alternative_to = [ "µTorrent" ] @@ -568,30 +677,34 @@ subtags = [ "download" ] url = "https://github.com/YunoHost-Apps/deluge_ynh" [dendrite] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "alpha-software" ] category = "communication" -level = 7 -potential_alternative_to = [ "Discord", "Signal", "Whatsapp", "Facebook Messenger", "Telegram", "Skype" ] +level = 6 +potential_alternative_to = [ "Discord", "Facebook Messenger", "Signal", "Skype", "Telegram", "Whatsapp" ] state = "working" subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/dendrite_ynh" [dex] +added_date = 1674232499 # 2023/01/20 category = "system_tools" -level = 8 +level = 6 state = "working" subtags = [ "network" ] url = "https://github.com/YunoHost-Apps/dex_ynh" [diacamma] +added_date = 1702911143 # 2023/12/18 category = "productivity_and_management" -level = 7 -potential_alternative_to = [ "Ciel Associations", "HelloAsso", "AssoConnect" ] +level = 6 +potential_alternative_to = [ "AssoConnect", "Ciel Associations", "HelloAsso" ] state = "working" subtags = [ "accounting", "business_and_ngos" ] url = "https://github.com/YunoHost-Apps/diacamma_ynh" [diagramsnet] +added_date = 1674232499 # 2023/01/20 category = "office" level = 8 potential_alternative_to = [ "Visio" ] @@ -600,67 +713,80 @@ subtags = [ "draw" ] url = "https://github.com/YunoHost-Apps/diagramsnet_ynh" [diaspora] +added_date = 1674232499 # 2023/01/20 category = "social_media" -level = 6 +level = 8 potential_alternative_to = [ "Ello", "Facebook", "Hubzilla", "Myspace", "X" ] state = "working" subtags = [ "microblogging" ] url = "https://github.com/YunoHost-Apps/diaspora_ynh" [digiscreen] +added_date = 1674232499 # 2023/01/20 category = "wat" level = 7 state = "working" url = "https://github.com/YunoHost-Apps/digiscreen_ynh" [digisteps] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/digisteps_ynh" [digitools] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/digitools_ynh" [digitranscode] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/digitranscode_ynh" [digiwords] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/digiwords_ynh" [directorylister] +added_date = 1688911597 # 2023/07/09 category = "small_utilities" -level = 7 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/directorylister_ynh" [discourse] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 6 -potential_alternative_to = [ "Invision Community", "vBulletin", "XenForo" ] +potential_alternative_to = [ "Invision Community", "XenForo", "vBulletin" ] state = "working" subtags = [ "forum" ] url = "https://github.com/YunoHost-Apps/discourse_ynh" [dispatch] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software" ] category = "communication" -level = 8 +deprecated_date = 1709075769 # 2024/02/27 +level = 7 state = "working" subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/dispatch_ynh" [distbin] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "small_utilities" +deprecated_date = 1717071136 # 2024/05/30 level = 6 state = "working" subtags = [ "pastebin" ] @@ -668,6 +794,7 @@ url = "https://github.com/YunoHost-Apps/distbin_ynh" antifeatures = ["deprecated-software"] [django-fmd] +added_date = 1674232499 # 2023/01/20 category = "iot" level = 8 potential_alternative_to = [ "Googles FindMyDevice" ] @@ -675,26 +802,30 @@ state = "working" url = "https://github.com/YunoHost-Apps/django-fmd_ynh" [django-for-runners] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" -level = 6 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/django-for-runners_ynh" [django-fritzconnection] +added_date = 1674232499 # 2023/01/20 category = "system_tools" -level = 6 +level = 8 state = "working" subtags = [ "network" ] url = "https://github.com/YunoHost-Apps/django-fritzconnection_ynh" [django_example] +added_date = 1674232499 # 2023/01/20 category = "dev" -level = 8 +level = 3 state = "working" subtags = [ "programming" ] url = "https://github.com/YunoHost-Apps/django_example_ynh" [documize] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 potential_alternative_to = [ "Confluence" ] @@ -703,26 +834,30 @@ subtags = [ "wiki" ] url = "https://github.com/YunoHost-Apps/documize_ynh" [dokuwiki] +added_date = 1674232499 # 2023/01/20 category = "publishing" -level = 8 +level = 6 state = "working" subtags = [ "wiki" ] url = "https://github.com/YunoHost-Apps/dokuwiki_ynh" [dolibarr] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" -level = 6 +level = 8 state = "working" subtags = [ "business_and_ngos" ] url = "https://github.com/YunoHost-Apps/dolibarr_ynh" [domoticz] +added_date = 1674232499 # 2023/01/20 category = "iot" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/domoticz_ynh" [dont-code] +added_date = 1674232499 # 2023/01/20 branch = "main" category = "dev" level = 8 @@ -731,6 +866,7 @@ subtags = [ "programming" ] url = "https://github.com/YunoHost-Apps/dont-code_ynh" [dotclear2] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" @@ -738,14 +874,17 @@ subtags = [ "blog" ] url = "https://github.com/YunoHost-Apps/dotclear2_ynh" [droppy] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software" ] category = "synchronization" +deprecated_date = 1702018768 # 2023/12/08 level = 7 state = "working" subtags = [ "files" ] url = "https://github.com/YunoHost-Apps/droppy_ynh" [drupal] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" @@ -753,6 +892,7 @@ subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/drupal_ynh" [drupal7] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 6 state = "working" @@ -760,12 +900,14 @@ subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/drupal7_ynh" [duniter] +added_date = 1674232499 # 2023/01/20 category = "wat" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/duniter_ynh" [easyappointments] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 potential_alternative_to = [ "Doctolib" ] @@ -774,20 +916,23 @@ subtags = [ "business_and_ngos" ] url = "https://github.com/YunoHost-Apps/easyappointments_ynh" [elabftw] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 6 state = "working" url = "https://github.com/YunoHost-Apps/elabftw_ynh" [elasticsearch7] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "not-totally-free-upstream" ] category = "dev" -level = 6 +level = 8 state = "working" subtags = [ "programming" ] url = "https://github.com/YunoHost-Apps/elasticsearch7_ynh" [elasticsearch8] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "not-totally-free-upstream" ] category = "dev" level = 8 @@ -796,65 +941,77 @@ subtags = [ "programming" ] url = "https://github.com/YunoHost-Apps/elasticsearch8_ynh" [element] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 -potential_alternative_to = [ "Discord", "Signal", "Whatsapp", "Facebook Messenger", "Telegram", "Skype" ] +potential_alternative_to = [ "Discord", "Facebook Messenger", "Signal", "Skype", "Telegram", "Whatsapp" ] state = "working" subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/element_ynh" [element-call] +added_date = 1697570605 # 2023/10/17 category = "communication" -level = 6 +level = 7 potential_alternative_to = [ "Skype", "Zoom" ] state = "working" subtags = [ "meeting" ] url = "https://github.com/YunoHost-Apps/element-call_ynh" [eleventy] +added_date = 1683960849 # 2023/05/13 category = "publishing" -level = 7 +level = 8 potential_alternative_to = [ "Blogger", "Blogspot", "Wix" ] state = "working" -subtags = [ "website", "blog" ] +subtags = [ "blog", "website" ] url = "https://github.com/YunoHost-Apps/eleventy_ynh" [emailpoubelle] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 -potential_alternative_to = [ "crazymailing.com", "jetable.org", "spamGourmet", "Tempomail", "yopmail.com" ] +potential_alternative_to = [ "Tempomail", "crazymailing.com", "jetable.org", "spamGourmet", "yopmail.com" ] state = "working" url = "https://github.com/YunoHost-Apps/emailpoubelle_ynh" [emoncms] +added_date = 1674232499 # 2023/01/20 category = "iot" -level = 6 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/emoncms_ynh" [encryptic] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software" ] category = "office" +deprecated_date = 1680121538 # 2023/03/29 level = 7 state = "working" subtags = [ "text" ] url = "https://github.com/YunoHost-Apps/encryptic_ynh" [encryptor-decryptor] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "small_utilities" +deprecated_date = 1717071136 # 2024/05/30 level = 8 state = "working" url = "https://github.com/YunoHost-Apps/encryptor-decryptor_ynh" antifeatures = ["deprecated-software"] [endi] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 0 state = "working" -subtags = [ "business_and_ngos", "accounting" ] +subtags = [ "accounting", "business_and_ngos" ] url = "https://github.com/Yunohost-Apps/endi_ynh" [epicyon] +added_date = 1674232499 # 2023/01/20 category = "social_media" level = 8 state = "working" @@ -862,6 +1019,7 @@ subtags = [ "microblogging" ] url = "https://github.com/YunoHost-Apps/epicyon_ynh" [ergo] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 state = "working" @@ -869,31 +1027,37 @@ subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/ergo_ynh" [ethercalc] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "office" +deprecated_date = 1717071136 # 2024/05/30 level = 8 -potential_alternative_to = [ "Google Sheets", "G Suite", "Microsoft Excel", "Office 365" ] +potential_alternative_to = [ "G Suite", "Google Sheets", "Microsoft Excel", "Office 365" ] state = "working" subtags = [ "spreadsheet" ] url = "https://github.com/YunoHost-Apps/ethercalc_ynh" antifeatures = ["deprecated-software"] [etherpad] +added_date = 1694300530 # 2023/09/09 category = "office" level = 7 -potential_alternative_to = [ "Google Docs", "G Suite", "Microsoft Word", "Microsoft Office", "Office 365" ] +potential_alternative_to = [ "G Suite", "Google Docs", "Microsoft Office", "Microsoft Word", "Office 365" ] state = "working" subtags = [ "text" ] url = "https://github.com/YunoHost-Apps/etherpad_ynh" [etherpad_mypads] +added_date = 1674232499 # 2023/01/20 category = "office" level = 6 -potential_alternative_to = [ "Google Docs", "G Suite", "Microsoft Word", "Microsoft Office", "Office 365" ] +potential_alternative_to = [ "G Suite", "Google Docs", "Microsoft Office", "Microsoft Word", "Office 365" ] state = "working" subtags = [ "text" ] url = "https://github.com/YunoHost-Apps/etherpad_mypads_ynh" [excalidraw] +added_date = 1674232499 # 2023/01/20 category = "office" level = 8 potential_alternative_to = [ "Lucidchart" ] @@ -902,13 +1066,17 @@ subtags = [ "draw" ] url = "https://github.com/YunoHost-Apps/excalidraw_ynh" [fab-manager] +added_date = 1674232499 # 2023/01/20 category = "office" -level = 0 +level = 6 state = "working" url = "https://github.com/YunoHost-Apps/fab-manager_ynh" [facette] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "system_tools" +deprecated_date = 1717071136 # 2024/05/30 level = 8 state = "working" subtags = [ "monitoring" ] @@ -916,26 +1084,22 @@ url = "https://github.com/YunoHost-Apps/facette_ynh" antifeatures = ["deprecated-software"] [facilmap] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/facilmap_ynh" [fastapi] +added_date = 1701639252 # 2023/12/03 category = "publishing" level = 7 state = "working" subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/fastapi_ynh" -[ffsync] -antifeatures = [ "deprecated-software" ] -category = "synchronization" -level = 6 -state = "working" -url = "https://github.com/YunoHost-Apps/ffsync_ynh" - [fider] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 3 state = "working" @@ -943,13 +1107,17 @@ subtags = [ "poll" ] url = "https://github.com/YunoHost-Apps/fider_ynh" [filebrowser] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/filebrowser_ynh" [filepizza] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "synchronization" +deprecated_date = 1717071136 # 2024/05/30 level = 8 potential_alternative_to = [ "WeTransfer" ] state = "working" @@ -958,13 +1126,15 @@ url = "https://github.com/YunoHost-Apps/filepizza_ynh" antifeatures = ["deprecated-software"] [firefish] +added_date = 1691055044 # 2023/08/03 category = "social_media" -level = 7 -potential_alternative_to = [ "X", "Threads", "Mastodon", "Pleroma", "Misskey", "Calckey" ] +level = 0 +potential_alternative_to = [ "Calckey", "Mastodon", "Misskey", "Pleroma", "Threads", "X" ] state = "working" url = "https://github.com/YunoHost-Apps/firefish_ynh" [firefly-iii] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 potential_alternative_to = [ "Bankin", "Budgea", "Linxo", "Microsoft Money", "Mint", "You Need A Budget" ] @@ -973,6 +1143,7 @@ subtags = [ "accounting" ] url = "https://github.com/YunoHost-Apps/firefly-iii_ynh" [firefly-iii-di] +added_date = 1679303288 # 2023/03/20 category = "productivity_and_management" level = 8 state = "working" @@ -980,6 +1151,7 @@ subtags = [ "accounting" ] url = "https://github.com/YunoHost-Apps/firefly-iii-di_ynh" [fittrackee] +added_date = 1678221457 # 2023/03/07 category = "small_utilities" level = 8 potential_alternative_to = [ "Strava" ] @@ -987,14 +1159,26 @@ state = "working" url = "https://github.com/Yunohost-Apps/fittrackee_ynh" [flarum] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 -potential_alternative_to = [ "Invision Community", "vBulletin", "XenForo" ] +potential_alternative_to = [ "Invision Community", "XenForo", "vBulletin" ] state = "working" subtags = [ "forum" ] url = "https://github.com/YunoHost-Apps/flarum_ynh" +[flohmarkt] +added_date = 1714137502 # 2024/04/26 +antifeatures = [ "alpha-software", "arbitrary-limitations" ] +category = "publishing" +level = 7 +potential_alternative_to = [ "ClassifiedAds.com", "kleinanzeigen.de" ] +state = "working" +subtags = [ "ecommerce" ] +url = "https://github.com/YunoHost-Apps/flohmarkt_ynh" + [flood] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 8 state = "working" @@ -1002,6 +1186,7 @@ subtags = [ "download" ] url = "https://github.com/YunoHost-Apps/flood_ynh" [fluffychat] +added_date = 1704159048 # 2024/01/02 category = "communication" level = 7 state = "working" @@ -1009,23 +1194,28 @@ subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/fluffychat_ynh" [fluxbb] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "communication" +deprecated_date = 1717071136 # 2024/05/30 level = 8 -potential_alternative_to = [ "Invision Community", "Vanilla", "vBulletin", "XenForo" ] +potential_alternative_to = [ "Invision Community", "Vanilla", "XenForo", "vBulletin" ] state = "working" subtags = [ "forum" ] url = "https://github.com/YunoHost-Apps/fluxbb_ynh" antifeatures = ["deprecated-software"] [focalboard] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 -potential_alternative_to = [ "Trello", "Notion", "Asana" ] +potential_alternative_to = [ "Asana", "Notion", "Trello" ] state = "working" subtags = [ "task" ] url = "https://github.com/YunoHost-Apps/focalboard_ynh" [forgejo] +added_date = 1674232499 # 2023/01/20 category = "dev" level = 8 potential_alternative_to = [ "GitHub" ] @@ -1034,20 +1224,23 @@ subtags = [ "forge" ] url = "https://github.com/YunoHost-Apps/forgejo_ynh" [framaforms] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" -level = 0 +level = 8 potential_alternative_to = [ "Google Forms" ] state = "working" subtags = [ "poll" ] url = "https://github.com/YunoHost-Apps/framaforms_ynh" [framagames] +added_date = 1674232499 # 2023/01/20 category = "games" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/framagames_ynh" [freescout] +added_date = 1700522075 # 2023/11/20 antifeatures = [ "not-totally-free-upstream" ] category = "productivity_and_management" level = 6 @@ -1057,6 +1250,7 @@ subtags = [ "task" ] url = "https://github.com/YunoHost-Apps/freescout_ynh" [freshrss] +added_date = 1674232499 # 2023/01/20 category = "reading" level = 8 potential_alternative_to = [ "Feedly", "Google Reader", "Netvibes" ] @@ -1065,6 +1259,7 @@ subtags = [ "rssreader" ] url = "https://github.com/YunoHost-Apps/freshrss_ynh" [friendica] +added_date = 1674232499 # 2023/01/20 category = "social_media" level = 8 potential_alternative_to = [ "Facebook" ] @@ -1073,6 +1268,7 @@ subtags = [ "microblogging" ] url = "https://github.com/YunoHost-Apps/friendica_ynh" [funkwhale] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 8 potential_alternative_to = [ "Deezer", "Soundcloud", "Spotify" ] @@ -1081,6 +1277,7 @@ subtags = [ "music" ] url = "https://github.com/YunoHost-Apps/funkwhale_ynh" [galene] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 potential_alternative_to = [ "Skype", "Zoom" ] @@ -1089,13 +1286,15 @@ subtags = [ "meeting" ] url = "https://github.com/YunoHost-Apps/galene_ynh" [galette] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" -level = 8 +level = 6 state = "working" subtags = [ "business_and_ngos" ] url = "https://github.com/YunoHost-Apps/galette_ynh" [gamja] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 state = "working" @@ -1103,6 +1302,7 @@ subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/gamja_ynh" [gancio] +added_date = 1696575541 # 2023/10/06 category = "social_media" level = 7 state = "working" @@ -1110,36 +1310,33 @@ subtags = [ "events" ] url = "https://github.com/YunoHost-Apps/gancio_ynh" [garage] +added_date = 1674656794 # 2023/01/25 category = "system_tools" level = 8 state = "working" subtags = [ "backup" ] url = "https://github.com/YunoHost-Apps/garage_ynh" -[garradin] -antifeatures = [ "deprecated-software", "replaced-by-another-app" ] -category = "productivity_and_management" -level = 6 -potential_alternative_to = [ "Ciel Associations" ] -state = "working" -subtags = [ "business_and_ngos" ] -url = "https://github.com/YunoHost-Apps/garradin_ynh" - [gemserv] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/gemserv_ynh" [getsimple] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "publishing" +deprecated_date = 1717071136 # 2024/05/30 level = 8 state = "working" -subtags = [ "website", "blog" ] +subtags = [ "blog", "website" ] url = "https://github.com/YunoHost-Apps/getsimple_ynh" antifeatures = ["deprecated-software"] [ghost] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "arbitrary-limitations" ] category = "publishing" level = 8 @@ -1148,6 +1345,7 @@ subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/ghost_ynh" [gitea] +added_date = 1674232499 # 2023/01/20 category = "dev" level = 8 potential_alternative_to = [ "GitHub" ] @@ -1156,6 +1354,7 @@ subtags = [ "forge" ] url = "https://github.com/YunoHost-Apps/gitea_ynh" [gitlab] +added_date = 1674232499 # 2023/01/20 category = "dev" level = 8 potential_alternative_to = [ "GitHub" ] @@ -1164,6 +1363,7 @@ subtags = [ "forge" ] url = "https://github.com/YunoHost-Apps/gitlab_ynh" [gitlab-runner] +added_date = 1674232499 # 2023/01/20 category = "dev" level = 8 state = "working" @@ -1171,13 +1371,22 @@ subtags = [ "forge" ] url = "https://github.com/YunoHost-Apps/gitlab-runner_ynh" [gitlist] +added_date = 1675002183 # 2023/01/29 category = "dev" -level = 7 +level = 8 state = "working" subtags = [ "forge" ] url = "https://github.com/YunoHost-Apps/gitlist_ynh" +[glance] +added_date = 1715979623 # 2024/05/17 +category = "reading" +level = 7 +state = "working" +url = "https://github.com/YunoHost-Apps/glance_ynh" + [glitchsoc] +added_date = 1674232499 # 2023/01/20 category = "social_media" level = 6 state = "working" @@ -1185,13 +1394,15 @@ subtags = [ "microblogging" ] url = "https://github.com/YunoHost-Apps/glitchsoc_ynh" [glowingbear] +added_date = 1674232499 # 2023/01/20 category = "communication" -level = 6 +level = 8 state = "working" subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/glowingbear_ynh" [glpi] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 6 potential_alternative_to = [ "Cherwell", "Freshdesk", "Ivanti", "Peregrine Systems (AssetCenter)", "Remedy (BMC Software)", "ServiceNow" ] @@ -1200,6 +1411,7 @@ subtags = [ "task" ] url = "https://github.com/YunoHost-Apps/glpi_ynh" [gogs] +added_date = 1674232499 # 2023/01/20 category = "dev" level = 8 potential_alternative_to = [ "GitHub" ] @@ -1208,27 +1420,31 @@ subtags = [ "forge" ] url = "https://github.com/YunoHost-Apps/gogs_ynh" [gossa] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/gossa_ynh" [gotify] +added_date = 1674232499 # 2023/01/20 category = "dev" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/gotify_ynh" [gotosocial] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "alpha-software", "not-totally-free-package" ] category = "social_media" level = 7 -potential_alternative_to = [ "X", "Threads", "Mastodon", "Pleroma", "Akkoma", "Misskey", "Calckey" ] +potential_alternative_to = [ "Akkoma", "Calckey", "Mastodon", "Misskey", "Pleroma", "Threads", "X" ] state = "working" subtags = [ "microblogging" ] url = "https://github.com/YunoHost-Apps/gotosocial_ynh" [grafana] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" @@ -1236,6 +1452,7 @@ subtags = [ "monitoring" ] url = "https://github.com/YunoHost-Apps/grafana_ynh" [grammalecte] +added_date = 1674232499 # 2023/01/20 category = "office" level = 8 state = "working" @@ -1243,6 +1460,7 @@ subtags = [ "text" ] url = "https://github.com/YunoHost-Apps/grammalecte_ynh" [grav] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 potential_alternative_to = [ "Wix" ] @@ -1251,6 +1469,7 @@ subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/grav_ynh" [grist] +added_date = 1700230906 # 2023/11/17 category = "office" level = 7 potential_alternative_to = [ "Airtable" ] @@ -1259,30 +1478,35 @@ subtags = [ "spreadsheet" ] url = "https://github.com/YunoHost-Apps/grist_ynh" [grocy] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/grocy_ynh" [grr] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/grr_ynh" [guacamole] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 6 state = "working" url = "https://github.com/YunoHost-Apps/guacamole_ynh" [h5ai] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" -level = 8 +level = 6 state = "working" url = "https://github.com/YunoHost-Apps/h5ai_ynh" [halcyon] +added_date = 1674232499 # 2023/01/20 category = "social_media" level = 8 potential_alternative_to = [ "X" ] @@ -1291,6 +1515,7 @@ subtags = [ "microblogging" ] url = "https://github.com/YunoHost-Apps/halcyon_ynh" [haste] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 potential_alternative_to = [ "Pastebin", "ZeroBin" ] @@ -1299,12 +1524,14 @@ subtags = [ "pastebin" ] url = "https://github.com/YunoHost-Apps/haste_ynh" [hat] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/hat_ynh" [headphones] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 8 state = "working" @@ -1312,52 +1539,61 @@ subtags = [ "download" ] url = "https://github.com/YunoHost-Apps/headphones_ynh" [headscale] +added_date = 1686503631 # 2023/06/11 category = "system_tools" -level = 7 +level = 8 +potential_alternative_to = [ "Tailscale" ] state = "working" subtags = [ "network" ] url = "https://github.com/YunoHost-Apps/headscale_ynh" [hedgedoc] +added_date = 1674232499 # 2023/01/20 category = "office" level = 8 -potential_alternative_to = [ "HackMD", "Google Docs" ] +potential_alternative_to = [ "Google Docs", "HackMD" ] state = "working" subtags = [ "text" ] url = "https://github.com/YunoHost-Apps/hedgedoc_ynh" [helloworld] +added_date = 1674232499 # 2023/01/20 category = "dev" level = 6 state = "working" url = "https://github.com/YunoHost-Apps/helloworld_ynh" [hextris] +added_date = 1674232499 # 2023/01/20 category = "games" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/hextris_ynh" [homarr] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/homarr_ynh" [homeassistant] +added_date = 1674232499 # 2023/01/20 category = "iot" -level = 6 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/homeassistant_ynh" [horde] +added_date = 1674232499 # 2023/01/20 category = "communication" -level = 4 +level = 7 state = "working" subtags = [ "email" ] url = "https://github.com/YunoHost-Apps/horde_ynh" [hotspot] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 6 state = "working" @@ -1365,6 +1601,7 @@ subtags = [ "network" ] url = "https://github.com/labriqueinternet/hotspot_ynh" [httpsh] +added_date = 1695759380 # 2023/09/26 category = "system_tools" level = 7 state = "working" @@ -1372,26 +1609,30 @@ url = "https://github.com/Yunohost-Apps/httpsh_ynh" antifeatures = ["deprecated-software"] [hubzilla] +added_date = 1674232499 # 2023/01/20 category = "social_media" -level = 6 +level = 8 potential_alternative_to = [ "Facebook" ] state = "working" subtags = [ "microblogging" ] url = "https://github.com/YunoHost-Apps/hubzilla_ynh" [huginn] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/huginn_ynh" [humhub] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 state = "working" url = "https://github.com/yunohost-apps/humhub_ynh" [hydrogen] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 state = "working" @@ -1399,48 +1640,71 @@ subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/hydrogen_ynh" [icecoder] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software" ] category = "dev" +deprecated_date = 1708146376 # 2024/02/17 level = 7 state = "working" subtags = [ "programming" ] url = "https://github.com/YunoHost-Apps/icecoder_ynh" [iceshrimp] +added_date = 1703341532 # 2023/12/23 category = "social_media" level = 7 -potential_alternative_to = [ "X", "Threads", "Mastodon", "Pleroma", "Misskey", "Calckey" ] +potential_alternative_to = [ "Calckey", "Mastodon", "Misskey", "Pleroma", "Threads", "X" ] state = "working" url = "https://github.com/YunoHost-Apps/iceshrimp_ynh" [ifconfig-io] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/ifconfig-io_ynh" [ifm] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/ifm_ynh" [ihatemoney] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 -potential_alternative_to = [ "Tricount", "Splitwise", "Settle Up", "Splid", "KittySplit" ] +potential_alternative_to = [ "KittySplit", "Settle Up", "Splid", "Splitwise", "Tricount" ] state = "working" subtags = [ "accounting" ] url = "https://github.com/YunoHost-Apps/ihatemoney_ynh" +[immich] +added_date = 1711921326 # 2024/03/31 +antifeatures = [ "alpha-software" ] +category = "multimedia" +level = 7 +state = "working" +url = "https://github.com/YunoHost-Apps/immich_ynh" + +[incus] +added_date = 1710508401 # 2024/03/15 +category = "system_tools" +level = 7 +state = "working" +url = "https://github.com/YunoHost-Apps/incus_ynh" + [indexhibit] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" -subtags = [ "website", "blog" ] +subtags = [ "blog", "website" ] url = "https://github.com/YunoHost-Apps/indexhibit_ynh" [influxdb_v2] +added_date = 1691920584 # 2023/08/13 branch = "main" category = "system_tools" level = 7 @@ -1449,27 +1713,33 @@ subtags = [ "db", "monitoring" ] url = "https://github.com/YunoHost-Apps/influxdb_v2_ynh" [invidious] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "non-free-network" ] category = "social_media" -level = 8 +level = 6 potential_alternative_to = [ "YouTube" ] state = "working" subtags = [ "videos" ] url = "https://github.com/YunoHost-Apps/invidious_ynh" [invoiceninja] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "productivity_and_management" +deprecated_date = 1691394954 # 2023/08/07 level = 7 state = "working" url = "https://github.com/YunoHost-Apps/invoiceninja_ynh" [invoiceninja5] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/invoiceninja5_ynh" [isso] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" @@ -1477,6 +1747,7 @@ subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/isso_ynh" [itflow] +added_date = 1696579498 # 2023/10/06 category = "productivity_and_management" level = 7 state = "working" @@ -1484,71 +1755,82 @@ subtags = [ "accounting" ] url = "https://github.com/YunoHost-Apps/itflow_ynh" [jackett] +added_date = 1674232499 # 2023/01/20 category = "multimedia" -level = 1 +level = 7 state = "working" url = "https://github.com/YunoHost-Apps/jackett_ynh" [jappix] -antifeatures = [ "package-not-maintained", "deprecated-software" ] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software", "package-not-maintained" ] category = "communication" +deprecated_date = 1714590228 # 2024/05/01 level = 7 state = "working" subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/jappix_ynh" [jeedom] +added_date = 1674232499 # 2023/01/20 category = "iot" -level = 6 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/jeedom_ynh" [jellyfin] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 6 -potential_alternative_to = [ "Plex", "Netflix" ] +potential_alternative_to = [ "Netflix", "Plex" ] state = "working" -subtags = [ "music", "mediacenter" ] +subtags = [ "mediacenter", "music" ] url = "https://github.com/YunoHost-Apps/jellyfin_ynh" [jellyfin-vue] +added_date = 1694251217 # 2023/09/09 category = "multimedia" level = 7 -potential_alternative_to = [ "Plex", "Netflix" ] +potential_alternative_to = [ "Netflix", "Plex" ] state = "working" -subtags = [ "music", "mediacenter" ] +subtags = [ "mediacenter", "music" ] url = "https://github.com/YunoHost-Apps/jellyfin-vue_ynh" [jellyseerr] +added_date = 1683832079 # 2023/05/11 category = "multimedia" -level = 7 +level = 8 potential_alternative_to = [ "Overseerr" ] state = "working" url = "https://github.com/YunoHost-Apps/jellyseerr_ynh" [jenkins] +added_date = 1674232499 # 2023/01/20 category = "dev" level = 6 state = "working" url = "https://github.com/YunoHost-Apps/jenkins_ynh" [jirafeau] +added_date = 1674232499 # 2023/01/20 category = "synchronization" -level = 6 +level = 8 potential_alternative_to = [ "ImageShack", "Imgur" ] state = "working" subtags = [ "files" ] url = "https://github.com/YunoHost-Apps/jirafeau_ynh" [jitsi] +added_date = 1674232499 # 2023/01/20 category = "communication" -level = 6 +level = 8 potential_alternative_to = [ "Google Hangouts", "Skype" ] state = "working" subtags = [ "meeting" ] url = "https://github.com/YunoHost-Apps/jitsi_ynh" [joomla] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "package-not-maintained" ] category = "publishing" level = 7 @@ -1557,13 +1839,23 @@ subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/joomla_ynh" [joplin] +added_date = 1702203874 # 2023/12/10 category = "office" -level = 0 -state = "notworking" +level = 7 +state = "working" subtags = [ "text" ] url = "https://github.com/YunoHost-Apps/joplin_ynh" +[jump] +added_date = 1714286036 # 2024/04/28 +category = "productivity_and_management" +level = 0 +potential_alternative_to = [ "Dashy", "Heimdall" ] +state = "notworking" +url = "https://github.com/YunoHost-Apps/jump_ynh" + [jupyterlab] +added_date = 1674232499 # 2023/01/20 category = "dev" level = 6 state = "working" @@ -1571,6 +1863,7 @@ subtags = [ "programming" ] url = "https://github.com/YunoHost-Apps/jupyterlab_ynh" [kanboard] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 6 potential_alternative_to = [ "Trello" ] @@ -1579,14 +1872,16 @@ subtags = [ "task" ] url = "https://github.com/YunoHost-Apps/kanboard_ynh" [kavita] -category = "reading" +added_date = 1674232499 # 2023/01/20 antifeatures = [ "paid-content" ] +category = "reading" level = 8 state = "working" subtags = [ "books" ] url = "https://github.com/YunoHost-Apps/kavita_ynh" [keeweb] +added_date = 1674232499 # 2023/01/20 category = "synchronization" level = 8 potential_alternative_to = [ "1Password", "Dashlane", "Enpass", "LastPass" ] @@ -1595,14 +1890,16 @@ subtags = [ "password" ] url = "https://github.com/YunoHost-Apps/keeweb_ynh" [kimai2] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 7 -potential_alternative_to = [ "Toggl Track", "RescueTime", "Hamster" ] +potential_alternative_to = [ "Hamster", "RescueTime", "Toggl Track" ] state = "working" subtags = [ "task" ] url = "https://github.com/YunoHost-Apps/kimai2_ynh" [kiwiirc] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 state = "working" @@ -1610,28 +1907,32 @@ subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/kiwiirc_ynh" [kiwix] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/kiwix_ynh" [kodi] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 0 -potential_alternative_to = [ "Plex", "QuickTime", "Windows Media Center", "Windows Media Player", "Netflix" ] +potential_alternative_to = [ "Netflix", "Plex", "QuickTime", "Windows Media Center", "Windows Media Player" ] state = "notworking" subtags = [ "mediacenter" ] url = "https://github.com/YunoHost-Apps/kodi_ynh" [koel] +added_date = 1694978602 # 2023/09/17 category = "multimedia" level = 7 -potential_alternative_to = [ "Deezer", "SoundCloud", "Spotify", "Airsonic" ] +potential_alternative_to = [ "Airsonic", "Deezer", "SoundCloud", "Spotify" ] state = "working" subtags = [ "music" ] url = "https://github.com/YunoHost-Apps/koel_ynh" [komga] +added_date = 1674232499 # 2023/01/20 category = "reading" level = 8 state = "working" @@ -1639,14 +1940,16 @@ subtags = [ "books" ] url = "https://github.com/YunoHost-Apps/komga_ynh" [kresus] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" -level = 8 +level = 6 potential_alternative_to = [ "Bankin", "Budgea", "Linxo", "Microsoft Money", "Mint", "You Need A Budget" ] state = "working" subtags = [ "accounting" ] url = "https://github.com/YunoHost-Apps/kresus_ynh" [ladder] +added_date = 1702560857 # 2023/12/14 category = "reading" level = 7 potential_alternative_to = [ "12ft", "13ft" ] @@ -1654,6 +1957,7 @@ state = "working" url = "https://github.com/YunoHost-Apps/ladder_ynh" [languagetool] +added_date = 1674232499 # 2023/01/20 category = "office" level = 8 state = "working" @@ -1661,22 +1965,26 @@ subtags = [ "text" ] url = "https://github.com/YunoHost-Apps/languagetool_ynh" [laverna] -antifeatures = [ "package-not-maintained", "deprecated-software" ] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software", "package-not-maintained" ] category = "office" +deprecated_date = 1717071136 # 2024/05/30 level = 7 state = "working" subtags = [ "text" ] url = "https://github.com/YunoHost-Apps/laverna_ynh" [leantime] +added_date = 1683586765 # 2023/05/08 category = "productivity_and_management" -level = 7 -potential_alternative_to = [ "ClickUp", "Notion", "Asana" ] +level = 8 +potential_alternative_to = [ "Asana", "ClickUp", "Notion" ] state = "working" subtags = [ "task" ] url = "https://github.com/YunoHost-Apps/leantime_ynh" [leed] +added_date = 1674232499 # 2023/01/20 category = "reading" level = 8 potential_alternative_to = [ "Feedly", "Google Reader", "Netvibes" ] @@ -1685,21 +1993,25 @@ subtags = [ "rssreader" ] url = "https://github.com/YunoHost-Apps/leed_ynh" [lemmy] +added_date = 1674232499 # 2023/01/20 category = "social_media" -level = 6 +level = 8 potential_alternative_to = [ "Hacker News", "Lobste.rs", "Reddit" ] state = "working" url = "https://github.com/YunoHost-Apps/lemmy_ynh" [librarian] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software" ] category = "social_media" +deprecated_date = 1707947485 # 2024/02/14 level = 7 state = "working" subtags = [ "videos" ] url = "https://github.com/YunoHost-Apps/librarian_ynh" [libreddit] +added_date = 1674232499 # 2023/01/20 category = "social_media" level = 8 potential_alternative_to = [ "Hacker News", "Lobste.rs", "Reddit" ] @@ -1707,6 +2019,7 @@ state = "working" url = "https://github.com/YunoHost-Apps/libreddit_ynh" [libreerp] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "paid-content" ] category = "productivity_and_management" level = 6 @@ -1715,13 +2028,15 @@ subtags = [ "business_and_ngos" ] url = "https://github.com/YunoHost-Apps/libreerp_ynh" [libremdb] +added_date = 1681904233 # 2023/04/19 category = "social_media" -level = 7 +level = 8 potential_alternative_to = [ "IMDb" ] state = "working" url = "https://github.com/YunoHost-Apps/libremdb_ynh" [librephotos] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 0 potential_alternative_to = [ "Google Photos" ] @@ -1730,6 +2045,7 @@ subtags = [ "pictures" ] url = "https://github.com/YunoHost-Apps/librephotos_ynh" [librespeed] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" @@ -1737,33 +2053,40 @@ subtags = [ "monitoring" ] url = "https://github.com/YunoHost-Apps/librespeed_ynh" [libreto] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "publishing" -level = 7 +deprecated_date = 1717071136 # 2024/05/30 +level = 8 state = "working" subtags = [ "wiki" ] url = "https://github.com/YunoHost-Apps/libreto_ynh" antifeatures = ["deprecated-software"] [libretranslate] +added_date = 1680436289 # 2023/04/02 category = "small_utilities" level = 8 -potential_alternative_to = [ "Google Translate", "DeepL" ] +potential_alternative_to = [ "DeepL", "Google Translate" ] state = "working" url = "https://github.com/YunoHost-Apps/libretranslate_ynh" [librex] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/librex_ynh" [lidarr] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 6 state = "working" url = "https://github.com/YunoHost-Apps/lidarr_ynh" [limesurvey] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 potential_alternative_to = [ "Google Forms", "SurveyMonkey" ] @@ -1772,20 +2095,25 @@ subtags = [ "poll" ] url = "https://github.com/YunoHost-Apps/limesurvey_ynh" [lingva] +added_date = 1685604095 # 2023/06/01 antifeatures = [ "non-free-network" ] category = "small_utilities" -level = 7 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/lingva_ynh" [linkstack] +added_date = 1683443449 # 2023/05/07 category = "publishing" -level = 7 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/linkstack_ynh" [linuxdash] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "system_tools" +deprecated_date = 1717071136 # 2024/05/30 level = 6 state = "working" subtags = [ "monitoring" ] @@ -1793,6 +2121,7 @@ url = "https://github.com/YunoHost-Apps/linuxdash_ynh" antifeatures = ["deprecated-software"] [lionwiki-t2t] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" @@ -1800,6 +2129,7 @@ subtags = [ "wiki" ] url = "https://github.com/YunoHost-Apps/lionwiki-t2t_ynh" [listmonk] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 potential_alternative_to = [ "Google Groups" ] @@ -1808,6 +2138,7 @@ subtags = [ "email" ] url = "https://github.com/yunohost-apps/listmonk_ynh" [loki] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" @@ -1815,6 +2146,7 @@ subtags = [ "monitoring" ] url = "https://github.com/YunoHost-Apps/loki_ynh" [lstu] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 potential_alternative_to = [ "bitly" ] @@ -1823,7 +2155,10 @@ subtags = [ "url_shortener" ] url = "https://github.com/YunoHost-Apps/lstu_ynh" [luckysheet] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "office" +deprecated_date = 1717071136 # 2024/05/30 level = 8 potential_alternative_to = [ "Google Docs", "Microsoft Excel" ] state = "working" @@ -1832,14 +2167,16 @@ url = "https://github.com/YunoHost-Apps/luckysheet_ynh" antifeatures = ["deprecated-software"] [lufi] +added_date = 1674232499 # 2023/01/20 category = "synchronization" -level = 8 +level = 6 potential_alternative_to = [ "WeTransfer" ] state = "working" subtags = [ "files" ] url = "https://github.com/YunoHost-Apps/lufi_ynh" [lutim] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 6 potential_alternative_to = [ "ImageShack", "Imgur" ] @@ -1848,26 +2185,30 @@ subtags = [ "pictures" ] url = "https://github.com/YunoHost-Apps/lutim_ynh" [lxd] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 6 state = "working" url = "https://github.com/YunoHost-Apps/lxd_ynh" [lxd-dashboard] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/lxd-dashboard_ynh" [lychee] +added_date = 1674232499 # 2023/01/20 category = "multimedia" -level = 8 +level = 6 potential_alternative_to = [ "Flickr", "Google Photos" ] state = "working" subtags = [ "pictures" ] url = "https://github.com/YunoHost-Apps/lychee_ynh" [mailman3] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 6 potential_alternative_to = [ "Google Groups" ] @@ -1876,6 +2217,7 @@ subtags = [ "email" ] url = "https://github.com/YunoHost-Apps/mailman3_ynh" [mantis] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 state = "working" @@ -1883,6 +2225,7 @@ subtags = [ "task" ] url = "https://github.com/YunoHost-Apps/mantis_ynh" [mastodon] +added_date = 1674232499 # 2023/01/20 category = "social_media" level = 6 potential_alternative_to = [ "X" ] @@ -1891,6 +2234,7 @@ subtags = [ "microblogging" ] url = "https://github.com/YunoHost-Apps/mastodon_ynh" [matomo] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 potential_alternative_to = [ "Google Analytics", "Xiti" ] @@ -1899,6 +2243,7 @@ subtags = [ "analytics" ] url = "https://github.com/YunoHost-Apps/matomo_ynh" [matrix-appservice-irc] +added_date = 1675621561 # 2023/02/05 category = "communication" level = 7 state = "working" @@ -1906,7 +2251,10 @@ subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/matrix-appservice-irc_ynh" [matrix-puppet-discord] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "communication" +deprecated_date = 1711055457 # 2024/03/21 level = 6 potential_alternative_to = [ "Discord" ] state = "working" @@ -1914,6 +2262,7 @@ subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/matrix-puppet-discord_ynh" [matterbridge] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 state = "working" @@ -1921,6 +2270,7 @@ subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/matterbridge_ynh" [mattermost] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 6 potential_alternative_to = [ "Slack" ] @@ -1929,39 +2279,45 @@ subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/mattermost_ynh" [mautic] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" -level = 6 +level = 8 potential_alternative_to = [ "Marketo", "NetResult", "SalesFusion" ] state = "working" subtags = [ "business_and_ngos" ] url = "https://github.com/YunoHost-Apps/mautic_ynh" [mautrix_discord] +added_date = 1707659042 # 2024/02/11 category = "communication" -level = 7 +level = 0 potential_alternative_to = [ "Discord" ] state = "working" subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/mautrix_discord_ynh" [mautrix_facebook] -category = "communication" +added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software" ] -level = 6 +category = "communication" +deprecated_date = 1709661665 # 2024/03/05 +level = 0 potential_alternative_to = [ "Facebook Messenger" ] state = "working" subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/mautrix_facebook_ynh" [mautrix_signal] +added_date = 1674232499 # 2023/01/20 category = "communication" -level = 6 +level = 7 potential_alternative_to = [ "Signal" ] state = "working" subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/mautrix_signal_ynh" [mautrix_telegram] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 potential_alternative_to = [ "Telegram" ] @@ -1970,6 +2326,7 @@ subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/mautrix_telegram_ynh" [mautrix_whatsapp] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 potential_alternative_to = [ "Whatsapp" ] @@ -1978,28 +2335,42 @@ subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/mautrix_whatsapp_ynh" [mediawiki] +added_date = 1674232499 # 2023/01/20 category = "publishing" -level = 7 +level = 8 state = "working" subtags = [ "wiki" ] url = "https://github.com/YunoHost-Apps/mediawiki_ynh" [meilisearch] +added_date = 1674232499 # 2023/01/20 category = "dev" -level = 7 +level = 8 state = "working" subtags = [ "programming" ] url = "https://github.com/YunoHost-Apps/meilisearch_ynh" [metabase] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" subtags = [ "monitoring" ] url = "https://github.com/YunoHost-Apps/metabase_ynh" +[microbin] +added_date = 1712237414 # 2024/04/04 +category = "small_utilities" +level = 7 +state = "working" +subtags = [ "pastebin" ] +url = "https://github.com/YunoHost-Apps/microbin_ynh" + [minchat] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "communication" +deprecated_date = 1717071136 # 2024/05/30 level = 8 state = "working" subtags = [ "chat" ] @@ -2007,7 +2378,10 @@ url = "https://github.com/YunoHost-Apps/minchat_ynh" antifeatures = ["deprecated-software"] [mindmaps] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "office" +deprecated_date = 1717071136 # 2024/05/30 level = 8 state = "working" subtags = [ "mindmap" ] @@ -2015,6 +2389,7 @@ url = "https://github.com/YunoHost-Apps/mindmaps_ynh" antifeatures = ["deprecated-software"] [minetest] +added_date = 1674232499 # 2023/01/20 category = "games" level = 8 potential_alternative_to = [ "Minecraft" ] @@ -2022,13 +2397,17 @@ state = "working" url = "https://github.com/YunoHost-Apps/minetest_ynh" [mineweb] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "publishing" +deprecated_date = 1717071136 # 2024/05/30 level = 8 state = "working" url = "https://github.com/YunoHost-Apps/mineweb_ynh" antifeatures = ["deprecated-software"] [minidlna] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 8 state = "working" @@ -2036,6 +2415,7 @@ subtags = [ "music" ] url = "https://github.com/YunoHost-Apps/minidlna_ynh" [miniflux] +added_date = 1674232499 # 2023/01/20 category = "reading" level = 8 potential_alternative_to = [ "Feedly", "Google Reader", "Netvibes" ] @@ -2044,6 +2424,7 @@ subtags = [ "rssreader" ] url = "https://github.com/YunoHost-Apps/miniflux_ynh" [minio] +added_date = 1674232499 # 2023/01/20 category = "dev" level = 8 potential_alternative_to = [ "Dropbox", "Google Drive", "Mega", "Microsoft OneDrive" ] @@ -2051,12 +2432,14 @@ state = "working" url = "https://github.com/YunoHost-Apps/minio_ynh" [misskey] +added_date = 1674232499 # 2023/01/20 category = "social_media" level = 6 state = "working" url = "https://github.com/YunoHost-Apps/misskey_ynh" [mobilizon] +added_date = 1674232499 # 2023/01/20 category = "social_media" level = 8 potential_alternative_to = [ "Eventbrite", "Facebook", "Meetup" ] @@ -2065,12 +2448,14 @@ subtags = [ "events" ] url = "https://github.com/YunoHost-Apps/mobilizon_ynh" [moncycle] +added_date = 1674505944 # 2023/01/23 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/moncycle_ynh" [mongo-express] +added_date = 1674232499 # 2023/01/20 branch = "main" category = "system_tools" level = 8 @@ -2079,19 +2464,22 @@ subtags = [ "db" ] url = "https://github.com/YunoHost-Apps/mongo-express_ynh" [monica] +added_date = 1674232499 # 2023/01/20 category = "wat" -level = 6 +level = 0 state = "working" url = "https://github.com/YunoHost-Apps/monica_ynh" [monitorix] +added_date = 1674232499 # 2023/01/20 category = "system_tools" -level = 6 +level = 8 state = "working" subtags = [ "monitoring" ] url = "https://github.com/YunoHost-Apps/monitorix_ynh" [moodle] +added_date = 1674232499 # 2023/01/20 category = "wat" level = 8 potential_alternative_to = [ "Dokeos" ] @@ -2099,6 +2487,7 @@ state = "working" url = "https://github.com/YunoHost-Apps/moodle_ynh" [mopidy] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 6 state = "working" @@ -2106,35 +2495,42 @@ subtags = [ "music" ] url = "https://github.com/YunoHost-Apps/mopidy_ynh" [mosquitto] +added_date = 1674232499 # 2023/01/20 category = "iot" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/mosquitto_ynh" [motioneye] +added_date = 1705503211 # 2024/01/17 category = "iot" level = 7 state = "working" url = "https://github.com/YunoHost-Apps/motioneye_ynh" [movim] +added_date = 1674232499 # 2023/01/20 category = "social_media" level = 8 -potential_alternative_to = [ "Facebook", "Facebook Messenger", "MSN" ] +potential_alternative_to = [ "Facebook Messenger", "Facebook", "MSN" ] state = "working" subtags = [ "microblogging" ] url = "https://github.com/YunoHost-Apps/movim_ynh" [mstream] +added_date = 1683054560 # 2023/05/02 category = "multimedia" -level = 7 +level = 8 potential_alternative_to = [ "Anchor", "Deezer", "SoundCloud", "Spotify" ] state = "working" subtags = [ "music" ] url = "https://github.com/YunoHost-Apps/mstream_ynh" [mumble-web] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "communication" +deprecated_date = 1717071136 # 2024/05/30 level = 8 state = "working" subtags = [ "meeting" ] @@ -2142,6 +2538,7 @@ url = "https://github.com/YunoHost-Apps/mumble-web_ynh" antifeatures = ["deprecated-software"] [mumbleserver] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 state = "working" @@ -2149,6 +2546,7 @@ subtags = [ "meeting" ] url = "https://github.com/YunoHost-Apps/mumbleserver_ynh" [my-mind] +added_date = 1674232499 # 2023/01/20 category = "office" level = 8 state = "working" @@ -2156,12 +2554,14 @@ subtags = [ "mindmap" ] url = "https://github.com/YunoHost-Apps/my-mind_ynh" [my_capsule] +added_date = 1674232499 # 2023/01/20 category = "publishing" -level = 6 +level = 7 state = "working" url = "https://github.com/YunoHost-Apps/my_capsule_ynh" [my_webapp] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 6 state = "working" @@ -2169,6 +2569,7 @@ subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/my_webapp_ynh" [mybb] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 state = "working" @@ -2176,13 +2577,15 @@ subtags = [ "forum" ] url = "https://github.com/YunoHost-Apps/mybb_ynh" [mygpo] +added_date = 1674232499 # 2023/01/20 category = "multimedia" -level = 6 +level = 8 state = "working" subtags = [ "download" ] url = "https://github.com/YunoHost-Apps/mygpo_ynh" [mytinytodo] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 state = "working" @@ -2190,6 +2593,7 @@ subtags = [ "task" ] url = "https://github.com/YunoHost-Apps/mytinytodo_ynh" [n8n] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "not-totally-free-upstream" ] category = "iot" level = 6 @@ -2197,6 +2601,7 @@ state = "working" url = "https://github.com/YunoHost-Apps/n8n_ynh" [navidrome] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 8 state = "working" @@ -2204,6 +2609,7 @@ subtags = [ "music" ] url = "https://github.com/YunoHost-Apps/navidrome_ynh" [netdata] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" @@ -2211,6 +2617,7 @@ subtags = [ "monitoring" ] url = "https://github.com/YunoHost-Apps/netdata_ynh" [neutrinet] +added_date = 1674232499 # 2023/01/20 branch = "stable" category = "wat" level = 6 @@ -2218,14 +2625,16 @@ state = "working" url = "https://gitlab.domainepublic.net/Neutrinet/neutrinet_ynh" [nextcloud] +added_date = 1674232499 # 2023/01/20 category = "synchronization" level = 6 -potential_alternative_to = [ "Apple iCloud", "Dropbox", "Google Apps", "Google Docs", "Google Drive", "Microsoft OneDrive", "Mega" ] +potential_alternative_to = [ "Apple iCloud", "Dropbox", "Google Apps", "Google Docs", "Google Drive", "Mega", "Microsoft OneDrive" ] state = "working" -subtags = [ "files", "calendar", "contacts" ] +subtags = [ "calendar", "contacts", "files" ] url = "https://github.com/YunoHost-Apps/nextcloud_ynh" [nitter] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "non-free-network" ] category = "social_media" level = 8 @@ -2235,6 +2644,7 @@ subtags = [ "microblogging" ] url = "https://github.com/YunoHost-Apps/nitter_ynh" [noalyss] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 potential_alternative_to = [ "Exact Online", "WinBooks", "Yooz" ] @@ -2243,6 +2653,7 @@ subtags = [ "accounting", "business_and_ngos" ] url = "https://github.com/YunoHost-Apps/noalyss_ynh" [nocodb] +added_date = 1674232499 # 2023/01/20 category = "dev" level = 8 potential_alternative_to = [ "Airtable" ] @@ -2250,6 +2661,7 @@ state = "working" url = "https://github.com/YunoHost-Apps/nocodb_ynh" [nodebb] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 state = "working" @@ -2257,24 +2669,28 @@ subtags = [ "forum" ] url = "https://github.com/YunoHost-Apps/nodebb_ynh" [nodered] +added_date = 1674232499 # 2023/01/20 category = "iot" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/nodered_ynh" [nomad] +added_date = 1674232499 # 2023/01/20 category = "dev" -level = 6 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/nomad_ynh" [ntfy] +added_date = 1674232499 # 2023/01/20 category = "dev" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/ntfy_ynh" [nullboard] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 state = "working" @@ -2282,12 +2698,14 @@ subtags = [ "task" ] url = "https://github.com/YunoHost-Apps/nullboard_ynh" [octoprint] +added_date = 1708461644 # 2024/02/20 category = "iot" level = 0 state = "notworking" url = "https://github.com/YunoHost-Apps/octoprint_ynh" [ofbiz] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 6 state = "working" @@ -2295,14 +2713,16 @@ subtags = [ "business_and_ngos" ] url = "https://github.com/YunoHost-Apps/ofbiz_ynh" [ombi] +added_date = 1696432145 # 2023/10/04 category = "multimedia" level = 7 -potential_alternative_to = [ "Plex", "Netflix" ] +potential_alternative_to = [ "Netflix", "Plex" ] state = "working" subtags = [ "mediacenter" ] url = "https://github.com/YunoHost-Apps/ombi_ynh" [omeka-s] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" @@ -2310,14 +2730,16 @@ subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/omeka-s_ynh" [onlyoffice] +added_date = 1674232499 # 2023/01/20 category = "office" -level = 6 +level = 8 potential_alternative_to = [ "Google Docs", "Microsoft Excel", "Microsoft Office", "Microsoft PowerPoint", "Microsoft Word" ] state = "working" -subtags = [ "text", "spreadsheet", "impress" ] +subtags = [ "impress", "spreadsheet", "text" ] url = "https://github.com/YunoHost-Apps/onlyoffice_ynh" [open-web-calendar] +added_date = 1707573007 # 2024/02/10 category = "synchronization" level = 7 potential_alternative_to = [ "Google Agenda", "Microsoft Outlook" ] @@ -2326,14 +2748,17 @@ subtags = [ "calendar" ] url = "https://github.com/YunoHost-Apps/open-web-calendar_ynh" [opennote] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software" ] category = "office" -level = 8 +deprecated_date = 1708403676 # 2024/02/20 +level = 7 state = "working" subtags = [ "text" ] url = "https://github.com/YunoHost-Apps/opennote_ynh" [openproject] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 potential_alternative_to = [ "Asaana", "Basecamp", "Monday" ] @@ -2341,6 +2766,7 @@ state = "working" url = "https://github.com/YunoHost-Apps/openproject_ynh" [opensearch] +added_date = 1674232499 # 2023/01/20 category = "dev" level = 6 potential_alternative_to = [ "ElasticSearch" ] @@ -2349,6 +2775,7 @@ subtags = [ "programming" ] url = "https://github.com/YunoHost-Apps/opensearch_ynh" [opensondage] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 potential_alternative_to = [ "Doodle" ] @@ -2357,33 +2784,41 @@ subtags = [ "poll" ] url = "https://github.com/YunoHost-Apps/opensondage_ynh" [opentracker] +added_date = 1674232499 # 2023/01/20 category = "wat" -level = 8 +level = 0 state = "working" url = "https://github.com/YunoHost-Apps/opentracker_ynh" [osada] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software" ] category = "social_media" +deprecated_date = 1688373883 # 2023/07/03 level = 6 state = "working" subtags = [ "microblogging" ] url = "https://github.com/YunoHost-Apps/osada_ynh" [osjs] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "wat" -level = 8 +deprecated_date = 1712777448 # 2024/04/10 +level = 7 state = "working" url = "https://github.com/YunoHost-Apps/osjs_ynh" antifeatures = ["deprecated-software"] [osticket] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 6 state = "working" url = "https://github.com/YunoHost-Apps/osticket_ynh" [outline] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "not-totally-free-upstream" ] category = "publishing" level = 8 @@ -2392,25 +2827,29 @@ subtags = [ "wiki" ] url = "https://github.com/YunoHost-Apps/outline_ynh" [overleaf] +added_date = 1674232499 # 2023/01/20 category = "office" -level = 0 +level = 7 state = "working" subtags = [ "text" ] url = "https://github.com/YunoHost-Apps/overleaf_ynh" [owncast] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/owncast_ynh" [owncast-emojiwall] +added_date = 1696593645 # 2023/10/06 category = "small_utilities" level = 7 state = "working" url = "https://github.com/YunoHost-Apps/owncast-emojiwall_ynh" [owncloud] +added_date = 1674232499 # 2023/01/20 category = "synchronization" level = 7 potential_alternative_to = [ "Apple iCloud", "Dropbox", "Google Drive", "Microsoft OneDrive" ] @@ -2419,12 +2858,14 @@ subtags = [ "files" ] url = "https://github.com/YunoHost-Apps/owncloud_ynh" [owntracks] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/owntracks_ynh" [pagure] +added_date = 1674232499 # 2023/01/20 category = "dev" level = 0 state = "notworking" @@ -2432,6 +2873,7 @@ subtags = [ "forge" ] url = "https://github.com/YunoHost-Apps/pagure_ynh" [paheko] +added_date = 1675849640 # 2023/02/08 category = "productivity_and_management" level = 8 potential_alternative_to = [ "Ciel Associations" ] @@ -2440,6 +2882,7 @@ subtags = [ "business_and_ngos" ] url = "https://github.com/YunoHost-Apps/paheko_ynh" [pairdrop] +added_date = 1696857595 # 2023/10/09 category = "synchronization" level = 7 potential_alternative_to = [ "AirDrop" ] @@ -2448,6 +2891,7 @@ subtags = [ "files" ] url = "https://github.com/YunoHost-Apps/pairdrop_ynh" [paperless-ngx] +added_date = 1674232499 # 2023/01/20 category = "synchronization" level = 8 state = "working" @@ -2455,22 +2899,25 @@ subtags = [ "files" ] url = "https://github.com/YunoHost-Apps/paperless-ngx_ynh" [peertube] +added_date = 1674232499 # 2023/01/20 category = "social_media" level = 8 -potential_alternative_to = [ "Dailymotion", "Vimeo", "YouTube", "Twitch" ] +potential_alternative_to = [ "Dailymotion", "Twitch", "Vimeo", "YouTube" ] state = "working" subtags = [ "videos" ] url = "https://github.com/YunoHost-Apps/peertube_ynh" [peertube-search-index] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "not-totally-free-upstream" ] category = "social_media" -level = 6 +level = 7 state = "working" subtags = [ "videos" ] url = "https://github.com/YunoHost-Apps/peertube-search-index_ynh" [peertube_remote_runner] +added_date = 1688894207 # 2023/07/09 category = "social_media" level = 7 state = "working" @@ -2478,6 +2925,7 @@ subtags = [ "videos" ] url = "https://github.com/YunoHost-Apps/peertube_remote_runner_ynh" [pelican] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" @@ -2485,6 +2933,7 @@ subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/pelican_ynh" [penpot] +added_date = 1708540527 # 2024/02/21 category = "dev" level = 7 state = "working" @@ -2492,6 +2941,7 @@ subtags = [ "design" ] url = "https://github.com/YunoHost-Apps/penpot_ynh" [pepettes] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" @@ -2499,6 +2949,7 @@ subtags = [ "ecommerce" ] url = "https://github.com/YunoHost-Apps/pepettes_ynh" [petitesannonces] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" @@ -2506,6 +2957,7 @@ subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/petitesannonces_ynh" [petrolette] +added_date = 1674232499 # 2023/01/20 category = "reading" level = 8 potential_alternative_to = [ "Netvibes" ] @@ -2514,6 +2966,7 @@ subtags = [ "rssreader" ] url = "https://github.com/YunoHost-Apps/petrolette_ynh" [pgadmin] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 7 state = "working" @@ -2521,6 +2974,7 @@ subtags = [ "db" ] url = "https://github.com/YunoHost-Apps/pgadmin_ynh" [photonix] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "package-not-maintained" ] category = "multimedia" level = 0 @@ -2529,6 +2983,7 @@ subtags = [ "pictures" ] url = "https://github.com/YunoHost-Apps/photonix_ynh" [photoprism] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 8 state = "working" @@ -2536,19 +2991,22 @@ subtags = [ "pictures" ] url = "https://github.com/YunoHost-Apps/photoprism_ynh" [photoview] +added_date = 1674232499 # 2023/01/20 category = "multimedia" -level = 0 +level = 8 state = "working" subtags = [ "pictures" ] url = "https://github.com/YunoHost-Apps/photoview_ynh" [phpback] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 0 state = "notworking" url = "https://github.com/YunoHost-Apps/phpback_ynh" [phpbb] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 6 state = "working" @@ -2556,24 +3014,28 @@ subtags = [ "forum" ] url = "https://github.com/YunoHost-Apps/phpbb_ynh" [phpboost] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/phpboost_ynh" [phpinfo] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/phpinfo_ynh" [phpipam] +added_date = 1674232499 # 2023/01/20 category = "wat" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/phpipam_ynh" [phpldapadmin] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" @@ -2581,12 +3043,14 @@ subtags = [ "db" ] url = "https://github.com/YunoHost-Apps/phpldapadmin_ynh" [phplicensewatcher] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/phplicensewatcher_ynh" [phpmyadmin] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" @@ -2594,6 +3058,7 @@ subtags = [ "db" ] url = "https://github.com/YunoHost-Apps/phpmyadmin_ynh" [phpservermon] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" @@ -2601,6 +3066,7 @@ subtags = [ "monitoring" ] url = "https://github.com/YunoHost-Apps/phpservermon_ynh" [phpsysinfo] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" @@ -2608,21 +3074,27 @@ subtags = [ "monitoring" ] url = "https://github.com/YunoHost-Apps/phpsysinfo_ynh" [pico] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "publishing" +deprecated_date = 1717071136 # 2024/05/30 level = 8 state = "working" -subtags = [ "website", "blog" ] +subtags = [ "blog", "website" ] url = "https://github.com/YunoHost-Apps/pico_ynh" antifeatures = ["deprecated-software"] [pihole] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "package-not-maintained" ] category = "system_tools" -level = 6 +level = 8 state = "working" subtags = [ "network" ] url = "https://github.com/YunoHost-Apps/pihole_ynh" [piped] +added_date = 1706558247 # 2024/01/29 antifeatures = [ "non-free-network" ] category = "social_media" level = 7 @@ -2632,14 +3104,16 @@ subtags = [ "videos" ] url = "https://github.com/YunoHost-Apps/piped_ynh" [piwigo] +added_date = 1674232499 # 2023/01/20 category = "multimedia" -level = 6 +level = 8 potential_alternative_to = [ "Google Photos", "Keepeek", "Koken", "Orkis Ajaris", "Orphéa" ] state = "working" subtags = [ "pictures" ] url = "https://github.com/YunoHost-Apps/piwigo_ynh" [pixelfed] +added_date = 1674232499 # 2023/01/20 category = "social_media" level = 6 potential_alternative_to = [ "Instagram" ] @@ -2648,6 +3122,7 @@ subtags = [ "pictures" ] url = "https://github.com/YunoHost-Apps/pixelfed_ynh" [plainpad] +added_date = 1674232499 # 2023/01/20 category = "office" level = 8 state = "working" @@ -2655,6 +3130,7 @@ subtags = [ "text" ] url = "https://github.com/YunoHost-Apps/plainpad_ynh" [planka] +added_date = 1702558241 # 2023/12/14 category = "productivity_and_management" level = 7 potential_alternative_to = [ "Trello" ] @@ -2663,6 +3139,7 @@ subtags = [ "task" ] url = "https://github.com/YunoHost-Apps/planka_ynh" [plateau] +added_date = 1674232499 # 2023/01/20 category = "office" level = 8 state = "working" @@ -2670,14 +3147,16 @@ subtags = [ "text" ] url = "https://github.com/YunoHost-Apps/plateau_ynh" [pleroma] +added_date = 1674232499 # 2023/01/20 category = "social_media" -level = 6 +level = 8 potential_alternative_to = [ "X" ] state = "working" subtags = [ "microblogging" ] url = "https://github.com/YunoHost-Apps/pleroma_ynh" [plume] +added_date = 1674232499 # 2023/01/20 category = "social_media" level = 8 potential_alternative_to = [ "Medium" ] @@ -2686,6 +3165,7 @@ subtags = [ "blogging" ] url = "https://github.com/YunoHost-Apps/plume_ynh" [pluxml] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" @@ -2693,6 +3173,7 @@ subtags = [ "blog" ] url = "https://github.com/YunoHost-Apps/pluxml_ynh" [pmwiki] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" @@ -2700,6 +3181,7 @@ subtags = [ "wiki" ] url = "https://github.com/YunoHost-Apps/pmwiki_ynh" [prestashop] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" @@ -2707,7 +3189,10 @@ subtags = [ "ecommerce" ] url = "https://github.com/YunoHost-Apps/prestashop_ynh" [prettynoemiecms] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "publishing" +deprecated_date = 1717071136 # 2024/05/30 level = 8 potential_alternative_to = [ "Wix" ] state = "working" @@ -2715,6 +3200,7 @@ subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/prettynoemiecms_ynh" [privatebin] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 potential_alternative_to = [ "Pastebin", "ZeroBin" ] @@ -2723,14 +3209,16 @@ subtags = [ "pastebin" ] url = "https://github.com/YunoHost-Apps/privatebin_ynh" [processwire] +added_date = 1674232499 # 2023/01/20 category = "publishing" -level = 8 +level = 0 potential_alternative_to = [ "Blogger", "Blogspot", "Wix" ] state = "notworking" -subtags = [ "website", "blog" ] +subtags = [ "blog", "website" ] url = "https://github.com/YunoHost-Apps/processwire_ynh" [prometheus] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 6 state = "working" @@ -2738,18 +3226,21 @@ subtags = [ "monitoring" ] url = "https://github.com/YunoHost-Apps/prometheus_ynh" [prosody] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/prosody_ynh" [prowlarr] +added_date = 1674232499 # 2023/01/20 category = "multimedia" -level = 6 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/prowlarr_ynh" [proxitok] +added_date = 1674232499 # 2023/01/20 category = "social_media" level = 0 potential_alternative_to = [ "TikTok" ] @@ -2757,6 +3248,7 @@ state = "notworking" url = "https://github.com/YunoHost-Apps/proxitok_ynh" [psitransfer] +added_date = 1674232499 # 2023/01/20 category = "synchronization" level = 8 potential_alternative_to = [ "WeTransfer" ] @@ -2765,12 +3257,14 @@ subtags = [ "files" ] url = "https://github.com/YunoHost-Apps/psitransfer_ynh" [pufferpanel] +added_date = 1674232499 # 2023/01/20 category = "games" level = 6 state = "working" url = "https://github.com/YunoHost-Apps/pufferpanel_ynh" [pydio] +added_date = 1674232499 # 2023/01/20 category = "synchronization" level = 8 potential_alternative_to = [ "Google Drive", "Microsoft OneDrive" ] @@ -2779,19 +3273,22 @@ subtags = [ "files" ] url = "https://github.com/YunoHost-Apps/pydio_ynh" [pyinventory] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" -level = 8 +level = 3 state = "working" subtags = [ "business_and_ngos" ] url = "https://github.com/YunoHost-Apps/pyinventory_ynh" [pyload] +added_date = 1674232499 # 2023/01/20 category = "wat" level = 6 state = "working" url = "https://github.com/YunoHost-Apps/pyload_ynh" [pytition] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 potential_alternative_to = [ "Avaaz", "Change" ] @@ -2800,6 +3297,7 @@ subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/pytition_ynh" [qbittorrent] +added_date = 1678129147 # 2023/03/06 category = "multimedia" level = 8 potential_alternative_to = [ "µTorrent" ] @@ -2808,19 +3306,22 @@ subtags = [ "download" ] url = "https://github.com/YunoHost-Apps/qbittorrent_ynh" [qr] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://code.antopie.org/miraty/qr_ynh" [question2answer] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 6 -potential_alternative_to = [ "Stack Overflow", "Stack Exchange" ] +potential_alternative_to = [ "Stack Exchange", "Stack Overflow" ] state = "working" url = "https://github.com/YunoHost-Apps/question2answer_ynh" [quizzes] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 state = "working" @@ -2828,28 +3329,22 @@ subtags = [ "poll" ] url = "https://github.com/YunoHost-Apps/quizzes_ynh" [radarr] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/radarr_ynh" [radicale] +added_date = 1674232499 # 2023/01/20 category = "synchronization" level = 0 state = "notworking" subtags = [ "calendar", "contacts" ] url = "https://github.com/YunoHost-Apps/radicale_ynh" -[rainloop] -antifeatures = [ "bad-security-reputation", "deprecated-software", "replaced-by-another-app" ] -category = "communication" -level = 6 -potential_alternative_to = [ "GMail", "Hotmail", "Microsoft Outlook", "Yahoo! Mail" ] -state = "working" -subtags = [ "email" ] -url = "https://github.com/YunoHost-Apps/rainloop_ynh" - [rallly] +added_date = 1708020558 # 2024/02/15 category = "productivity_and_management" level = 7 potential_alternative_to = [ "Doodle" ] @@ -2858,6 +3353,7 @@ subtags = [ "poll" ] url = "https://github.com/YunoHost-Apps/rallly_ynh" [readarr] +added_date = 1696451897 # 2023/10/04 category = "reading" level = 7 state = "working" @@ -2865,12 +3361,14 @@ subtags = [ "books" ] url = "https://github.com/YunoHost-Apps/readarr_ynh" [readeck] +added_date = 1707572608 # 2024/02/10 category = "small_utilities" -level = 6 +level = 7 state = "working" url = "https://github.com/YunoHost-Apps/readeck_ynh" [redirect] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" @@ -2878,6 +3376,7 @@ subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/redirect_ynh" [redmine] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 state = "working" @@ -2885,15 +3384,17 @@ subtags = [ "task" ] url = "https://github.com/YunoHost-Apps/redmine_ynh" [reiverr] +added_date = 1698585254 # 2023/10/29 antifeatures = [ "alpha-software" ] category = "multimedia" level = 7 -potential_alternative_to = [ "Overseerr", "Jellyseerr", "Jellyfin-vue" ] +potential_alternative_to = [ "Jellyfin-vue", "Jellyseerr", "Overseerr" ] state = "working" -subtags = [ "videos", "mediacenter" ] +subtags = [ "mediacenter", "videos" ] url = "https://github.com/YunoHost-Apps/reiverr_ynh" [restic] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 6 state = "working" @@ -2901,12 +3402,14 @@ subtags = [ "backup" ] url = "https://github.com/YunoHost-Apps/restic_ynh" [retroarch] +added_date = 1674232499 # 2023/01/20 category = "games" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/retroarch_ynh" [reverseproxy] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" @@ -2914,6 +3417,7 @@ subtags = [ "network" ] url = "https://github.com/YunoHost-Apps/reverseproxy_ynh" [rocketchat] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "not-totally-free-upstream" ] category = "communication" level = 8 @@ -2923,40 +3427,47 @@ subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/rocketchat_ynh" [roundcube] +added_date = 1674232499 # 2023/01/20 category = "communication" -level = 6 +level = 8 potential_alternative_to = [ "GMail", "Hotmail", "Microsoft Outlook", "Yahoo! Mail" ] state = "working" subtags = [ "email" ] url = "https://github.com/YunoHost-Apps/roundcube_ynh" [rportd] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software" ] category = "system_tools" +deprecated_date = 1695542097 # 2023/09/24 level = 0 state = "notworking" subtags = [ "monitoring" ] url = "https://github.com/YunoHost-Apps/rportd_ynh" [rspamdui] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 3 state = "working" url = "https://github.com/YunoHost-Apps/rspamdui_ynh" [rss-bridge] +added_date = 1674232499 # 2023/01/20 category = "reading" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/rss-bridge_ynh" [rsshub] +added_date = 1696613491 # 2023/10/06 category = "reading" level = 7 state = "working" url = "https://github.com/YunoHost-Apps/rsshub_ynh" [rustdesk-server] +added_date = 1698869593 # 2023/11/01 category = "productivity_and_management" level = 7 potential_alternative_to = [ "AnyDesk", "TeamViewer" ] @@ -2964,25 +3475,29 @@ state = "working" url = "https://github.com/YunoHost-Apps/rustdesk-server_ynh" [samba] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/samba_ynh" [satdress] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/satdress_ynh" [scovie] +added_date = 1685183203 # 2023/05/27 category = "publishing" -level = 7 +level = 8 state = "working" subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/scovie_ynh" [scratch] +added_date = 1674232499 # 2023/01/20 category = "dev" level = 8 state = "working" @@ -2990,19 +3505,24 @@ subtags = [ "programming" ] url = "https://github.com/YunoHost-Apps/scratch_ynh" [scrumblr] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "small_utilities" +deprecated_date = 1717071136 # 2024/05/30 level = 8 state = "working" url = "https://github.com/YunoHost-Apps/scrumblr_ynh" [scrutiny] +added_date = 1678351205 # 2023/03/09 category = "system_tools" -level = 6 +level = 8 state = "working" subtags = [ "monitoring" ] url = "https://github.com/YunoHost-Apps/scrutiny_ynh" [seafile] +added_date = 1674232499 # 2023/01/20 category = "synchronization" level = 6 potential_alternative_to = [ "Dropbox", "Google Drive", "Mega", "Microsoft OneDrive", "Resilio Sync", "Time Machine" ] @@ -3011,20 +3531,24 @@ subtags = [ "files" ] url = "https://github.com/YunoHost-Apps/seafile_ynh" [searx] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software" ] category = "small_utilities" +deprecated_date = 1694144572 # 2023/09/08 level = 7 state = "working" url = "https://github.com/YunoHost-Apps/searx_ynh" [searxng] +added_date = 1678310393 # 2023/03/08 category = "small_utilities" -level = 8 -potential_alternative_to = [ "Google", "Bing", "Yahoo", "DuckDuckGo", "SearX" ] +level = 6 +potential_alternative_to = [ "Bing", "DuckDuckGo", "Google", "SearX", "Yahoo" ] state = "working" url = "https://github.com/YunoHost-Apps/searxng_ynh" [selfoss] +added_date = 1674232499 # 2023/01/20 category = "reading" level = 8 state = "working" @@ -3032,6 +3556,7 @@ subtags = [ "rssreader" ] url = "https://github.com/YunoHost-Apps/selfoss_ynh" [send] +added_date = 1674232499 # 2023/01/20 category = "synchronization" level = 8 potential_alternative_to = [ "WeTransfer" ] @@ -3040,6 +3565,7 @@ subtags = [ "files" ] url = "https://github.com/YunoHost-Apps/send_ynh" [shaarli] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 potential_alternative_to = [ "Delicious", "Diigo" ] @@ -3048,26 +3574,32 @@ subtags = [ "blog" ] url = "https://github.com/YunoHost-Apps/shaarli_ynh" [sharkey] +added_date = 1707378045 # 2024/02/08 category = "social_media" level = 7 -potential_alternative_to = [ "X", "Threads", "Mastodon", "Pleroma", "Misskey", "Calckey", "Firefish" ] +potential_alternative_to = [ "Calckey", "Firefish", "Mastodon", "Misskey", "Pleroma", "Threads", "X" ] state = "working" url = "https://github.com/YunoHost-Apps/sharkey_ynh" [shellinabox] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "system_tools" +deprecated_date = 1717071136 # 2024/05/30 level = 6 state = "working" url = "https://github.com/YunoHost-Apps/shellinabox_ynh" antifeatures = ["deprecated-software"] [shiori] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/shiori_ynh" [shlink] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 potential_alternative_to = [ "bitly" ] @@ -3076,7 +3608,10 @@ subtags = [ "url_shortener" ] url = "https://github.com/YunoHost-Apps/shlink_ynh" [shuri] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "small_utilities" +deprecated_date = 1717071136 # 2024/05/30 level = 8 potential_alternative_to = [ "bitly" ] state = "working" @@ -3085,34 +3620,53 @@ url = "https://github.com/YunoHost-Apps/shuri_ynh" antifeatures = ["deprecated-software"] [signaturepdf] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/signaturepdf_ynh" -[simple-file-manager] -category = "small_utilities" +[silverbullet] +added_date = 1710170758 # 2024/03/11 +category = "office" level = 6 +potential_alternative_to = [ "Joplin", "Logseq", "Microsoft OneNote", "Obsidian" ] +state = "working" +subtags = [ "text" ] +url = "https://github.com/YunoHost-Apps/silverbullet_ynh" + +[simple-file-manager] +added_date = 1699776105 # 2023/11/12 +antifeatures = [ "deprecated-software" ] +category = "small_utilities" +deprecated_date = 1717071136 # 2024/05/30 +level = 7 state = "working" url = "https://github.com/YunoHost-Apps/simple-file-manager_ynh" antifeatures = ["deprecated-software"] [simple-hash-generator] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "small_utilities" +deprecated_date = 1717071136 # 2024/05/30 level = 8 state = "working" url = "https://github.com/YunoHost-Apps/simple-hash-generator_ynh" antifeatures = ["deprecated-software"] [simple-torrent] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software" ] category = "multimedia" +deprecated_date = 1676920164 # 2023/02/20 level = 7 state = "working" subtags = [ "download" ] url = "https://github.com/YunoHost-Apps/simple-torrent_ynh" [simplex] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 state = "working" @@ -3120,14 +3674,19 @@ subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/simplex_ynh" [simplytranslate] -antifeatures = [ "non-free-network", "deprecated-software" ] +added_date = 1685875056 # 2023/06/04 +antifeatures = [ "deprecated-software", "non-free-network" ] category = "small_utilities" -level = 7 +deprecated_date = 1717071136 # 2024/05/30 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/simplytranslate_ynh" [sitemagiccms] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "publishing" +deprecated_date = 1717071136 # 2024/05/30 level = 8 state = "working" subtags = [ "website" ] @@ -3135,7 +3694,10 @@ url = "https://github.com/YunoHost-Apps/sitemagiccms_ynh" antifeatures = ["deprecated-software"] [slingcode] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "dev" +deprecated_date = 1717071136 # 2024/05/30 level = 8 state = "working" subtags = [ "programming" ] @@ -3143,6 +3705,7 @@ url = "https://github.com/YunoHost-Apps/slingcode_ynh" antifeatures = ["deprecated-software"] [snappymail] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 potential_alternative_to = [ "GMail", "Hotmail", "Microsoft Outlook", "Yahoo! Mail" ] @@ -3151,6 +3714,7 @@ subtags = [ "email" ] url = "https://github.com/YunoHost-Apps/snappymail_ynh" [snipeit] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 6 state = "working" @@ -3158,28 +3722,32 @@ subtags = [ "business_and_ngos" ] url = "https://github.com/YunoHost-Apps/snipeit_ynh" [snserver] -antifeatures = [ "package-not-maintained", "non-free-assets" ] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "non-free-assets", "package-not-maintained" ] category = "office" -level = 6 +level = 1 state = "working" subtags = [ "text" ] url = "https://github.com/YunoHost-Apps/snserver_ynh" [snweb] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "package-not-maintained" ] category = "office" -level = 6 +level = 7 state = "working" subtags = [ "text" ] url = "https://github.com/YunoHost-Apps/snweb_ynh" [soapbox] +added_date = 1674232499 # 2023/01/20 category = "social_media" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/soapbox_ynh" [sogo] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 state = "working" @@ -3187,24 +3755,28 @@ subtags = [ "email" ] url = "https://github.com/YunoHost-Apps/sogo_ynh" [sonarr] +added_date = 1674232499 # 2023/01/20 category = "multimedia" -level = 6 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/sonarr_ynh" [spacedeck] +added_date = 1674232499 # 2023/01/20 category = "office" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/spacedeck_ynh" [spftoolbox] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/spftoolbox_ynh" [spip] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 potential_alternative_to = [ "Blogger", "Coldfusion", "Wix" ] @@ -3213,31 +3785,38 @@ subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/spip_ynh" [squid3] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/squid3_ynh" [ssbroom] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 7 state = "working" url = "https://github.com/YunoHost-Apps/ssbroom_ynh" [ssh_chroot_dir] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "system_tools" +deprecated_date = 1717071136 # 2024/05/30 level = 8 state = "working" url = "https://github.com/YunoHost-Apps/ssh_chroot_dir_ynh" antifeatures = ["deprecated-software"] [statpingng] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/statpingng_ynh" [streama] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 6 state = "working" @@ -3245,15 +3824,19 @@ subtags = [ "mediacenter" ] url = "https://github.com/YunoHost-Apps/streama_ynh" [streams] +added_date = 1691216343 # 2023/08/05 category = "social_media" level = 7 -potential_alternative_to = [ "Facebook", "X", "Tumblr", "Threads" ] +potential_alternative_to = [ "Facebook", "Threads", "Tumblr", "X" ] state = "working" subtags = [ "microblogging" ] url = "https://github.com/YunoHost-Apps/streams_ynh" [strut] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "office" +deprecated_date = 1717071136 # 2024/05/30 level = 8 potential_alternative_to = [ "Google Slides", "Office 365", "Prezi", "SoZi" ] state = "working" @@ -3262,18 +3845,21 @@ url = "https://github.com/YunoHost-Apps/strut_ynh" antifeatures = ["deprecated-software"] [superset] +added_date = 1706951650 # 2024/02/03 category = "wat" -level = 1 +level = 6 state = "working" url = "https://github.com/YunoHost-Apps/superset_ynh" [sutom] +added_date = 1674232499 # 2023/01/20 category = "games" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/sutom_ynh" [svgedit] +added_date = 1674232499 # 2023/01/20 category = "office" level = 8 state = "working" @@ -3281,27 +3867,31 @@ subtags = [ "draw" ] url = "https://github.com/YunoHost-Apps/svgedit_ynh" [synapse] +added_date = 1674232499 # 2023/01/20 category = "communication" -level = 6 -potential_alternative_to = [ "Discord", "Signal", "Whatsapp", "Facebook Messenger", "Telegram", "Skype" ] +level = 8 +potential_alternative_to = [ "Discord", "Facebook Messenger", "Signal", "Skype", "Telegram", "Whatsapp" ] state = "working" subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/synapse_ynh" [synapse-admin] +added_date = 1674232499 # 2023/01/20 category = "communication" -level = 8 +level = 6 state = "working" subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/synapse-admin_ynh" [syncserver-rs] +added_date = 1697360862 # 2023/10/15 category = "synchronization" level = 7 state = "working" url = "https://github.com/YunoHost-Apps/syncserver-rs_ynh" [syncthing] +added_date = 1674232499 # 2023/01/20 category = "synchronization" level = 8 potential_alternative_to = [ "Dropbox", "Google Drive", "Microsoft OneDrive" ] @@ -3310,14 +3900,17 @@ subtags = [ "files" ] url = "https://github.com/YunoHost-Apps/syncthing_ynh" [tandoor] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/tandoor_ynh" [taskboard] -antifeatures = [ "package-not-maintained", "deprecated-software" ] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software", "package-not-maintained" ] category = "productivity_and_management" +deprecated_date = 1717071136 # 2024/05/30 level = 7 potential_alternative_to = [ "Trello" ] state = "working" @@ -3325,6 +3918,7 @@ subtags = [ "task" ] url = "https://github.com/YunoHost-Apps/taskboard_ynh" [teampass] +added_date = 1674232499 # 2023/01/20 category = "synchronization" level = 8 potential_alternative_to = [ "1Password", "Dashlane", "Enpass", "LastPass" ] @@ -3333,6 +3927,7 @@ subtags = [ "password" ] url = "https://github.com/YunoHost-Apps/teampass_ynh" [technitium-dns] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 6 state = "working" @@ -3340,20 +3935,24 @@ subtags = [ "network" ] url = "https://github.com/YunoHost-Apps/technitium-dns_ynh" [teddit] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software" ] category = "social_media" +deprecated_date = 1708218190 # 2024/02/18 level = 7 potential_alternative_to = [ "Reddit" ] state = "working" url = "https://github.com/YunoHost-Apps/teddit_ynh" [terraforming-mars] +added_date = 1698757901 # 2023/10/31 category = "games" level = 7 state = "working" url = "https://github.com/YunoHost-Apps/terraforming-mars_ynh" [thelounge] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 8 state = "working" @@ -3361,6 +3960,7 @@ subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/thelounge_ynh" [tiddlywiki] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 potential_alternative_to = [ "Evernote", "GitBook" ] @@ -3369,6 +3969,7 @@ subtags = [ "wiki" ] url = "https://github.com/YunoHost-Apps/tiddlywiki_ynh" [tiki] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" @@ -3376,6 +3977,7 @@ subtags = [ "wiki" ] url = "https://github.com/YunoHost-Apps/tiki_ynh" [timemachine] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" @@ -3383,6 +3985,7 @@ subtags = [ "backup" ] url = "https://github.com/YunoHost-Apps/timemachine_ynh" [timeoff] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 state = "working" @@ -3390,12 +3993,14 @@ subtags = [ "business_and_ngos" ] url = "https://github.com/YunoHost-Apps/timeoff_ynh" [tinyfilemanager] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/tinyfilemanager_ynh" [tldraw] +added_date = 1674232499 # 2023/01/20 category = "office" level = 8 potential_alternative_to = [ "Lucidchart" ] @@ -3404,6 +4009,7 @@ subtags = [ "draw" ] url = "https://github.com/YunoHost-Apps/tldraw_ynh" [tooljet] +added_date = 1674232499 # 2023/01/20 branch = "master" category = "productivity_and_management" level = 7 @@ -3411,6 +4017,7 @@ state = "working" url = "https://github.com/YunoHost-Apps/tooljet_ynh" [torrelay] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" @@ -3418,19 +4025,22 @@ subtags = [ "network" ] url = "https://github.com/YunoHost-Apps/torrelay_ynh" [traccar] +added_date = 1700418281 # 2023/11/19 category = "small_utilities" level = 7 state = "working" url = "https://github.com/YunoHost-Apps/traccar_ynh" [tracim] +added_date = 1674232499 # 2023/01/20 category = "office" -level = 7 +level = 6 potential_alternative_to = [ "Dropbox", "Google Drive", "Slack", "Trello" ] state = "working" url = "https://github.com/YunoHost-Apps/tracim_ynh" [traggo] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 state = "working" @@ -3438,6 +4048,7 @@ subtags = [ "task" ] url = "https://github.com/YunoHost-Apps/traggo_ynh" [transfersh] +added_date = 1674232499 # 2023/01/20 category = "synchronization" level = 8 state = "working" @@ -3445,6 +4056,7 @@ subtags = [ "files" ] url = "https://github.com/YunoHost-Apps/transfersh_ynh" [transmission] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 8 potential_alternative_to = [ "µTorrent" ] @@ -3453,20 +4065,23 @@ subtags = [ "download" ] url = "https://github.com/YunoHost-Apps/transmission_ynh" [trilium] +added_date = 1674232499 # 2023/01/20 category = "office" -level = 8 +level = 6 potential_alternative_to = [ "Evernote" ] state = "working" subtags = [ "text" ] url = "https://github.com/YunoHost-Apps/trilium_ynh" [trustyhash] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/trustyhash_ynh" [ttrss] +added_date = 1674232499 # 2023/01/20 category = "reading" level = 8 state = "working" @@ -3474,6 +4089,7 @@ subtags = [ "rssreader" ] url = "https://github.com/YunoHost-Apps/ttrss_ynh" [tube] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 8 potential_alternative_to = [ "Dailymotion", "Vimeo", "YouTube" ] @@ -3482,6 +4098,7 @@ subtags = [ "download" ] url = "https://github.com/YunoHost-Apps/tube_ynh" [turtl] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "package-not-maintained" ] category = "publishing" level = 7 @@ -3491,13 +4108,17 @@ subtags = [ "wiki" ] url = "https://github.com/YunoHost-Apps/turtl_ynh" [tvheadend] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 6 state = "working" url = "https://github.com/YunoHost-Apps/tvheadend_ynh" [tyto] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "productivity_and_management" +deprecated_date = 1717071136 # 2024/05/30 level = 8 state = "working" subtags = [ "task" ] @@ -3505,12 +4126,14 @@ url = "https://github.com/YunoHost-Apps/tyto_ynh" antifeatures = ["deprecated-software"] [ulogger] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/ulogger_ynh" [umami] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 potential_alternative_to = [ "Google Analytics" ] @@ -3519,33 +4142,38 @@ subtags = [ "analytics" ] url = "https://github.com/YunoHost-Apps/umami_ynh" [ums] +added_date = 1674232499 # 2023/01/20 category = "multimedia" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/ums_ynh" [unattended_upgrades] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/unattended_upgrades_ynh" [uptime-kuma] +added_date = 1674232499 # 2023/01/20 category = "system_tools" -level = 6 +level = 8 state = "working" subtags = [ "monitoring" ] url = "https://github.com/YunoHost-Apps/uptime-kuma_ynh" [vaultwarden] +added_date = 1674232499 # 2023/01/20 category = "synchronization" -level = 6 +level = 8 potential_alternative_to = [ "1Password", "Dashlane", "Enpass", "LastPass" ] state = "working" subtags = [ "password" ] url = "https://github.com/YunoHost-Apps/vaultwarden_ynh" [veloren] +added_date = 1674232499 # 2023/01/20 category = "games" level = 0 potential_alternative_to = [ "Minecraft" ] @@ -3553,6 +4181,7 @@ state = "notworking" url = "https://github.com/YunoHost-Apps/veloren_ynh" [vikunja] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 potential_alternative_to = [ "Microsoft To-Do", "Todoist", "Wunderlist" ] @@ -3561,6 +4190,7 @@ subtags = [ "task" ] url = "https://github.com/YunoHost-Apps/vikunja_ynh" [vore] +added_date = 1690540859 # 2023/07/28 category = "reading" level = 7 state = "working" @@ -3568,6 +4198,7 @@ subtags = [ "rssreader" ] url = "https://github.com/YunoHost-Apps/vore_ynh" [vpnclient] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 6 state = "working" @@ -3575,12 +4206,14 @@ subtags = [ "network" ] url = "https://github.com/labriqueinternet/vpnclient_ynh" [wallabag2] +added_date = 1674232499 # 2023/01/20 category = "reading" -level = 6 +level = 8 state = "working" url = "https://github.com/YunoHost-Apps/wallabag2_ynh" [watchdog] +added_date = 1706943068 # 2024/02/03 category = "system_tools" level = 7 potential_alternative_to = [ "SwitchingItOffAndOnAgain" ] @@ -3589,6 +4222,7 @@ subtags = [ "monitoring" ] url = "https://github.com/YunoHost-Apps/watchdog_ynh" [weblate] +added_date = 1674232499 # 2023/01/20 category = "dev" level = 7 potential_alternative_to = [ "Locize", "Transifex" ] @@ -3596,18 +4230,21 @@ state = "working" url = "https://github.com/YunoHost-Apps/weblate_ynh" [webmin] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/webmin_ynh" [webtrees] +added_date = 1674232499 # 2023/01/20 category = "wat" -level = 6 +level = 1 state = "working" url = "https://github.com/YunoHost-Apps/webtrees_ynh" [wekan] +added_date = 1674232499 # 2023/01/20 category = "productivity_and_management" level = 8 potential_alternative_to = [ "Trello" ] @@ -3616,18 +4253,23 @@ subtags = [ "task" ] url = "https://github.com/YunoHost-Apps/wekan_ynh" [wemawema] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "wat" +deprecated_date = 1717071136 # 2024/05/30 level = 8 state = "working" url = "https://github.com/YunoHost-Apps/wemawema_ynh" [wetty] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/wetty_ynh" [whitebophir] +added_date = 1674232499 # 2023/01/20 category = "office" level = 8 state = "working" @@ -3635,14 +4277,16 @@ subtags = [ "draw" ] url = "https://github.com/YunoHost-Apps/whitebophir_ynh" [wikijs] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 -potential_alternative_to = [ "Notion", "GitBook" ] +potential_alternative_to = [ "GitBook", "Notion" ] state = "working" subtags = [ "wiki" ] url = "https://github.com/YunoHost-Apps/wikijs_ynh" [wireguard] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" @@ -3650,6 +4294,7 @@ subtags = [ "network" ] url = "https://github.com/YunoHost-Apps/wireguard_ynh" [wireguard_client] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" @@ -3657,13 +4302,15 @@ subtags = [ "network" ] url = "https://github.com/YunoHost-Apps/wireguard_client_ynh" [wondercms] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" -subtags = [ "website", "blog" ] +subtags = [ "blog", "website" ] url = "https://github.com/YunoHost-Apps/wondercms_ynh" [woodpecker] +added_date = 1696247338 # 2023/10/02 category = "dev" level = 7 state = "working" @@ -3671,15 +4318,25 @@ subtags = [ "forge" ] url = "https://github.com/YunoHost-Apps/woodpecker_ynh" [wordpress] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "non-free-addons", "paid-content" ] category = "publishing" -level = 6 +level = 8 potential_alternative_to = [ "Blogger", "Blogspot", "Wix" ] state = "working" -subtags = [ "website", "blog" ] +subtags = [ "blog", "website" ] url = "https://github.com/YunoHost-Apps/wordpress_ynh" +[workout-tracker] +added_date = 1712861274 # 2024/04/11 +category = "small_utilities" +level = 7 +potential_alternative_to = [ "Strava" ] +state = "working" +url = "https://github.com/YunoHost-Apps/workout-tracker_ynh" + [writefreely] +added_date = 1674232499 # 2023/01/20 category = "social_media" level = 8 potential_alternative_to = [ "Blogger", "Medium" ] @@ -3688,6 +4345,7 @@ subtags = [ "blogging" ] url = "https://github.com/YunoHost-Apps/writefreely_ynh" [x-prober] +added_date = 1674232499 # 2023/01/20 category = "system_tools" level = 8 state = "working" @@ -3695,6 +4353,7 @@ subtags = [ "monitoring" ] url = "https://github.com/YunoHost-Apps/x-prober_ynh" [xbackbone] +added_date = 1692627384 # 2023/08/21 category = "synchronization" level = 7 potential_alternative_to = [ "WeTransfer" ] @@ -3703,27 +4362,39 @@ subtags = [ "files" ] url = "https://github.com/YunoHost-Apps/xbackbone_ynh" [xwiki] +added_date = 1702980278 # 2023/12/19 category = "publishing" -level = 3 -potential_alternative_to = [ "Notion", "GitBook" ] +level = 7 +potential_alternative_to = [ "GitBook", "Notion" ] state = "working" subtags = [ "wiki" ] url = "https://github.com/YunoHost-Apps/xwiki_ynh" [yacy] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/yacy_ynh" +[yarr] +added_date = 1715771420 # 2024/05/15 +category = "reading" +level = 7 +state = "working" +subtags = [ "rssreader" ] +url = "https://github.com/YunoHost-Apps/yarr_ynh" + [yellow] +added_date = 1674232499 # 2023/01/20 category = "publishing" -level = 6 +level = 8 state = "working" subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/yellow_ynh" [yeswiki] +added_date = 1674232499 # 2023/01/20 category = "publishing" level = 8 state = "working" @@ -3731,6 +4402,7 @@ subtags = [ "website", "wiki" ] url = "https://github.com/YunoHost-Apps/yeswiki_ynh" [yourls] +added_date = 1674232499 # 2023/01/20 category = "small_utilities" level = 8 potential_alternative_to = [ "bitly" ] @@ -3739,19 +4411,24 @@ subtags = [ "url_shortener" ] url = "https://github.com/YunoHost-Apps/yourls_ynh" [yunomonitor] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "system_tools" -level = 8 +deprecated_date = 1672947186 # 2023/01/05 +level = 7 state = "working" subtags = [ "monitoring" ] url = "https://github.com/YunoHost-Apps/yunomonitor_ynh" [yunorunner] +added_date = 1674232499 # 2023/01/20 category = "dev" level = 0 state = "notworking" url = "https://github.com/YunoHost-Apps/yunorunner_ynh" [z-push] +added_date = 1674232499 # 2023/01/20 category = "synchronization" level = 6 state = "working" @@ -3759,39 +4436,47 @@ subtags = [ "calendar", "contacts" ] url = "https://github.com/YunoHost-Apps/z-push_ynh" [zabbix] +added_date = 1674232499 # 2023/01/20 category = "system_tools" -level = 6 +level = 8 state = "working" subtags = [ "monitoring" ] url = "https://github.com/YunoHost-Apps/zabbix_ynh" [zap] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "deprecated-software" ] category = "social_media" +deprecated_date = 1688291572 # 2023/07/02 level = 7 state = "working" subtags = [ "microblogging" ] url = "https://github.com/YunoHost-Apps/zap_ynh" [zerobin] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "replaced-by-another-app" ] category = "small_utilities" -level = 6 +level = 7 potential_alternative_to = [ "Pastebin" ] state = "working" subtags = [ "pastebin" ] url = "https://github.com/YunoHost-Apps/zerobin_ynh" [zeronet] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software" ] category = "wat" -level = 6 +deprecated_date = 1714840875 # 2024/05/04 +level = 7 potential_alternative_to = [ "Mullvad" ] state = "working" url = "https://github.com/YunoHost-Apps/zeronet_ynh" antifeatures = ["deprecated-software"] [zerotier] -antifeatures = [ "not-totally-free-upstream", "non-free-network" ] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "non-free-network", "not-totally-free-upstream" ] category = "system_tools" level = 8 state = "working" @@ -3799,6 +4484,7 @@ subtags = [ "network" ] url = "https://github.com/YunoHost-Apps/zerotier_ynh" [zeroui] +added_date = 1693093567 # 2023/08/26 antifeatures = [ "non-free-dependencies" ] category = "system_tools" level = 7 @@ -3807,6 +4493,7 @@ subtags = [ "network" ] url = "https://github.com/YunoHost-Apps/zeroui_ynh" [zipline] +added_date = 1696368077 # 2023/10/03 category = "synchronization" level = 7 potential_alternative_to = [ "WeTransfer" ] @@ -3815,14 +4502,16 @@ subtags = [ "files" ] url = "https://github.com/YunoHost-Apps/zipline_ynh" [ztncui] +added_date = 1674232499 # 2023/01/20 antifeatures = [ "non-free-dependencies" ] category = "system_tools" -level = 6 +level = 8 state = "working" subtags = [ "network" ] url = "https://github.com/YunoHost-Apps/ztncui_ynh" [zusam] +added_date = 1674232499 # 2023/01/20 category = "communication" level = 7 state = "working" @@ -3830,12 +4519,14 @@ subtags = [ "forum" ] url = "https://github.com/YunoHost-Apps/zusam_ynh" [zwave-js-ui] +added_date = 1674232499 # 2023/01/20 category = "iot" level = 8 state = "working" url = "https://github.com/YunoHost-Apps/zwave-js-ui_ynh" [zwiicms] +added_date = 1678487510 # 2023/03/10 category = "publishing" level = 8 state = "working" diff --git a/categories.toml b/categories.toml index de1779de..d6c27352 100644 --- a/categories.toml +++ b/categories.toml @@ -1,454 +1,456 @@ +#:schema https://raw.githubusercontent.com/YunoHost/apps/master/schemas/categories.toml.schema.json + [synchronization] +description.en = "Files sync, contact, calendar, password managers..." +description.es = "Sincronización, contactos, calendario, gestor de contraseñas..." +description.eu = "Sinkronizazioa, kontaktuak, egutegia, pasahitzen kudeaketa..." +description.fr = "Fichiers, contacts, calendrier, mots de passe..." +description.it = "Sincronizzazione di file, contatti, calendari, gestione password…" icon = "cloud" title.en = "Synchronization" title.es = "Sincronización" title.eu = "Sinkronizazioa" title.fr = "Synchronisation" title.it = "Sincronizzazione" -description.en = "Files sync, contact, calendar, password managers..." -description.es = "Sincronización, contactos, calendario, gestor de contraseñas..." -description.eu = "Sinkronizazioa, kontaktuak, egutegia, pasahitzen kudeaketa..." -description.fr = "Fichiers, contacts, calendrier, mots de passe..." -description.it = "Sincronizzazione di file, contatti, calendari, gestione password…" - [synchronization.subtags.files] - title.en = "Files" - title.es = "Archivos" - title.eu = "Fitxategiak" - title.fr = "Fichiers" - title.it = "File" + [synchronization.subtags.files] + title.en = "Files" + title.es = "Archivos" + title.eu = "Fitxategiak" + title.fr = "Fichiers" + title.it = "File" - [synchronization.subtags.calendar] - title.en = "Calendar" - title.es = "Calendario" - title.eu = "Egutegia" - title.fr = "Calendrier" - title.it = "Calendario" + [synchronization.subtags.calendar] + title.en = "Calendar" + title.es = "Calendario" + title.eu = "Egutegia" + title.fr = "Calendrier" + title.it = "Calendario" - [synchronization.subtags.contacts] - title.en = "Contacts" - title.es = "Contactos" - title.eu = "Kontaktuak" - title.fr = "Contacts" - title.it = "Contatti" + [synchronization.subtags.contacts] + title.en = "Contacts" + title.es = "Contactos" + title.eu = "Kontaktuak" + title.fr = "Contacts" + title.it = "Contatti" - [synchronization.subtags.password] - title.en = "Passwords" - title.es = "Contraseñas" - title.eu = "Pasahitzak" - title.fr = "Mots de passe" - title.it = "Password" + [synchronization.subtags.password] + title.en = "Passwords" + title.es = "Contraseñas" + title.eu = "Pasahitzak" + title.fr = "Mots de passe" + title.it = "Password" [publishing] +description.en = "Websites, blog, wiki, CMS..." +description.es = "Paginas Web, blog, wiki, CMS..." +description.eu = "Web orriak, blogak, wikiak, CMSak..." +description.fr = "Site web, blog, wiki, CMS..." +description.it = "Siti web, blog, wiki, CMS…" icon = "globe" title.en = "Publishing" title.es = "Publicaciones" title.eu = "Argitalpenak" title.fr = "Publication" title.it = "Pubblicazione" -description.en = "Websites, blog, wiki, CMS..." -description.es = "Paginas Web, blog, wiki, CMS..." -description.eu = "Web orriak, blogak, wikiak, CMSak..." -description.fr = "Site web, blog, wiki, CMS..." -description.it = "Siti web, blog, wiki, CMS…" - [publishing.subtags.website] - title.en = "Website" - title.es = "Paginas web" - title.eu = "Web orriak" - title.fr = "Site web" - title.it = "Siti web" + [publishing.subtags.website] + title.en = "Website" + title.es = "Paginas web" + title.eu = "Web orriak" + title.fr = "Site web" + title.it = "Siti web" - [publishing.subtags.blog] - title.en = "Blog" - title.es = "blog" - title.eu = "Blogak" - title.fr = "Blog" - title.it = "Blog" + [publishing.subtags.blog] + title.en = "Blog" + title.es = "blog" + title.eu = "Blogak" + title.fr = "Blog" + title.it = "Blog" - [publishing.subtags.wiki] - title.en = "Wiki" - title.es = "Wiki" - title.eu = "Wikiak" - title.fr = "Wiki" - title.it = "Wiki" + [publishing.subtags.wiki] + title.en = "Wiki" + title.es = "Wiki" + title.eu = "Wikiak" + title.fr = "Wiki" + title.it = "Wiki" - [publishing.subtags.ecommerce] - title.en = "E-commerce" - title.es = "Comercio eletronico" - title.eu = "Merkataritza elektronikoa" - title.fr = "Vente en ligne" - title.it = "Vendite online" + [publishing.subtags.ecommerce] + title.en = "E-commerce" + title.es = "Comercio eletronico" + title.eu = "Merkataritza elektronikoa" + title.fr = "Vente en ligne" + title.it = "Vendite online" - [publishing.subtags.analytics] - title.en = "Analytics" - title.es = "Estadisticas" - title.eu = "Estatistikak" - title.fr = "Statistiques" - title.it = "Analisi del traffico" + [publishing.subtags.analytics] + title.en = "Analytics" + title.es = "Estadisticas" + title.eu = "Estatistikak" + title.fr = "Statistiques" + title.it = "Analisi del traffico" [communication] +description.en = "Chat, email, forum, meetings..." +description.es = "Chat, email, foro, reuniones en grupo..." +description.eu = "Txata, ePosta, foroak, talde-bilerak..." +description.fr = "Chat, email, forum, meetings..." +description.it = "Messaggistica, posta elettronica, forum, riunioni…" icon = "comments-o" title.en = "Communication" title.es = "Comunicacion" title.eu = "Komunikazioa" title.fr = "Communication" title.it = "Comunicazione" -description.en = "Chat, email, forum, meetings..." -description.es = "Chat, email, foro, reuniones en grupo..." -description.eu = "Txata, ePosta, foroak, talde-bilerak..." -description.fr = "Chat, email, forum, meetings..." -description.it = "Messaggistica, posta elettronica, forum, riunioni…" - [communication.subtags.chat] - title.en = "Instant messaging" - title.es = "Mensajeria Instantanea" - title.eu = "Bat-bateko mezularitza" - title.fr = "Messagerie instantannée" - title.it = "Messaggistica istantanea" + [communication.subtags.chat] + title.en = "Instant messaging" + title.es = "Mensajeria Instantanea" + title.eu = "Bat-bateko mezularitza" + title.fr = "Messagerie instantannée" + title.it = "Messaggistica istantanea" - [communication.subtags.forum] - title.en = "Forum" - title.es = "Foro" - title.eu = "Foroak" - title.fr = "Forum" - title.it = "Forum" + [communication.subtags.forum] + title.en = "Forum" + title.es = "Foro" + title.eu = "Foroak" + title.fr = "Forum" + title.it = "Forum" - [communication.subtags.email] - title.en = "Email" - title.es = "Email" - title.eu = "ePosta" - title.fr = "Email" - title.it = "Posta elettronica" + [communication.subtags.email] + title.en = "Email" + title.es = "Email" + title.eu = "ePosta" + title.fr = "Email" + title.it = "Posta elettronica" - [communication.subtags.meeting] - title.en = "Meetings" - title.es = "Reuniones" - title.eu = "Bilerak" - title.fr = "Meetings" - title.it = "Riunioni" + [communication.subtags.meeting] + title.en = "Meetings" + title.es = "Reuniones" + title.eu = "Bilerak" + title.fr = "Meetings" + title.it = "Riunioni" [office] +description.en = "Collaborative text editing, spreadsheets..." +description.es = "Edición de texto colaborativo, hojas de cálculo..." +description.eu = "Testu eta kalkulu-orrien edizioa..." +description.fr = "Édition de texte collaborative, tableurs..." +description.it = "Modifica di testo collaborativa, tabelle…" icon = "file-text-o" title.en = "Office" title.es = "Ofimatica" title.eu = "Bulegoa" title.fr = "Bureautique" title.it = "Burocrazia" -description.en = "Collaborative text editing, spreadsheets..." -description.es = "Edición de texto colaborativo, hojas de cálculo..." -description.eu = "Testu eta kalkulu-orrien edizioa..." -description.fr = "Édition de texte collaborative, tableurs..." -description.it = "Modifica di testo collaborativa, tabelle…" - [office.subtags.text] - title.en = "Text" - title.es = "Texto" - title.eu = "Testua" - title.fr = "Texte" - title.it = "Testo" + [office.subtags.text] + title.en = "Text" + title.es = "Texto" + title.eu = "Testua" + title.fr = "Texte" + title.it = "Testo" - [office.subtags.spreadsheet] - title.en = "Spreadsheet" - title.es = "Hoja de cálculo" - title.eu = "Kalkulu-orriak" - title.fr = "Tableur" - title.it = "Tabelle" + [office.subtags.spreadsheet] + title.en = "Spreadsheet" + title.es = "Hoja de cálculo" + title.eu = "Kalkulu-orriak" + title.fr = "Tableur" + title.it = "Tabelle" - [office.subtags.impress] - title.en = "Slide show" - title.es = "Diapositivas" - title.eu = "Diapositiba-aurkezpenak" - title.fr = "Diaporama" - title.it = "Diapositive" + [office.subtags.impress] + title.en = "Slide show" + title.es = "Diapositivas" + title.eu = "Diapositiba-aurkezpenak" + title.fr = "Diaporama" + title.it = "Diapositive" - [office.subtags.draw] - title.en = "Graphism" - title.es = "Graficos" - title.eu = "Grafikoak" - title.fr = "Graphisme" - title.it = "Grafica" + [office.subtags.draw] + title.en = "Graphism" + title.es = "Graficos" + title.eu = "Grafikoak" + title.fr = "Graphisme" + title.it = "Grafica" - [office.subtags.mindmap] - title.en = "Mindmap" - title.eu = "Ideia-zuhaitzak" - title.fr = "Cartes mentale" - title.it = "Mappe mentali" + [office.subtags.mindmap] + title.en = "Mindmap" + title.eu = "Ideia-zuhaitzak" + title.fr = "Cartes mentale" + title.it = "Mappe mentali" [productivity_and_management] +description.en = "Tasks, polls, accounting, ERP..." +description.eu = "Zereginak, inkestak, kontabilitatea, enpresa-baliabideen plangintza (ERP)..." +description.fr = "Tâches, sondages, comptabilité, ERP..." +description.it = "Gestione attività, sondaggi, contabilità, ERP…" icon = "area-chart" title.en = "Productivity & management" title.eu = "Produktibitatea eta kudeaketa" title.fr = "Productivité & gestion" title.it = "Produttività & gestionale" -description.en = "Tasks, polls, accounting, ERP..." -description.eu = "Zereginak, inkestak, kontabilitatea, enpresa-baliabideen plangintza (ERP)..." -description.fr = "Tâches, sondages, comptabilité, ERP..." -description.it = "Gestione attività, sondaggi, contabilità, ERP…" - [productivity_and_management.subtags.task] - title.en = "Task" - title.eu = "Zereginak" - title.fr = "Tâches" - title.it = "Gestione attività" + [productivity_and_management.subtags.task] + title.en = "Task" + title.eu = "Zereginak" + title.fr = "Tâches" + title.it = "Gestione attività" - [productivity_and_management.subtags.poll] - title.en = "Poll" - title.eu = "Inkestak" - title.fr = "Sondage" - title.it = "Sondaggi" + [productivity_and_management.subtags.poll] + title.en = "Poll" + title.eu = "Inkestak" + title.fr = "Sondage" + title.it = "Sondaggi" - [productivity_and_management.subtags.accounting] - title.en = "Accounting" - title.eu = "Kontabilitatea" - title.fr = "Comptabilité" - title.it = "Contabilità" + [productivity_and_management.subtags.accounting] + title.en = "Accounting" + title.eu = "Kontabilitatea" + title.fr = "Comptabilité" + title.it = "Contabilità" - [productivity_and_management.subtags.business_and_ngos] - title.en = "Business and NGOs" - title.eu = "Korporazio eta GKEak" - title.fr = "Entreprises et associations" - title.it = "Imprese e associazioni" + [productivity_and_management.subtags.business_and_ngos] + title.en = "Business and NGOs" + title.eu = "Korporazio eta GKEak" + title.fr = "Entreprises et associations" + title.it = "Imprese e associazioni" [small_utilities] +description.en = "Pastebins, URL shortener, proxies..." +description.eu = "Pastebinak, URL laburtzaileak, proxyak..." +description.fr = "Pastebins, raccourcisseurs d'URL, proxys..." +description.it = "Pastebin, accorciamento di URL, proxy…" icon = "umbrella" title.en = "Small utilities" title.eu = "Tresna txikiak" title.fr = "Petits utilitaires" title.it = "Piccoli strumenti" -description.en = "Pastebins, URL shortener, proxies..." -description.eu = "Pastebinak, URL laburtzaileak, proxyak..." -description.fr = "Pastebins, raccourcisseurs d'URL, proxys..." -description.it = "Pastebin, accorciamento di URL, proxy…" - [small_utilities.subtags.pastebin] - title.en = "Pastebin" - title.eu = "Pastebinak" - title.fr = "Pastebin" - title.it = "Pastebin" + [small_utilities.subtags.pastebin] + title.en = "Pastebin" + title.eu = "Pastebinak" + title.fr = "Pastebin" + title.it = "Pastebin" - [small_utilities.subtags.url_shortener] - title.en = "URL shortener" - title.eu = "URL laburtzaileak" - title.fr = "Raccourcisseurs d'URL" - title.it = "Accorciatore di URL" + [small_utilities.subtags.url_shortener] + title.en = "URL shortener" + title.eu = "URL laburtzaileak" + title.fr = "Raccourcisseurs d'URL" + title.it = "Accorciatore di URL" - [small_utilities.subtags.proxy] - title.en = "Proxy" - title.eu = "Proxyak" - title.fr = "Proxy (Intermédiaire)" - title.it = "Proxy" + [small_utilities.subtags.proxy] + title.en = "Proxy" + title.eu = "Proxyak" + title.fr = "Proxy (Intermédiaire)" + title.it = "Proxy" [reading] +description.en = "Newsfeed readers, books library..." +description.eu = "Albiste-jarioak, liburutegiak..." +description.fr = "Fils d'actualité, livres..." +description.it = "Notizie, libri…" icon = "newspaper-o" title.en = "Reading" title.eu = "Irakurketa" title.fr = "Lecture" title.it = "Lettura" -description.en = "Newsfeed readers, books library..." -description.eu = "Albiste-jarioak, liburutegiak..." -description.fr = "Fils d'actualité, livres..." -description.it = "Notizie, libri…" - [reading.subtags.rssreader] - title.en = "RSS readers" - title.eu = "RSS irakurleak" - title.fr = "Lecteurs RSS" - title.it = "Lettore RSS" + [reading.subtags.rssreader] + title.en = "RSS readers" + title.eu = "RSS irakurleak" + title.fr = "Lecteurs RSS" + title.it = "Lettore RSS" - [reading.subtags.books] - title.en = "Books" - title.eu = "Liburuak" - title.fr = "Livres" - title.it = "Libri" + [reading.subtags.books] + title.en = "Books" + title.eu = "Liburuak" + title.fr = "Livres" + title.it = "Libri" [multimedia] +description.en = "Music library, pictures gallery, P2P, TV shows..." +description.eu = "Musika liburutegiak, argazki-bildumak, P2P, TB saioak..." +description.fr = "Bibliothèque de musique, d'images, P2P, séries..." +description.it = "Librerie musicali, gallerie d’immagini, P2P, serie TV…" icon = "music" title.en = "Multimedia" title.eu = "Multimedia" title.fr = "Multimédia" title.it = "Multimedia" -description.en = "Music library, pictures gallery, P2P, TV shows..." -description.eu = "Musika liburutegiak, argazki-bildumak, P2P, TB saioak..." -description.fr = "Bibliothèque de musique, d'images, P2P, séries..." -description.it = "Librerie musicali, gallerie d’immagini, P2P, serie TV…" - [multimedia.subtags.mediacenter] - title.en = "Media center" - title.eu = "Multimedia" - title.fr = "Centre multimédia" - title.it = "Centro multimediale" + [multimedia.subtags.mediacenter] + title.en = "Media center" + title.eu = "Multimedia" + title.fr = "Centre multimédia" + title.it = "Centro multimediale" - [multimedia.subtags.download] - title.en = "Download" - title.eu = "Deskargak" - title.fr = "Téléchargement" - title.it = "Download" + [multimedia.subtags.download] + title.en = "Download" + title.eu = "Deskargak" + title.fr = "Téléchargement" + title.it = "Download" - [multimedia.subtags.music] - title.en = "Music" - title.eu = "Musika" - title.fr = "Musique" - title.it = "Musica" + [multimedia.subtags.music] + title.en = "Music" + title.eu = "Musika" + title.fr = "Musique" + title.it = "Musica" - [multimedia.subtags.pictures] - title.en = "Pictures" - title.eu = "Irudiak" - title.fr = "Images" - title.it = "Immagini" + [multimedia.subtags.pictures] + title.en = "Pictures" + title.eu = "Irudiak" + title.fr = "Images" + title.it = "Immagini" - [multimedia.subtags.videos] - title.en = "Videos" - title.eu = "Bideoak" - title.fr = "Vidéos" - title.it = "Video" + [multimedia.subtags.videos] + title.en = "Videos" + title.eu = "Bideoak" + title.fr = "Vidéos" + title.it = "Video" [social_media] +description.en = "Microblogging, federated media" +description.eu = "Mikroblogak, federatutako media" +description.fr = "Microblogging, médias fédérés" +description.it = "Microblogging, media federati" icon = "users" title.en = "Social media" title.eu = "Sare sozialak" title.fr = "Médias sociaux" title.it = "Social media" -description.en = "Microblogging, federated media" -description.eu = "Mikroblogak, federatutako media" -description.fr = "Microblogging, médias fédérés" -description.it = "Microblogging, media federati" - [social_media.subtags.microblogging] - title.en = "Microblogging" - title.eu = "Mikroblogintza" - title.fr = "Microblogging" - title.it = "Microblogging" + [social_media.subtags.microblogging] + title.en = "Microblogging" + title.eu = "Mikroblogintza" + title.fr = "Microblogging" + title.it = "Microblogging" - [social_media.subtags.blogging] - title.en = "Blogging" - title.eu = "Blogintza" - title.fr = "Blogging" - title.it = "Blogging" + [social_media.subtags.blogging] + title.en = "Blogging" + title.eu = "Blogintza" + title.fr = "Blogging" + title.it = "Blogging" - [social_media.subtags.events] - title.en = "Events" - title.eu = "Gertaerak" - title.fr = "Événements" - title.it = "Eventi" + [social_media.subtags.events] + title.en = "Events" + title.eu = "Gertaerak" + title.fr = "Événements" + title.it = "Eventi" - [social_media.subtags.videos] - title.en = "Videos" - title.eu = "Bideoak" - title.fr = "Vidéos" - title.it = "Video" + [social_media.subtags.videos] + title.en = "Videos" + title.eu = "Bideoak" + title.fr = "Vidéos" + title.it = "Video" - [social_media.subtags.pictures] - title.en = "Pictures" - title.eu = "Irudiak" - title.fr = "Images" - title.it = "Immagini" + [social_media.subtags.pictures] + title.en = "Pictures" + title.eu = "Irudiak" + title.fr = "Images" + title.it = "Immagini" - [social_media.subtags.music] - title.en = "Music" - title.eu = "Musika" - title.fr = "Musique" - title.it = "Musica" + [social_media.subtags.music] + title.en = "Music" + title.eu = "Musika" + title.fr = "Musique" + title.it = "Musica" [games] +description.en = "Wanna have some fun? ;)" +description.eu = "Dibertitu nahi duzu? ;)" +description.fr = "Envie de s'amuser ? ;)" +description.it = "Voglia di divertirti? ;)" icon = "gamepad" title.en = "Games" title.eu = "Jolasak" title.fr = "Jeux" title.it = "Giochi" -description.en = "Wanna have some fun? ;)" -description.eu = "Dibertitu nahi duzu? ;)" -description.fr = "Envie de s'amuser ? ;)" -description.it = "Voglia di divertirti? ;)" [dev] +description.en = "Git forges, apps skeleton, CI, translation..." +description.eu = "Forge Git, aplikazioen eskematizazioa, CI, itzulpengintza..." +description.fr = "Forges Git, squelette d'apps, CI, traduction..." +description.it = "Forge Git, schematizzazione di applicazioni, CI, traduzioni…" icon = "flask" title.en = "Development" title.eu = "Garapena" title.fr = "Développement" title.it = "Sviluppo" -description.en = "Git forges, apps skeleton, CI, translation..." -description.eu = "Forge Git, aplikazioen eskematizazioa, CI, itzulpengintza..." -description.fr = "Forges Git, squelette d'apps, CI, traduction..." -description.it = "Forge Git, schematizzazione di applicazioni, CI, traduzioni…" - [dev.subtags.forge] - title.en = "Forge" - title.eu = "Forge" - title.fr = "Forge" - title.it = "Forgia" + [dev.subtags.forge] + title.en = "Forge" + title.eu = "Forge" + title.fr = "Forge" + title.it = "Forgia" - [dev.subtags.skeleton] - title.en = "Skeleton" - title.eu = "Eskematizazioa" - title.fr = "Squelettes" - title.it = "Schematizzazione" + [dev.subtags.skeleton] + title.en = "Skeleton" + title.eu = "Eskematizazioa" + title.fr = "Squelettes" + title.it = "Schematizzazione" - [dev.subtags.programming] - title.en = "Programming" - title.eu = "Programazioa" - title.fr = "Programmation" - title.it = "Programmazione" + [dev.subtags.programming] + title.en = "Programming" + title.eu = "Programazioa" + title.fr = "Programmation" + title.it = "Programmazione" - [dev.subtags.design] - title.en = "Design" - title.eu = "Diseinua" - title.fr = "Design" - title.it = "Progettazione" + [dev.subtags.design] + title.en = "Design" + title.eu = "Diseinua" + title.fr = "Design" + title.it = "Progettazione" [system_tools] +description.en = "Monitoring, backup, network, DB tools..." +description.eu = "Monitorizazioa, babeskopiak, sarea, datu-baseen tresnak..." +description.fr = "Monitoring, sauvegardes, outils réseau, bases de données..." +description.it = "Monitoraggio, backup, servizi di rete, database…" icon = "wrench" title.en = "System tools" title.eu = "Sistemaren tresnak" title.fr = "Outils système" title.it = "Strumenti di sistema" -description.en = "Monitoring, backup, network, DB tools..." -description.eu = "Monitorizazioa, babeskopiak, sarea, datu-baseen tresnak..." -description.fr = "Monitoring, sauvegardes, outils réseau, bases de données..." -description.it = "Monitoraggio, backup, servizi di rete, database…" - [system_tools.subtags.backup] - title.en = "Backup" - title.eu = "Babeskopiak" - title.fr = "Sauvegardes" - title.it = "Backup" + [system_tools.subtags.backup] + title.en = "Backup" + title.eu = "Babeskopiak" + title.fr = "Sauvegardes" + title.it = "Backup" - [system_tools.subtags.monitoring] - title.en = "Monitoring" - title.eu = "Monitorizazioa" - title.fr = "Monitoring" - title.it = "Monitoraggio" + [system_tools.subtags.monitoring] + title.en = "Monitoring" + title.eu = "Monitorizazioa" + title.fr = "Monitoring" + title.it = "Monitoraggio" - [system_tools.subtags.network] - title.en = "Network" - title.eu = "Sarea" - title.fr = "Réseau" - title.it = "Rete" + [system_tools.subtags.network] + title.en = "Network" + title.eu = "Sarea" + title.fr = "Réseau" + title.it = "Rete" - [system_tools.subtags.db] - title.en = "Databases" - title.eu = "Datu-baseak" - title.fr = "Bases de données" - title.it = "Database" + [system_tools.subtags.db] + title.en = "Databases" + title.eu = "Datu-baseak" + title.fr = "Bases de données" + title.it = "Database" [iot] +description.en = "Home automation, energy dashboard..." +description.eu = "Domotika, automatizazioa, energiaren kudeaketa..." +description.fr = "Domotique, énergie..." +description.it = "Domotica, controllo energia…" icon = "home" title.en = "Internet of Things (IoT)" title.eu = "Gauzen internet (IoT)" title.fr = "Internet des objets (IoT)" title.it = "Interned delle Cose (IoT)" -description.en = "Home automation, energy dashboard..." -description.eu = "Domotika, automatizazioa, energiaren kudeaketa..." -description.fr = "Domotique, énergie..." -description.it = "Domotica, controllo energia…" [wat] +description.en = "Weird experimental or very-custom stuff" +description.eu = "Esperimentuak, kontu arraroak edo gauza oso bereziak" +description.fr = "Trucs expérimentaux et autres projets spécifiques" +description.it = "Esperimenti e altri progetti particolari" icon = "tree" title.en = "Wat" title.eu = "Wat" title.fr = "Wat" title.it = "Wat" -description.en = "Weird experimental or very-custom stuff" -description.eu = "Esperimentuak, kontu arraroak edo gauza oso bereziak" -description.fr = "Trucs expérimentaux et autres projets spécifiques" -description.it = "Esperimenti e altri progetti particolari" diff --git a/cron b/cron index dc31c2d0..92d344f3 100644 --- a/cron +++ b/cron @@ -1,8 +1,14 @@ # Every 4 hours -0 */4 * * * root /bin/bash __BASEDIR__/rebuild.sh +0 */4 * * * root /bin/bash __BASEDIR__/maintenance.sh rebuild_catalog -# Everyday at 20:30 -30 20 * * * root /bin/bash __BASEDIR__/sourcesautoupdate.sh +# Everyday at 01:30 UTC +30 1 * * * root /bin/bash __BASEDIR__/maintenance.sh autoupdate_app_sources -# Every friday at 6pm -0 17 * * 5 root /usr/bin/python3 __BASEDIR__/tools/update_app_levels/update_app_levels.py +# Every friday at 6 PM UTC +0 17 * * 5 root /bin/bash __BASEDIR__/maintenance.sh update_app_levels + +# Every 6 hours +0 */6 * * * root /bin/bash __BASEDIR__/maintenance.sh fetch_main_dashboard + +# Every day at 2AM +0 2 * * * root /bin/bash __BASEDIR__/maintenance.sh fetch_level_history diff --git a/graveyard.toml b/graveyard.toml index f4b43d73..6fac92aa 100644 --- a/graveyard.toml +++ b/graveyard.toml @@ -1,257 +1,399 @@ +#:schema https://github.com/YunoHost/apps/raw/master/schemas/graveyard.toml.schema.json + [anfora] +added_date = 1554588215 # 2019/04/07 category = "social_media" +killed_date = 1703600553 # 2023/12/26 subtags = [ "pictures" ] url = "https://github.com/YunoHost-Apps/anfora_ynh" [bibliogram] +added_date = 1597045792 # 2020/08/10 category = "social_media" +killed_date = 1703600553 # 2023/12/26 potential_alternative_to = [ "Instagram" ] subtags = [ "pictures" ] url = "https://github.com/YunoHost-Apps/bibliogram_ynh" [democracyos] +added_date = 1554588215 # 2019/04/07 category = "communication" +killed_date = 1703600553 # 2023/12/26 subtags = [ "forum" ] url = "https://github.com/YunoHost-Apps/democracyos_ynh" [dockerui] +added_date = 1554588215 # 2019/04/07 category = "system_tools" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/dockerui_ynh" [dynette] +added_date = 1554588215 # 2019/04/07 category = "wat" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/dynette_ynh" [ecko] +added_date = 1636827596 # 2021/11/13 category = "social_media" +killed_date = 1703600553 # 2023/12/26 subtags = [ "microblogging" ] url = "https://github.com/YunoHost-Apps/ecko_ynh" [fallback] +added_date = 1554588215 # 2019/04/07 category = "system_tools" +killed_date = 1703600553 # 2023/12/26 subtags = [ "backup" ] url = "https://github.com/YunoHost-Apps/fallback_ynh" +[ffsync] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software", "replaced-by-another-app" ] +category = "synchronization" +deprecated_date = 1660842060 # 2022/08/18 +killed_date = 1716321298 # 2024/05/21 +url = "https://github.com/YunoHost-Apps/ffsync_ynh" + [flask] +added_date = 1554588215 # 2019/04/07 category = "dev" +killed_date = 1703600553 # 2023/12/26 subtags = [ "skeleton" ] url = "https://github.com/YunoHost-Apps/flask_ynh" [flusio] +added_date = 1660509055 # 2022/08/14 category = "reading" +killed_date = 1703600553 # 2023/12/26 subtags = [ "rssreader" ] url = "https://github.com/YunoHost-Apps/flusio_ynh" [foodsoft] +added_date = 1564517377 # 2019/07/30 category = "productivity_and_management" +killed_date = 1703600553 # 2023/12/26 subtags = [ "business_and_ngos" ] url = "https://github.com/YunoHost-Apps/foodsoft_ynh" [framaestro] +added_date = 1554588215 # 2019/04/07 category = "communication" +killed_date = 1703600553 # 2023/12/26 subtags = [ "meeting" ] url = "https://github.com/YunoHost-Apps/framaestro_ynh" [framaestro_hub] +added_date = 1554588215 # 2019/04/07 category = "communication" +killed_date = 1703600553 # 2023/12/26 subtags = [ "meeting" ] url = "https://github.com/YunoHost-Apps/framaestro_hub_ynh" [freeboard] +added_date = 1554588215 # 2019/04/07 category = "iot" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/freeboard_ynh" [freepbx] +added_date = 1590399842 # 2020/05/25 category = "communication" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/freepbx_ynh" [ftp_webapp] +added_date = 1554588215 # 2019/04/07 category = "small_utilities" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/ftp_support_webapp_ynh" [ftssolr] +added_date = 1590399842 # 2020/05/25 category = "wat" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/ftssolr_ynh" +[garradin] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "deprecated-software", "replaced-by-another-app" ] +category = "productivity_and_management" +deprecated_date = 1703700580 # 2023/12/27 +killed_date = 1716321350 # 2024/05/21 +potential_alternative_to = [ "Ciel Associations" ] +subtags = [ "business_and_ngos" ] +url = "https://github.com/YunoHost-Apps/garradin_ynh" + [gekko] +added_date = 1590399842 # 2020/05/25 category = "wat" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/gekko_ynh" [gitrepositories] +added_date = 1554588215 # 2019/04/07 category = "dev" +killed_date = 1703600553 # 2023/12/26 subtags = [ "forge" ] url = "https://github.com/YunoHost-Apps/gitrepositories_ynh" [gnusocial] +added_date = 1554588215 # 2019/04/07 category = "social_media" +killed_date = 1703600553 # 2023/12/26 potential_alternative_to = [ "X" ] subtags = [ "microblogging" ] url = "https://github.com/YunoHost-Apps/gnusocial_ynh" [gogswebhost] +added_date = 1590399842 # 2020/05/25 category = "publishing" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/gogs_webhost_ynh" [internetarchive] +added_date = 1569663577 # 2019/09/28 category = "wat" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/internetarchive_ynh" [jappix_mini] +added_date = 1554588215 # 2019/04/07 category = "communication" +killed_date = 1703600553 # 2023/12/26 subtags = [ "chat" ] url = "https://github.com/YunoHost-Apps/jappix_mini_ynh" [lbcalerte] +added_date = 1554588215 # 2019/04/07 category = "small_utilities" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/lbcalerte_ynh" [lektor] +added_date = 1554588215 # 2019/04/07 category = "publishing" +killed_date = 1703600553 # 2023/12/26 subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/lektor_ynh" [mailman] +added_date = 1554588215 # 2019/04/07 category = "communication" +killed_date = 1703600553 # 2023/12/26 potential_alternative_to = [ "Google Groups" ] subtags = [ "email" ] url = "https://github.com/yunohost-apps/mailman_ynh" [mediadrop] +added_date = 1554588215 # 2019/04/07 category = "multimedia" +killed_date = 1703600553 # 2023/12/26 subtags = [ "mediacenter" ] url = "https://github.com/YunoHost-Apps/mediadrop_ynh" [menu] +added_date = 1554588215 # 2019/04/07 category = "wat" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/menu_ynh" [modernpaste] +added_date = 1554588215 # 2019/04/07 category = "small_utilities" +killed_date = 1703600553 # 2023/12/26 subtags = [ "pastebin" ] url = "https://github.com/YunoHost-Apps/modernpaste_ynh" [monit] +added_date = 1554588215 # 2019/04/07 category = "system_tools" +killed_date = 1703600553 # 2023/12/26 subtags = [ "monitoring" ] url = "https://github.com/YunoHost-Apps/monit_ynh" [multi_webapp] +added_date = 1554588215 # 2019/04/07 category = "publishing" +killed_date = 1703600553 # 2023/12/26 subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/multi_webapp_ynh" [munin] +added_date = 1554588215 # 2019/04/07 category = "system_tools" +killed_date = 1703600553 # 2023/12/26 subtags = [ "monitoring" ] url = "https://github.com/YunoHost-Apps/munin_ynh" [nexusoss] +added_date = 1554588215 # 2019/04/07 category = "dev" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/nexusoss_ynh" [ntopng] +added_date = 1590399842 # 2020/05/25 category = "system_tools" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/ntopng_ynh" [osmw] +added_date = 1554588215 # 2019/04/07 category = "wat" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/osmw_ynh" [peachpub] +added_date = 1655358480 # 2022/06/16 category = "communication" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/peachpub_ynh" [piratebox] +added_date = 1554588215 # 2019/04/07 category = "system_tools" +killed_date = 1703600553 # 2023/12/26 subtags = [ "network" ] url = "https://github.com/labriqueinternet/piratebox_ynh" [plonecms] +added_date = 1554588215 # 2019/04/07 category = "publishing" +killed_date = 1703600553 # 2023/12/26 subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/plonecms_ynh" [portainer] +added_date = 1554588215 # 2019/04/07 category = "system_tools" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/portainer_ynh" +[rainloop] +added_date = 1674232499 # 2023/01/20 +antifeatures = [ "bad-security-reputation", "deprecated-software", "replaced-by-another-app" ] +category = "communication" +deprecated_date = 1676378222 # 2023/02/14 +killed_date = 1715300302 # 2024/05/10 +potential_alternative_to = [ "GMail", "Hotmail", "Microsoft Outlook", "Yahoo! Mail" ] +subtags = [ "email" ] +url = "https://github.com/YunoHost-Apps/rainloop_ynh" + [reel2bits] +added_date = 1554588215 # 2019/04/07 category = "social_media" +killed_date = 1703600553 # 2023/12/26 potential_alternative_to = [ "Soundcloud" ] subtags = [ "music" ] url = "https://github.com/YunoHost-Apps/reel2bits_ynh" [remotestorage] +added_date = 1554588215 # 2019/04/07 category = "small_utilities" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/remotestorage_ynh" [roadiz] +added_date = 1554588215 # 2019/04/07 category = "publishing" +killed_date = 1703600553 # 2023/12/26 subtags = [ "website" ] url = "https://github.com/YunoHost-Apps/roadiz_ynh" [shsd] +added_date = 1554588215 # 2019/04/07 category = "system_tools" +killed_date = 1703600553 # 2023/12/26 subtags = [ "monitoring" ] url = "https://github.com/YunoHost-Apps/shsd_ynh" [sickbeard] +added_date = 1554588215 # 2019/04/07 category = "multimedia" +killed_date = 1703600553 # 2023/12/26 subtags = [ "download" ] url = "https://github.com/YunoHost-Apps/sickbeard_ynh" [sickrage] +added_date = 1554588215 # 2019/04/07 category = "multimedia" +killed_date = 1703600553 # 2023/12/26 subtags = [ "download" ] url = "https://github.com/YunoHost-Apps/sickrage_ynh" [sonerezh] +added_date = 1554588215 # 2019/04/07 category = "multimedia" +killed_date = 1703600553 # 2023/12/26 subtags = [ "music" ] url = "https://github.com/YunoHost-Apps/sonerezh_ynh" [staticwebapp] +added_date = 1554588215 # 2019/04/07 category = "publishing" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/staticwebapp_ynh" [subscribe] +added_date = 1590399842 # 2020/05/25 category = "wat" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/subscribe_ynh" [tagspaces] +added_date = 1554588215 # 2019/04/07 category = "synchronization" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/tagspaces_ynh" [telegram_chatbot] +added_date = 1554588215 # 2019/04/07 category = "dev" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/telegram_chatbot_ynh" [tes3mp] +added_date = 1554588215 # 2019/04/07 category = "games" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/tes3mp_ynh" [transpay] +added_date = 1571446958 # 2019/10/19 category = "productivity_and_management" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/transpay_ynh" [unbound] +added_date = 1590399842 # 2020/05/25 category = "system_tools" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/unbound_ynh" [vpnserver] +added_date = 1564314757 # 2019/07/28 category = "system_tools" +killed_date = 1703600553 # 2023/12/26 subtags = [ "network" ] url = "https://github.com/YunoHost-Apps/vpnserver_ynh" [wildfly] +added_date = 1554588215 # 2019/04/07 category = "dev" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/wildfly_ynh" [youtube-dl-webui] +added_date = 1554588215 # 2019/04/07 category = "multimedia" +killed_date = 1703600553 # 2023/12/26 subtags = [ "download" ] url = "https://github.com/YunoHost-Apps/youtube-dl-webui_ynh" [yunofav] +added_date = 1554588215 # 2019/04/07 category = "wat" +killed_date = 1703600553 # 2023/12/26 url = "https://github.com/YunoHost-Apps/yunofav_ynh" diff --git a/logos/agendav.png b/logos/agendav.png index b0b44f6f..7f716ce4 100644 Binary files a/logos/agendav.png and b/logos/agendav.png differ diff --git a/logos/anarchism.png b/logos/anarchism.png index d160a61c..627ac1eb 100644 Binary files a/logos/anarchism.png and b/logos/anarchism.png differ diff --git a/logos/backdrop.png b/logos/backdrop.png index 3682858e..a9e767c3 100644 Binary files a/logos/backdrop.png and b/logos/backdrop.png differ diff --git a/logos/cheky.png b/logos/cheky.png index 18f6c636..1657fd87 100644 Binary files a/logos/cheky.png and b/logos/cheky.png differ diff --git a/logos/code-server.png b/logos/code-server.png index 700f2cdf..36267395 100644 Binary files a/logos/code-server.png and b/logos/code-server.png differ diff --git a/logos/coin.png b/logos/coin.png index 5bd7a178..463dd844 100644 Binary files a/logos/coin.png and b/logos/coin.png differ diff --git a/logos/commento.png b/logos/commento.png index e85e509d..da51e448 100644 Binary files a/logos/commento.png and b/logos/commento.png differ diff --git a/logos/converse.png b/logos/converse.png index bf2d8636..92fcd41c 100644 Binary files a/logos/converse.png and b/logos/converse.png differ diff --git a/logos/conversejs.png b/logos/conversejs.png index bf2d8636..e2cb2d0f 100644 Binary files a/logos/conversejs.png and b/logos/conversejs.png differ diff --git a/logos/crabfit.png b/logos/crabfit.png new file mode 100644 index 00000000..9fc13650 Binary files /dev/null and b/logos/crabfit.png differ diff --git a/logos/diaspora.png b/logos/diaspora.png index addb5017..bdb7008b 100644 Binary files a/logos/diaspora.png and b/logos/diaspora.png differ diff --git a/logos/eleventy.png b/logos/eleventy.png index 5518ad45..5e046331 100644 Binary files a/logos/eleventy.png and b/logos/eleventy.png differ diff --git a/logos/emailpoubelle.png b/logos/emailpoubelle.png index 4835d488..ccf7b3fb 100644 Binary files a/logos/emailpoubelle.png and b/logos/emailpoubelle.png differ diff --git a/logos/endi.png b/logos/endi.png index e8a708a7..bfde8906 100644 Binary files a/logos/endi.png and b/logos/endi.png differ diff --git a/logos/flohmarkt.png b/logos/flohmarkt.png new file mode 100644 index 00000000..1b142228 Binary files /dev/null and b/logos/flohmarkt.png differ diff --git a/logos/glance.png b/logos/glance.png new file mode 100644 index 00000000..bc56c8e4 Binary files /dev/null and b/logos/glance.png differ diff --git a/logos/immich.png b/logos/immich.png index 6fc783ef..d2230625 100644 Binary files a/logos/immich.png and b/logos/immich.png differ diff --git a/logos/incus.png b/logos/incus.png new file mode 100644 index 00000000..bf8e0b21 Binary files /dev/null and b/logos/incus.png differ diff --git a/logos/jackett.png b/logos/jackett.png index 05b992c7..52157afc 100644 Binary files a/logos/jackett.png and b/logos/jackett.png differ diff --git a/logos/jappix.png b/logos/jappix.png index 80493819..4312c487 100644 Binary files a/logos/jappix.png and b/logos/jappix.png differ diff --git a/logos/kiwix.png b/logos/kiwix.png index 2fdaab6d..72bcff2b 100644 Binary files a/logos/kiwix.png and b/logos/kiwix.png differ diff --git a/logos/leed.png b/logos/leed.png index fb8211df..e0af20b3 100644 Binary files a/logos/leed.png and b/logos/leed.png differ diff --git a/logos/librarian.png b/logos/librarian.png index 385e356f..c289cd1d 100644 Binary files a/logos/librarian.png and b/logos/librarian.png differ diff --git a/logos/lstu.png b/logos/lstu.png index d1ab2142..5e85d387 100644 Binary files a/logos/lstu.png and b/logos/lstu.png differ diff --git a/logos/microbin.png b/logos/microbin.png new file mode 100644 index 00000000..83852035 Binary files /dev/null and b/logos/microbin.png differ diff --git a/logos/mindmaps.png b/logos/mindmaps.png index 3fc00e1a..94b9b7ca 100644 Binary files a/logos/mindmaps.png and b/logos/mindmaps.png differ diff --git a/logos/mumble-web.png b/logos/mumble-web.png index 55616ca3..4c485c3d 100644 Binary files a/logos/mumble-web.png and b/logos/mumble-web.png differ diff --git a/logos/mumbleserver.png b/logos/mumbleserver.png index 55616ca3..e59422ac 100644 Binary files a/logos/mumbleserver.png and b/logos/mumbleserver.png differ diff --git a/logos/outline.png b/logos/outline.png index b8138463..40238af9 100644 Binary files a/logos/outline.png and b/logos/outline.png differ diff --git a/logos/paheko.png b/logos/paheko.png index 3018efdd..9d75796c 100644 Binary files a/logos/paheko.png and b/logos/paheko.png differ diff --git a/logos/peertube.png b/logos/peertube.png index cb7e6040..412cb991 100644 Binary files a/logos/peertube.png and b/logos/peertube.png differ diff --git a/logos/signaturepdf.png b/logos/signaturepdf.png index 146b4b16..d8a60cb4 100644 Binary files a/logos/signaturepdf.png and b/logos/signaturepdf.png differ diff --git a/logos/vaultwarden.png b/logos/vaultwarden.png index 93a22cfe..e997d28b 100644 Binary files a/logos/vaultwarden.png and b/logos/vaultwarden.png differ diff --git a/logos/woodpecker.png b/logos/woodpecker.png index 2e55653f..fe088f65 100644 Binary files a/logos/woodpecker.png and b/logos/woodpecker.png differ diff --git a/logos/writefreely.png b/logos/writefreely.png index fa3198b7..b3a61b4b 100644 Binary files a/logos/writefreely.png and b/logos/writefreely.png differ diff --git a/logos/yarr.png b/logos/yarr.png new file mode 100644 index 00000000..cf093af7 Binary files /dev/null and b/logos/yarr.png differ diff --git a/maintenance.sh b/maintenance.sh new file mode 100644 index 00000000..89cd8c5d --- /dev/null +++ b/maintenance.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash + +workdir=$(realpath $(dirname "$0")) +cd $workdir + +function git_pull_and_update_cron_and_restart_services_if_needed() +{ + git pull &>/dev/null + + # Cron + cat cron | sed "s@__BASEDIR__@$workdir@g" > /etc/cron.d/app_list + + # App store + chown -R appstore store + pushd store >/dev/null + modified_after_service_start="$(find *.py translations/ templates/ assets/ -newermt "$(systemctl show --property=ActiveEnterTimestamp appstore | cut -d= -f2 | cut -d' ' -f2-3)")" + if [ -n "$modified_after_service_start" ] + then + pushd assets >/dev/null + ./tailwindcss-linux-x64 --input tailwind-local.css --output tailwind.css --minify + popd >/dev/null + systemctl restart appstore + sleep 3 + fi + popd >/dev/null + + systemctl --quiet is-active appstore || sendxmpppy "[appstore] Uhoh, failed to (re)start the appstore service?" + + # App generator + chown -R appgenerator tools/app_generator + pushd tools/app_generator >/dev/null + modified_after_service_start="$(find *.py translations/ templates/ static/ -newermt "$(systemctl show --property=ActiveEnterTimestamp appgenerator | cut -d= -f2 | cut -d' ' -f2-3)")" + if [ -n "$modified_after_service_start" ] + then + pushd assets >/dev/null + ./tailwindcss-linux-x64 --input tailwind-local.css --output tailwind.css --minify + popd >/dev/null + systemctl restart appgenerator + sleep 3 + fi + popd >/dev/null + + systemctl --quiet is-active appgenerator || sendxmpppy "[appgenerator] Uhoh, failed to (re)start the appgenerator service?" + + # Autoreadme + pushd tools/readme_generator >/dev/null + modified_after_service_start="$(find *.py translations/ templates/ -newermt "$(systemctl show --property=ActiveEnterTimestamp autoreadme | cut -d= -f2 | cut -d' ' -f2-3)")" + if [ -n "$modified_after_service_start" ] + then + systemctl restart autoreadme + sleep 3 + fi + popd >/dev/null + + systemctl --quiet is-active autoreadme || sendxmpppy "[autoreadme] Uhoh, failed to (re)start the autoreadme service?" +} + +function rebuild_catalog() +{ + log=$workdir/app_list_auto_update.log + date >> $log + git_pull_and_update_cron_and_restart_services_if_needed + ./tools/list_builder.py &>> $log || sendxmpppy "[listbuilder] Rebuilding the application list failed miserably" +} + +function autoupdate_app_sources() +{ + log=$workdir/app_sources_auto_update.log + date >> $log + git_pull_and_update_cron_and_restart_services_if_needed + tools/autoupdate_app_sources/venv/bin/python3 tools/autoupdate_app_sources/autoupdate_app_sources.py \ + --edit --commit --pr --paste -j1 \ + &> $log || sendxmpppy "[appsourcesautoupdate] App sources auto-update failed miserably" +} + +function update_app_levels() +{ + pushd tools/update_app_levels >/dev/null + python3 update_app_levels.py + popd >/dev/null +} + +function fetch_main_dashboard() +{ + pushd store >/dev/null + venv/bin/python3 fetch_main_dashboard.py 2>&1 | grep -v 'Following Github server redirection' + popd >/dev/null +} + + +function fetch_level_history() +{ + pushd store >/dev/null + venv/bin/python3 fetch_level_history.py + popd >/dev/null +} + +$1 diff --git a/rebuild.sh b/rebuild.sh deleted file mode 100644 index 4417a728..00000000 --- a/rebuild.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -workdir=$(realpath $(dirname "$0")) -log=$workdir/app_list_auto_update.log - -cd $workdir -date >> $log -git pull &>/dev/null -cat cron | sed "s@__BASEDIR__@$workdir@g" > /etc/cron.d/app_list - -./tools/list_builder.py &>> $log || sendxmpppy "[listbuilder] Rebuilding the application list failed miserably" diff --git a/schemas/antifeatures.toml.schema.json b/schemas/antifeatures.toml.schema.json new file mode 100644 index 00000000..880285db --- /dev/null +++ b/schemas/antifeatures.toml.schema.json @@ -0,0 +1,63 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "https://github.com/YunoHost/apps/blob/master/schemas/antifeatures.toml.schema.json", + "title": "Yunohost's antifeatures.toml schema", + "version": "0", + "$defs": { + "translated_string": { + "type": "object", + "required": [ + "en" + ], + "additionalProperties": false, + "patternProperties": { + "^[a-z]{2}$": { + "type": "string" + } + } + } + }, + "type": "object", + "required": [], + "additionalProperties": false, + "patternProperties": { + "^[a-z0-9_-]*$": { + "type": "object", + "required": [ + "icon", + "title", + "description" + ], + "additionalProperties": false, + "properties": { + "icon": { + "type": "string" + }, + "title": { + "$ref": "#/$defs/translated_string" + }, + "description": { + "$ref": "#/$defs/translated_string" + }, + "subtags": { + "type": "object", + "additionalProperties": false, + "patternProperties": { + "^[a-z_]*$": { + "type": "object", + "required": [ + "title" + ], + "additionalProperties": false, + "properties": { + "title": { + "$ref": "#/$defs/translated_string" + } + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/schemas/apps.toml.schema.json b/schemas/apps.toml.schema.json index 4833c35d..42e15f51 100644 --- a/schemas/apps.toml.schema.json +++ b/schemas/apps.toml.schema.json @@ -56,6 +56,12 @@ }, "branch": { "type": "string" + }, + "added_date": { + "type": "integer" + }, + "deprecated_date": { + "type": "integer" } } } diff --git a/schemas/graveyard.toml.schema.json b/schemas/graveyard.toml.schema.json new file mode 100644 index 00000000..b35d7e3c --- /dev/null +++ b/schemas/graveyard.toml.schema.json @@ -0,0 +1,57 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "https://github.com/YunoHost/apps/blob/master/schemas/graveyard.toml.schema.json", + "title": "Yunohost's graveyard.toml schema", + "version": "0", + "type": "object", + "required": [], + "additionalProperties": false, + "patternProperties": { + "^[a-z0-9_-]*$": { + "type": "object", + "required": [ + "url" + ], + "additionalProperties": false, + "properties": { + "category": { + "type": "string" + }, + "subtags": { + "type": "array", + "items": { + "type": "string" + }, + "additionalItems": false + }, + "url": { + "type": "string", + "format": "url" + }, + "antifeatures": { + "type": "array", + "items": { + "type": "string" + }, + "additionalItems": false + }, + "potential_alternative_to": { + "type": "array", + "items": { + "type": "string" + }, + "additionalItems": false + }, + "added_date": { + "type": "integer" + }, + "deprecated_date": { + "type": "integer" + }, + "killed_date": { + "type": "integer" + } + } + } + } +} diff --git a/schemas/manifest.v2.schema.json b/schemas/manifest.v2.schema.json index 9ee7767c..e30bedea 100644 --- a/schemas/manifest.v2.schema.json +++ b/schemas/manifest.v2.schema.json @@ -3,14 +3,15 @@ "$id": "https://raw.githubusercontent.com/YunoHost/apps/master/schemas/manifest.v2.schema.json", "title": "Yunohost app manifest.toml schema", "version": "0", - "type": "object", "$defs": { "translated_string": { "anyOf": [ { "type": "object", - "required": ["en"], + "required": [ + "en" + ], "additionalProperties": false, "patternProperties": { "^[a-z]{2}$": { @@ -68,7 +69,6 @@ ] } }, - "properties": { "packaging_format": { "description": "Packaging format / version", @@ -87,32 +87,64 @@ "type": "string", "pattern": "^[0-9a-z]*([\\.+-][0-9a-z]*)*~ynh[0-9]*$" }, - "description": {"$ref": "#/$defs/translated_string"}, + "description": { + "$ref": "#/$defs/translated_string" + }, "maintainers": { "description": "List of maintainers", "type": "array", "items": { - "type": "string" + "type": "string" } }, "upstream": { "type": "object", - "required": ["license"], + "required": [ + "license" + ], "additionalProperties": false, "properties": { - "license": {"type": "string"}, - "website": {"type": "string", "format": "uri-reference"}, - "demo": {"type": "string", "format": "uri-reference"}, - "admindoc": {"type": "string", "format": "uri-reference"}, - "userdoc": {"type": "string", "format": "uri-reference"}, - "code": {"type": "string", "format": "uri-reference"}, - "fund": {"type": "string", "format": "uri-reference"}, - "cpe": {"$ref": "#/$defs/cpe_id"} + "license": { + "type": "string" + }, + "website": { + "type": "string", + "format": "uri-reference" + }, + "demo": { + "type": "string", + "format": "uri-reference" + }, + "admindoc": { + "type": "string", + "format": "uri-reference" + }, + "userdoc": { + "type": "string", + "format": "uri-reference" + }, + "code": { + "type": "string", + "format": "uri-reference" + }, + "fund": { + "type": "string", + "format": "uri-reference" + }, + "cpe": { + "$ref": "#/$defs/cpe_id" + } } }, "integration": { "type": "object", - "required": ["yunohost", "architectures", "multi_instance", "ldap", "sso"], + "required": [ + "yunohost", + "architectures", + "multi_instance", + "ldap", + "sso" + ], "additionalProperties": false, "properties": { "yunohost": { @@ -129,22 +161,39 @@ "type": "array", "items": { "type": "string", - "enum": ["amd64", "i386", "armhf", "arm64"] + "enum": [ + "amd64", + "i386", + "armhf", + "arm64" + ] } } ] }, - "multi_instance": {"$ref": "#/$defs/boolean_or_not_relevant"}, - "ldap": {"$ref": "#/$defs/boolean_or_not_relevant"}, - "sso": {"$ref": "#/$defs/boolean_or_not_relevant"}, - "disk": {"$ref": "#/$defs/byte_size"}, + "multi_instance": { + "$ref": "#/$defs/boolean_or_not_relevant" + }, + "ldap": { + "$ref": "#/$defs/boolean_or_not_relevant" + }, + "sso": { + "$ref": "#/$defs/boolean_or_not_relevant" + }, + "disk": { + "$ref": "#/$defs/byte_size" + }, "ram": { "type": "object", "required": [], "additionalProperties": false, "properties": { - "build": {"$ref": "#/$defs/byte_size"}, - "runtime": {"$ref": "#/$defs/byte_size"} + "build": { + "$ref": "#/$defs/byte_size" + }, + "runtime": { + "$ref": "#/$defs/byte_size" + } } } } @@ -154,7 +203,9 @@ "required": [], "additionalProperties": false, "patternProperties": { - "^[a-zA-Z0-9_-]*$": {"$ref": "#/$defs/translated_string"} + "^[a-zA-Z0-9_-]*$": { + "$ref": "#/$defs/translated_string" + } } }, "install": { @@ -164,22 +215,60 @@ "patternProperties": { "^[a-z][a-z0-9_]*$": { "type": "object", - "required": ["type"], + "required": [ + "type" + ], "additionalProperties": false, "properties": { "type": { "type": "string", "enum": [ - "string", "text", "select", "tags", "email", "url", "date", "time", - "color", "password", "path", "boolean", "domain", "user", "group", - "number", "range", "alert", "markdown", "file", "app" + "string", + "text", + "select", + "tags", + "email", + "url", + "date", + "time", + "color", + "password", + "path", + "boolean", + "domain", + "user", + "group", + "number", + "range", + "alert", + "markdown", + "file", + "app" ] }, - "default": {"type": ["string", "number", "boolean"]}, - "example": {"type": ["string", "number", "boolean"]}, - "optional": {"type": "boolean"}, - "ask": {"$ref": "#/$defs/translated_string"}, - "help": {"$ref": "#/$defs/translated_string"}, + "default": { + "type": [ + "string", + "number", + "boolean" + ] + }, + "example": { + "type": [ + "string", + "number", + "boolean" + ] + }, + "optional": { + "type": "boolean" + }, + "ask": { + "$ref": "#/$defs/translated_string" + }, + "help": { + "$ref": "#/$defs/translated_string" + }, "choices": { "anyOf": [ { @@ -228,7 +317,9 @@ "required": [], "additionalProperties": false, "properties": { - "packages": {"$ref": "#/$defs/string_or_array_of"}, + "packages": { + "$ref": "#/$defs/string_or_array_of" + }, "packages_from_raw_bash": { "type": "string" }, @@ -237,7 +328,10 @@ "patternProperties": { "^.[a-z][a-z0-9_]*$": { "type": "object", - "required": ["repo", "packages"], + "required": [ + "repo", + "packages" + ], "additionalProperties": false, "properties": { "repo": { @@ -246,7 +340,9 @@ "key": { "type": "string" }, - "packages": {"$ref": "#/$defs/string_or_array_of"} + "packages": { + "$ref": "#/$defs/string_or_array_of" + } } } } @@ -258,25 +354,36 @@ "required": [], "additionalProperties": false, "properties": { - "dir": {"$ref": "#/$defs/path_absolute"}, + "dir": { + "$ref": "#/$defs/path_absolute" + }, "subdirs": { "type": "array", "items": { "type": "string" } }, - "owner": {"$ref": "#/$defs/name_and_permission"}, - "group": {"$ref": "#/$defs/name_and_permission"} + "owner": { + "$ref": "#/$defs/name_and_permission" + }, + "group": { + "$ref": "#/$defs/name_and_permission" + } } }, "database": { "type": "object", - "required": ["type"], + "required": [ + "type" + ], "additionalProperties": false, "properties": { "type": { "type": "string", - "enum": ["mysql", "postgresql"] + "enum": [ + "mysql", + "postgresql" + ] } } }, @@ -285,9 +392,15 @@ "required": [], "additionalProperties": false, "properties": { - "dir": {"$ref": "#/$defs/path_absolute"}, - "owner": {"$ref": "#/$defs/name_and_permission"}, - "group": {"$ref": "#/$defs/name_and_permission"} + "dir": { + "$ref": "#/$defs/path_absolute" + }, + "owner": { + "$ref": "#/$defs/name_and_permission" + }, + "group": { + "$ref": "#/$defs/name_and_permission" + } } }, "permissions": { @@ -300,7 +413,10 @@ "required": [], "additionalProperties": false, "properties": { - "url": {"$ref": "#/$defs/path_absolute"}, + "url": { + "type": "string", + "pattern": "^((re:.*)?|(__[A-Z_]*__)?\/.*)$" + }, "show_tile": { "type": "boolean" }, @@ -315,7 +431,9 @@ }, "additional_urls": { "type": "array", - "items": {"$ref": "#/$defs/path_absolute"} + "items": { + "$ref": "#/$defs/path_absolute" + } }, "label": { "type": "string" @@ -344,7 +462,11 @@ }, { "type": "string", - "enum": ["TCP", "UDP", "Both"] + "enum": [ + "TCP", + "UDP", + "Both" + ] } ] }, @@ -369,7 +491,9 @@ "type": "string", "format": "uri" }, - "sha256": {"$ref": "#/$defs/sha256sum"}, + "sha256": { + "$ref": "#/$defs/sha256sum" + }, "in_subdir": { "anyOf": [ { @@ -451,6 +575,14 @@ }, "force_version": { "type": "string" + }, + "allow_prereleases": { + "type": "boolean", + "description": "Allow prereleases when using strategy = latest_X_release" + }, + "needs_manual_tweaks": { + "type": "boolean", + "description": "Inform the maintainer of manual steps to make autoupdate PRs work" } } } @@ -465,7 +597,9 @@ "type": "string", "format": "uri" }, - "sha256": {"$ref": "#/$defs/sha256sum"} + "sha256": { + "$ref": "#/$defs/sha256sum" + } } } } @@ -486,12 +620,13 @@ "allow_email": { "type": "boolean" }, - "home": {"$ref": "#/$defs/path_absolute"} + "home": { + "$ref": "#/$defs/path_absolute" + } } } } } - }, "required": [ "packaging_format", diff --git a/schemas/wishlist.toml.schema.json b/schemas/wishlist.toml.schema.json index 368db38f..6cac0e68 100644 --- a/schemas/wishlist.toml.schema.json +++ b/schemas/wishlist.toml.schema.json @@ -3,14 +3,16 @@ "$id": "https://github.com/YunoHost/apps/blob/master/schemas/wishlist.toml.schema.json", "title": "Yunohost's wishlist.toml schema", "version": "0", - "type": "object", "required": [], "additionalProperties": false, "patternProperties": { "^[a-z0-9_-]*$": { "type": "object", - "required": ["name", "upstream"], + "required": [ + "name", + "upstream" + ], "additionalProperties": false, "properties": { "name": { @@ -26,9 +28,15 @@ "website": { "type": "string", "format": "url" + }, + "draft": { + "type": "string", + "format": "url" + }, + "added_date": { + "type": "integer" } } } } - } diff --git a/sourcesautoupdate.sh b/sourcesautoupdate.sh deleted file mode 100644 index 99d14565..00000000 --- a/sourcesautoupdate.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -workdir=$(realpath $(dirname "$0")) -log=$workdir/app_sources_auto_update.log - -cd $workdir -date >> $log -git pull &>/dev/null -cat cron | sed "s@__BASEDIR__@$workdir@g" > /etc/cron.d/app_list - -python3 tools/autoupdate_app_sources/autoupdate_app_sources.py \ - --edit --commit --pr --paste -j1 \ -&> $log || sendxmpppy "[appsourcesautoupdate] App sources auto-update failed miserably" diff --git a/store/.cache/.gitkeep b/store/.cache/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/store/.gitignore b/store/.gitignore index 2acaf9d0..27836fa2 100644 --- a/store/.gitignore +++ b/store/.gitignore @@ -1,8 +1,6 @@ config.toml .stars - -assets/fork-awesome.* -assets/forkawesome-webfont.* -assets/tailwind.css -assets/tailwindcss-linux-x64 -assets/ynh_logo_* \ No newline at end of file +.wishlist_ratelimit +.cache +.tmp +assets/* diff --git a/store/README.md b/store/README.md index 628ef794..c8a5f75e 100644 --- a/store/README.md +++ b/store/README.md @@ -31,18 +31,21 @@ And then start the dev server: ```bash source venv/bin/activate -FLASK_APP=app.py FLASK_ENV=development flask run +FLASK_APP=app.py FLASK_ENV=development flask --debug run + +# In another term, launch the tailwindcss process to autorebuild css: +cd assets; ./tailwindcss-linux-x64 --input tailwind-local.css --output tailwind.css --watch ``` ## Translation -It's based on Flask-Babel : +It's based on Flask-Babel : ```bash source venv/bin/activate # Extract the english sentences from the code, needed if you modified it -pybabel extract --ignore-dirs venv -F babel.cfg -o messages.pot . +pybabel extract -F babel.cfg -o messages.pot *.py templates/*.html # If working on a new locale: initialize it (in this example: fr) pybabel init -i messages.pot -d translations -l fr diff --git a/store/app.py b/store/app.py index f5689fd9..3862c008 100644 --- a/store/app.py +++ b/store/app.py @@ -1,15 +1,17 @@ -import time +import os +import sys import re +import time +import json import toml +import tomlkit import base64 import hashlib import hmac -import os import string import random import urllib -import json -import sys +from datetime import datetime from slugify import slugify from flask import ( Flask, @@ -18,6 +20,7 @@ from flask import ( session, redirect, request, + make_response, ) from flask_babel import Babel from flask_babel import gettext as _ @@ -30,6 +33,7 @@ from utils import ( get_catalog, get_wishlist, get_stars, + get_dashboard_data, get_app_md_and_screenshots, save_wishlist_submit_for_ratelimit, check_wishlist_submit_ratelimit, @@ -61,9 +65,7 @@ for key in mandatory_config_keys: print(f"Missing key in config.toml: {key}") sys.exit(1) -if config.get("DEBUG"): - app.debug = True - app.config["DEBUG"] = True +if app.config.get("DEBUG"): app.config["TEMPLATES_AUTO_RELOAD"] = True # This is the secret key used for session signing @@ -84,6 +86,39 @@ def localize(d): return d["en"] +@app.template_filter("days_ago") +def days_ago(timestamp): + return int((time.time() - timestamp) / (60 * 60 * 24)) + + +@app.template_filter("hours_ago") +def hours_ago(timestamp): + d = datetime.now() - datetime.fromtimestamp(timestamp) + hours = int(divmod(d.total_seconds(), 3600)[0]) + minutes = int(divmod(d.total_seconds(), 60)[1]) + return f"{hours}:{minutes}h" + + +@app.template_filter("format_datetime") +def format_datetime(value, format="%d %b %Y %I:%M %p"): + if value is None: + return "" + return datetime.strptime(value, "%b %d %Y").strftime(format) + + +@app.context_processor +def utils(): + d = { + "user": session.get("user", {}), + "locale": get_locale(), + } + + if app.config.get("DEBUG"): + d["tailwind_local"] = open("assets/tailwind-local.css").read() + + return d + + ############################################################################### @@ -96,8 +131,6 @@ def favicon(): def index(): return render_template( "index.html", - locale=get_locale(), - user=session.get("user", {}), catalog=get_catalog(), ) @@ -106,12 +139,10 @@ def index(): def browse_catalog(): return render_template( "catalog.html", - locale=get_locale(), init_sort=request.args.get("sort"), init_search=request.args.get("search"), init_category=request.args.get("category"), init_starsonly=request.args.get("starsonly"), - user=session.get("user", {}), catalog=get_catalog(), timestamp_now=int(time.time()), stars=get_stars(), @@ -134,8 +165,6 @@ def app_info(app_id): return render_template( "app.html", - locale=get_locale(), - user=session.get("user", {}), app_id=app_id, infos=infos, catalog=get_catalog(), @@ -147,9 +176,16 @@ def app_info(app_id): def star_app(app_id, action): assert action in ["star", "unstar"] if app_id not in get_catalog()["apps"] and app_id not in get_wishlist(): - return _("App %(app_id) not found", app_id=app_id), 404 + return _("App %(app_id)s not found", app_id=app_id), 404 if not session.get("user", {}): - return _("You must be logged in to be able to star an app") + "

" + _("Note that, due to various abuses, we restricted login on the app store to 'trust level 1' users.

'Trust level 1' is obtained after interacting a minimum with the forum, and more specifically: entering at least 5 topics, reading at least 30 posts, and spending at least 10 minutes reading posts."), 401 + return ( + _("You must be logged in to be able to star an app") + + "

" + + _( + "Note that, due to various abuses, we restricted login on the app store to 'trust level 1' users.

'Trust level 1' is obtained after interacting a minimum with the forum, and more specifically: entering at least 5 topics, reading at least 30 posts, and spending at least 10 minutes reading posts." + ), + 401, + ) app_star_folder = os.path.join(".stars", app_id) app_star_for_this_user = os.path.join( @@ -177,11 +213,6 @@ def star_app(app_id, action): def browse_wishlist(): return render_template( "wishlist.html", - init_sort=request.args.get("sort"), - init_search=request.args.get("search"), - init_starsonly=request.args.get("starsonly"), - locale=get_locale(), - user=session.get("user", {}), wishlist=get_wishlist(), stars=get_stars(), ) @@ -192,11 +223,15 @@ def add_to_wishlist(): if request.method == "POST": user = session.get("user", {}) if not user: - errormsg = _("You must be logged in to submit an app to the wishlist") + "

" + _("Note that, due to various abuses, we restricted login on the app store to 'trust level 1' users.

'Trust level 1' is obtained after interacting a minimum with the forum, and more specifically: entering at least 5 topics, reading at least 30 posts, and spending at least 10 minutes reading posts.") + errormsg = ( + _("You must be logged in to submit an app to the wishlist") + + "

" + + _( + "Note that, due to various abuses, we restricted login on the app store to 'trust level 1' users.

'Trust level 1' is obtained after interacting a minimum with the forum, and more specifically: entering at least 5 topics, reading at least 30 posts, and spending at least 10 minutes reading posts." + ) + ) return render_template( "wishlist_add.html", - locale=get_locale(), - user=session.get("user", {}), csrf_token=None, successmsg=None, errormsg=errormsg, @@ -207,8 +242,6 @@ def add_to_wishlist(): errormsg = _("Invalid CSRF token, please refresh the page and try again") return render_template( "wishlist_add.html", - locale=get_locale(), - user=session.get("user", {}), csrf_token=csrf_token, successmsg=None, errormsg=errormsg, @@ -220,12 +253,33 @@ def add_to_wishlist(): website = request.form["website"].strip().replace("\n", "") license = request.form["license"].strip().replace("\n", "") - boring_keywords_to_check_for_people_not_reading_the_instructions = ["free", "open source", "open-source", "self-hosted", "simple", "lightweight", "light-weight", "léger", "best", "most", "fast", "rapide", "flexible", "puissante", "puissant", "powerful", "secure"] + boring_keywords_to_check_for_people_not_reading_the_instructions = [ + "free", + "open source", + "open-source", + "self-hosted", + "simple", + "lightweight", + "light-weight", + "léger", + "best", + "most", + "fast", + "rapide", + "flexible", + "puissante", + "puissant", + "powerful", + "secure", + ] checks = [ ( - check_wishlist_submit_ratelimit(session['user']['username']) is True and session['user']['bypass_ratelimit'] is False, - _("Proposing wishlist additions is limited to once every 15 days per user. Please try again in a few days.") + check_wishlist_submit_ratelimit(session["user"]["username"]) is True + or session["user"]["bypass_ratelimit"] is True, + _( + "Proposing wishlist additions is limited to once every 15 days per user. Please try again in a few days." + ), ), (len(name) >= 3, _("App name should be at least 3 characters")), (len(name) <= 30, _("App name should be less than 30 characters")), @@ -259,21 +313,28 @@ def add_to_wishlist(): _("App name contains special characters"), ), ( - all(keyword not in description.lower() for keyword in boring_keywords_to_check_for_people_not_reading_the_instructions), - _("Please focus on what the app does, without using marketing, fuzzy terms, or repeating that the app is 'free' and 'self-hostable'.") + all( + keyword not in description.lower() + for keyword in boring_keywords_to_check_for_people_not_reading_the_instructions + ), + _( + "Please focus on what the app does, without using marketing, fuzzy terms, or repeating that the app is 'free' and 'self-hostable'." + ), ), ( - description.lower().split()[0] != name and (len(description.split()) == 1 or description.lower().split()[1] not in ["is", "est"]), - _("No need to repeat the name of the app. Focus on what the app does.") - ) + description.lower().split()[0] != name + and ( + len(description.split()) == 1 + or description.lower().split()[1] not in ["is", "est"] + ), + _("No need to repeat the name of the app. Focus on what the app does."), + ), ] for check, errormsg in checks: if not check: return render_template( "wishlist_add.html", - locale=get_locale(), - user=session.get("user", {}), csrf_token=csrf_token, successmsg=None, errormsg=errormsg, @@ -288,19 +349,33 @@ def add_to_wishlist(): ) current_wishlist_sha = current_wishlist_rawtoml.sha current_wishlist_rawtoml = current_wishlist_rawtoml.decoded_content.decode() - new_wishlist = toml.loads(current_wishlist_rawtoml) + new_wishlist = tomlkit.loads(current_wishlist_rawtoml) if slug in new_wishlist: url = f"https://apps.yunohost.org/wishlist?search={slug}" return render_template( "wishlist_add.html", - locale=get_locale(), - user=session.get("user", {}), csrf_token=csrf_token, successmsg=None, errormsg=_( "An entry with the name %(slug)s already exists in the wishlist, instead, you can add a star to the app to show your interest.", - slug=slug, url=url, + slug=slug, + url=url, + ), + ) + + app_catalog = get_catalog()["apps"] + + if slug in app_catalog: + url = f"https://apps.yunohost.org/app/{slug}" + return render_template( + "wishlist_add.html", + csrf_token=csrf_token, + successmsg=None, + errormsg=_( + "An app with the name %(slug)s already exists in the catalog, you can see its page here.", + slug=slug, + url=url, ), ) @@ -312,24 +387,22 @@ def add_to_wishlist(): } new_wishlist = dict(sorted(new_wishlist.items())) - new_wishlist_rawtoml = toml.dumps(new_wishlist) + new_wishlist_rawtoml = tomlkit.dumps(new_wishlist) new_branch = f"add-to-wishlist-{slug}" try: # Get the commit base for the new branch, and create it commit_sha = repo.get_branch(repo.default_branch).commit.sha repo.create_git_ref(ref=f"refs/heads/{new_branch}", sha=commit_sha) - except exception as e: + except Exception as e: print("… Failed to create branch ?") print(e) - url = "https://github.com/YunoHost/apps/pulls?q=is%3Apr+is%3Aopen+wishlist" + url = "https://github.com/YunoHost/apps/pulls?q=is%3Apr+is%3Aopen+label%3AWishlist" errormsg = _( "Failed to create the pull request to add the app to the wishlist… Maybe there's already a waiting PR for this app? Else, please report the issue to the YunoHost team.", - url=url + url=url, ) return render_template( "wishlist_add.html", - locale=get_locale(), - user=session.get("user", {}), csrf_token=csrf_token, successmsg=None, errormsg=errormsg, @@ -370,6 +443,7 @@ Description: {description} head=new_branch, base=repo.default_branch, ) + pr.add_to_labels("Wishlist") url = f"https://github.com/YunoHost/apps/pull/{pr.number}" @@ -378,12 +452,10 @@ Description: {description} url=url, ) - save_wishlist_submit_for_ratelimit(session['user']['username']) + save_wishlist_submit_for_ratelimit(session["user"]["username"]) return render_template( "wishlist_add.html", - locale=get_locale(), - user=session.get("user", {}), successmsg=successmsg, ) else: @@ -392,14 +464,125 @@ Description: {description} session["csrf_token"] = csrf_token return render_template( "wishlist_add.html", - locale=get_locale(), - user=session.get("user", {}), csrf_token=csrf_token, successmsg=None, errormsg=None, ) +@app.route("/dash") +def dash(): + + # Sort by popularity by default + stars = get_stars() + data = dict( + sorted( + get_dashboard_data().items(), + key=lambda app: len(stars.get(app[0], [])), + reverse=True, + ) + ) + + return render_template( + "dash.html", data=data, stars=stars, last_data_update=get_dashboard_data.mtime + ) + + +@app.route("/charts") +def charts(): + + dashboard_data = get_dashboard_data() + level_summary = {} + for i in range(0, 9): + level_summary[i] = len( + [ + infos + for infos in dashboard_data.values() + if infos.get("ci_results", {}).get("main").get("level") == i + ] + ) + level_summary["unknown"] = len( + [ + infos + for infos in dashboard_data.values() + if infos.get("ci_results", {}).get("main").get("level") in [None, "?"] + ] + ) + + return render_template( + "charts.html", + level_summary=level_summary, + history=json.loads(open(".cache/history.json").read()), + news_per_date=json.loads(open(".cache/news.json").read()), + ) + + +@app.route("/news.rss") +def news_rss(): + + news_per_date = json.loads(open(".cache/news.json").read()) + + # Keepy only the last N entries + news_per_date = { + d: infos for d, infos in reversed(list(news_per_date.items())[-2:]) + } + + rss_xml = render_template( + "news_rss.xml", news_per_date=news_per_date, catalog=get_catalog() + ) + response = make_response(rss_xml) + response.headers["Content-Type"] = "application/rss+xml" + response.headers["Content-Disposition"] = "inline; filename=news_rss.xml" + return response + + +# Badges +@app.route("/integration/") +@app.route("/integration/.svg") +@app.route("/badge//") +@app.route("/badge//.svg") +def badge(app, type="integration"): + + data = get_dashboard_data() + catalog = get_catalog()["apps"] + + catalog_level = catalog.get(app, {}).get("level") + main_ci_level = ( + data.get(app, {}).get("ci_results", {}).get("main", {}).get("level", "?") + ) + + if type == "integration": + if app in catalog and main_ci_level: + badge = f"level{main_ci_level}" + else: + badge = "unknown" + elif type == "state": + if app not in catalog: + badge = "state-unknown" + else: + if catalog_level in [None, "?"]: + badge = "state-just-got-added-to-catalog" + elif catalog_level in [0, -1]: + badge = "state-broken" + else: + badge = "state-working" + elif type == "maintained": + if app in catalog and catalog.get(app, {}).get("maintained") is False: + badge = "unmaintained" + else: + badge = "empty" + else: + badge = "empty" + + svg = open(f"assets/badges/{badge}.svg").read() + response = make_response(svg) + response.content_type = "image/svg+xml" + response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate" + response.headers["Pragma"] = "no-cache" + + return response + + ############################################################################### # Session / SSO using Discourse # ############################################################################### @@ -427,7 +610,6 @@ def login_using_discourse(): @app.route("/sso_login_callback") def sso_login_callback(): - computed_sig = hmac.new( config["DISCOURSE_SSO_SECRET"].encode(), msg=request.args["sso"].encode(), @@ -445,10 +627,17 @@ def sso_login_callback(): uri_to_redirect_to_after_login = session.get("uri_to_redirect_to_after_login") - if "trust_level_1" not in user_data['groups'][0].split(','): - return _("Unfortunately, login was denied.") + "

" + _("Note that, due to various abuses, we restricted login on the app store to 'trust level 1' users.

'Trust level 1' is obtained after interacting a minimum with the forum, and more specifically: entering at least 5 topics, reading at least 30 posts, and spending at least 10 minutes reading posts."), 403 + if "trust_level_1" not in user_data["groups"][0].split(","): + return ( + _("Unfortunately, login was denied.") + + "

" + + _( + "Note that, due to various abuses, we restricted login on the app store to 'trust level 1' users.

'Trust level 1' is obtained after interacting a minimum with the forum, and more specifically: entering at least 5 topics, reading at least 30 posts, and spending at least 10 minutes reading posts." + ), + 403, + ) - if "staff" in user_data['groups'][0].split(','): + if "staff" in user_data["groups"][0].split(","): bypass_ratelimit = True else: bypass_ratelimit = False @@ -467,6 +656,22 @@ def sso_login_callback(): return redirect("/") +@app.route("/toggle_packaging") +def toggle_packaging(): + if session and "user" in session: + user = session["user"] + if not session["user"].get("packaging_enabled"): + # Use this trick to force the change to be registered + # because this session["user"]["foobar"] = value doesn't actually change the state ? idk + user["packaging_enabled"] = True + session["user"] = user + return redirect("/dash") + else: + user["packaging_enabled"] = False + session["user"] = user + return redirect("/") + + @app.route("/logout") def logout(): session.clear() diff --git a/store/assets/badges/fetch_badges b/store/assets/badges/fetch_badges new file mode 100644 index 00000000..5f1c94da --- /dev/null +++ b/store/assets/badges/fetch_badges @@ -0,0 +1,20 @@ +wget -O - https://img.shields.io/badge/Integration-Level_9-blue.svg > level9.svg +wget -O - https://img.shields.io/badge/Integration-Level_8-brightgreen.svg > level8.svg +wget -O - https://img.shields.io/badge/Integration-Level_7-green.svg > level7.svg +wget -O - https://img.shields.io/badge/Integration-Level_6-yellowgreen.svg > level6.svg +wget -O - https://img.shields.io/badge/Integration-Level_5-yellowgreen.svg > level5.svg +wget -O - https://img.shields.io/badge/Integration-Level_4-yellow.svg > level4.svg +wget -O - https://img.shields.io/badge/Integration-Level_3-yellow.svg > level3.svg +wget -O - https://img.shields.io/badge/Integration-Level_2-orange.svg > level2.svg +wget -O - https://img.shields.io/badge/Integration-Level_1-orange.svg > level1.svg +wget -O - https://img.shields.io/badge/Integration-Level_0-red.svg > level0.svg +wget -O - https://img.shields.io/badge/Integration-Unknown-lightgrey.svg > unknown.svg + +wget -O - https://upload.wikimedia.org/wikipedia/commons/1/1d/No_image.svg > empty.svg +wget -O - https://img.shields.io/badge/Status-Package%20not%20maintained-red.svg > unmaintained.svg + +wget -O - https://img.shields.io/badge/Status-working-brightgreen.svg > state-working.svg +wget -O - https://img.shields.io/badge/Status-Just%20got%20added%20to%20catalog-yellowgreen.svg > state-just-got-added-to-catalog.svg +wget -O - https://img.shields.io/badge/Status-In%20progress-orange.svg > state-inprogress.svg +wget -O - https://img.shields.io/badge/Status-Not%20working-red.svg > state-notworking.svg +wget -O - https://img.shields.io/badge/Status-Broken-red.svg > state-broken.svg diff --git a/store/assets/fetch_assets b/store/assets/fetch_assets index 99c250da..4a931514 100644 --- a/store/assets/fetch_assets +++ b/store/assets/fetch_assets @@ -1,13 +1,25 @@ -# Download standalone tailwind to compile what we need -wget https://github.com/tailwindlabs/tailwindcss/releases/download/v3.3.3/tailwindcss-linux-x64 + +# Production -> download standalone tailwind to compile only what we need +wget https://github.com/tailwindlabs/tailwindcss/releases/download/v3.4.3/tailwindcss-linux-x64 chmod +x tailwindcss-linux-x64 ./tailwindcss-linux-x64 --input tailwind-local.css --output tailwind.css --minify +# Development -> we use the JS magic thingy +#curl -L https://cdn.tailwindcss.com?plugins=forms > tailwind-css.js + +# Dark theme stuff +git clone https://github.com/jjranalli/nightwind + +# Canvasjs (for the chart page only) +curl -L https://cdn.canvasjs.com/ga/canvasjs.min.js > canvasjs.min.js + +# Icons / Forkawesome curl https://cdn.jsdelivr.net/npm/fork-awesome@1.2.0/css/fork-awesome.min.css > fork-awesome.min.css sed -i 's@../fonts/@@g' ./fork-awesome.min.css curl https://cdn.jsdelivr.net/npm/fork-awesome@1.2.0/fonts/forkawesome-webfont.woff2?v=1.2.0 > forkawesome-webfont.woff2 curl https://cdn.jsdelivr.net/npm/fork-awesome@1.2.0/fonts/forkawesome-webfont.woff?v=1.2.0 > forkawesome-webfont.woff curl https://cdn.jsdelivr.net/npm/fork-awesome@1.2.0/fonts/forkawesome-webfont.ttf?v=1.2.0 > forkawesome-webfont.ttf +# Logos curl https://raw.githubusercontent.com/YunoHost/doc/master/images/logo_roundcorner.png > ynh_logo_roundcorner.png curl https://raw.githubusercontent.com/YunoHost/doc/master/images/ynh_logo_black.svg > ynh_logo_black.svg diff --git a/store/assets/tailwind-local.css b/store/assets/tailwind-local.css index 787ba1d2..8a2758ae 100644 --- a/store/assets/tailwind-local.css +++ b/store/assets/tailwind-local.css @@ -3,6 +3,9 @@ @tailwind utilities; @layer utilities { + input, textarea, select { + @apply !rounded-md shadow-sm !border-gray-200 !bg-neutral-50; + } .btn { @apply text-sm font-medium rounded-md px-4 py-2 transition; } diff --git a/store/assets/tailwind.config.js b/store/assets/tailwind.config.js index c5b0b2fc..76d9411d 100644 --- a/store/assets/tailwind.config.js +++ b/store/assets/tailwind.config.js @@ -1,11 +1,10 @@ /** @type {import('tailwindcss').Config} */ module.exports = { content: ['../templates/*.html'], - theme: { - extend: {}, - }, + darkMode: 'selector', plugins: [ require('@tailwindcss/forms'), + require('./nightwind/src/index.js'), ], safelist: [ 'safelisted', diff --git a/store/config.toml.example b/store/config.toml.example index e85497d6..bdf0d5bc 100644 --- a/store/config.toml.example +++ b/store/config.toml.example @@ -1,5 +1,7 @@ COOKIE_SECRET = "abcdefghijklmnopqrstuvwxyz1234567890" -# This secret is configured in Discourse +# This secret is configured in Discourse, "discourse connect provider secret" +# For development, a secret for "localhost" exists. +# But then be sure to access your dev server using localhost:5000, not 127.0.0.1:5000 DISCOURSE_SSO_SECRET = "abcdefghijklmnopqrstuvwxyz1234567890" DISCOURSE_SSO_ENDPOINT = "https://forum.yunohost.org/session/sso_provider" CALLBACK_URL_AFTER_LOGIN_ON_DISCOURSE = "http://localhost:5000/sso_login_callback" diff --git a/store/fetch_level_history.py b/store/fetch_level_history.py new file mode 100644 index 00000000..37e151b4 --- /dev/null +++ b/store/fetch_level_history.py @@ -0,0 +1,200 @@ +import toml +import json +import os +from datetime import datetime + + +def _time_points_until_today(): + + year = 2017 + month = 1 + day = 1 + today = datetime.today() + date = datetime(year, month, day) + + while date < today: + yield date + + day += 14 + if day > 15: + day = 1 + month += 1 + + if month > 12: + month = 1 + year += 1 + + date = datetime(year, month, day) + + +time_points_until_today = list(_time_points_until_today()) + + +def get_lists_history(): + + os.system("rm -rf ./.tmp") + os.system("git clone https://github.com/YunoHost/apps ./.tmp/apps") + + for t in time_points_until_today: + print(t.strftime("%b %d %Y")) + + # Fetch repo at this date + cmd = 'cd ./.tmp/apps; git checkout `git rev-list -1 --before="%s" master`' + os.system(cmd % t.strftime("%b %d %Y")) + + if t < datetime(2019, 4, 4): + # Merge community and official + community = json.loads(open("./.tmp/apps/community.json").read()) + official = json.loads(open("./.tmp/apps/official.json").read()) + for key in official: + official[key]["state"] = "official" + merged = {} + merged.update(community) + merged.update(official) + else: + try: + merged = toml.loads(open("./.tmp/apps/apps.toml").read()) + except Exception: + try: + merged = json.loads(open("./.tmp/apps/apps.json").read()) + except Exception: + pass + + # Save it + json.dump( + merged, open("./.tmp/merged_lists.json.%s" % t.strftime("%y-%m-%d"), "w") + ) + + +def make_count_summary(): + + history = [] + + last_time_point = time_points_until_today[-1] + json_at_last_time_point = json.loads( + open( + "./.tmp/merged_lists.json.%s" % last_time_point.strftime("%y-%m-%d") + ).read() + ) + relevant_apps_to_track = [ + app + for app, infos in json_at_last_time_point.items() + if infos.get("state") in ["working", "official"] + ] + + for d in time_points_until_today: + + print("Analyzing %s ..." % d.strftime("%y-%m-%d")) + + # Load corresponding json + j = json.loads( + open("./.tmp/merged_lists.json.%s" % d.strftime("%y-%m-%d")).read() + ) + d_label = d.strftime("%b %d %Y") + + summary = {} + summary["date"] = d_label + for level in range(0, 10): + summary["level-%s" % level] = len( + [ + k + for k, infos in j.items() + if infos.get("state") in ["working", "official"] + and infos.get("level", None) == level + ] + ) + + history.append(summary) + + for app in relevant_apps_to_track: + + infos = j.get(app, {}) + + if not infos or infos.get("state") not in ["working", "official"]: + level = -1 + else: + level = infos.get("level", -1) + try: + level = int(level) + except Exception: + level = -1 + + json.dump(history, open(".cache/history.json", "w")) + + +def make_news(): + + news_per_date = { + d.strftime("%b %d %Y"): { + "broke": [], + "repaired": [], + "removed": [], + "added": [], + } + for d in time_points_until_today + } + previous_j = {} + + def level(infos): + lev = infos.get("level") + if lev is None or (isinstance(lev, str) and not lev.isdigit()): + return -1 + else: + return int(lev) + + for d in time_points_until_today: + d_label = d.strftime("%b %d %Y") + + print("Analyzing %s ..." % d.strftime("%y-%m-%d")) + + # Load corresponding json + j = json.loads( + open("./.tmp/merged_lists.json.%s" % d.strftime("%y-%m-%d")).read() + ) + + apps_current = set( + k + for k, infos in j.items() + if infos.get("state") in ["working", "official"] and level(infos) != -1 + ) + apps_current_good = set( + k for k, infos in j.items() if k in apps_current and level(infos) > 4 + ) + apps_current_broken = set( + k for k, infos in j.items() if k in apps_current and level(infos) <= 4 + ) + + apps_previous = set( + k + for k, infos in previous_j.items() + if infos.get("state") in ["working", "official"] and level(infos) != -1 + ) + apps_previous_good = set( + k + for k, infos in previous_j.items() + if k in apps_previous and level(infos) > 4 + ) + apps_previous_broken = set( + k + for k, infos in previous_j.items() + if k in apps_previous and level(infos) <= 4 + ) + + news = news_per_date[d_label] + for app in set(apps_previous_good & apps_current_broken): + news["broke"].append((app, j[app]["url"])) + for app in set(apps_previous_broken & apps_current_good): + news["repaired"].append((app, j[app]["url"])) + for app in set(apps_current - apps_previous): + news["added"].append((app, j[app]["url"])) + for app in set(apps_previous - apps_current): + news["removed"].append((app, previous_j[app]["url"])) + + previous_j = j + + json.dump(news_per_date, open(".cache/news.json", "w")) + + +get_lists_history() +make_count_summary() +make_news() diff --git a/store/fetch_main_dashboard.py b/store/fetch_main_dashboard.py new file mode 100644 index 00000000..f0ab5712 --- /dev/null +++ b/store/fetch_main_dashboard.py @@ -0,0 +1,124 @@ +import os +import sys +import requests +import json +import toml +from github import Github + +sys.path = [os.path.dirname(__file__)] + sys.path +from utils import get_catalog + + +try: + config = toml.loads(open("config.toml").read()) +except Exception: + print( + "You should create a config.toml with the appropriate key/values, cf config.toml.example" + ) + sys.exit(1) + +github_token = config.get("GITHUB_TOKEN") + +if github_token is None: + print("You should add a GITHUB_TOKEN to config.toml") + sys.exit(1) + +g = Github(github_token) + +catalog = get_catalog() +main_ci_apps_results = requests.get( + "https://ci-apps.yunohost.org/ci/api/results" +).json() +nextdebian_ci_apps_results = requests.get( + "https://ci-apps-bookworm.yunohost.org/ci/api/results" +).json() + + +def get_github_infos(github_orga_and_repo): + + repo = g.get_repo(github_orga_and_repo) + infos = {} + + pulls = [p for p in repo.get_pulls()] + + infos["nb_prs"] = len(pulls) + infos["nb_issues"] = repo.open_issues_count - infos["nb_prs"] + + testings = [p for p in pulls if p.head.ref == "testing"] + testing = testings[0] if testings else None + ci_auto_updates = [p for p in pulls if p.head.ref.startswith("ci-auto-update")] + ci_auto_update = ( + sorted(ci_auto_updates, key=lambda p: p.created_at, reverse=True)[0] + if ci_auto_updates + else None + ) + + for p in ([testing] if testing else []) + ( + [ci_auto_update] if ci_auto_update else [] + ): + + if p.head.label != "YunoHost-Apps:testing" and not ( + p.user.login == "yunohost-bot" and p.head.ref.startswith("ci-auto-update-") + ): + continue + + infos["testing" if p.head.ref == "testing" else "ci-auto-update"] = { + "branch": p.head.ref, + "url": p.html_url, + "timestamp_created": int(p.created_at.timestamp()), + "timestamp_updated": int(p.updated_at.timestamp()), + "statuses": [ + { + "state": s.state, + "context": s.context, + "url": s.target_url, + "timestamp": int(s.updated_at.timestamp()), + } + for s in repo.get_commit(p.head.sha).get_combined_status().statuses + ], + } + + return infos + + +consolidated_infos = {} +for app, infos in catalog["apps"].items(): + + if infos["state"] != "working": + continue + + consolidated_infos[app] = { + "public_level": infos["level"], + "url": infos["git"]["url"], + "timestamp_latest_commit": infos["lastUpdate"], + "maintainers": infos["manifest"]["maintainers"], + "antifeatures": infos["antifeatures"], + "packaging_format": infos["manifest"]["packaging_format"], + "ci_results": { + "main": ( + { + "level": main_ci_apps_results[app]["level"], + "timestamp": main_ci_apps_results[app]["timestamp"], + } + if app in main_ci_apps_results + else None + ), + "nextdebian": ( + { + "level": nextdebian_ci_apps_results[app]["level"], + "timestamp": nextdebian_ci_apps_results[app]["timestamp"], + } + if app in nextdebian_ci_apps_results + else None + ), + }, + } + + if infos["git"]["url"].lower().startswith("https://github.com/"): + consolidated_infos[app].update( + get_github_infos( + infos["git"]["url"].lower().replace("https://github.com/", "") + ) + ) + +open(".cache/dashboard.json", "w").write(json.dumps(consolidated_infos)) diff --git a/store/gunicorn.py b/store/gunicorn.py index 5346bc7d..31b9b4e2 100644 --- a/store/gunicorn.py +++ b/store/gunicorn.py @@ -1,13 +1,14 @@ import os + install_dir = os.path.dirname(__file__) -command = f'{install_dir}/venv/bin/gunicorn' +command = f"{install_dir}/venv/bin/gunicorn" pythonpath = install_dir workers = 4 -user = 'appstore' -bind = f'unix:{install_dir}/sock' -pid = '/run/gunicorn/appstore-pid' -errorlog = '/var/log/appstore/error.log' -accesslog = '/var/log/appstore/access.log' +user = "appstore" +bind = f"unix:{install_dir}/sock" +pid = "/run/gunicorn/appstore-pid" +errorlog = "/var/log/appstore/error.log" +accesslog = "/var/log/appstore/access.log" access_log_format = '%({X-Real-IP}i)s %({X-Forwarded-For}i)s %(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"' -loglevel = 'warning' +loglevel = "warning" capture_output = True diff --git a/store/messages.pot b/store/messages.pot index b0b0dbf3..7db085c8 100644 --- a/store/messages.pot +++ b/store/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2024-03-05 19:36+0100\n" +"POT-Creation-Date: 2024-05-09 23:14+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,15 +17,16 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.14.0\n" -#: app.py:150 -msgid "App %(app_id) not found" +#: app.py:162 +#, python-format +msgid "App %(app_id)s not found" msgstr "" -#: app.py:152 +#: app.py:165 msgid "You must be logged in to be able to star an app" msgstr "" -#: app.py:152 app.py:195 app.py:449 templates/wishlist_add.html:33 +#: app.py:167 app.py:212 app.py:530 templates/wishlist_add.html:33 msgid "" "Note that, due to various abuses, we restricted login on the app store to" " 'trust level 1' users.

'Trust level 1' is obtained after " @@ -34,71 +35,71 @@ msgid "" "minutes reading posts." msgstr "" -#: app.py:195 +#: app.py:210 msgid "You must be logged in to submit an app to the wishlist" msgstr "" -#: app.py:207 +#: app.py:225 msgid "Invalid CSRF token, please refresh the page and try again" msgstr "" -#: app.py:228 +#: app.py:263 msgid "" "Proposing wishlist additions is limited to once every 15 days per user. " "Please try again in a few days." msgstr "" -#: app.py:230 +#: app.py:267 msgid "App name should be at least 3 characters" msgstr "" -#: app.py:231 +#: app.py:268 msgid "App name should be less than 30 characters" msgstr "" -#: app.py:234 +#: app.py:271 msgid "App description should be at least 5 characters" msgstr "" -#: app.py:238 +#: app.py:275 msgid "App description should be less than 100 characters" msgstr "" -#: app.py:242 +#: app.py:279 msgid "Upstream code repo URL should be at least 10 characters" msgstr "" -#: app.py:246 +#: app.py:283 msgid "Upstream code repo URL should be less than 150 characters" msgstr "" -#: app.py:250 +#: app.py:287 msgid "License URL should be at least 10 characters" msgstr "" -#: app.py:254 +#: app.py:291 msgid "License URL should be less than 250 characters" msgstr "" -#: app.py:256 +#: app.py:293 msgid "Website URL should be less than 150 characters" msgstr "" -#: app.py:259 +#: app.py:296 msgid "App name contains special characters" msgstr "" -#: app.py:263 +#: app.py:303 msgid "" "Please focus on what the app does, without using marketing, fuzzy terms, " "or repeating that the app is 'free' and 'self-hostable'." msgstr "" -#: app.py:267 +#: app.py:313 msgid "No need to repeat the name of the app. Focus on what the app does." msgstr "" -#: app.py:301 +#: app.py:343 #, python-format msgid "" "An entry with the name %(slug)s already exists in the wishlist, instead, " @@ -106,7 +107,14 @@ msgid "" "interest." msgstr "" -#: app.py:325 +#: app.py:358 +#, python-format +msgid "" +"An app with the name %(slug)s already exists in the catalog, you can see its page here." +msgstr "" + +#: app.py:383 #, python-format msgid "" "Failed to create the pull request to add the app to the wishlist… Maybe " @@ -114,7 +122,7 @@ msgid "" "please report the issue to the YunoHost team." msgstr "" -#: app.py:376 +#: app.py:433 #, python-format msgid "" "Your proposed app has succesfully been submitted. It must now be " @@ -122,7 +130,7 @@ msgid "" "href='%(url)s'>%(url)s" msgstr "" -#: app.py:449 +#: app.py:528 msgid "Unfortunately, login was denied." msgstr "" @@ -194,7 +202,7 @@ msgid "Important infos before installing" msgstr "" #: templates/app.html:124 -msgid "Anti-features" +msgid "Antifeatures" msgstr "" #: templates/app.html:125 @@ -234,47 +242,65 @@ msgstr "" msgid "YunoHost package license" msgstr "" -#: templates/base.html:5 +#: templates/base.html:11 msgid "YunoHost app store" msgstr "" -#: templates/base.html:18 templates/base.html:113 templates/index.html:3 +#: templates/base.html:31 templates/base.html:154 templates/index.html:3 msgid "Home" msgstr "" -#: templates/base.html:27 templates/base.html:122 +#: templates/base.html:40 templates/base.html:163 templates/dash.html:66 msgid "Catalog" msgstr "" -#: templates/base.html:33 templates/base.html:131 +#: templates/base.html:46 templates/base.html:172 msgid "Wishlist" msgstr "" -#: templates/base.html:46 templates/base.html:141 +#: templates/base.html:52 +msgid "Packaging dashboard" +msgstr "" + +#: templates/base.html:57 +msgid "Charts & history" +msgstr "" + +#: templates/base.html:71 templates/base.html:182 msgid "YunoHost documentation" msgstr "" -#: templates/base.html:54 templates/base.html:151 +#: templates/base.html:79 templates/base.html:192 msgid "Login using YunoHost's forum" msgstr "" -#: templates/base.html:86 templates/base.html:179 +#: templates/base.html:111 templates/base.html:120 templates/base.html:220 +#: templates/base.html:229 +msgid "Packaging boards" +msgstr "" + +#: templates/base.html:127 templates/base.html:237 msgid "Logout" msgstr "" -#: templates/base.html:99 +#: templates/base.html:140 msgid "Toggle menu" msgstr "" -#: templates/base.html:197 +#: templates/base.html:255 msgid "" "Made with " "using Flask and TailwindCSS - Source" +"blue-800' href='https://tailwindcss.com/'>TailwindCSS" +msgstr "" + +#: templates/base.html:256 +msgid "Source" +msgstr "" + +#: templates/base.html:257 +msgid "Terms of Services" msgstr "" #: templates/catalog.html:75 templates/catalog.html:80 @@ -293,7 +319,7 @@ msgstr "" msgid "All apps" msgstr "" -#: templates/catalog.html:117 templates/wishlist.html:39 +#: templates/catalog.html:117 templates/dash.html:34 templates/wishlist.html:39 msgid "Sort by" msgstr "" @@ -306,16 +332,16 @@ msgstr "" msgid "Newest" msgstr "" -#: templates/catalog.html:125 templates/wishlist.html:46 +#: templates/catalog.html:125 templates/dash.html:40 templates/wishlist.html:46 msgid "Alphabetical" msgstr "" -#: templates/catalog.html:128 templates/wishlist.html:49 +#: templates/catalog.html:128 templates/dash.html:47 templates/wishlist.html:49 msgid "Requires to be logged-in" msgstr "" -#: templates/catalog.html:130 templates/catalog.html:139 -#: templates/wishlist.html:51 templates/wishlist.html:60 +#: templates/catalog.html:130 templates/catalog.html:139 templates/dash.html:49 +#: templates/dash.html:58 templates/wishlist.html:51 templates/wishlist.html:60 msgid "Show only apps you starred" msgstr "" @@ -349,10 +375,208 @@ msgstr "" #: templates/catalog.html:188 msgid "" -"This means that the developer will no longer update them. We strongly " +"This means that the developer will no longer update them. We strongly " "advise against their installation and advise users to find alternatives." msgstr "" +#: templates/charts.html:5 +msgid "Apps quality level from automatic tests" +msgstr "" + +#: templates/charts.html:9 +msgid "Apps quality level history" +msgstr "" + +#: templates/charts.html:14 +msgid "History" +msgstr "" + +#: templates/charts.html:22 +msgid "Added" +msgstr "" + +#: templates/charts.html:28 +msgid "Repaired" +msgstr "" + +#: templates/charts.html:34 +msgid "Broke" +msgstr "" + +#: templates/charts.html:40 +msgid "Removed" +msgstr "" + +#: templates/charts.html:80 +msgid "Unknown" +msgstr "" + +#: templates/charts.html:81 +msgid "Level 0" +msgstr "" + +#: templates/charts.html:82 +msgid "Level 1" +msgstr "" + +#: templates/charts.html:83 +msgid "Level 2" +msgstr "" + +#: templates/charts.html:84 +msgid "Level 3" +msgstr "" + +#: templates/charts.html:85 +msgid "Level 4" +msgstr "" + +#: templates/charts.html:86 +msgid "Level 5" +msgstr "" + +#: templates/charts.html:87 +msgid "Level 6" +msgstr "" + +#: templates/charts.html:88 +msgid "Level 7" +msgstr "" + +#: templates/charts.html:89 +msgid "Level 8" +msgstr "" + +#: templates/charts.html:107 +#, python-format +msgid "Level %(level)s:" +msgstr "" + +#: templates/charts.html:107 +msgid "Total:" +msgstr "" + +#: templates/charts.html:108 +#, python-format +msgid "Level %(level)s" +msgstr "" + +#: templates/dash.html:3 templates/dash.html:9 +msgid "App packaging dashboard" +msgstr "" + +#: templates/dash.html:11 +msgid "" +"This is where packagers can monitor the status of automatic tests (CI) " +"and ongoing major pull requests accross all apps. If you want to get " +"started with app packaging in YunoHost, please check out the packaging " +"documentation and come say hi to us on the app packaging chatroom!" +msgstr "" + +#: templates/dash.html:17 +msgid "Filter" +msgstr "" + +#: templates/dash.html:23 +msgid "(None)" +msgstr "" + +#: templates/dash.html:24 +msgid "Regressions on main CI" +msgstr "" + +#: templates/dash.html:25 +msgid "Broken / low quality apps" +msgstr "" + +#: templates/dash.html:26 +msgid "Outdated tests on main CI" +msgstr "" + +#: templates/dash.html:27 +msgid "Major regressions on Bookworm CI" +msgstr "" + +#: templates/dash.html:28 +msgid "Apps with testings PRs" +msgstr "" + +#: templates/dash.html:29 +msgid "Apps with autoupdate PRs" +msgstr "" + +#: templates/dash.html:30 +msgid "Packaging v1 apps" +msgstr "" + +#: templates/dash.html:41 +msgid "Quality level" +msgstr "" + +#: templates/dash.html:42 templates/dash.html:173 +msgid "Popularity stars" +msgstr "" + +#: templates/dash.html:43 +msgid "Last update on main/master branch" +msgstr "" + +#: templates/dash.html:44 +msgid "Last update on testing branch" +msgstr "" + +#: templates/dash.html:65 +msgid "App" +msgstr "" + +#: templates/dash.html:67 +msgid "Main CI" +msgstr "" + +#: templates/dash.html:68 +msgid "Bookworm CI" +msgstr "" + +#: templates/dash.html:69 +msgid "Testing PR" +msgstr "" + +#: templates/dash.html:70 +msgid "Autoupdate PR" +msgstr "" + +#: templates/dash.html:102 templates/dash.html:116 templates/dash.html:131 +msgid "Broken" +msgstr "" + +#: templates/dash.html:104 templates/dash.html:118 templates/dash.html:133 +msgid "Low quality" +msgstr "" + +#: templates/dash.html:112 templates/dash.html:127 +#, python-format +msgid "Outdated test (%(days)s days ago)" +msgstr "" + +#: templates/dash.html:150 templates/dash.html:165 +#, python-format +msgid "Inactive (%(days)s days ago)" +msgstr "" + +#: templates/dash.html:177 +msgid "Packaging v1" +msgstr "" + +#: templates/dash.html:180 +msgid "Deprecated" +msgstr "" + +#: templates/dash.html:183 +msgid "Not maintained" +msgstr "" + #: templates/index.html:10 msgid "Application Store" msgstr "" @@ -361,44 +585,10 @@ msgstr "" msgid "Browse all applications" msgstr "" -#: templates/wishlist.html:3 templates/wishlist.html:8 -msgid "Application Wishlist" -msgstr "" - -#: templates/wishlist.html:10 -msgid "" -"The wishlist is the place where people can collectively suggest and vote " -"for apps that they would like to see packaged and made available in " -"YunoHost's official apps catalog. Nevertheless, the fact that apps are " -"listed here should by no mean be interpreted as a fact that the YunoHost " -"project plans to integrate it, and is merely a source of inspiration for " -"packaging volunteers." -msgstr "" - #: templates/wishlist.html:33 templates/wishlist_add.html:3 msgid "Suggest an app" msgstr "" -#: templates/wishlist.html:71 templates/wishlist_add.html:61 -msgid "Name" -msgstr "" - -#: templates/wishlist.html:74 -msgid "Description" -msgstr "" - -#: templates/wishlist.html:102 templates/wishlist.html:103 -msgid "Official website" -msgstr "" - -#: templates/wishlist.html:115 templates/wishlist.html:116 -msgid "Code repository" -msgstr "" - -#: templates/wishlist.html:129 templates/wishlist.html:130 -msgid "Star this app" -msgstr "" - #: templates/wishlist_add.html:8 msgid "Suggest an application to be added to YunoHost's catalog" msgstr "" @@ -417,6 +607,10 @@ msgid "" "send every random nerdy stuff you find on the Internet." msgstr "" +#: templates/wishlist.html:71 templates/wishlist_add.html:61 +msgid "Name" +msgstr "" + #: templates/wishlist_add.html:64 msgid "App's description" msgstr "" @@ -461,3 +655,33 @@ msgstr "" msgid "Submit" msgstr "" +#: templates/wishlist.html:3 templates/wishlist.html:8 +msgid "Application Wishlist" +msgstr "" + +#: templates/wishlist.html:10 +msgid "" +"The wishlist is the place where people can collectively suggest and vote " +"for apps that they would like to see packaged and made available in " +"YunoHost's official apps catalog. Nevertheless, the fact that apps are " +"listed here should by no mean be interpreted as a fact that the YunoHost " +"project plans to integrate it, and is merely a source of inspiration for " +"packaging volunteers." +msgstr "" + +#: templates/wishlist.html:74 +msgid "Description" +msgstr "" + +#: templates/wishlist.html:102 templates/wishlist.html:103 +msgid "Official website" +msgstr "" + +#: templates/wishlist.html:115 templates/wishlist.html:116 +msgid "Code repository" +msgstr "" + +#: templates/wishlist.html:129 templates/wishlist.html:130 +msgid "Star this app" +msgstr "" + diff --git a/store/requirements.txt b/store/requirements.txt index d572e041..34d15c88 100644 --- a/store/requirements.txt +++ b/store/requirements.txt @@ -1,9 +1,32 @@ -Flask==2.3.2 -python-slugify -PyGithub -toml -pycmarkgfm -gunicorn -emoji -Babel -Flask-Babel +Babel==2.14.0 +blinker==1.8.1 +certifi==2024.2.2 +cffi==1.16.0 +charset-normalizer==3.3.2 +click==8.1.7 +cryptography==42.0.5 +Deprecated==1.2.14 +emoji==2.11.1 +Flask==3.0.3 +flask-babel==4.0.0 +gunicorn==22.0.0 +idna==3.7 +itsdangerous==2.2.0 +Jinja2==3.1.4 +MarkupSafe==2.1.5 +packaging==24.0 +pycmarkgfm==1.2.1 +pycparser==2.22 +PyGithub==2.3.0 +PyJWT==2.8.0 +PyNaCl==1.5.0 +python-slugify==8.0.4 +pytz==2024.1 +requests==2.32.0 +text-unidecode==1.3 +toml==0.10.2 +tomlkit==0.12.4 +typing_extensions==4.11.0 +urllib3==2.2.1 +Werkzeug==3.0.3 +wrapt==1.16.0 diff --git a/store/templates/app.html b/store/templates/app.html index c39413ea..0970b720 100644 --- a/store/templates/app.html +++ b/store/templates/app.html @@ -16,7 +16,7 @@ loading="lazy" class="h-12 w-12 rounded-lg object-cover shadow-sm mt-1" > -

12 %}text-2xl{% else %}text-3xl{% endif %} font-bold text-gray-900">{{ infos["manifest"]["name"] }}

+

12 %}text-2xl{% else %}text-3xl{% endif %} font-bold">{{ infos["manifest"]["name"] }}

{% if infos['category'] %} @@ -82,7 +82,7 @@ {{ _("Demo") }} {% endif %} - + Install
with
YunoHost
@@ -121,7 +121,7 @@ {% endif %} {% if infos["antifeatures"] %} -

{{ _("Anti-features") }}

+

{{ _("Antifeatures") }}

{{ _("(This app has features you may not like)") }}

    diff --git a/store/templates/base.html b/store/templates/base.html index 09901b81..0791df62 100644 --- a/store/templates/base.html +++ b/store/templates/base.html @@ -1,3 +1,9 @@ +{% if user and user.get('packaging_enabled') or request.endpoint in ["dash", "charts"] %} + {% set packaging_enabled = True %} +{% else %} + {% set packaging_enabled = False %} +{% endif %} + @@ -7,9 +13,16 @@ + - +
    -
    +
    {% block main %} {% endblock %}
    - diff --git a/store/templates/catalog.html b/store/templates/catalog.html index d07fd883..7beedddb 100644 --- a/store/templates/catalog.html +++ b/store/templates/catalog.html @@ -16,7 +16,7 @@ >
    @@ -27,12 +27,12 @@ src="{{ url_for('static', filename='app_logo_placeholder.png') }}" {% endif %} loading="lazy" - class="h-12 w-12 rounded-lg object-cover shadow-sm mt-1" + class="h-12 w-12 rounded-lg object-cover shadow mt-1" >
    -

    +

    {{ infos['manifest']['name'] }}

    @@ -53,14 +53,16 @@
    -

    +

    {{ infos['manifest']['description']|localize }}

    {% if infos['category'] %} - + {{ catalog['categories'][infos['category']]['title']|localize|lower }} {% endif %} @@ -76,7 +78,7 @@ {% endblock %} {% block main %}
    -

    +

    {{ _("Application Catalog") }}

    @@ -89,8 +91,8 @@ type="text" id="search" placeholder="{{ _('Search for…') }}" - {% if init_search %}value="{{ init_search }}"{% endif %} - class="w-full rounded-md border-gray-200 shadow-sm sm:text-sm py-2 pe-10" + {% if request.args.get("search") %}value="{{ request.args.get("search") }}"{% endif %} + class="w-full sm:text-sm py-2 pe-10" > @@ -102,11 +104,11 @@
    @@ -118,17 +120,17 @@
    -
    +