1
0
Fork 0
mirror of https://github.com/YunoHost/apps.git synced 2024-09-03 20:06:07 +02:00

Merge branch 'YunoHost:master' into master

This commit is contained in:
Gérard Collin 2023-01-06 11:27:54 +01:00 committed by GitHub
commit b5a43fdf1f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
216 changed files with 154 additions and 189 deletions

View file

@ -9,10 +9,25 @@ jobs:
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: Set up Python 3
uses: actions/setup-python@v4 - name: Check JSON validity for apps.json
with:
python-version: '3.10'
- name: Check apps.json
run: | run: |
python -m json.tool apps.json cat apps.json | jq >/dev/null
- name: Check all working apps have consistent app id / app url
run: |
FAULTY_APPS="false";
for LINE in $(cat apps.json | jq -r 'to_entries[] | select ( .value.state=="working" ) | "\(.key)|\(.value.url)"')
do
APP=$(echo $LINE | awk -F'|' '{print $1}')
URL_END=$(echo $LINE | awk -F'/' '{print $NF}')
[ "$APP" == "$(echo $APP | tr [A-Z] [a-z])" ] || { FAULTY_APPS="true"; echo "$APP : app id should be lowercase" >&2; }
[ "$URL_END" == "${APP}_ynh" ] || { FAULTY_APPS="true"; echo "$APP : the url should end with ${APP}_ynh" >&2; }
done
[ $FAULTY_APPS = "false" ]
- name: Check all working apps have a category
run: |
APPS_WITH_NO_CATEGORY=$(jq -e -r '.[] | select ( .state=="working" ) | select ( has("category") | not )' apps.json || true)
[ "$APPS_WITH_NO_CATEGORY" == "" ] || { echo "Some working apps are missing a category: $APPS_WITH_NO_CATEGORY" >&2; false; }

View file

@ -23,26 +23,36 @@ https://app.yunohost.org/default/.
N.B.: The YunoHost project will **NOT** integrate in its catalog applications that are not N.B.: The YunoHost project will **NOT** integrate in its catalog applications that are not
based on free-software upstreams. based on free-software upstreams.
N.B.2: We strongly encourage you to transfer the ownership of your repository to
the YunoHost-Apps organization on GitHub, such that the community will help you
with keeping your app working and up to date with packaging evolutions.
To add your application to the catalog: To add your application to the catalog:
* Fork this repository and edit the [apps.json](https://github.com/YunoHost/apps/tree/master/apps.json) file * Fork this repository and edit the [apps.json](https://github.com/YunoHost/apps/tree/master/apps.json) file
* Add your app's ID and git information at the right alphabetical place * 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's functioning state: `notworking`, `inprogress`, or `working`
* *Do not* add the level entry by yourself. Our automatic test suite ("the CI") will handle it. * Indicate the app category, which you can pick from `categories.yml`
* Indicate any anti-feature that your app may be subject to, see `antifeatures.yml` (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.
* Create a [Pull Request](https://github.com/YunoHost/apps/pulls/) * Create a [Pull Request](https://github.com/YunoHost/apps/pulls/)
App example addition: App example addition:
```json ```json
"wallabag": { "your_app": {
"url": "https://github.com/abeudin/wallabag_ynh", "antifeatures": [
"state": "working" "deprecated-software"
],
"potential_alternative_to": [
"YouTube"
],
"category": "pick_the_appropriate_category",
"state": "working",
"url": "https://github.com/YunoHost-Apps/your_app_ynh"
} }
``` ```
N.B.: We strongly encourage you to transfer the ownership of your repository to N.B: Implicitly, the catalog publishes the `HEAD` of branch `master`
the YunoHost-Apps organization on GitHub, such that the community will help you
with keeping your app working and up to date with packaging evolutions.
N.B.2: Implicitly, the catalog publishes the `HEAD` of branch `master`
(this can be overwritten by adding keys `branch` and `revision`). (this can be overwritten by adding keys `branch` and `revision`).
Therefore, **be careful that any commit on the `master` branch will automatically be published**. Therefore, **be careful that any commit on the `master` branch will automatically be published**.
**We strongly encourage you to develop in separate branches**, and only **We strongly encourage you to develop in separate branches**, and only
@ -50,28 +60,9 @@ merge changes that were carefully tested. Get in touch with the Apps group to
obtain an access to the developer CI where you'll be able to test your app obtain an access to the developer CI where you'll be able to test your app
easily. easily.
### Updating apps' level in the catalog ### Updating apps levels in the catalog
App packagers should *not* manually set their apps' level. The levels of all the apps are automatically updated once per week on Friday. App packagers should *not* manually set their apps' level. The levels of all the apps are automatically updated once per week on Friday, according to the results from the official app CI.
#### Helper script
You can use the <code>add_or_update.py</code> Python script to add or update
your app from one of the 2 JSON files.
Usage:
```bash
./add_or_update.py apps.json [github/gitlab url OR app name [github/gitlab url OR app name [github/gitlab url OR app name ...]]]
```
### How to help translating
Update on Nov. 2020: this part is broken / not maintained anymore for the
moment...
We invite you to use [translate.yunohost.org](https://translate.yunohost.org/)
instead of doing Pull Request for files in `locales` folder.
### Apps flagged as not-maintained ### Apps flagged as not-maintained

View file

@ -1,88 +0,0 @@
#!/usr/bin/env python2
import os
import sys
import json
from urllib2 import urlopen
from urlparse import urlparse
states = {
1: "notworking",
2: "inprogress",
3: "working",
}
if __name__ == '__main__':
if not len(sys.argv[1:]):
print("I need a json file as first argument and a list of github urls")
sys.exit(0)
if len(sys.argv[1:]) < 2:
print("I need a list of github urls or app names after the json file")
sys.exit(0)
if not os.path.exists(sys.argv[1]):
print("The json file '%s' doesn't exist" % sys.argv[1])
content = json.load(open(sys.argv[1], "r"))
for url in sys.argv[2:]:
if not url.startswith("http"):
if url in content:
url = content[url]["url"]
else:
print "App name '%s' not in %s" % (url, sys.argv[1])
sys.exit(1)
if url.endswith("/"):
url = url[:-1]
if url.endswith(".git"):
url = url[:-len(".git")]
if not url.startswith("https://github.com"):
sys.stderr.write("WARNING: url '%s' doesn't starts with https://github.com, we will try with gitlab api\n" % url)
owner, repo = filter(None, url.split("/"))[-2:]
project_name = filter(None, url.split("/"))[-1].replace("_ynh", "")
if url.startswith("https://github.com"):
git_data = json.load(urlopen("https://api.github.com/repos/%(owner)s/%(repo)s/commits" % {"owner": owner, "repo": repo}))
revision = git_data[0]["sha"]
else:
parsed_uri = urlparse(url)
base_url = '{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri)
# Try with gitlab api
git_data = json.load(urlopen("%(base_url)sapi/v4/projects/%(owner)s%%2F%(repo)s/repository/commits/HEAD" % {"base_url": base_url, "owner": owner, "repo": repo}))
revision = git_data["id"]
if project_name not in content:
content[project_name] = {}
else:
print("INFO: project already in '%s', I'm updating it" % sys.argv[1])
content[project_name]["url"] = url
content[project_name]["revision"] = revision
content[project_name]["branch"] = "master"
if sys.argv[1] == "official.json":
content[project_name]["state"] = "validated"
else:
got_state = False
while not got_state:
answer = input("Give me a state for this repository (digit or name) in:\n%s\n\nState: " % "\n".join(["%s: %s" % x for x in sorted(states.items(), key=lambda x: x[0])]) + "\n")
if answer in states:
answer = states[answer]
got_state = True
elif answer in states.values():
got_state = True
else:
print("Invalid state.\n")
content[project_name]["state"] = answer
open(sys.argv[1], "w").write("\n".join(json.dumps(content, indent=4, sort_keys=True).split(" \n")) + "\n")
os.system("git diff")

View file

@ -23,7 +23,7 @@
"category": "system_tools", "category": "system_tools",
"level": 7, "level": 7,
"state": "working", "state": "working",
"url": "https://github.com/YunoHost-Apps/2FAuth_ynh" "url": "https://github.com/YunoHost-Apps/2fauth_ynh"
}, },
"abantecart": { "abantecart": {
"category": "publishing", "category": "publishing",
@ -343,6 +343,15 @@
], ],
"url": "https://github.com/YunoHost-Apps/bookstack_ynh" "url": "https://github.com/YunoHost-Apps/bookstack_ynh"
}, },
"bookwyrm": {
"category": "social_media",
"state": "working",
"maintained": true,
"potential_alternative_to": [
"ActivityPub"
],
"url": "https://github.com/YunoHost-Apps/bookwyrm_ynh"
},
"borg": { "borg": {
"category": "system_tools", "category": "system_tools",
"level": 6, "level": 6,
@ -391,6 +400,17 @@
], ],
"url": "https://github.com/YunoHost-Apps/cachet_ynh" "url": "https://github.com/YunoHost-Apps/cachet_ynh"
}, },
"calckey": {
"category": "social_media",
"state": "working",
"maintained": true,
"potential_alternative_to": [
"Twitter",
"Mastodon",
"Pleroma"
],
"url": "https://github.com/YunoHost-Apps/calckey_ynh"
},
"calibreweb": { "calibreweb": {
"category": "reading", "category": "reading",
"level": 8, "level": 8,
@ -662,7 +682,7 @@
"category": "games", "category": "games",
"level": 8, "level": 8,
"state": "working", "state": "working",
"url": "https://github.com/YunoHost-Apps/Cubiks-2048_ynh" "url": "https://github.com/YunoHost-Apps/cubiks-2048_ynh"
}, },
"cypht": { "cypht": {
"category": "communication", "category": "communication",
@ -861,7 +881,7 @@
], ],
"url": "https://github.com/Jojo144/django_app_ynh" "url": "https://github.com/Jojo144/django_app_ynh"
}, },
"django_example_ynh": { "django_example": {
"category": "dev", "category": "dev",
"level": 7, "level": 7,
"state": "working", "state": "working",
@ -2142,7 +2162,7 @@
"level": 0, "level": 0,
"revision": "a38a83fea289f77910fd98b34ea58eea5f5909db", "revision": "a38a83fea289f77910fd98b34ea58eea5f5909db",
"state": "notworking", "state": "notworking",
"url": "https://github.com/YunoHost-Apps/LBCAlerte_ynh" "url": "https://github.com/YunoHost-Apps/lbcalerte_ynh"
}, },
"leed": { "leed": {
"category": "reading", "category": "reading",
@ -2685,6 +2705,7 @@
"url": "https://github.com/YunoHost-Apps/modernpaste_ynh" "url": "https://github.com/YunoHost-Apps/modernpaste_ynh"
}, },
"mongo-express": { "mongo-express": {
"branch": "main",
"category": "system_tools", "category": "system_tools",
"state": "working", "state": "working",
"subtags": [ "subtags": [
@ -3070,6 +3091,17 @@
"state": "working", "state": "working",
"url": "https://github.com/YunoHost-Apps/openproject_ynh" "url": "https://github.com/YunoHost-Apps/openproject_ynh"
}, },
"opensearch": {
"category": "dev",
"state": "working",
"subtags": [
"programming"
],
"potential_alternative_to": [
"ElasticSearch"
],
"url": "https://github.com/YunoHost-Apps/opensearch_ynh"
},
"opensondage": { "opensondage": {
"category": "productivity_and_management", "category": "productivity_and_management",
"level": 8, "level": 8,
@ -3577,7 +3609,6 @@
"potential_alternative_to": [ "potential_alternative_to": [
"TikTok" "TikTok"
], ],
"state": "working",
"url": "https://github.com/YunoHost-Apps/proxitok_ynh" "url": "https://github.com/YunoHost-Apps/proxitok_ynh"
}, },
"psitransfer": { "psitransfer": {
@ -3731,7 +3762,7 @@
"remotestorage": { "remotestorage": {
"category": "small_utilities", "category": "small_utilities",
"state": "notworking", "state": "notworking",
"url": "https://github.com/YunoHost-Apps/RemoteStorage_ynh" "url": "https://github.com/YunoHost-Apps/remotestorage_ynh"
}, },
"restic": { "restic": {
"category": "system_tools", "category": "system_tools",
@ -3998,7 +4029,7 @@
"category": "small_utilities", "category": "small_utilities",
"level": 7, "level": 7,
"state": "working", "state": "working",
"url": "https://github.com/YunoHost-Apps/Signaturepdf_ynh" "url": "https://github.com/YunoHost-Apps/signaturepdf_ynh"
}, },
"simple-hash-generator": { "simple-hash-generator": {
"category": "small_utilities", "category": "small_utilities",
@ -4022,7 +4053,7 @@
"subtags": [ "subtags": [
"websites" "websites"
], ],
"url": "https://github.com/YunoHost-Apps/SitemagicCMS_ynh" "url": "https://github.com/YunoHost-Apps/sitemagiccms_ynh"
}, },
"slingcode": { "slingcode": {
"category": "dev", "category": "dev",
@ -4166,6 +4197,11 @@
"state": "notworking", "state": "notworking",
"url": "https://github.com/YunoHost-Apps/staticwebapp_ynh" "url": "https://github.com/YunoHost-Apps/staticwebapp_ynh"
}, },
"statping_ng": {
"category": "system_tools",
"state": "working",
"url": "https://github.com/YunoHost-Apps/statping_ng_ynh"
},
"streama": { "streama": {
"category": "multimedia", "category": "multimedia",
"level": 6, "level": 6,
@ -4586,7 +4622,7 @@
"category": "multimedia", "category": "multimedia",
"level": 6, "level": 6,
"state": "working", "state": "working",
"url": "https://github.com/YunoHost-Apps/UMS_ynh" "url": "https://github.com/YunoHost-Apps/ums_ynh"
}, },
"unattended_upgrades": { "unattended_upgrades": {
"category": "system_tools", "category": "system_tools",

View file

@ -1,56 +0,0 @@
import sys
import json
import requests
def get_json(url, verify=True, token=None):
try:
# Retrieve and load manifest
if ".github" in url:
r = requests.get(url, verify=verify, auth=token)
else:
r = requests.get(url, verify=verify)
r.raise_for_status()
return r.json()
except requests.exceptions.RequestException as e:
print("-> Error: unable to request %s, %s" % (url, e))
return None
except ValueError as e:
print("-> Error: unable to decode JSON from %s : %s" % (url, e))
return None
def main(apps):
for app_id, app_data in apps.items():
url = app_data["url"]
github_repo_name = url.split("/")[-1].replace("_ynh", "")
if app_id != github_repo_name:
print "[%s] GitHub repo name is not coherent with app id: '%s' vs '%s' (%s)" % (app_id, app_id, url.split("/")[-1], url)
owner, repo_name = url.split("/")[-2:]
raw_url = "https://raw.githubusercontent.com/%s/%s/%s/manifest.json" % (
owner, repo_name, app_data["revision"]
)
manifest = get_json(raw_url)
if manifest is None:
continue
manifest_id = manifest["id"]
if app_id != manifest_id:
print "[%s] manifest id is different from app id: '%s' vs '%s' (manifest_id" % (app_id, app_id, manifest_id)
if manifest_id != github_repo_name:
print "[%s] manifest id is different from GitHub repo name: '%s' vs '%s' (%s)" % (app_id, manifest_id, url.split("/")[-1], url)
if __name__ == '__main__':
if not sys.argv[1:]:
print "Usage: python check_id_unicity.py list.json"
sys.exit(1)
main(json.load(open(sys.argv[1])))

View file

@ -213,6 +213,16 @@ def build_catalog():
if "manifest" in app and "resources" in app["manifest"]: if "manifest" in app and "resources" in app["manifest"]:
del app["manifest"]["resources"] del app["manifest"]["resources"]
for appid, app in result_dict_with_manifest_v2.items():
appid = appid.lower()
if os.path.exists(f"logos/{appid}.png"):
logo_hash = subprocess.check_output(["sha256sum", f"logos/{appid}.png"]).strip().decode("utf-8").split()[0]
os.system(f"cp logos/{appid}.png builds/default/v3/logos/{logo_hash}.png")
# FIXME: implement something to cleanup old logo stuf in the builds/.../logos/ folder somehow
else:
logo_hash = None
app["logo_hash"] = logo_hash
os.system("mkdir -p ./builds/default/v3/") os.system("mkdir -p ./builds/default/v3/")
with open("builds/default/v3/apps.json", "w") as f: with open("builds/default/v3/apps.json", "w") as f:
f.write( f.write(

BIN
logos/adguardhome.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
logos/adminer.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
logos/aeneria.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
logos/agendav.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
logos/airsonic.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
logos/alltube.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

BIN
logos/ampache.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
logos/anarchism.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
logos/archivebox.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
logos/audiobookshelf.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
logos/backdrop.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
logos/baikal.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
logos/bazarr.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
logos/beehive.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
logos/biboumi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
logos/bicbucstriim.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
logos/blogotext.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

BIN
logos/bludit.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
logos/bookstack.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
logos/borg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
logos/borgserver.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
logos/cachet.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

BIN
logos/calibreweb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
logos/castopod.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
logos/cinny.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
logos/civicrm_drupal7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
logos/cockpit.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
logos/code-server.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
logos/codimd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
logos/collabora.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

BIN
logos/commento.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
logos/concrete5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
logos/converse.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
logos/conversejs.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
logos/couchpotato.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
logos/cowyo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
logos/cryptpad.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

BIN
logos/cypht.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
logos/diagramsnet.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
logos/diaspora.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
logos/discourse.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
logos/dokuwiki.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
logos/dolibarr.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
logos/domoticz.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

BIN
logos/dotclear2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
logos/droppy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
logos/drupal.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
logos/drupal7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
logos/duniter.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
logos/easyappointments.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
logos/ecko.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
logos/elabftw.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
logos/element.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
logos/emailpoubelle.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
logos/ethercalc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
logos/etherpad_mypads.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

BIN
logos/excalidraw.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
logos/ffsync.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

BIN
logos/filebrowser.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
logos/firefly-iii.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

BIN
logos/flarum.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
logos/flood.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

BIN
logos/fluxbb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
logos/focalboard.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
logos/framaforms.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
logos/freshrss.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
logos/friendica.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
logos/funkwhale.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

BIN
logos/ghost.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
logos/gitea.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
logos/gitlab-runner.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9 KiB

BIN
logos/gitlab.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
logos/glowingbear.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
logos/gogs.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
logos/gotify.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
logos/grafana.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
logos/grav.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
logos/grocy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
logos/guacamole.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
logos/halcyon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
logos/headphones.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

BIN
logos/hedgedoc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
logos/hextris.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
logos/homeassistant.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
logos/horde.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
logos/hubzilla.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
logos/huginn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
logos/humhub.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

BIN
logos/ihatemoney.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

BIN
logos/internetarchive.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
logos/invidious.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
logos/invoiceninja.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

BIN
logos/invoiceninja5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

BIN
logos/jackett.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Some files were not shown because too many files have changed in this diff Show more