diff --git a/blueprints/duplicati/docker-compose.yml b/blueprints/duplicati/docker-compose.yml new file mode 100644 index 00000000..b731a6a1 --- /dev/null +++ b/blueprints/duplicati/docker-compose.yml @@ -0,0 +1,28 @@ +services: + duplicati: + image: 'lscr.io/linuxserver/duplicati:latest' + environment: + - SERVICE_URL_DUPLICATI_8200 + - PUID=0 + - PGID=0 + - 'TZ=${TZ:-Europe/London}' + - 'SETTINGS_ENCRYPTION_KEY=${SERVICE_PASSWORD_ENCRYPT}' + - 'DUPLICATI__WEBSERVICE_PASSWORD=${SERVICE_PASSWORD_WEB}' + volumes: + - 'duplicati-config:/config' + - '/path/to/backups:/backups' + - '/path/to/source:/source' + - '/path/to/restore:/restore' + + healthcheck: + test: + - CMD + - curl + - '-f' + - 'http://127.0.0.1:8200' + interval: 2s + timeout: 10s + retries: 15 + +volumes: + duplicati-config: {} diff --git a/blueprints/duplicati/logo.png b/blueprints/duplicati/logo.png new file mode 100644 index 00000000..739cab9c Binary files /dev/null and b/blueprints/duplicati/logo.png differ diff --git a/blueprints/duplicati/template.toml b/blueprints/duplicati/template.toml new file mode 100644 index 00000000..42b90ece --- /dev/null +++ b/blueprints/duplicati/template.toml @@ -0,0 +1,13 @@ +[variables] +main_domain = "${domain}" + +[config] +[[config.domains]] +serviceName = "duplicati" +port = 8200 +host = "${main_domain}" + +[config.env] +TZ = "Europe/Vienna" +SETTINGS_ENCRYPTION_KEY = "${password:32}" +DUPLICATI__WEBSERVICE_PASSWORD = "${password:16}" diff --git a/meta.json b/meta.json index 3ae0cb5e..04a298a3 100644 --- a/meta.json +++ b/meta.json @@ -10,10 +10,7 @@ "website": "https://ackee.electerious.com/", "docs": "https://docs.ackee.electerious.com/" }, - "tags": [ - "analytics", - "self-hosted" - ] + "tags": ["analytics", "self-hosted"] }, { "id": "activepieces", @@ -26,11 +23,7 @@ "website": "https://www.activepieces.com/", "docs": "https://www.activepieces.com/docs" }, - "tags": [ - "automation", - "workflow", - "no-code" - ] + "tags": ["automation", "workflow", "no-code"] }, { "id": "actualbudget", @@ -43,11 +36,7 @@ "website": "https://actualbudget.org", "docs": "https://actualbudget.org/docs" }, - "tags": [ - "budgeting", - "finance", - "money" - ] + "tags": ["budgeting", "finance", "money"] }, { "id": "adguardhome", @@ -60,12 +49,7 @@ "website": "https://adguard.com", "docs": "https://github.com/AdguardTeam/AdGuardHome/wiki" }, - "tags": [ - "privacy", - "security", - "dns", - "ad-blocking" - ] + "tags": ["privacy", "security", "dns", "ad-blocking"] }, { "id": "adminer", @@ -78,12 +62,7 @@ "website": "https://www.adminer.org/", "docs": "https://www.adminer.org/en/plugins/" }, - "tags": [ - "databases", - "developer-tools", - "mysql", - "postgresql" - ] + "tags": ["databases", "developer-tools", "mysql", "postgresql"] }, { "id": "adventurelog", @@ -96,13 +75,7 @@ "website": "https://adventurelog.app/", "docs": "https://adventurelog.app/docs/" }, - "tags": [ - "activity", - "maps", - "django", - "react", - "postgres" - ] + "tags": ["activity", "maps", "django", "react", "postgres"] }, { "id": "affinepro", @@ -133,14 +106,7 @@ "website": "https://www.ispyconnect.com/", "docs": "https://www.ispyconnect.com/userguide-agent-dvr.aspx" }, - "tags": [ - "surveillance", - "security", - "video", - "monitoring", - "dvr", - "camera" - ] + "tags": ["surveillance", "security", "video", "monitoring", "dvr", "camera"] }, { "id": "akaunting", @@ -153,13 +119,7 @@ "website": "https://akaunting.com", "docs": "https://akaunting.com/docs" }, - "tags": [ - "finance", - "accounting", - "php", - "mariadb", - "self-hosted" - ] + "tags": ["finance", "accounting", "php", "mariadb", "self-hosted"] }, { "id": "alist", @@ -172,11 +132,7 @@ "website": "https://alistgo.com/", "docs": "https://alistgo.com/guide/install/docker.html" }, - "tags": [ - "file", - "webdav", - "storage" - ] + "tags": ["file", "webdav", "storage"] }, { "id": "alltube", @@ -189,11 +145,7 @@ "website": "https://github.com/Rudloff/alltube", "docs": "https://github.com/Rudloff/alltube/wiki" }, - "tags": [ - "media", - "video", - "downloader" - ] + "tags": ["media", "video", "downloader"] }, { "id": "ampache", @@ -206,11 +158,7 @@ "website": "http://ampache.org/", "docs": "https://github.com/ampache/ampache/wiki" }, - "tags": [ - "media", - "music", - "streaming" - ] + "tags": ["media", "music", "streaming"] }, { "id": "anonupload", @@ -223,10 +171,7 @@ "docs": "https://github.com/Supernova3339/anonupload/blob/main/env.md", "website": "https://anonupload.com/" }, - "tags": [ - "file-sharing", - "privacy" - ] + "tags": ["file-sharing", "privacy"] }, { "id": "anse", @@ -239,12 +184,7 @@ "website": "https://anse.app/", "docs": "https://github.com/ddiu8081/anse#readme" }, - "tags": [ - "ai", - "chatbot", - "openai", - "ui" - ] + "tags": ["ai", "chatbot", "openai", "ui"] }, { "id": "answer", @@ -257,10 +197,7 @@ "website": "https://answer.apache.org/", "docs": "https://answer.apache.org/docs" }, - "tags": [ - "q&a", - "self-hosted" - ] + "tags": ["q&a", "self-hosted"] }, { "id": "anubis", @@ -273,10 +210,7 @@ "website": "https://anubis.techaro.lol", "docs": "https://anubis.techaro.lol/docs/" }, - "tags": [ - "self-hosted", - "bot-protection" - ] + "tags": ["self-hosted", "bot-protection"] }, { "id": "anythingllm", @@ -289,11 +223,7 @@ "website": "https://useanything.com", "docs": "https://github.com/Mintplex-Labs/anything-llm/tree/master/docs" }, - "tags": [ - "ai", - "llm", - "chatbot" - ] + "tags": ["ai", "llm", "chatbot"] }, { "id": "anytype", @@ -306,11 +236,7 @@ "docs": "https://doc.anytype.io/anytype-docs", "website": "https://anytype.io/" }, - "tags": [ - "note-taking", - "local-first", - "peer-to-peer" - ] + "tags": ["note-taking", "local-first", "peer-to-peer"] }, { "id": "appflowy", @@ -342,10 +268,7 @@ "website": "https://github.com/caronc/apprise-api", "docs": "https://github.com/caronc/apprise-api/wiki" }, - "tags": [ - "notifications", - "api" - ] + "tags": ["notifications", "api"] }, { "id": "appsmith", @@ -358,9 +281,7 @@ "website": "https://appsmith.com/", "docs": "https://docs.appsmith.com/" }, - "tags": [ - "cms" - ] + "tags": ["cms"] }, { "id": "appwrite", @@ -373,13 +294,7 @@ "docs": "https://appwrite.io/docs" }, "logo": "appwrite.svg", - "tags": [ - "database", - "firebase", - "mariadb", - "hosting", - "self-hosted" - ] + "tags": ["database", "firebase", "mariadb", "hosting", "self-hosted"] }, { "id": "aptabase", @@ -392,10 +307,7 @@ "website": "https://aptabase.com/", "docs": "https://github.com/aptabase/aptabase/blob/main/README.md" }, - "tags": [ - "analytics", - "self-hosted" - ] + "tags": ["analytics", "self-hosted"] }, { "id": "arangodb", @@ -408,11 +320,7 @@ "website": "https://www.arangodb.com/", "docs": "https://www.arangodb.com/docs/" }, - "tags": [ - "database", - "graph-database", - "nosql" - ] + "tags": ["database", "graph-database", "nosql"] }, { "id": "argilla", @@ -425,11 +333,7 @@ "website": "https://www.argilla.io/", "docs": "https://docs.argilla.io/" }, - "tags": [ - "machine-learning", - "data-labeling", - "ai" - ] + "tags": ["machine-learning", "data-labeling", "ai"] }, { "id": "audiobookshelf", @@ -442,11 +346,7 @@ "website": "https://www.audiobookshelf.org", "docs": "https://www.audiobookshelf.org/docs" }, - "tags": [ - "media", - "audiobooks", - "podcasts" - ] + "tags": ["media", "audiobooks", "podcasts"] }, { "id": "authelia", @@ -501,11 +401,7 @@ "website": "https://authorizer.dev", "docs": "https://docs.authorizer.dev/" }, - "tags": [ - "authentication", - "authorization", - "security" - ] + "tags": ["authentication", "authorization", "security"] }, { "id": "autobase", @@ -518,13 +414,7 @@ "docs": "https://autobase.tech/docs" }, "logo": "autobase.svg", - "tags": [ - "database", - "postgres", - "automation", - "self-hosted", - "dbaas" - ] + "tags": ["database", "postgres", "automation", "self-hosted", "dbaas"] }, { "id": "automatisch", @@ -537,11 +427,7 @@ "website": "https://automatisch.io/docs", "docs": "https://automatisch.io/docs" }, - "tags": [ - "automation", - "workflow", - "integration" - ] + "tags": ["automation", "workflow", "integration"] }, { "id": "azuracast", @@ -574,11 +460,7 @@ "website": "https://babybuddy.app", "docs": "https://docs.babybuddy.app" }, - "tags": [ - "parenting", - "tracking", - "family" - ] + "tags": ["parenting", "tracking", "family"] }, { "id": "backrest", @@ -591,9 +473,7 @@ "docs": "https://garethgeorge.github.io/backrest/introduction/getting-started" }, "logo": "backrest.svg", - "tags": [ - "backup" - ] + "tags": ["backup"] }, { "id": "baikal", @@ -606,12 +486,7 @@ "github": "https://sabre.io/baikal/", "docs": "https://sabre.io/baikal/install/" }, - "tags": [ - "calendar", - "contacts", - "caldav", - "carddav" - ] + "tags": ["calendar", "contacts", "caldav", "carddav"] }, { "id": "barrage", @@ -624,11 +499,7 @@ "website": "https://github.com/maulik9898/barrage", "docs": "https://github.com/maulik9898/barrage/blob/main/README.md" }, - "tags": [ - "torrents", - "deluge", - "mobile" - ] + "tags": ["torrents", "deluge", "mobile"] }, { "id": "baserow", @@ -641,9 +512,7 @@ "website": "https://baserow.io/", "docs": "https://baserow.io/docs/index" }, - "tags": [ - "database" - ] + "tags": ["database"] }, { "id": "bazarr", @@ -656,11 +525,7 @@ "website": "https://www.bazarr.media/", "docs": "https://www.bazarr.media/docs" }, - "tags": [ - "subtitles", - "sonarr", - "radarr" - ] + "tags": ["subtitles", "sonarr", "radarr"] }, { "id": "bentopdf", @@ -673,12 +538,7 @@ "website": "https://bentopdf.com/", "docs": "https://github.com/bentopdf/bentopdf#readme" }, - "tags": [ - "pdf", - "converter", - "api", - "utility" - ] + "tags": ["pdf", "converter", "api", "utility"] }, { "id": "beszel", @@ -691,11 +551,7 @@ "website": "https://beszel.dev", "docs": "https://beszel.dev/guide/getting-started" }, - "tags": [ - "monitoring", - "docker", - "alerts" - ] + "tags": ["monitoring", "docker", "alerts"] }, { "id": "bigcapital", @@ -728,11 +584,7 @@ "website": "https://www.blender.org/", "docs": "https://docs.blender.org/" }, - "tags": [ - "3d", - "rendering", - "animation" - ] + "tags": ["3d", "rendering", "animation"] }, { "id": "blinko", @@ -745,12 +597,7 @@ "website": "https://blinko.space/", "docs": "https://docs.blinko.space/" }, - "tags": [ - "productivity", - "organization", - "workflow", - "nextjs" - ] + "tags": ["productivity", "organization", "workflow", "nextjs"] }, { "id": "bluesky-pds", @@ -763,12 +610,7 @@ "website": "https://bsky.social/about", "docs": "https://github.com/bluesky-social/pds" }, - "tags": [ - "bluesky", - "pds", - "data", - "server" - ] + "tags": ["bluesky", "pds", "data", "server"] }, { "id": "bolt.diy", @@ -781,14 +623,7 @@ "website": "https://stackblitz-labs.github.io/bolt.diy/", "docs": "https://stackblitz-labs.github.io/bolt.diy/" }, - "tags": [ - "ai", - "self-hosted", - "development", - "chatbot", - "ide", - "llm" - ] + "tags": ["ai", "self-hosted", "development", "chatbot", "ide", "llm"] }, { "id": "booklore", @@ -801,12 +636,7 @@ "website": "https://github.com/booklore-app/BookLore", "docs": "https://github.com/booklore-app/BookLore/tree/develop/docs" }, - "tags": [ - "books", - "library", - "database", - "mariadb" - ] + "tags": ["books", "library", "database", "mariadb"] }, { "id": "bookstack", @@ -819,10 +649,7 @@ "website": "https://www.bookstackapp.com", "docs": "https://www.bookstackapp.com/docs" }, - "tags": [ - "documentation", - "self-hosted" - ] + "tags": ["documentation", "self-hosted"] }, { "id": "borgitory", @@ -835,12 +662,7 @@ "website": "https://github.com/mlapaglia/borgitory", "docs": "https://github.com/mlapaglia/borgitory" }, - "tags": [ - "backup", - "borg", - "archive", - "self-hosted" - ] + "tags": ["backup", "borg", "archive", "self-hosted"] }, { "id": "botpress", @@ -853,10 +675,7 @@ "website": "https://botpress.com", "docs": "https://botpress.com/docs" }, - "tags": [ - "ai", - "self-hosted" - ] + "tags": ["ai", "self-hosted"] }, { "id": "browserless", @@ -869,10 +688,7 @@ "website": "https://www.browserless.io/", "docs": "https://docs.browserless.io/" }, - "tags": [ - "browser", - "automation" - ] + "tags": ["browser", "automation"] }, { "id": "budget-board", @@ -885,13 +701,7 @@ "website": "https://budgetboard.net/", "docs": "https://budgetboard.net/" }, - "tags": [ - "finance", - "postgres", - "self-hosted", - "docker", - "compose" - ] + "tags": ["finance", "postgres", "self-hosted", "docker", "compose"] }, { "id": "budibase", @@ -904,12 +714,7 @@ "website": "https://budibase.com/", "docs": "https://docs.budibase.com/docs/" }, - "tags": [ - "database", - "low-code", - "nocode", - "applications" - ] + "tags": ["database", "low-code", "nocode", "applications"] }, { "id": "bugsink", @@ -922,11 +727,7 @@ "website": "https://www.bugsink.com/", "docs": "https://www.bugsink.com/docs/" }, - "tags": [ - "hosting", - "self-hosted", - "development" - ] + "tags": ["hosting", "self-hosted", "development"] }, { "id": "bytebase", @@ -939,10 +740,7 @@ "website": "https://www.bytebase.com", "docs": "https://www.bytebase.com/docs" }, - "tags": [ - "database", - "self-hosted" - ] + "tags": ["database", "self-hosted"] }, { "id": "bytestash", @@ -955,10 +753,7 @@ "website": "https://github.com/jordan-dalby/ByteStash", "docs": "https://github.com/jordan-dalby/ByteStash" }, - "tags": [ - "file-storage", - "self-hosted" - ] + "tags": ["file-storage", "self-hosted"] }, { "id": "calcom", @@ -971,10 +766,7 @@ "docs": "https://cal.com/docs" }, "logo": "calcom.jpg", - "tags": [ - "scheduling", - "booking" - ] + "tags": ["scheduling", "booking"] }, { "id": "calibre", @@ -987,10 +779,7 @@ "website": "https://calibre-ebook.com/", "docs": "https://manual.calibre-ebook.com/" }, - "tags": [ - "Documents", - "E-Commerce" - ] + "tags": ["Documents", "E-Commerce"] }, { "id": "calibre-web", @@ -1003,12 +792,7 @@ "website": "https://github.com/janeczku/calibre-web", "docs": "https://github.com/janeczku/calibre-web/wiki" }, - "tags": [ - "ebooks", - "media", - "library", - "self-hosted" - ] + "tags": ["ebooks", "media", "library", "self-hosted"] }, { "id": "capso", @@ -1021,13 +805,7 @@ "docs": "https://cap.so/docs/" }, "logo": "capso.png", - "tags": [ - "web", - "s3", - "mysql", - "development", - "self-hosted" - ] + "tags": ["web", "s3", "mysql", "development", "self-hosted"] }, { "id": "carbone", @@ -1040,12 +818,7 @@ "website": "https://carbone.io/", "docs": "https://carbone.io/documentation/design/overview/getting-started.html" }, - "tags": [ - "Document Generation", - "Automation", - "Reporting", - "Productivity" - ] + "tags": ["Document Generation", "Automation", "Reporting", "Productivity"] }, { "id": "casdoor", @@ -1081,11 +854,7 @@ "website": "https://changedetection.io", "docs": "https://github.com/dgtlmoon/changedetection.io/wiki" }, - "tags": [ - "Monitoring", - "Data", - "Notifications" - ] + "tags": ["Monitoring", "Data", "Notifications"] }, { "id": "chatwoot", @@ -1098,11 +867,7 @@ "website": "https://www.chatwoot.com", "docs": "https://www.chatwoot.com/docs" }, - "tags": [ - "support", - "chat", - "customer-service" - ] + "tags": ["support", "chat", "customer-service"] }, { "id": "checkcle", @@ -1115,11 +880,7 @@ "website": "https://operacle.com/", "docs": "https://github.com/Operacle/checkcle#readme" }, - "tags": [ - "security", - "compliance", - "monitoring" - ] + "tags": ["security", "compliance", "monitoring"] }, { "id": "checkmate", @@ -1132,11 +893,7 @@ "website": "https://checkmate.so/", "docs": "https://docs.checkmate.so" }, - "tags": [ - "self-hosted", - "monitoring", - "uptime" - ] + "tags": ["self-hosted", "monitoring", "uptime"] }, { "id": "chevereto", @@ -1168,11 +925,7 @@ "website": "https://chibisafe.app", "docs": "https://chibisafe.app/docs/intro" }, - "tags": [ - "media system", - "storage", - "file-sharing" - ] + "tags": ["media system", "storage", "file-sharing"] }, { "id": "chiefonboarding", @@ -1204,13 +957,7 @@ "website": "https://www.chirpstack.io/", "docs": "https://www.chirpstack.io/docs/" }, - "tags": [ - "iot", - "lorawan", - "network-server", - "gateway", - "monitoring" - ] + "tags": ["iot", "lorawan", "network-server", "gateway", "monitoring"] }, { "id": "chromium", @@ -1223,11 +970,7 @@ "docs": "https://docs.linuxserver.io/images/docker-chromium", "website": "https://docs.linuxserver.io/images/docker-chromium" }, - "tags": [ - "browser", - "development", - "web" - ] + "tags": ["browser", "development", "web"] }, { "id": "classicpress", @@ -1240,11 +983,7 @@ "website": "https://www.classicpress.net/", "docs": "https://docs.classicpress.net/" }, - "tags": [ - "cms", - "wordpress", - "content-management" - ] + "tags": ["cms", "wordpress", "content-management"] }, { "id": "clickhouse", @@ -1257,13 +996,7 @@ "website": "https://clickhouse.com/", "docs": "https://clickhouse.com/docs" }, - "tags": [ - "self-hosted", - "open-source", - "database", - "olap", - "analytics" - ] + "tags": ["self-hosted", "open-source", "database", "olap", "analytics"] }, { "id": "cloud9", @@ -1276,11 +1009,7 @@ "website": "https://aws.amazon.com/cloud9/", "docs": "https://docs.aws.amazon.com/cloud9/" }, - "tags": [ - "ide", - "development", - "cloud" - ] + "tags": ["ide", "development", "cloud"] }, { "id": "cloudcommander", @@ -1293,11 +1022,7 @@ "website": "https://cloudcmd.io", "docs": "https://cloudcmd.io/#install" }, - "tags": [ - "file-manager", - "web-based", - "console" - ] + "tags": ["file-manager", "web-based", "console"] }, { "id": "cloudflare-ddns", @@ -1310,11 +1035,7 @@ "website": "https://github.com/favonia/cloudflare-ddns", "docs": "https://github.com/favonia/cloudflare-ddns" }, - "tags": [ - "cloud", - "networking", - "ddns" - ] + "tags": ["cloud", "networking", "ddns"] }, { "id": "cloudflared", @@ -1327,12 +1048,7 @@ "website": "https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/", "docs": "https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/" }, - "tags": [ - "cloud", - "networking", - "security", - "tunnel" - ] + "tags": ["cloud", "networking", "security", "tunnel"] }, { "id": "cloudreve", @@ -1345,12 +1061,7 @@ "website": "https://cloudreve.org", "docs": "https://docs.cloudreve.org" }, - "tags": [ - "storage", - "file-sharing", - "cloud", - "self-hosted" - ] + "tags": ["storage", "file-sharing", "cloud", "self-hosted"] }, { "id": "cockpit", @@ -1363,11 +1074,7 @@ "website": "https://getcockpit.com", "docs": "https://getcockpit.com/documentation" }, - "tags": [ - "cms", - "content-management", - "api" - ] + "tags": ["cms", "content-management", "api"] }, { "id": "coder", @@ -1380,11 +1087,7 @@ "website": "https://coder.com/", "docs": "https://coder.com/docs" }, - "tags": [ - "self-hosted", - "open-source", - "builder" - ] + "tags": ["self-hosted", "open-source", "builder"] }, { "id": "codex-docs", @@ -1397,11 +1100,7 @@ "website": "https://codex.so", "docs": "https://docs.codex.so" }, - "tags": [ - "documentation", - "development", - "collaboration" - ] + "tags": ["documentation", "development", "collaboration"] }, { "id": "colanode", @@ -1414,11 +1113,7 @@ "website": "https://colanode.com", "docs": "https://colanode.com/docs/" }, - "tags": [ - "documentation", - "knowledge-base", - "collaboration" - ] + "tags": ["documentation", "knowledge-base", "collaboration"] }, { "id": "collabora-office", @@ -1431,11 +1126,7 @@ "website": "https://collaboraonline.com", "docs": "https://sdk.collaboraonline.com/docs" }, - "tags": [ - "office", - "documents", - "collaboration" - ] + "tags": ["office", "documents", "collaboration"] }, { "id": "commafeed", @@ -1448,11 +1139,7 @@ "website": "https://www.commafeed.com/", "docs": "https://github.com/Athou/commafeed/wiki" }, - "tags": [ - "feed-reader", - "news-aggregator", - "rss" - ] + "tags": ["feed-reader", "news-aggregator", "rss"] }, { "id": "commento", @@ -1465,11 +1152,7 @@ "github": "https://github.com/souramoo/commentoplusplus" }, "logo": "logo.png", - "tags": [ - "comments", - "discussion", - "website" - ] + "tags": ["comments", "discussion", "website"] }, { "id": "commentoplusplus", @@ -1482,11 +1165,7 @@ "github": "https://github.com/souramoo/commentoplusplus" }, "logo": "logo.png", - "tags": [ - "comments", - "website", - "open-source" - ] + "tags": ["comments", "website", "open-source"] }, { "id": "conduit", @@ -1499,10 +1178,7 @@ "website": "https://conduit.rs/", "docs": "https://docs.conduit.rs/" }, - "tags": [ - "matrix", - "communication" - ] + "tags": ["matrix", "communication"] }, { "id": "conduwuit", @@ -1515,13 +1191,7 @@ "website": "https://conduwuit.puppyirl.gay", "docs": "https://conduwuit.puppyirl.gay/configuration.html" }, - "tags": [ - "backend", - "chat", - "communication", - "matrix", - "server" - ] + "tags": ["backend", "chat", "communication", "matrix", "server"] }, { "id": "confluence", @@ -1552,11 +1222,7 @@ "website": "https://github.com/c4illin/ConvertX", "docs": "https://github.com/c4illin/ConvertX#environment-variables" }, - "tags": [ - "media", - "converter", - "ffmpeg" - ] + "tags": ["media", "converter", "ffmpeg"] }, { "id": "convex", @@ -1569,11 +1235,7 @@ "website": "https://www.convex.dev/", "docs": "https://www.convex.dev/docs" }, - "tags": [ - "backend", - "database", - "api" - ] + "tags": ["backend", "database", "api"] }, { "id": "cookie-cloud", @@ -1586,12 +1248,7 @@ "website": "https://github.com/easychen/cookiecloud", "docs": "https://github.com/easychen/cookiecloud#readme" }, - "tags": [ - "cookies", - "sync", - "selfhosted", - "privacy" - ] + "tags": ["cookies", "sync", "selfhosted", "privacy"] }, { "id": "coralproject", @@ -1604,11 +1261,7 @@ "github": "https://github.com/coralproject/talk" }, "logo": "logo.png", - "tags": [ - "communication", - "community", - "privacy" - ] + "tags": ["communication", "community", "privacy"] }, { "id": "couchdb", @@ -1621,10 +1274,7 @@ "website": "https://couchdb.apache.org/", "docs": "https://docs.couchdb.org/en/stable/" }, - "tags": [ - "database", - "storage" - ] + "tags": ["database", "storage"] }, { "id": "crawl4ai", @@ -1637,13 +1287,7 @@ "website": "https://crawl4ai.com", "docs": "https://github.com/unclecode/crawl4ai#readme" }, - "tags": [ - "crawler", - "scraping", - "AI", - "LLM", - "API" - ] + "tags": ["crawler", "scraping", "AI", "LLM", "API"] }, { "id": "crowdsec", @@ -1656,10 +1300,7 @@ "website": "https://crowdsec.net/", "docs": "https://docs.crowdsec.net" }, - "tags": [ - "security", - "firewall" - ] + "tags": ["security", "firewall"] }, { "id": "cup", @@ -1672,13 +1313,7 @@ "website": "https://cup.sh", "docs": "https://github.com/sergi0g/cup" }, - "tags": [ - "docker", - "container", - "management", - "ui", - "self-hosted" - ] + "tags": ["docker", "container", "management", "ui", "self-hosted"] }, { "id": "cyberchef", @@ -1691,11 +1326,7 @@ "website": "https://gchq.github.io/CyberChef/", "docs": "https://github.com/gchq/CyberChef/wiki" }, - "tags": [ - "security", - "encryption", - "data-analysis" - ] + "tags": ["security", "encryption", "data-analysis"] }, { "id": "dashy", @@ -1708,12 +1339,7 @@ "website": "https://dashy.to/", "docs": "https://github.com/Lissy93/dashy/tree/master/docs" }, - "tags": [ - "dashboard", - "monitoring", - "self-hosted", - "homelab" - ] + "tags": ["dashboard", "monitoring", "self-hosted", "homelab"] }, { "id": "datalens", @@ -1726,12 +1352,7 @@ "website": "https://datalens.tech/", "docs": "https://datalens.tech/docs/" }, - "tags": [ - "analytics", - "self-hosted", - "bi", - "monitoring" - ] + "tags": ["analytics", "self-hosted", "bi", "monitoring"] }, { "id": "directory-lister", @@ -1744,11 +1365,7 @@ "website": "https://www.directorylister.com/", "docs": "https://docs.directorylister.com/" }, - "tags": [ - "file-manager", - "directory-listing", - "php" - ] + "tags": ["file-manager", "directory-listing", "php"] }, { "id": "directus", @@ -1761,9 +1378,7 @@ "website": "https://directus.io/", "docs": "https://docs.directus.io/" }, - "tags": [ - "cms" - ] + "tags": ["cms"] }, { "id": "discord-tickets", @@ -1776,11 +1391,7 @@ "website": "https://discordtickets.app", "docs": "https://discordtickets.app/self-hosting/installation/docker/" }, - "tags": [ - "discord", - "tickets", - "support" - ] + "tags": ["discord", "tickets", "support"] }, { "id": "discourse", @@ -1793,11 +1404,7 @@ "website": "https://www.discourse.org/", "docs": "https://meta.discourse.org/" }, - "tags": [ - "forum", - "community", - "discussion" - ] + "tags": ["forum", "community", "discussion"] }, { "id": "docling-serve", @@ -1811,14 +1418,7 @@ "docs": "https://docling-project.github.io/docling-serve/", "dockerhub": "https://quay.io/repository/docling-project/docling-serve" }, - "tags": [ - "document-processing", - "api", - "ai", - "conversion", - "pdf", - "office" - ] + "tags": ["document-processing", "api", "ai", "conversion", "pdf", "office"] }, { "id": "docmost", @@ -1831,11 +1431,7 @@ "website": "https://docmost.com/", "docs": "https://docmost.com/docs/" }, - "tags": [ - "self-hosted", - "open-source", - "manager" - ] + "tags": ["self-hosted", "open-source", "manager"] }, { "id": "documenso", @@ -1848,9 +1444,7 @@ "docs": "https://documenso.com/docs" }, "logo": "documenso.png", - "tags": [ - "document-signing" - ] + "tags": ["document-signing"] }, { "id": "docuseal", @@ -1863,9 +1457,7 @@ "website": "https://www.docuseal.com/", "docs": "https://www.docuseal.com/" }, - "tags": [ - "document-signing" - ] + "tags": ["document-signing"] }, { "id": "dokploy-prom-monitoring-extension", @@ -1898,13 +1490,7 @@ "website": "https://www.dolibarr.org/", "docs": "https://wiki.dolibarr.org/" }, - "tags": [ - "erp", - "crm", - "business", - "management", - "invoicing" - ] + "tags": ["erp", "crm", "business", "management", "invoicing"] }, { "id": "domain-locker", @@ -1917,12 +1503,7 @@ "website": "https://domain-locker.com/", "docs": "https://github.com/Lissy93/domain-locker#readme" }, - "tags": [ - "domains", - "monitoring", - "utilities", - "postgres" - ] + "tags": ["domains", "monitoring", "utilities", "postgres"] }, { "id": "doublezero", @@ -1935,9 +1516,7 @@ "website": "https://www.double-zero.cloud/", "docs": "https://github.com/technomancy-dev/00" }, - "tags": [ - "email" - ] + "tags": ["email"] }, { "id": "dozzle", @@ -1950,11 +1529,7 @@ "website": "https://dozzle.dev", "docs": "https://dozzle.dev/docs" }, - "tags": [ - "monitoring", - "logs", - "docker" - ] + "tags": ["monitoring", "logs", "docker"] }, { "id": "dragonfly-db", @@ -1967,10 +1542,7 @@ "website": "https://www.dragonflydb.io/", "docs": "https://www.dragonflydb.io/docs" }, - "tags": [ - "database", - "redis" - ] + "tags": ["database", "redis"] }, { "id": "drawio", @@ -1983,10 +1555,7 @@ "website": "https://draw.io/", "docs": "https://www.drawio.com/doc/" }, - "tags": [ - "drawing", - "diagrams" - ] + "tags": ["drawing", "diagrams"] }, { "id": "drawnix", @@ -1999,10 +1568,7 @@ "website": "https://hub.docker.com/r/pubuzhixing/drawnix", "docs": "https://hub.docker.com/r/pubuzhixing/drawnix" }, - "tags": [ - "visualization", - "content-generation" - ] + "tags": ["visualization", "content-generation"] }, { "id": "drizzle-gateway", @@ -2015,10 +1581,7 @@ "website": "https://drizzle-team.github.io/", "docs": "https://drizzle-team.github.io/docs" }, - "tags": [ - "database", - "gateway" - ] + "tags": ["database", "gateway"] }, { "id": "dumbassets", @@ -2031,11 +1594,7 @@ "website": "https://www.dumbware.io/software/DumbAssets/", "docs": "https://github.com/dumbwareio/dumbassets" }, - "tags": [ - "asset-tracking", - "self-hosted", - "simple" - ] + "tags": ["asset-tracking", "self-hosted", "simple"] }, { "id": "dumbbudget", @@ -2048,12 +1607,7 @@ "website": "https://www.dumbware.io/software/DumbBudget/", "docs": "https://github.com/dumbwareio/dumbbudget" }, - "tags": [ - "budget", - "finance", - "self-hosted", - "simple" - ] + "tags": ["budget", "finance", "self-hosted", "simple"] }, { "id": "dumbdrop", @@ -2066,11 +1620,7 @@ "website": "https://www.dumbware.io/software/DumbDrop/", "docs": "https://github.com/dumbwareio/dumbdrop" }, - "tags": [ - "file-sharing", - "self-hosted", - "simple" - ] + "tags": ["file-sharing", "self-hosted", "simple"] }, { "id": "dumbpad", @@ -2083,11 +1633,20 @@ "website": "https://www.dumbware.io/software/DumbPad/", "docs": "https://github.com/dumbwareio/dumbpad" }, - "tags": [ - "notepad", - "self-hosted", - "simple" - ] + "tags": ["notepad", "self-hosted", "simple"] + }, + { + "id": "duplicati", + "name": "Duplicati", + "version": "latest", + "description": "Duplicati is a free, open-source backup solution that offers zero-trust, fully encrypted backups for your data", + "logo": "logo.png", + "links": { + "github": "https://github.com/duplicati/duplicati", + "website": "https://duplicati.com/", + "docs": "https://docs.duplicati.com/" + }, + "tags": ["backup", "self-hosted", "simple"] }, { "id": "easyappointments", @@ -2100,11 +1659,7 @@ "website": "https://easyappointments.org", "docs": "https://easyappointments.org/docs" }, - "tags": [ - "scheduling", - "appointments", - "booking" - ] + "tags": ["scheduling", "appointments", "booking"] }, { "id": "elastic-search", @@ -2117,10 +1672,7 @@ "website": "https://www.elastic.co/elasticsearch/", "docs": "https://docs.elastic.co/elasticsearch/" }, - "tags": [ - "search", - "analytics" - ] + "tags": ["search", "analytics"] }, { "id": "emby", @@ -2133,10 +1685,7 @@ "website": "https://emby.media/", "docs": "https://emby.media/support/articles/Home.html" }, - "tags": [ - "media", - "media system" - ] + "tags": ["media", "media system"] }, { "id": "emqx", @@ -2149,11 +1698,7 @@ "website": "https://www.emqx.com", "docs": "https://docs.emqx.com" }, - "tags": [ - "broker", - "iot", - "mqtt" - ] + "tags": ["broker", "iot", "mqtt"] }, { "id": "enshrouded", @@ -2166,9 +1711,7 @@ "website": "", "docs": "" }, - "tags": [ - "gaming" - ] + "tags": ["gaming"] }, { "id": "erpnext", @@ -2202,11 +1745,7 @@ "website": "https://etherpad.org/", "docs": "https://github.com/ether/etherpad-lite/wiki" }, - "tags": [ - "collaboration", - "text-editor", - "real-time" - ] + "tags": ["collaboration", "text-editor", "real-time"] }, { "id": "evershop", @@ -2219,10 +1758,7 @@ "website": "https://evershop.io/", "docs": "https://evershop.io/docs/development/getting-started/introduction" }, - "tags": [ - "E-Commerce", - "shopping" - ] + "tags": ["E-Commerce", "shopping"] }, { "id": "evolutionapi", @@ -2235,11 +1771,7 @@ "docs": "https://doc.evolution-api.com/v2/en/get-started/introduction", "website": "https://evolution-api.com/opensource-whatsapp-api/" }, - "tags": [ - "api", - "whatsapp", - "messaging" - ] + "tags": ["api", "whatsapp", "messaging"] }, { "id": "excalidraw", @@ -2252,9 +1784,7 @@ "website": "https://excalidraw.com/", "docs": "https://docs.excalidraw.com/" }, - "tags": [ - "drawing" - ] + "tags": ["drawing"] }, { "id": "ezbookkeeping", @@ -2287,10 +1817,7 @@ "website": "https://filebrowser.org/", "docs": "https://filebrowser.org/" }, - "tags": [ - "file-manager", - "storage" - ] + "tags": ["file-manager", "storage"] }, { "id": "filestash", @@ -2303,11 +1830,7 @@ "website": "https://www.filestash.app/", "docs": "https://www.filestash.app/docs/" }, - "tags": [ - "file-manager", - "document-editor", - "self-hosted" - ] + "tags": ["file-manager", "document-editor", "self-hosted"] }, { "id": "firecrawl", @@ -2320,13 +1843,7 @@ "website": "https://firecrawl.dev", "docs": "https://github.com/firecrawl/firecrawl" }, - "tags": [ - "api", - "crawler", - "scraping", - "data-extraction", - "llm" - ] + "tags": ["api", "crawler", "scraping", "data-extraction", "llm"] }, { "id": "fivem", @@ -2339,12 +1856,7 @@ "website": "https://fivem.net/", "docs": "https://docs.fivem.net/docs/server-manual/" }, - "tags": [ - "gaming", - "gta", - "multiplayer", - "server" - ] + "tags": ["gaming", "gta", "multiplayer", "server"] }, { "id": "flagsmith", @@ -2375,12 +1887,7 @@ "website": "https://github.com/FlareSolverr/FlareSolverr", "docs": "https://github.com/FlareSolverr/FlareSolverr" }, - "tags": [ - "proxy", - "cloudflare", - "bypass", - "ddos-guard" - ] + "tags": ["proxy", "cloudflare", "bypass", "ddos-guard"] }, { "id": "flatnotes", @@ -2393,12 +1900,7 @@ "website": "https://flatnotes.io", "docs": "https://github.com/dullage/flatnotes" }, - "tags": [ - "notes", - "productivity", - "markdown", - "self-hosted" - ] + "tags": ["notes", "productivity", "markdown", "self-hosted"] }, { "id": "flatnotes-totp", @@ -2411,14 +1913,7 @@ "website": "https://flatnotes.io", "docs": "https://github.com/dullage/flatnotes" }, - "tags": [ - "notes", - "productivity", - "markdown", - "self-hosted", - "totp", - "2fa" - ] + "tags": ["notes", "productivity", "markdown", "self-hosted", "totp", "2fa"] }, { "id": "flowise", @@ -2431,12 +1926,7 @@ "website": "https://flowiseai.com/", "docs": "https://docs.flowiseai.com/" }, - "tags": [ - "AI", - "LLM", - "workflow", - "automation" - ] + "tags": ["AI", "LLM", "workflow", "automation"] }, { "id": "fmd-server", @@ -2449,12 +1939,7 @@ "website": "https://fmd-foss.org", "docs": "https://fmd-foss.org/docs/fmd-server/overview" }, - "tags": [ - "phone", - "security", - "gps", - "location" - ] + "tags": ["phone", "security", "gps", "location"] }, { "id": "focalboard", @@ -2467,9 +1952,7 @@ "website": "https://focalboard.com", "docs": "https://www.focalboard.com/docs/" }, - "tags": [ - "kanban" - ] + "tags": ["kanban"] }, { "id": "fonoster", @@ -2482,14 +1965,7 @@ "website": "https://fonoster.com/", "docs": "https://docs.fonoster.com/" }, - "tags": [ - "telephony", - "voip", - "sip", - "webrtc", - "pstn", - "communication" - ] + "tags": ["telephony", "voip", "sip", "webrtc", "pstn", "communication"] }, { "id": "forgejo", @@ -2502,10 +1978,7 @@ "website": "https://forgejo.org/", "docs": "https://forgejo.org/docs/latest/" }, - "tags": [ - "self-hosted", - "storage" - ] + "tags": ["self-hosted", "storage"] }, { "id": "formbricks", @@ -2518,10 +1991,7 @@ "website": "https://formbricks.com/", "docs": "https://formbricks.com/docs" }, - "tags": [ - "forms", - "analytics" - ] + "tags": ["forms", "analytics"] }, { "id": "frappe-hr", @@ -2554,13 +2024,7 @@ "docs": "https://github.com/freescout-helpdesk/freescout/wiki/Installation-Guide" }, "logo": "freescout.svg", - "tags": [ - "helpdesk", - "support", - "email", - "customer-service", - "self-hosted" - ] + "tags": ["helpdesk", "support", "email", "customer-service", "self-hosted"] }, { "id": "freshrss", @@ -2593,10 +2057,7 @@ "website": "https://garagehq.deuxfleurs.fr", "docs": "https://garagehq.deuxfleurs.fr/documentation/quick-start/" }, - "tags": [ - "storage", - "object-storage" - ] + "tags": ["storage", "object-storage"] }, { "id": "garage-with-ui", @@ -2609,10 +2070,7 @@ "website": "https://garagehq.deuxfleurs.fr", "docs": "https://garagehq.deuxfleurs.fr/documentation/quick-start/" }, - "tags": [ - "storage", - "object-storage" - ] + "tags": ["storage", "object-storage"] }, { "id": "ghost", @@ -2625,9 +2083,7 @@ "website": "https://ghost.org/", "docs": "https://ghost.org/docs/" }, - "tags": [ - "cms" - ] + "tags": ["cms"] }, { "id": "gitea-mirror", @@ -2640,14 +2096,7 @@ "website": "https://github.com/arunavo4/gitea-mirror", "docs": "https://github.com/arunavo4/gitea-mirror#readme" }, - "tags": [ - "git", - "mirror", - "github", - "gitea", - "self-hosted", - "automation" - ] + "tags": ["git", "mirror", "github", "gitea", "self-hosted", "automation"] }, { "id": "gitea-mysql", @@ -2660,13 +2109,7 @@ "website": "https://gitea.io/", "docs": "https://docs.gitea.com/" }, - "tags": [ - "git", - "scm", - "mysql", - "developer-tools", - "self-hosted" - ] + "tags": ["git", "scm", "mysql", "developer-tools", "self-hosted"] }, { "id": "gitea-postgres", @@ -2679,13 +2122,7 @@ "website": "https://gitea.io/", "docs": "https://docs.gitea.com/" }, - "tags": [ - "git", - "scm", - "postgres", - "developer-tools", - "self-hosted" - ] + "tags": ["git", "scm", "postgres", "developer-tools", "self-hosted"] }, { "id": "gitea-sqlite", @@ -2698,12 +2135,7 @@ "website": "https://gitea.io/", "docs": "https://docs.gitea.com/" }, - "tags": [ - "git", - "scm", - "developer-tools", - "self-hosted" - ] + "tags": ["git", "scm", "developer-tools", "self-hosted"] }, { "id": "gitingest", @@ -2716,13 +2148,7 @@ "website": "https://gitingest.com", "docs": "https://github.com/coderamp-labs/gitingest#readme" }, - "tags": [ - "analytics", - "s3", - "monitoring", - "sentry", - "metrics" - ] + "tags": ["analytics", "s3", "monitoring", "sentry", "metrics"] }, { "id": "gitlab-ce", @@ -2735,12 +2161,7 @@ "website": "https://gitlab.com/", "docs": "https://docs.gitlab.com/ee/" }, - "tags": [ - "git", - "ci-cd", - "version-control", - "project-management" - ] + "tags": ["git", "ci-cd", "version-control", "project-management"] }, { "id": "glance", @@ -2753,12 +2174,7 @@ "docs": "https://github.com/glanceapp/glance/blob/main/docs/configuration.md", "website": "https://glance.app/" }, - "tags": [ - "dashboard", - "monitoring", - "widgets", - "rss" - ] + "tags": ["dashboard", "monitoring", "widgets", "rss"] }, { "id": "glitchtip", @@ -2771,9 +2187,7 @@ "website": "https://glitchtip.com/", "docs": "https://glitchtip.com/documentation" }, - "tags": [ - "hosting" - ] + "tags": ["hosting"] }, { "id": "glpi", @@ -2786,11 +2200,7 @@ "website": "https://glpi-project.org/", "docs": "https://glpi-project.org/documentation/" }, - "tags": [ - "self-hosted", - "project-management", - "management" - ] + "tags": ["self-hosted", "project-management", "management"] }, { "id": "go-whatsapp-web-multidevice", @@ -2803,12 +2213,7 @@ "website": "https://github.com/aldinokemal/go-whatsapp-web-multidevice", "docs": "https://github.com/aldinokemal/go-whatsapp-web-multidevice" }, - "tags": [ - "whatsapp", - "self-hosted", - "open-source", - "api" - ] + "tags": ["whatsapp", "self-hosted", "open-source", "api"] }, { "id": "gotenberg", @@ -2821,12 +2226,7 @@ "website": "https://gotenberg.dev", "docs": "https://gotenberg.dev/docs/getting-started/introduction" }, - "tags": [ - "api", - "backend", - "pdf", - "tools" - ] + "tags": ["api", "backend", "pdf", "tools"] }, { "id": "grafana", @@ -2839,9 +2239,7 @@ "website": "https://grafana.com/", "docs": "https://grafana.com/docs/" }, - "tags": [ - "monitoring" - ] + "tags": ["monitoring"] }, { "id": "grimoire", @@ -2854,11 +2252,7 @@ "website": "https://github.com/goniszewski/grimoire", "docs": "https://github.com/goniszewski/grimoire" }, - "tags": [ - "bookmarks", - "self-hosted", - "knowledge-management" - ] + "tags": ["bookmarks", "self-hosted", "knowledge-management"] }, { "id": "grist", @@ -2890,12 +2284,7 @@ "website": "https://habitica.com/", "docs": "https://habitica.fandom.com/wiki/Setting_up_Habitica_Locally" }, - "tags": [ - "productivity", - "gamification", - "habits", - "self-hosted" - ] + "tags": ["productivity", "gamification", "habits", "self-hosted"] }, { "id": "heyform", @@ -2908,13 +2297,7 @@ "website": "https://heyform.net", "docs": "https://docs.heyform.net" }, - "tags": [ - "form", - "builder", - "questionnaire", - "quiz", - "survey" - ] + "tags": ["form", "builder", "questionnaire", "quiz", "survey"] }, { "id": "hi-events", @@ -2927,11 +2310,7 @@ "website": "https://hi.events/", "docs": "https://hi.events/docs" }, - "tags": [ - "self-hosted", - "open-source", - "manager" - ] + "tags": ["self-hosted", "open-source", "manager"] }, { "id": "hoarder", @@ -2944,11 +2323,7 @@ "website": "https://hoarder.app/", "docs": "https://docs.hoarder.app/" }, - "tags": [ - "self-hosted", - "bookmarks", - "link-sharing" - ] + "tags": ["self-hosted", "bookmarks", "link-sharing"] }, { "id": "homarr", @@ -2961,10 +2336,7 @@ "docs": "https://homarr.dev/docs/getting-started/installation/docker", "website": "https://homarr.dev/" }, - "tags": [ - "dashboard", - "monitoring" - ] + "tags": ["dashboard", "monitoring"] }, { "id": "homeassistant", @@ -2996,13 +2368,7 @@ "website": "https://homebridge.io/", "docs": "https://github.com/homebridge/homebridge/wiki" }, - "tags": [ - "iot", - "homekit", - "internet-of-things", - "self-hosted", - "server" - ] + "tags": ["iot", "homekit", "internet-of-things", "self-hosted", "server"] }, { "id": "hoppscotch", @@ -3010,13 +2376,7 @@ "version": "latest", "description": "Hoppscotch Community Edition (All-in-One) with automatic database migrations. Includes backend, frontend, and admin under unified subpath routing.", "logo": "image.png", - "tags": [ - "api", - "testing", - "development", - "postman-alternative", - "graphql" - ], + "tags": ["api", "testing", "development", "postman-alternative", "graphql"], "links": { "website": "https://hoppscotch.io/", "github": "https://github.com/hoppscotch/hoppscotch", @@ -3035,13 +2395,7 @@ "docs": "https://github.com/danielbrendel/hortusfox-web#readme", "discord": "https://discord.gg/kc6xGmjzVS" }, - "tags": [ - "productivity", - "photo", - "task-management", - "php", - "mariadb" - ] + "tags": ["productivity", "photo", "task-management", "php", "mariadb"] }, { "id": "huly", @@ -3054,11 +2408,7 @@ "website": "https://huly.io/", "docs": "https://docs.huly.io/" }, - "tags": [ - "project-management", - "community", - "discussion" - ] + "tags": ["project-management", "community", "discussion"] }, { "id": "i18n-blog", @@ -3071,13 +2421,7 @@ "website": "https://qut.edu.kg/", "docs": "https://github.com/xuemian168/kuno#readme" }, - "tags": [ - "blog", - "i18n", - "nextjs", - "go", - "web" - ] + "tags": ["blog", "i18n", "nextjs", "go", "web"] }, { "id": "ihatemoney", @@ -3110,13 +2454,7 @@ "website": "https://imgproxy.net/", "docs": "https://docs.imgproxy.net/" }, - "tags": [ - "images", - "media", - "proxy", - "cdn", - "caching" - ] + "tags": ["images", "media", "proxy", "cdn", "caching"] }, { "id": "immich", @@ -3129,12 +2467,7 @@ "website": "https://immich.app/", "docs": "https://immich.app/docs/overview/introduction" }, - "tags": [ - "photos", - "videos", - "backup", - "media" - ] + "tags": ["photos", "videos", "backup", "media"] }, { "id": "infisical", @@ -3147,10 +2480,7 @@ "website": "https://infisical.com/", "docs": "https://infisical.com/docs/documentation/getting-started/introduction" }, - "tags": [ - "self-hosted", - "open-source" - ] + "tags": ["self-hosted", "open-source"] }, { "id": "influxdb", @@ -3163,12 +2493,7 @@ "website": "https://www.influxdata.com/", "docs": "https://docs.influxdata.com/influxdb/v2/" }, - "tags": [ - "self-hosted", - "open-source", - "storage", - "database" - ] + "tags": ["self-hosted", "open-source", "storage", "database"] }, { "id": "inngest", @@ -3181,13 +2506,7 @@ "website": "https://www.inngest.com/", "docs": "https://www.inngest.com/docs/self-hosting" }, - "tags": [ - "workflow", - "automation", - "self-hosted", - "serverless", - "events" - ] + "tags": ["workflow", "automation", "self-hosted", "serverless", "events"] }, { "id": "instantdb", @@ -3200,11 +2519,7 @@ "website": "https://github.com/instantdb/instant", "docs": "https://github.com/instantdb/instant" }, - "tags": [ - "database", - "real-time", - "self-hosted" - ] + "tags": ["database", "real-time", "self-hosted"] }, { "id": "invoiceshelf", @@ -3217,11 +2532,7 @@ "website": "https://invoiceshelf.com", "docs": "https://github.com/InvoiceShelf/invoiceshelf#readme" }, - "tags": [ - "invoice", - "business", - "finance" - ] + "tags": ["invoice", "business", "finance"] }, { "id": "ipfs", @@ -3234,12 +2545,7 @@ "website": "https://ipfs.tech/", "docs": "https://docs.ipfs.tech/" }, - "tags": [ - "storage", - "decentralized", - "p2p", - "self-hosted" - ] + "tags": ["storage", "decentralized", "p2p", "self-hosted"] }, { "id": "it-tools", @@ -3252,10 +2558,7 @@ "website": "https://it-tools.tech", "docs": "https://it-tools.tech/docs" }, - "tags": [ - "developer", - "tools" - ] + "tags": ["developer", "tools"] }, { "id": "java", @@ -3268,12 +2571,7 @@ "website": "https://java.com/", "docs": "https://docs.oracle.com/en/java/" }, - "tags": [ - "java", - "minecraft", - "runtime", - "pterodactyl" - ] + "tags": ["java", "minecraft", "runtime", "pterodactyl"] }, { "id": "jellyfin", @@ -3286,9 +2584,7 @@ "website": "https://jellyfin.org/", "docs": "https://jellyfin.org/docs/" }, - "tags": [ - "media system" - ] + "tags": ["media system"] }, { "id": "jenkins", @@ -3301,13 +2597,7 @@ "website": "https://www.jenkins.io/", "docs": "https://www.jenkins.io/doc/" }, - "tags": [ - "ci-cd", - "devops", - "automation", - "pipelines", - "open-source" - ] + "tags": ["ci-cd", "devops", "automation", "pipelines", "open-source"] }, { "id": "kaneo", @@ -3320,9 +2610,7 @@ "website": "https://kaneo.app/", "docs": "https://kaneo.app/docs/" }, - "tags": [ - "Task Tracking" - ] + "tags": ["Task Tracking"] }, { "id": "karakeep", @@ -3356,12 +2644,7 @@ "website": "https://kener.ing/", "docs": "https://kener.ing/docs/" }, - "tags": [ - "monitoring", - "status-page", - "alerting", - "self-hosted" - ] + "tags": ["monitoring", "status-page", "alerting", "self-hosted"] }, { "id": "kestra", @@ -3374,9 +2657,7 @@ "website": "https://kestra.io", "docs": "https://kestra.io/docs" }, - "tags": [ - "automation" - ] + "tags": ["automation"] }, { "id": "keycloak", @@ -3389,13 +2670,7 @@ "website": "https://www.keycloak.org/", "docs": "https://www.keycloak.org/documentation" }, - "tags": [ - "authentication", - "identity", - "sso", - "oauth2", - "openid-connect" - ] + "tags": ["authentication", "identity", "sso", "oauth2", "openid-connect"] }, { "id": "kimai", @@ -3408,11 +2683,7 @@ "website": "https://www.kimai.org", "docs": "https://www.kimai.org/documentation" }, - "tags": [ - "invoice", - "business", - "finance" - ] + "tags": ["invoice", "business", "finance"] }, { "id": "kitchenowl", @@ -3425,12 +2696,7 @@ "website": "https://kitchenowl.org/", "docs": "https://github.com/TomBursch/kitchenowl/wiki" }, - "tags": [ - "self-hosted", - "recipes", - "grocery", - "personal" - ] + "tags": ["self-hosted", "recipes", "grocery", "personal"] }, { "id": "kokoro-tts", @@ -3443,13 +2709,7 @@ "website": "https://github.com/remsky/Kokoro-FastAPI", "docs": "https://github.com/remsky/Kokoro-FastAPI#readme" }, - "tags": [ - "text-to-speech", - "ai", - "voice", - "fastapi", - "openai-compatible" - ] + "tags": ["text-to-speech", "ai", "voice", "fastapi", "openai-compatible"] }, { "id": "kokoro-web", @@ -3462,12 +2722,7 @@ "website": "https://github.com/eduardolat/kokoro-web", "docs": "https://github.com/eduardolat/kokoro-web#readme" }, - "tags": [ - "text-to-speech", - "ai", - "voice", - "web" - ] + "tags": ["text-to-speech", "ai", "voice", "web"] }, { "id": "komari-monitor", @@ -3480,10 +2735,7 @@ "website": "https://github.com/komari-monitor/komari", "docs": "https://github.com/komari-monitor/komari#readme" }, - "tags": [ - "monitoring", - "self-hosted" - ] + "tags": ["monitoring", "self-hosted"] }, { "id": "kutt", @@ -3496,10 +2748,7 @@ "website": "https://kutt.it", "docs": "https://github.com/thedevs-network/kutt#kuttit" }, - "tags": [ - "link-shortener", - "link-sharing" - ] + "tags": ["link-shortener", "link-sharing"] }, { "id": "langflow", @@ -3512,9 +2761,7 @@ "website": "https://www.langflow.org/", "docs": "https://docs.langflow.org/" }, - "tags": [ - "ai" - ] + "tags": ["ai"] }, { "id": "lavalink", @@ -3527,10 +2774,7 @@ "website": "https://lavalink.dev/", "docs": "https://lavalink.dev/getting-started/index.html" }, - "tags": [ - "voice", - "discord" - ] + "tags": ["voice", "discord"] }, { "id": "letterfeed", @@ -3543,11 +2787,7 @@ "website": "https://github.com/leonmuscoden/letterfeed", "docs": "https://github.com/leonmuscoden/letterfeed" }, - "tags": [ - "email", - "self-hosted", - "productivity" - ] + "tags": ["email", "self-hosted", "productivity"] }, { "id": "librechat", @@ -3560,14 +2800,7 @@ "website": "https://librechat.ai", "docs": "https://docs.librechat.ai" }, - "tags": [ - "ai", - "chatbot", - "llm", - "MIT-license", - "BYOK", - "generative-ai" - ] + "tags": ["ai", "chatbot", "llm", "MIT-license", "BYOK", "generative-ai"] }, { "id": "libredesk", @@ -3580,10 +2813,7 @@ "website": "https://libredesk.io", "docs": "https://docs.libredesk.io/introduction" }, - "tags": [ - "storage", - "object-storage" - ] + "tags": ["storage", "object-storage"] }, { "id": "libretranslate", @@ -3596,12 +2826,7 @@ "website": "https://libretranslate.com/", "docs": "https://docs.libretranslate.com/" }, - "tags": [ - "translation", - "api", - "nlp", - "language" - ] + "tags": ["translation", "api", "nlp", "language"] }, { "id": "linkding", @@ -3614,10 +2839,7 @@ "website": "https://linkding.link/", "docs": "https://github.com/sissbruecker/linkding/tree/master/docs" }, - "tags": [ - "bookmark-manager", - "self-hosted" - ] + "tags": ["bookmark-manager", "self-hosted"] }, { "id": "linkstack", @@ -3630,12 +2852,7 @@ "website": "https://linkstack.org/", "docs": "https://docs.linkstack.org/" }, - "tags": [ - "bio", - "personal", - "cms", - "php" - ] + "tags": ["bio", "personal", "cms", "php"] }, { "id": "linkwarden", @@ -3648,10 +2865,7 @@ "website": "https://linkwarden.app/", "docs": "https://docs.linkwarden.app/" }, - "tags": [ - "bookmarks", - "link-sharing" - ] + "tags": ["bookmarks", "link-sharing"] }, { "id": "listmonk", @@ -3664,11 +2878,7 @@ "website": "https://listmonk.app/", "docs": "https://listmonk.app/docs/" }, - "tags": [ - "email", - "newsletter", - "mailing-list" - ] + "tags": ["email", "newsletter", "mailing-list"] }, { "id": "litellm", @@ -3681,13 +2891,7 @@ "website": "https://docs.litellm.ai", "docs": "https://docs.litellm.ai/docs/proxy/quick_start" }, - "tags": [ - "ai", - "proxy", - "llm", - "openai-compatible", - "monitoring" - ] + "tags": ["ai", "proxy", "llm", "openai-compatible", "monitoring"] }, { "id": "livekit", @@ -3700,13 +2904,7 @@ "website": "https://livekit.io/", "docs": "https://docs.livekit.io/" }, - "tags": [ - "Video", - "Audio", - "Real-time", - "Streaming", - "Webrtc" - ] + "tags": ["Video", "Audio", "Real-time", "Streaming", "Webrtc"] }, { "id": "lobe-chat", @@ -3719,10 +2917,7 @@ "website": "https://chat-preview.lobehub.com/", "docs": "https://lobehub.com/docs/self-hosting/platform/docker-compose" }, - "tags": [ - "IA", - "chat" - ] + "tags": ["IA", "chat"] }, { "id": "lodestone", @@ -3735,11 +2930,7 @@ "website": "https://lodestone.cc", "docs": "https://github.com/Lodestone-Team/lodestone/wiki" }, - "tags": [ - "minecraft", - "hosting", - "server" - ] + "tags": ["minecraft", "hosting", "server"] }, { "id": "logto", @@ -3752,10 +2943,7 @@ "website": "https://logto.io/", "docs": "https://docs.logto.io/introduction" }, - "tags": [ - "identity", - "auth" - ] + "tags": ["identity", "auth"] }, { "id": "lowcoder", @@ -3768,11 +2956,7 @@ "website": "https://www.lowcoder.cloud/", "docs": "https://docs.lowcoder.cloud/lowcoder-documentation" }, - "tags": [ - "low-code", - "no-code", - "development" - ] + "tags": ["low-code", "no-code", "development"] }, { "id": "macos", @@ -3785,11 +2969,7 @@ "website": "", "docs": "https://github.com/dockur/macos?tab=readme-ov-file#how-do-i-use-it" }, - "tags": [ - "self-hosted", - "open-source", - "os" - ] + "tags": ["self-hosted", "open-source", "os"] }, { "id": "mage-ai", @@ -3802,12 +2982,7 @@ "website": "https://mage.ai", "docs": "https://docs.mage.ai" }, - "tags": [ - "data", - "dbt", - "etl", - "pipelines" - ] + "tags": ["data", "dbt", "etl", "pipelines"] }, { "id": "mailpit", @@ -3820,10 +2995,7 @@ "website": "https://mailpit.axllent.org/", "docs": "https://mailpit.axllent.org/docs/" }, - "tags": [ - "email", - "smtp" - ] + "tags": ["email", "smtp"] }, { "id": "mattermost", @@ -3836,10 +3008,7 @@ "website": "https://mattermost.com/", "docs": "https://docs.mattermost.com/" }, - "tags": [ - "chat", - "self-hosted" - ] + "tags": ["chat", "self-hosted"] }, { "id": "mautic", @@ -3852,12 +3021,7 @@ "website": "https://www.mautic.org/", "docs": "https://docs.mautic.org/en" }, - "tags": [ - "marketing", - "automation", - "email", - "crm" - ] + "tags": ["marketing", "automation", "email", "crm"] }, { "id": "maybe", @@ -3870,10 +3034,7 @@ "website": "https://maybe.finance/", "docs": "https://docs.maybe.finance/" }, - "tags": [ - "finance", - "self-hosted" - ] + "tags": ["finance", "self-hosted"] }, { "id": "mazanoke", @@ -3886,13 +3047,7 @@ "website": "https://github.com/civilblur/mazanoke", "docs": "https://github.com/civilblur/mazanoke" }, - "tags": [ - "image-hosting", - "file-sharing", - "self-hosted", - "media", - "gallery" - ] + "tags": ["image-hosting", "file-sharing", "self-hosted", "media", "gallery"] }, { "id": "mcsmanager", @@ -3905,12 +3060,7 @@ "website": "https://github.com/MCSManager/MCSManager", "docs": "https://github.com/MCSManager/MCSManager#readme" }, - "tags": [ - "minecraft", - "game-server", - "management", - "dashboard" - ] + "tags": ["minecraft", "game-server", "management", "dashboard"] }, { "id": "mealie", @@ -3923,11 +3073,7 @@ "website": "https://mealie.io/", "docs": "https://docs.mealie.io/" }, - "tags": [ - "recipes", - "shopping-list", - "meal-planning" - ] + "tags": ["recipes", "shopping-list", "meal-planning"] }, { "id": "mediacms", @@ -3940,13 +3086,7 @@ "website": "https://mediacms.io/", "docs": "https://docs.mediacms.io/" }, - "tags": [ - "media", - "video", - "cms", - "streaming", - "self-hosted" - ] + "tags": ["media", "video", "cms", "streaming", "self-hosted"] }, { "id": "mediafetch", @@ -3959,11 +3099,7 @@ "website": "https://www.lukedunsmore.com/mediafetch", "docs": "https://docs.lukedunsmore.com/docs/self-hosted/mediafetch/" }, - "tags": [ - "utilities", - "media", - "downloader" - ] + "tags": ["utilities", "media", "downloader"] }, { "id": "meilisearch", @@ -3976,9 +3112,7 @@ "website": "https://www.meilisearch.com/", "docs": "https://docs.meilisearch.com/" }, - "tags": [ - "search" - ] + "tags": ["search"] }, { "id": "memos", @@ -3991,11 +3125,7 @@ "website": "https://www.usememos.com/", "docs": "https://www.usememos.com/docs" }, - "tags": [ - "productivity", - "notes", - "bookmarks" - ] + "tags": ["productivity", "notes", "bookmarks"] }, { "id": "metabase", @@ -4008,10 +3138,7 @@ "website": "https://www.metabase.com/", "docs": "https://www.metabase.com/docs/" }, - "tags": [ - "database", - "dashboard" - ] + "tags": ["database", "dashboard"] }, { "id": "metube", @@ -4024,11 +3151,7 @@ "website": "https://github.com/alexta69/metube", "docs": "https://github.com/alexta69/metube/wiki" }, - "tags": [ - "downloader", - "youtube", - "media" - ] + "tags": ["downloader", "youtube", "media"] }, { "id": "minepanel", @@ -4041,12 +3164,7 @@ "website": "https://minepanel.ketbome.lat", "docs": "https://minepanel.ketbome.lat" }, - "tags": [ - "gaming", - "minecraft", - "server-management", - "docker" - ] + "tags": ["gaming", "minecraft", "server-management", "docker"] }, { "id": "minio", @@ -4059,9 +3177,7 @@ "website": "https://minio.io/", "docs": "https://docs.minio.io/" }, - "tags": [ - "storage" - ] + "tags": ["storage"] }, { "id": "misaka-danmu-server", @@ -4074,11 +3190,7 @@ "website": "https://github.com/l429609201/misaka_danmu_server", "docs": "https://github.com/l429609201/misaka_danmu_server#readme" }, - "tags": [ - "streaming", - "danmaku", - "live" - ] + "tags": ["streaming", "danmaku", "live"] }, { "id": "mixpost", @@ -4091,11 +3203,7 @@ "website": "https://mixpost.app/", "docs": "https://docs.mixpost.app/" }, - "tags": [ - "social-media", - "management", - "scheduling" - ] + "tags": ["social-media", "management", "scheduling"] }, { "id": "moltbot", @@ -4129,11 +3237,7 @@ "website": "https://github.com/danvergara/morphos-server", "docs": "https://github.com/danvergara/morphos-server#readme" }, - "tags": [ - "server", - "orchestration", - "lightweight" - ] + "tags": ["server", "orchestration", "lightweight"] }, { "id": "movary", @@ -4174,13 +3278,7 @@ "website": "https://www.mulesoft.com/", "docs": "https://docs.mulesoft.com/" }, - "tags": [ - "integration", - "api", - "esb", - "enterprise", - "java" - ] + "tags": ["integration", "api", "esb", "enterprise", "java"] }, { "id": "mumble", @@ -4193,12 +3291,7 @@ "website": "https://www.mumble.info/", "docs": "https://wiki.mumble.info/" }, - "tags": [ - "voice-chat", - "communication", - "gaming", - "voip" - ] + "tags": ["voice-chat", "communication", "gaming", "voip"] }, { "id": "n8n", @@ -4211,9 +3304,7 @@ "website": "https://n8n.io/", "docs": "https://docs.n8n.io/" }, - "tags": [ - "automation" - ] + "tags": ["automation"] }, { "id": "n8n-runner-postgres-ollama", @@ -4226,14 +3317,7 @@ "website": "https://n8n.io/", "docs": "https://docs.n8n.io/" }, - "tags": [ - "ai", - "automation", - "workflow", - "low-code", - "postgres", - "ollama" - ] + "tags": ["ai", "automation", "workflow", "low-code", "postgres", "ollama"] }, { "id": "n8n-with-postgres", @@ -4246,12 +3330,7 @@ "website": "https://n8n.io/", "docs": "https://docs.n8n.io/" }, - "tags": [ - "automation", - "workflow", - "low-code", - "postgres" - ] + "tags": ["automation", "workflow", "low-code", "postgres"] }, { "id": "navidrome", @@ -4284,12 +3363,7 @@ "website": "https://github.com/m1k1o/neko", "docs": "https://github.com/m1k1o/neko" }, - "tags": [ - "browser", - "virtual", - "sharing", - "remote" - ] + "tags": ["browser", "virtual", "sharing", "remote"] }, { "id": "netdata", @@ -4321,12 +3395,7 @@ "website": "https://github.com/lissy93/networking", "docs": "https://github.com/lissy93/networking#readme" }, - "tags": [ - "networking", - "tools", - "utilities", - "web" - ] + "tags": ["networking", "tools", "utilities", "web"] }, { "id": "nextcloud-aio", @@ -4339,10 +3408,7 @@ "website": "https://nextcloud.com/", "docs": "https://docs.nextcloud.com/" }, - "tags": [ - "file-manager", - "sync" - ] + "tags": ["file-manager", "sync"] }, { "id": "nginx", @@ -4355,9 +3421,7 @@ "website": "https://nginx.org/", "docs": "https://nginx.org/en/docs/" }, - "tags": [ - "webserver" - ] + "tags": ["webserver"] }, { "id": "nocodb", @@ -4370,12 +3434,7 @@ "docs": "https://docs.nocodb.com/" }, "logo": "nocodb.png", - "tags": [ - "database", - "spreadsheet", - "low-code", - "nocode" - ] + "tags": ["database", "spreadsheet", "low-code", "nocode"] }, { "id": "notifuse", @@ -4388,12 +3447,7 @@ "website": "https://notifuse.com/", "docs": "https://docs.notifuse.com/" }, - "tags": [ - "newsletter", - "email", - "communication", - "notifications" - ] + "tags": ["newsletter", "email", "communication", "notifications"] }, { "id": "ntfy", @@ -4406,13 +3460,7 @@ "website": "https://ntfy.sh/", "docs": "https://docs.ntfy.sh/" }, - "tags": [ - "alerting", - "alerts", - "api", - "notifications", - "self-hosted" - ] + "tags": ["alerting", "alerts", "api", "notifications", "self-hosted"] }, { "id": "obsidian-livesync", @@ -4425,11 +3473,7 @@ "website": "https://obsidian.md/sync", "docs": "https://docs.couchdb.apache.org/" }, - "tags": [ - "database", - "sync", - "obsidian" - ] + "tags": ["database", "sync", "obsidian"] }, { "id": "odoo_17", @@ -4442,9 +3486,7 @@ "website": "https://odoo.com/", "docs": "https://www.odoo.com/documentation/" }, - "tags": [ - "erp" - ] + "tags": ["erp"] }, { "id": "odoo_18", @@ -4457,9 +3499,7 @@ "website": "https://odoo.com/", "docs": "https://www.odoo.com/documentation/" }, - "tags": [ - "erp" - ] + "tags": ["erp"] }, { "id": "odoo_19", @@ -4472,9 +3512,7 @@ "website": "https://odoo.com/", "docs": "https://www.odoo.com/documentation/" }, - "tags": [ - "erp" - ] + "tags": ["erp"] }, { "id": "ojs", @@ -4487,12 +3525,7 @@ "website": "https://pkp.sfu.ca/ojs/", "docs": "https://pkp.sfu.ca/ojs/docs/" }, - "tags": [ - "publishing", - "journal", - "research", - "academic" - ] + "tags": ["publishing", "journal", "research", "academic"] }, { "id": "omni-tools", @@ -4505,12 +3538,7 @@ "website": "https://github.com/iib0011/omni-tools", "docs": "https://github.com/iib0011/omni-tools" }, - "tags": [ - "tools", - "utilities", - "collection", - "self-hosted" - ] + "tags": ["tools", "utilities", "collection", "self-hosted"] }, { "id": "onedev", @@ -4523,10 +3551,7 @@ "website": "https://onedev.io/", "docs": "https://docs.onedev.io/" }, - "tags": [ - "self-hosted", - "development" - ] + "tags": ["self-hosted", "development"] }, { "id": "onetimesecret", @@ -4539,12 +3564,7 @@ "website": "https://onetimesecret.com", "docs": "https://docs.onetimesecret.com" }, - "tags": [ - "auth", - "password", - "secret", - "secure" - ] + "tags": ["auth", "password", "secret", "secure"] }, { "id": "ontime", @@ -4557,9 +3577,7 @@ "website": "https://getontime.no", "docs": "https://docs.getontime.no" }, - "tags": [ - "event" - ] + "tags": ["event"] }, { "id": "open-fiesta", @@ -4572,12 +3590,7 @@ "website": "https://github.com/jaainil/open-fiesta", "docs": "https://github.com/jaainil/open-fiesta#readme" }, - "tags": [ - "ai", - "chatbot", - "inference", - "frontend" - ] + "tags": ["ai", "chatbot", "inference", "frontend"] }, { "id": "open-webui", @@ -4590,9 +3603,7 @@ "website": "https://openwebui.com/", "docs": "https://docs.openwebui.com/" }, - "tags": [ - "chat" - ] + "tags": ["chat"] }, { "id": "open_notebook", @@ -4605,12 +3616,7 @@ "website": "https://www.open-notebook.ai/", "docs": "https://www.open-notebook.ai/get-started.html" }, - "tags": [ - "notebook", - "ai", - "database", - "surrealdb" - ] + "tags": ["notebook", "ai", "database", "surrealdb"] }, { "id": "openclaw", @@ -4644,12 +3650,7 @@ "website": "https://github.com/thomiceli/opengist", "docs": "https://github.com/thomiceli/opengist" }, - "tags": [ - "pastebin", - "code", - "snippets", - "self-hosted" - ] + "tags": ["pastebin", "code", "snippets", "self-hosted"] }, { "id": "openhands", @@ -4662,12 +3663,7 @@ "website": "https://github.com/all-hands-ai/OpenHands", "docs": "https://github.com/all-hands-ai/OpenHands" }, - "tags": [ - "ai", - "agents", - "llm", - "openai" - ] + "tags": ["ai", "agents", "llm", "openai"] }, { "id": "openinary", @@ -4699,9 +3695,7 @@ "website": "https://openpanel.dev/", "docs": "https://openpanel.dev/docs" }, - "tags": [ - "analytics" - ] + "tags": ["analytics"] }, { "id": "openresty-manager", @@ -4714,14 +3708,7 @@ "docs": "https://github.com/Safe3/openresty-manager" }, "logo": "logo.svg", - "tags": [ - "web", - "proxy", - "security", - "self-hosted", - "openresty", - "nginx" - ] + "tags": ["web", "proxy", "security", "self-hosted", "openresty", "nginx"] }, { "id": "openspeedtest", @@ -4734,13 +3721,7 @@ "website": "https://openspeedtest.com/", "docs": "https://github.com/openspeedtest/Speed-Test/wiki" }, - "tags": [ - "network", - "testing", - "performance", - "monitoring", - "bandwidth" - ] + "tags": ["network", "testing", "performance", "monitoring", "bandwidth"] }, { "id": "otterwiki", @@ -4753,12 +3734,7 @@ "website": "https://otterwiki.com/", "docs": "https://github.com/redimp/otterwiki/wiki" }, - "tags": [ - "wiki", - "documentation", - "knowledge-base", - "markdown" - ] + "tags": ["wiki", "documentation", "knowledge-base", "markdown"] }, { "id": "outline", @@ -4771,11 +3747,7 @@ "docs": "https://docs.getoutline.com/s/guide" }, "logo": "outline.png", - "tags": [ - "documentation", - "knowledge-base", - "self-hosted" - ] + "tags": ["documentation", "knowledge-base", "self-hosted"] }, { "id": "owncast", @@ -4808,11 +3780,7 @@ "website": "https://palmr.kyantech.com.br/", "docs": "https://palmr.kyantech.com.br/docs/3.0-beta" }, - "tags": [ - "file-sharing", - "self-hosted", - "open-source" - ] + "tags": ["file-sharing", "self-hosted", "open-source"] }, { "id": "parseable", @@ -4825,12 +3793,7 @@ "website": "https://www.parseable.com/", "docs": "https://www.parseable.com/docs" }, - "tags": [ - "observability", - "logging", - "analytics", - "monitoring" - ] + "tags": ["observability", "logging", "analytics", "monitoring"] }, { "id": "passbolt", @@ -4843,12 +3806,7 @@ "website": "https://www.passbolt.com/", "docs": "https://www.passbolt.com/docs/" }, - "tags": [ - "password-manager", - "security", - "team-collaboration", - "encryption" - ] + "tags": ["password-manager", "security", "team-collaboration", "encryption"] }, { "id": "pastefy", @@ -4861,12 +3819,7 @@ "website": "https://pastefy.app", "docs": "https://github.com/interaapps/pastefy/wiki" }, - "tags": [ - "pastebin", - "text-sharing", - "collaboration", - "oauth2" - ] + "tags": ["pastebin", "text-sharing", "collaboration", "oauth2"] }, { "id": "paymenter", @@ -4900,13 +3853,7 @@ "website": "https://peerdb.io", "docs": "https://docs.peerdb.io" }, - "tags": [ - "database", - "integration", - "sync", - "sql", - "workflow" - ] + "tags": ["database", "integration", "sync", "sql", "workflow"] }, { "id": "penpot", @@ -4919,10 +3866,7 @@ "website": "https://penpot.app/", "docs": "https://docs.penpot.app/" }, - "tags": [ - "design", - "collaboration" - ] + "tags": ["design", "collaboration"] }, { "id": "peppermint", @@ -4935,11 +3879,7 @@ "website": "https://peppermint.sh/", "docs": "https://docs.peppermint.sh/" }, - "tags": [ - "api", - "development", - "documentation" - ] + "tags": ["api", "development", "documentation"] }, { "id": "pgadmin", @@ -4952,11 +3892,7 @@ "docs": "https://www.pgadmin.org/docs/" }, "logo": "pgadmin.webp", - "tags": [ - "database", - "postgres", - "admin" - ] + "tags": ["database", "postgres", "admin"] }, { "id": "photoprism", @@ -4969,11 +3905,7 @@ "website": "https://www.photoprism.app/", "docs": "https://docs.photoprism.app/" }, - "tags": [ - "media", - "photos", - "self-hosted" - ] + "tags": ["media", "photos", "self-hosted"] }, { "id": "phpmyadmin", @@ -4986,9 +3918,7 @@ "website": "https://www.phpmyadmin.net/", "docs": "https://www.phpmyadmin.net/docs/" }, - "tags": [ - "database" - ] + "tags": ["database"] }, { "id": "picsur", @@ -5001,12 +3931,7 @@ "website": "https://github.com/CaramelFur/picsur", "docs": "https://github.com/CaramelFur/picsur#readme" }, - "tags": [ - "image-hosting", - "media", - "self-hosted", - "postgres" - ] + "tags": ["image-hosting", "media", "self-hosted", "postgres"] }, { "id": "pinchflat", @@ -5019,11 +3944,7 @@ "website": "https://github.com/kieraneglin/pinchflat", "docs": "https://github.com/kieraneglin/pinchflat" }, - "tags": [ - "youtube", - "downloader", - "media" - ] + "tags": ["youtube", "downloader", "media"] }, { "id": "plane", @@ -5036,9 +3957,7 @@ "website": "https://plane.so", "docs": "https://docs.plane.so/" }, - "tags": [ - "kanban" - ] + "tags": ["kanban"] }, { "id": "plark", @@ -5051,11 +3970,7 @@ "website": "https://plark.com", "docs": "https://plark.com/get-started" }, - "tags": [ - "cms", - "content-management", - "blog" - ] + "tags": ["cms", "content-management", "blog"] }, { "id": "plausible", @@ -5068,9 +3983,7 @@ "website": "https://plausible.io/", "docs": "https://plausible.io/docs" }, - "tags": [ - "analytics" - ] + "tags": ["analytics"] }, { "id": "plunk", @@ -5083,12 +3996,7 @@ "website": "https://www.useplunk.com/", "docs": "https://docs.useplunk.com" }, - "tags": [ - "email", - "newsletter", - "mailing-list", - "marketing" - ] + "tags": ["email", "newsletter", "mailing-list", "marketing"] }, { "id": "pocket-id", @@ -5101,10 +4009,7 @@ "website": "https://pocket-id.org/", "docs": "https://pocket-id.org/docs" }, - "tags": [ - "identity", - "auth" - ] + "tags": ["identity", "auth"] }, { "id": "pocketbase", @@ -5117,11 +4022,7 @@ "website": "https://pocketbase.io/", "docs": "https://pocketbase.io/docs/" }, - "tags": [ - "backend", - "database", - "api" - ] + "tags": ["backend", "database", "api"] }, { "id": "poke", @@ -5153,10 +4054,7 @@ "website": "https://www.portainer.io/", "docs": "https://docs.portainer.io/" }, - "tags": [ - "cloud", - "monitoring" - ] + "tags": ["cloud", "monitoring"] }, { "id": "poste.io", @@ -5192,13 +4090,7 @@ "website": "https://pgdog.dev", "docs": "https://docs.pgdog.dev" }, - "tags": [ - "database", - "postgresql", - "pooler", - "proxy", - "load-balancer" - ] + "tags": ["database", "postgresql", "pooler", "proxy", "load-balancer"] }, { "id": "postgresus", @@ -5211,11 +4103,7 @@ "website": "https://postgresus.com", "docs": "https://postgresus.com" }, - "tags": [ - "postgres", - "backup", - "s3" - ] + "tags": ["postgres", "backup", "s3"] }, { "id": "postiz", @@ -5228,11 +4116,7 @@ "website": "https://postiz.com", "docs": "https://docs.postiz.com" }, - "tags": [ - "cms", - "content-management", - "publishing" - ] + "tags": ["cms", "content-management", "publishing"] }, { "id": "pre0.22.5-supabase", @@ -5245,11 +4129,7 @@ "docs": "https://supabase.com/docs/guides/self-hosting" }, "logo": "supabase.svg", - "tags": [ - "database", - "firebase", - "postgres" - ], + "tags": ["database", "firebase", "postgres"], "dokploy_version": "<0.22.5" }, { @@ -5263,11 +4143,7 @@ "website": "https://prometheus.io/", "docs": "https://prometheus.io/docs/introduction/overview/" }, - "tags": [ - "monitoring", - "alerting", - "metrics" - ] + "tags": ["monitoring", "alerting", "metrics"] }, { "id": "pterodactyl", @@ -5280,11 +4156,7 @@ "website": "https://pterodactyl.io", "docs": "https://pterodactyl.io/project/introduction.html" }, - "tags": [ - "self-hosted", - "open-source", - "management" - ] + "tags": ["self-hosted", "open-source", "management"] }, { "id": "pulse", @@ -5297,12 +4169,7 @@ "website": "https://pulserelay.pro/", "docs": "https://github.com/rcourtman/Pulse/blob/main/docs/README.md" }, - "tags": [ - "monitoring", - "proxmox", - "docker", - "metrics" - ] + "tags": ["monitoring", "proxmox", "docker", "metrics"] }, { "id": "pyrodactyl", @@ -5315,11 +4182,7 @@ "website": "https://pyrodactyl.dev", "docs": "https://pyrodactyl.dev/docs" }, - "tags": [ - "self-hosted", - "open-source", - "management" - ] + "tags": ["self-hosted", "open-source", "management"] }, { "id": "qbittorrent", @@ -5332,11 +4195,7 @@ "website": "https://www.qbittorrent.org/", "docs": "https://github.com/qbittorrent/qBittorrent/wiki" }, - "tags": [ - "torrent", - "download", - "file-sharing" - ] + "tags": ["torrent", "download", "file-sharing"] }, { "id": "qbitwebui", @@ -5349,12 +4208,7 @@ "website": "https://github.com/Maciejonos/qbitwebui", "docs": "https://github.com/Maciejonos/qbitwebui#readme" }, - "tags": [ - "torrent", - "download", - "media", - "qbittorrent" - ] + "tags": ["torrent", "download", "media", "qbittorrent"] }, { "id": "qdrant", @@ -5367,11 +4221,7 @@ "website": "https://qdrant.tech/", "docs": "https://qdrant.tech/documentation/" }, - "tags": [ - "vector-db", - "database", - "search" - ] + "tags": ["vector-db", "database", "search"] }, { "id": "quant-ux", @@ -5384,13 +4234,7 @@ "website": "https://www.quant-ux.com/", "docs": "https://www.quant-ux.com/" }, - "tags": [ - "design", - "ux", - "prototyping", - "user-research", - "analytics" - ] + "tags": ["design", "ux", "prototyping", "user-research", "analytics"] }, { "id": "rabbitmq", @@ -5403,11 +4247,7 @@ "website": "https://www.rabbitmq.com/", "docs": "https://www.rabbitmq.com/documentation.html" }, - "tags": [ - "message-broker", - "queue", - "rabbitmq" - ] + "tags": ["message-broker", "queue", "rabbitmq"] }, { "id": "reactive-resume", @@ -5420,12 +4260,7 @@ "website": "https://rxresu.me/", "docs": "https://docs.rxresu.me/" }, - "tags": [ - "resume", - "cv", - "productivity", - "document" - ] + "tags": ["resume", "cv", "productivity", "document"] }, { "id": "registry", @@ -5438,11 +4273,7 @@ "docs": "https://distribution.github.io/distribution/" }, "logo": "registry.png", - "tags": [ - "registry", - "docker", - "self-hosted" - ] + "tags": ["registry", "docker", "self-hosted"] }, { "id": "rocketchat", @@ -5455,9 +4286,7 @@ "website": "https://rocket.chat/", "docs": "https://rocket.chat/docs/" }, - "tags": [ - "chat" - ] + "tags": ["chat"] }, { "id": "rote", @@ -5470,12 +4299,7 @@ "website": "https://rote.ink", "docs": "https://github.com/Rabithua/Rote/tree/main/doc/userguide" }, - "tags": [ - "notes", - "productivity", - "postgres", - "bun" - ] + "tags": ["notes", "productivity", "postgres", "bun"] }, { "id": "roundcube", @@ -5488,11 +4312,7 @@ "website": "https://roundcube.net/", "docs": "https://roundcube.net/about/" }, - "tags": [ - "self-hosted", - "email", - "webmail" - ] + "tags": ["self-hosted", "email", "webmail"] }, { "id": "rss-bridge", @@ -5505,12 +4325,7 @@ "website": "https://rss-bridge.github.io/rss-bridge/", "docs": "https://rss-bridge.github.io/rss-bridge/General/Project_goals.html" }, - "tags": [ - "rss", - "feeds", - "news", - "content" - ] + "tags": ["rss", "feeds", "news", "content"] }, { "id": "rsshub", @@ -5523,11 +4338,7 @@ "website": "https://rsshub.app/", "docs": "https://docs.rsshub.app/" }, - "tags": [ - "rss", - "api", - "self-hosted" - ] + "tags": ["rss", "api", "self-hosted"] }, { "id": "rustdesk", @@ -5540,11 +4351,7 @@ "website": "https://rustdesk.com/", "docs": "https://rustdesk.com/docs/" }, - "tags": [ - "remote-desktop", - "self-hosted", - "productivity" - ] + "tags": ["remote-desktop", "self-hosted", "productivity"] }, { "id": "rustfs", @@ -5557,12 +4364,7 @@ "website": "https://rustfs.com/", "docs": "https://docs.rustfs.com/" }, - "tags": [ - "storage", - "s3", - "object-storage", - "rust" - ] + "tags": ["storage", "s3", "object-storage", "rust"] }, { "id": "rutorrent", @@ -5575,12 +4377,7 @@ "website": "https://crazymax.dev/", "docs": "https://github.com/crazy-max/docker-rtorrent-rutorrent" }, - "tags": [ - "torrent", - "rtorrent", - "webui", - "downloader" - ] + "tags": ["torrent", "rtorrent", "webui", "downloader"] }, { "id": "rybbit", @@ -5593,9 +4390,7 @@ "website": "https://rybbit.io", "docs": "https://www.rybbit.io/docs" }, - "tags": [ - "analytics" - ] + "tags": ["analytics"] }, { "id": "ryot", @@ -5608,11 +4403,7 @@ "website": "https://ryot.io/", "docs": "https://docs.ryot.io/" }, - "tags": [ - "media", - "tracking", - "self-hosted" - ] + "tags": ["media", "tracking", "self-hosted"] }, { "id": "scrutiny", @@ -5625,10 +4416,7 @@ "website": "", "docs": "" }, - "tags": [ - "monitoring", - "NAS" - ] + "tags": ["monitoring", "NAS"] }, { "id": "scrypted", @@ -5641,12 +4429,7 @@ "website": "https://www.scrypted.app/", "docs": "https://docs.scrypted.app/" }, - "tags": [ - "home-automation", - "nvr", - "smart-home", - "surveillance" - ] + "tags": ["home-automation", "nvr", "smart-home", "surveillance"] }, { "id": "seafile", @@ -5659,11 +4442,7 @@ "website": "https://seafile.com", "docs": "https://manual.seafile.com/12.0" }, - "tags": [ - "file-manager", - "file-sharing", - "storage" - ] + "tags": ["file-manager", "file-sharing", "storage"] }, { "id": "searxng", @@ -5695,13 +4474,7 @@ "website": "https://seaweedfs.com/", "docs": "https://github.com/seaweedfs/seaweedfs/wiki" }, - "tags": [ - "storage", - "s3", - "distributed", - "object-storage", - "file-system" - ] + "tags": ["storage", "s3", "distributed", "object-storage", "file-system"] }, { "id": "shlink", @@ -5714,11 +4487,7 @@ "website": "https://shlink.io", "docs": "https://shlink.io/documentation" }, - "tags": [ - "sharing", - "shortener", - "url" - ] + "tags": ["sharing", "shortener", "url"] }, { "id": "signoz", @@ -5752,12 +4521,7 @@ "website": "https://silverbullet.md", "docs": "https://silverbullet.md/docs" }, - "tags": [ - "notes", - "knowledge-base", - "productivity", - "markdown" - ] + "tags": ["notes", "knowledge-base", "productivity", "markdown"] }, { "id": "slash", @@ -5770,11 +4534,7 @@ "website": "https://github.com/yourselfhosted/slash#readme", "docs": "https://github.com/yourselfhosted/slash/wiki" }, - "tags": [ - "bookmarks", - "link-shortener", - "self-hosted" - ] + "tags": ["bookmarks", "link-shortener", "self-hosted"] }, { "id": "snapp", @@ -5787,12 +4547,7 @@ "website": "https://github.com/UraniaDev/snapp", "docs": "https://github.com/UraniaDev/snapp" }, - "tags": [ - "screenshot", - "sharing", - "self-hosted", - "authentication" - ] + "tags": ["screenshot", "sharing", "self-hosted", "authentication"] }, { "id": "soketi", @@ -5805,9 +4560,7 @@ "website": "https://soketi.app/", "docs": "https://docs.soketi.app/" }, - "tags": [ - "chat" - ] + "tags": ["chat"] }, { "id": "spacedrive", @@ -5820,11 +4573,7 @@ "docs": "https://www.spacedrive.com/docs/product/getting-started/introduction" }, "logo": "spacedrive.png", - "tags": [ - "file-manager", - "vdfs", - "storage" - ] + "tags": ["file-manager", "vdfs", "storage"] }, { "id": "stack-auth", @@ -5837,11 +4586,7 @@ "website": "https://stack-auth.com/", "docs": "https://docs.stack-auth.com/next/overview" }, - "tags": [ - "authentication", - "auth", - "authorization" - ] + "tags": ["authentication", "auth", "authorization"] }, { "id": "stalwart", @@ -5875,10 +4620,7 @@ "website": "https://statping-ng.github.io/", "docs": "https://statping-ng.github.io/install.html" }, - "tags": [ - "monitoring", - "status-page" - ] + "tags": ["monitoring", "status-page"] }, { "id": "stirling", @@ -5891,10 +4633,7 @@ "website": "https://www.stirlingpdf.com/", "docs": "https://docs.stirlingpdf.com/" }, - "tags": [ - "pdf", - "tools" - ] + "tags": ["pdf", "tools"] }, { "id": "storyden", @@ -5908,12 +4647,7 @@ "docs": "https://www.storyden.org/docs/introduction", "website": "https://www.storyden.org/" }, - "tags": [ - "forum", - "discussion", - "community", - "open-source" - ] + "tags": ["forum", "discussion", "community", "open-source"] }, { "id": "strapi", @@ -5927,11 +4661,7 @@ "docs": "https://docs.strapi.io", "website": "https://strapi.io" }, - "tags": [ - "headless", - "cms", - "content-management" - ] + "tags": ["headless", "cms", "content-management"] }, { "id": "streamflow", @@ -5944,13 +4674,7 @@ "website": "https://github.com/bangtutorial/streamflow", "docs": "https://github.com/bangtutorial/streamflow#readme" }, - "tags": [ - "streaming", - "rtmp", - "video", - "live-streaming", - "media" - ] + "tags": ["streaming", "rtmp", "video", "live-streaming", "media"] }, { "id": "strapi", @@ -5964,11 +4688,7 @@ "docs": "https://docs.strapi.io", "website": "https://strapi.io" }, - "tags": [ - "headless", - "cms", - "content-management" - ] + "tags": ["headless", "cms", "content-management"] }, { "id": "supabase", @@ -5981,11 +4701,7 @@ "docs": "https://supabase.com/docs/guides/self-hosting" }, "logo": "supabase.svg", - "tags": [ - "database", - "firebase", - "postgres" - ], + "tags": ["database", "firebase", "postgres"], "dokploy_version": ">=0.22.5" }, { @@ -5999,13 +4715,7 @@ "website": "https://superset.apache.org", "docs": "https://superset.apache.org/docs/intro" }, - "tags": [ - "analytics", - "bi", - "dashboard", - "database", - "sql" - ] + "tags": ["analytics", "bi", "dashboard", "database", "sql"] }, { "id": "surrealdb", @@ -6018,11 +4728,7 @@ "website": "https://surrealdb.com", "docs": "https://surrealdb.com/docs/surrealdb" }, - "tags": [ - "database", - "sql", - "surrealdb" - ] + "tags": ["database", "sql", "surrealdb"] }, { "id": "syncthing", @@ -6035,11 +4741,7 @@ "website": "https://syncthing.net/", "docs": "https://docs.syncthing.net/" }, - "tags": [ - "file-sync", - "synchronization", - "backup" - ] + "tags": ["file-sync", "synchronization", "backup"] }, { "id": "tailscale-exitnode", @@ -6052,9 +4754,7 @@ "website": "https://tailscale.com/", "docs": "https://tailscale.com/kb/1408/quick-guide-exit-nodes" }, - "tags": [ - "network" - ] + "tags": ["network"] }, { "id": "teable", @@ -6067,12 +4767,7 @@ "website": "https://teable.io/", "docs": "https://help.teable.io/" }, - "tags": [ - "database", - "spreadsheet", - "low-code", - "nocode" - ] + "tags": ["database", "spreadsheet", "low-code", "nocode"] }, { "id": "tianji", @@ -6085,12 +4780,7 @@ "website": "https://tianji.dev/", "docs": "https://tianji.dev/docs/intro" }, - "tags": [ - "analytics", - "monitoring", - "web", - "uptime" - ] + "tags": ["analytics", "monitoring", "web", "uptime"] }, { "id": "tolgee", @@ -6103,12 +4793,7 @@ "website": "https://tolgee.io", "docs": "https://tolgee.io/platform" }, - "tags": [ - "self-hosted", - "i18n", - "localization", - "translations" - ] + "tags": ["self-hosted", "i18n", "localization", "translations"] }, { "id": "tooljet", @@ -6121,11 +4806,7 @@ "website": "https://tooljet.ai/", "docs": "https://docs.tooljet.ai/" }, - "tags": [ - "file-sync", - "file-sharing", - "self-hosted" - ] + "tags": ["file-sync", "file-sharing", "self-hosted"] }, { "id": "tor-browser", @@ -6138,12 +4819,7 @@ "website": "https://www.torproject.org/", "docs": "https://hub.docker.com/r/domistyle/tor-browser" }, - "tags": [ - "privacy", - "security", - "browser", - "tor" - ] + "tags": ["privacy", "security", "browser", "tor"] }, { "id": "trailbase", @@ -6156,11 +4832,7 @@ "website": "https://trailbase.io/", "docs": "https://trailbase.io/getting-started/install" }, - "tags": [ - "backend", - "database", - "api" - ] + "tags": ["backend", "database", "api"] }, { "id": "triggerdotdev", @@ -6173,10 +4845,7 @@ "website": "https://trigger.dev/", "docs": "https://trigger.dev/docs" }, - "tags": [ - "event-driven", - "applications" - ] + "tags": ["event-driven", "applications"] }, { "id": "trilium", @@ -6189,11 +4858,7 @@ "website": "https://github.com/zadam/trilium", "docs": "https://github.com/zadam/trilium/wiki/" }, - "tags": [ - "self-hosted", - "productivity", - "personal-use" - ] + "tags": ["self-hosted", "productivity", "personal-use"] }, { "id": "trilium-next", @@ -6206,11 +4871,7 @@ "website": "https://triliumnotes.org/", "docs": "https://docs.triliumnotes.org/" }, - "tags": [ - "self-hosted", - "productivity", - "personal-use" - ] + "tags": ["self-hosted", "productivity", "personal-use"] }, { "id": "trmnl-byos-laravel", @@ -6223,9 +4884,7 @@ "website": "https://docs.usetrmnl.com/go/diy/byos", "docs": "https://github.com/usetrmnl/byos_laravel/blob/main/README.md" }, - "tags": [ - "e-ink" - ] + "tags": ["e-ink"] }, { "id": "tuwunel", @@ -6238,12 +4897,7 @@ "website": "https://tuwunel.chat", "docs": "https://matrix-construct.github.io/tuwunel/" }, - "tags": [ - "matrix", - "chat", - "messaging", - "rust" - ] + "tags": ["matrix", "chat", "messaging", "rust"] }, { "id": "twenty", @@ -6256,11 +4910,7 @@ "website": "https://twenty.com", "docs": "https://docs.twenty.com" }, - "tags": [ - "crm", - "sales", - "business" - ] + "tags": ["crm", "sales", "business"] }, { "id": "typebot", @@ -6273,11 +4923,7 @@ "website": "https://typebot.io/", "docs": "https://docs.typebot.io/get-started/introduction" }, - "tags": [ - "chatbot", - "builder", - "open-source" - ] + "tags": ["chatbot", "builder", "open-source"] }, { "id": "typecho", @@ -6290,11 +4936,7 @@ "website": "https://typecho.org/", "docs": "http://docs.typecho.org" }, - "tags": [ - "blog", - "cms", - "php" - ] + "tags": ["blog", "cms", "php"] }, { "id": "typesense", @@ -6307,9 +4949,7 @@ "website": "https://typesense.org/", "docs": "https://typesense.org/docs" }, - "tags": [ - "search" - ] + "tags": ["search"] }, { "id": "umami", @@ -6322,9 +4962,7 @@ "website": "https://umami.is", "docs": "https://umami.is/docs" }, - "tags": [ - "analytics" - ] + "tags": ["analytics"] }, { "id": "unifi", @@ -6337,10 +4975,7 @@ "website": "https://www.ui.com/", "docs": "https://help.ui.com/hc/en-us/articles/360012282453-Self-Hosting-a-UniFi-Network-Server" }, - "tags": [ - "self-hosted", - "networking" - ] + "tags": ["self-hosted", "networking"] }, { "id": "unleash", @@ -6371,12 +5006,7 @@ "website": "https://github.com/seriousm4x/upsnap", "docs": "https://github.com/seriousm4x/upsnap#readme" }, - "tags": [ - "network", - "monitoring", - "dashboard", - "self-hosted" - ] + "tags": ["network", "monitoring", "dashboard", "self-hosted"] }, { "id": "uptime-kuma", @@ -6389,9 +5019,7 @@ "website": "https://uptime.kuma.pet/", "docs": "https://github.com/louislam/uptime-kuma/wiki" }, - "tags": [ - "monitoring" - ] + "tags": ["monitoring"] }, { "id": "usesend", @@ -6404,12 +5032,7 @@ "website": "https://usesend.com/", "docs": "https://docs.usesend.com/introduction" }, - "tags": [ - "e-mail", - "marketing", - "business", - "self-hosted" - ] + "tags": ["e-mail", "marketing", "business", "self-hosted"] }, { "id": "valkey", @@ -6422,12 +5045,7 @@ "website": "https://valkey.io/", "docs": "https://github.com/valkey-io/valkey" }, - "tags": [ - "database", - "cache", - "redis", - "in-memory" - ] + "tags": ["database", "cache", "redis", "in-memory"] }, { "id": "vault", @@ -6440,12 +5058,7 @@ "website": "https://www.vaultproject.io/", "docs": "https://developer.hashicorp.com/vault/docs" }, - "tags": [ - "security", - "secrets", - "devops", - "infrastructure" - ] + "tags": ["security", "secrets", "devops", "infrastructure"] }, { "id": "vaultwarden", @@ -6458,9 +5071,7 @@ "website": "", "docs": "https://github.com/dani-garcia/vaultwarden/wiki" }, - "tags": [ - "open-source" - ] + "tags": ["open-source"] }, { "id": "verdaccio", @@ -6473,11 +5084,7 @@ "website": "https://www.verdaccio.org/", "docs": "https://www.verdaccio.org/docs/what-is-verdaccio" }, - "tags": [ - "node.js", - "package-repository", - "npm" - ] + "tags": ["node.js", "package-repository", "npm"] }, { "id": "vikunja", @@ -6490,12 +5097,7 @@ "website": "https://vikunja.io/", "docs": "https://vikunja.io/docs/" }, - "tags": [ - "productivity", - "tasks", - "self-hosted", - "project-management" - ] + "tags": ["productivity", "tasks", "self-hosted", "project-management"] }, { "id": "wallos", @@ -6527,12 +5129,7 @@ "website": "https://wanderer.app", "docs": "https://github.com/flomp/wanderer#readme" }, - "tags": [ - "mapping", - "geolocation", - "search", - "self-hosted" - ] + "tags": ["mapping", "geolocation", "search", "self-hosted"] }, { "id": "web-check", @@ -6545,12 +5142,7 @@ "website": "https://github.com/lissy93/web-check", "docs": "https://github.com/lissy93/web-check" }, - "tags": [ - "website-analyzer", - "security", - "performance", - "seo" - ] + "tags": ["website-analyzer", "security", "performance", "seo"] }, { "id": "wg-easy", @@ -6563,11 +5155,7 @@ "website": "https://wg-easy.github.io/", "docs": "https://github.com/wg-easy/wg-easy/wiki" }, - "tags": [ - "vpn", - "wireguard", - "networking" - ] + "tags": ["vpn", "wireguard", "networking"] }, { "id": "wikijs", @@ -6580,11 +5168,7 @@ "website": "https://js.wiki/", "docs": "https://docs.requarks.io/" }, - "tags": [ - "knowledge-base", - "self-hosted", - "documentation" - ] + "tags": ["knowledge-base", "self-hosted", "documentation"] }, { "id": "windmill", @@ -6597,11 +5181,7 @@ "website": "https://www.windmill.dev/", "docs": "https://docs.windmill.dev/" }, - "tags": [ - "workflow", - "automation", - "development" - ] + "tags": ["workflow", "automation", "development"] }, { "id": "windows", @@ -6614,11 +5194,7 @@ "website": "", "docs": "https://github.com/dockur/windows?tab=readme-ov-file#how-do-i-use-it" }, - "tags": [ - "self-hosted", - "open-source", - "os" - ] + "tags": ["self-hosted", "open-source", "os"] }, { "id": "wordpress", @@ -6631,9 +5207,7 @@ "website": "https://wordpress.org/", "docs": "https://wordpress.org/documentation/" }, - "tags": [ - "cms" - ] + "tags": ["cms"] }, { "id": "wuzapi", @@ -6646,12 +5220,7 @@ "website": "https://www.wuzapi.app/", "docs": "https://github.com/asternic/wuzapi/blob/main/README.md" }, - "tags": [ - "api", - "whatsapp", - "messaging", - "automation" - ] + "tags": ["api", "whatsapp", "messaging", "automation"] }, { "id": "xsshunter", @@ -6664,11 +5233,7 @@ "website": "https://github.com/rs-loves-bugs/xsshunter", "docs": "https://github.com/rs-loves-bugs/xsshunter#requirements" }, - "tags": [ - "pentest", - "xsshunter", - "bugbounty" - ] + "tags": ["pentest", "xsshunter", "bugbounty"] }, { "id": "yamtrack", @@ -6681,13 +5246,7 @@ "website": "https://github.com/fuzzygrim/yamtrack", "docs": "https://github.com/fuzzygrim/yamtrack" }, - "tags": [ - "media", - "anime", - "manga", - "tracker", - "redis" - ] + "tags": ["media", "anime", "manga", "tracker", "redis"] }, { "id": "yourls", @@ -6700,10 +5259,7 @@ "website": "https://yourls.org/", "docs": "https://yourls.org/#documentation" }, - "tags": [ - "url-shortener", - "php" - ] + "tags": ["url-shortener", "php"] }, { "id": "yt-dlp-webui", @@ -6716,12 +5272,7 @@ "website": "https://github.com/marcopiovanello/yt-dlp-web-ui", "docs": "https://github.com/marcopiovanello/yt-dlp-web-ui" }, - "tags": [ - "downloader", - "youtube", - "media", - "webui" - ] + "tags": ["downloader", "youtube", "media", "webui"] }, { "id": "zabbix", @@ -6734,12 +5285,7 @@ "website": "https://www.zabbix.com/", "docs": "https://www.zabbix.com/documentation/current/en/manual/installation/containers" }, - "tags": [ - "monitoring", - "infrastructure", - "observability", - "alerting" - ] + "tags": ["monitoring", "infrastructure", "observability", "alerting"] }, { "id": "zipline", @@ -6752,10 +5298,7 @@ "website": "https://zipline.diced.sh/", "docs": "https://zipline.diced.sh/docs/" }, - "tags": [ - "media system", - "storage" - ] + "tags": ["media system", "storage"] }, { "id": "zitadel",