From 8c1085741b802738b815f5bed69c3b8bc59c6d18 Mon Sep 17 00:00:00 2001 From: Klaas van Schelven Date: Thu, 17 Apr 2025 22:52:15 +0200 Subject: [PATCH] Bugsink template (not yet tested) (#68) * Bugsink template (not yet tested) See #56 * Update blueprints/bugsink/docker-compose.yml * Update blueprints/bugsink/template.toml * Update blueprints/bugsink/template.toml --------- Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> --- blueprints/bugsink/bugsink.png | Bin 0 -> 50253 bytes blueprints/bugsink/docker-compose.yml | 37 ++ blueprints/bugsink/template.toml | 18 + meta.json | 902 +++++--------------------- 4 files changed, 235 insertions(+), 722 deletions(-) create mode 100644 blueprints/bugsink/bugsink.png create mode 100644 blueprints/bugsink/docker-compose.yml create mode 100644 blueprints/bugsink/template.toml diff --git a/blueprints/bugsink/bugsink.png b/blueprints/bugsink/bugsink.png new file mode 100644 index 0000000000000000000000000000000000000000..968b12b57fafec762c05efd2945f65d8a0cc0484 GIT binary patch literal 50253 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 Hu0mjf`=N?L literal 0 HcmV?d00001 diff --git a/blueprints/bugsink/docker-compose.yml b/blueprints/bugsink/docker-compose.yml new file mode 100644 index 0000000..b43cc0f --- /dev/null +++ b/blueprints/bugsink/docker-compose.yml @@ -0,0 +1,37 @@ +services: + mysql: + image: mysql:8.4 + restart: unless-stopped + environment: + MYSQL_ROOT_PASSWORD: $DB_PASSWORD + MYSQL_DATABASE: bugsink + volumes: + - my-datavolume:/var/lib/mysql + healthcheck: + test: ["CMD-SHELL", "exit | mysql -h localhost -P 3306 -u root -p$$MYSQL_ROOT_PASSWORD" ] # 'exit |' closes the MySQL input prompt + interval: 1s + timeout: 20s + retries: 30 + + web: + image: bugsink/bugsink + depends_on: + mysql: + condition: service_healthy + restart: unless-stopped + ports: + - "8000" + environment: + SECRET_KEY: "${SECRET_KEY}" + CREATE_SUPERUSER: admin:${ADMIN_PASSWORD} + PORT: 8000 + DATABASE_URL: mysql://root:${DB_PASSWORD}@mysql:3306/bugsink + BASE_URL: http://${MAIN_DOMAIN} + healthcheck: + test: ["CMD-SHELL", "python -c 'import requests; requests.get(\"http://localhost:8000/\").raise_for_status()'"] + interval: 5s + timeout: 20s + retries: 10 + +volumes: + my-datavolume: diff --git a/blueprints/bugsink/template.toml b/blueprints/bugsink/template.toml new file mode 100644 index 0000000..265bed3 --- /dev/null +++ b/blueprints/bugsink/template.toml @@ -0,0 +1,18 @@ +[variables] +main_domain = "${domain}" +secret_key = "#&^%@!z$*p9s8r7q6p5o4n3m2l1k0j9h8g7f6e5d4c3b2a1Z0Y9X8W7V6U5T4S3R2Q1P0O9N8M7L6K5J4I3H2G1F0E9D8C7B6A5" +db_password = "${password:16}" +admin_password = "${password:16}" + + +[config] +[config.env] +DB_PASSWORD = "${db_password}" +MAIN_DOMAIN = "${main_domain}" +SECRET_KEY = "${secret_key}" +ADMIN_PASSWORD = "${admin_password}" + +[[config.domains]] +serviceName = "web" +port = 8_000 +host = "${main_domain}" diff --git a/meta.json b/meta.json index 67cd8a3..8d927d1 100644 --- a/meta.json +++ b/meta.json @@ -1,4 +1,5 @@ -[ { +[ + { "id": "appwrite", "name": "Appwrite", "version": "1.6.0", @@ -9,11 +10,7 @@ "docs": "https://appwrite.io/docs" }, "logo": "appwrite.svg", - "tags": [ - "database", - "firebase", - "postgres" - ] + "tags": ["database", "firebase", "postgres"] }, { "id": "outline", @@ -26,11 +23,7 @@ "docs": "https://docs.getoutline.com/s/guide" }, "logo": "outline.png", - "tags": [ - "documentation", - "knowledge-base", - "self-hosted" - ] + "tags": ["documentation", "knowledge-base", "self-hosted"] }, { "id": "supabase", @@ -43,11 +36,7 @@ "docs": "https://supabase.com/docs/guides/self-hosting" }, "logo": "supabase.svg", - "tags": [ - "database", - "firebase", - "postgres" - ] + "tags": ["database", "firebase", "postgres"] }, { "id": "pocketbase", @@ -60,11 +49,7 @@ "website": "https://pocketbase.io/", "docs": "https://pocketbase.io/docs/" }, - "tags": [ - "backend", - "database", - "api" - ] + "tags": ["backend", "database", "api"] }, { "id": "plausible", @@ -77,9 +62,7 @@ "website": "https://plausible.io/", "docs": "https://plausible.io/docs" }, - "tags": [ - "analytics" - ] + "tags": ["analytics"] }, { "id": "calcom", @@ -92,10 +75,7 @@ "docs": "https://cal.com/docs" }, "logo": "calcom.jpg", - "tags": [ - "scheduling", - "booking" - ] + "tags": ["scheduling", "booking"] }, { "id": "grafana", @@ -108,9 +88,7 @@ "website": "https://grafana.com/", "docs": "https://grafana.com/docs/" }, - "tags": [ - "monitoring" - ] + "tags": ["monitoring"] }, { "id": "datalens", @@ -123,12 +101,7 @@ "website": "https://datalens.tech/", "docs": "https://datalens.tech/docs/" }, - "tags": [ - "analytics", - "self-hosted", - "bi", - "monitoring" - ] + "tags": ["analytics", "self-hosted", "bi", "monitoring"] }, { "id": "directus", @@ -141,9 +114,7 @@ "website": "https://directus.io/", "docs": "https://docs.directus.io/" }, - "tags": [ - "cms" - ] + "tags": ["cms"] }, { "id": "baserow", @@ -156,9 +127,7 @@ "website": "https://baserow.io/", "docs": "https://baserow.io/docs/index" }, - "tags": [ - "database" - ] + "tags": ["database"] }, { "id": "budibase", @@ -171,12 +140,7 @@ "website": "https://budibase.com/", "docs": "https://docs.budibase.com/docs/" }, - "tags": [ - "database", - "low-code", - "nocode", - "applications" - ] + "tags": ["database", "low-code", "nocode", "applications"] }, { "id": "forgejo", @@ -189,10 +153,7 @@ "website": "https://forgejo.org/", "docs": "https://forgejo.org/docs/latest/" }, - "tags": [ - "self-hosted", - "storage" - ] + "tags": ["self-hosted", "storage"] }, { "id": "ghost", @@ -205,9 +166,7 @@ "website": "https://ghost.org/", "docs": "https://ghost.org/docs/" }, - "tags": [ - "cms" - ] + "tags": ["cms"] }, { "id": "lodestone", @@ -220,11 +179,7 @@ "website": "https://lodestone.cc", "docs": "https://github.com/Lodestone-Team/lodestone/wiki" }, - "tags": [ - "minecraft", - "hosting", - "server" - ] + "tags": ["minecraft", "hosting", "server"] }, { "id": "dragonfly-db", @@ -237,10 +192,7 @@ "website": "https://www.dragonflydb.io/", "docs": "https://www.dragonflydb.io/docs" }, - "tags": [ - "database", - "redis" - ] + "tags": ["database", "redis"] }, { "id": "uptime-kuma", @@ -253,9 +205,7 @@ "website": "https://uptime.kuma.pet/", "docs": "https://github.com/louislam/uptime-kuma/wiki" }, - "tags": [ - "monitoring" - ] + "tags": ["monitoring"] }, { "id": "n8n", @@ -268,9 +218,7 @@ "website": "https://n8n.io/", "docs": "https://docs.n8n.io/" }, - "tags": [ - "automation" - ] + "tags": ["automation"] }, { "id": "kestra", @@ -283,9 +231,7 @@ "website": "https://kestra.io", "docs": "https://kestra.io/docs" }, - "tags": [ - "automation" - ] + "tags": ["automation"] }, { "id": "wordpress", @@ -298,9 +244,7 @@ "website": "https://wordpress.org/", "docs": "https://wordpress.org/documentation/" }, - "tags": [ - "cms" - ] + "tags": ["cms"] }, { "id": "odoo", @@ -313,9 +257,7 @@ "website": "https://odoo.com/", "docs": "https://www.odoo.com/documentation/" }, - "tags": [ - "cms" - ] + "tags": ["cms"] }, { "id": "appsmith", @@ -328,9 +270,7 @@ "website": "https://appsmith.com/", "docs": "https://docs.appsmith.com/" }, - "tags": [ - "cms" - ] + "tags": ["cms"] }, { "id": "excalidraw", @@ -343,9 +283,7 @@ "website": "https://excalidraw.com/", "docs": "https://docs.excalidraw.com/" }, - "tags": [ - "drawing" - ] + "tags": ["drawing"] }, { "id": "documenso", @@ -358,9 +296,7 @@ "docs": "https://documenso.com/docs" }, "logo": "documenso.png", - "tags": [ - "document-signing" - ] + "tags": ["document-signing"] }, { "id": "nocodb", @@ -373,12 +309,7 @@ "docs": "https://docs.nocodb.com/" }, "logo": "nocodb.png", - "tags": [ - "database", - "spreadsheet", - "low-code", - "nocode" - ] + "tags": ["database", "spreadsheet", "low-code", "nocode"] }, { "id": "meilisearch", @@ -391,9 +322,7 @@ "website": "https://www.meilisearch.com/", "docs": "https://docs.meilisearch.com/" }, - "tags": [ - "search" - ] + "tags": ["search"] }, { "id": "mattermost", @@ -406,10 +335,7 @@ "website": "https://mattermost.com/", "docs": "https://docs.mattermost.com/" }, - "tags": [ - "chat", - "self-hosted" - ] + "tags": ["chat", "self-hosted"] }, { "id": "phpmyadmin", @@ -422,9 +348,7 @@ "website": "https://www.phpmyadmin.net/", "docs": "https://www.phpmyadmin.net/docs/" }, - "tags": [ - "database" - ] + "tags": ["database"] }, { "id": "rocketchat", @@ -437,9 +361,7 @@ "website": "https://rocket.chat/", "docs": "https://rocket.chat/docs/" }, - "tags": [ - "chat" - ] + "tags": ["chat"] }, { "id": "minio", @@ -452,9 +374,7 @@ "website": "https://minio.io/", "docs": "https://docs.minio.io/" }, - "tags": [ - "storage" - ] + "tags": ["storage"] }, { "id": "metabase", @@ -467,10 +387,7 @@ "website": "https://www.metabase.com/", "docs": "https://www.metabase.com/docs/" }, - "tags": [ - "database", - "dashboard" - ] + "tags": ["database", "dashboard"] }, { "id": "glitchtip", @@ -483,9 +400,7 @@ "website": "https://glitchtip.com/", "docs": "https://glitchtip.com/documentation" }, - "tags": [ - "hosting" - ] + "tags": ["hosting"] }, { "id": "open-webui", @@ -498,9 +413,7 @@ "website": "https://openwebui.com/", "docs": "https://docs.openwebui.com/" }, - "tags": [ - "chat" - ] + "tags": ["chat"] }, { "id": "mailpit", @@ -513,10 +426,7 @@ "website": "https://mailpit.axllent.org/", "docs": "https://mailpit.axllent.org/docs/" }, - "tags": [ - "email", - "smtp" - ] + "tags": ["email", "smtp"] }, { "id": "listmonk", @@ -529,11 +439,7 @@ "website": "https://listmonk.app/", "docs": "https://listmonk.app/docs/" }, - "tags": [ - "email", - "newsletter", - "mailing-list" - ] + "tags": ["email", "newsletter", "mailing-list"] }, { "id": "doublezero", @@ -546,9 +452,7 @@ "website": "https://www.double-zero.cloud/", "docs": "https://github.com/technomancy-dev/00" }, - "tags": [ - "email" - ] + "tags": ["email"] }, { "id": "umami", @@ -561,9 +465,7 @@ "website": "https://umami.is", "docs": "https://umami.is/docs" }, - "tags": [ - "analytics" - ] + "tags": ["analytics"] }, { "id": "jellyfin", @@ -576,9 +478,7 @@ "website": "https://jellyfin.org/", "docs": "https://jellyfin.org/docs/" }, - "tags": [ - "media system" - ] + "tags": ["media system"] }, { "id": "teable", @@ -591,12 +491,7 @@ "website": "https://teable.io/", "docs": "https://help.teable.io/" }, - "tags": [ - "database", - "spreadsheet", - "low-code", - "nocode" - ] + "tags": ["database", "spreadsheet", "low-code", "nocode"] }, { "id": "zipline", @@ -609,10 +504,7 @@ "website": "https://zipline.diced.sh/", "docs": "https://zipline.diced.sh/docs/" }, - "tags": [ - "media system", - "storage" - ] + "tags": ["media system", "storage"] }, { "id": "soketi", @@ -625,9 +517,7 @@ "website": "https://soketi.app/", "docs": "https://docs.soketi.app/" }, - "tags": [ - "chat" - ] + "tags": ["chat"] }, { "id": "aptabase", @@ -640,10 +530,7 @@ "website": "https://aptabase.com/", "docs": "https://github.com/aptabase/aptabase/blob/main/README.md" }, - "tags": [ - "analytics", - "self-hosted" - ] + "tags": ["analytics", "self-hosted"] }, { "id": "typebot", @@ -656,11 +543,7 @@ "website": "https://typebot.io/", "docs": "https://docs.typebot.io/get-started/introduction" }, - "tags": [ - "chatbot", - "builder", - "open-source" - ] + "tags": ["chatbot", "builder", "open-source"] }, { "id": "gitea", @@ -673,10 +556,7 @@ "website": "https://gitea.com/", "docs": "https://docs.gitea.com/installation/install-with-docker" }, - "tags": [ - "self-hosted", - "storage" - ] + "tags": ["self-hosted", "storage"] }, { "id": "roundcube", @@ -689,11 +569,7 @@ "website": "https://roundcube.net/", "docs": "https://roundcube.net/about/" }, - "tags": [ - "self-hosted", - "email", - "webmail" - ] + "tags": ["self-hosted", "email", "webmail"] }, { "id": "filebrowser", @@ -706,10 +582,7 @@ "website": "https://filebrowser.org/", "docs": "https://filebrowser.org/" }, - "tags": [ - "file-manager", - "storage" - ] + "tags": ["file-manager", "storage"] }, { "id": "focalboard", @@ -722,9 +595,7 @@ "website": "https://focalboard.com", "docs": "https://www.focalboard.com/docs/" }, - "tags": [ - "kanban" - ] + "tags": ["kanban"] }, { "id": "tolgee", @@ -737,12 +608,7 @@ "website": "https://tolgee.io", "docs": "https://tolgee.io/platform" }, - "tags": [ - "self-hosted", - "i18n", - "localization", - "translations" - ] + "tags": ["self-hosted", "i18n", "localization", "translations"] }, { "id": "portainer", @@ -755,10 +621,7 @@ "website": "https://www.portainer.io/", "docs": "https://docs.portainer.io/" }, - "tags": [ - "cloud", - "monitoring" - ] + "tags": ["cloud", "monitoring"] }, { "id": "plane", @@ -771,9 +634,7 @@ "website": "https://plane.so", "docs": "https://docs.plane.so/" }, - "tags": [ - "kanban" - ] + "tags": ["kanban"] }, { "id": "influxdb", @@ -786,12 +647,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": "infisical", @@ -804,10 +660,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": "docmost", @@ -820,11 +673,7 @@ "website": "https://docmost.com/", "docs": "https://docmost.com/docs/" }, - "tags": [ - "self-hosted", - "open-source", - "manager" - ] + "tags": ["self-hosted", "open-source", "manager"] }, { "id": "vaultwarden", @@ -837,9 +686,7 @@ "website": "", "docs": "https://github.com/dani-garcia/vaultwarden/wiki" }, - "tags": [ - "open-source" - ] + "tags": ["open-source"] }, { "id": "linkwarden", @@ -852,10 +699,7 @@ "website": "https://linkwarden.app/", "docs": "https://docs.linkwarden.app/" }, - "tags": [ - "bookmarks", - "link-sharing" - ] + "tags": ["bookmarks", "link-sharing"] }, { "id": "hi-events", @@ -868,11 +712,7 @@ "website": "https://hi.events/", "docs": "https://hi.events/docs" }, - "tags": [ - "self-hosted", - "open-source", - "manager" - ] + "tags": ["self-hosted", "open-source", "manager"] }, { "id": "hoarder", @@ -885,11 +725,7 @@ "website": "https://hoarder.app/", "docs": "https://docs.hoarder.app/" }, - "tags": [ - "self-hosted", - "bookmarks", - "link-sharing" - ] + "tags": ["self-hosted", "bookmarks", "link-sharing"] }, { "id": "windows", @@ -902,11 +738,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": "macos", @@ -919,11 +751,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": "coder", @@ -936,11 +764,7 @@ "website": "https://coder.com/", "docs": "https://coder.com/docs" }, - "tags": [ - "self-hosted", - "open-source", - "builder" - ] + "tags": ["self-hosted", "open-source", "builder"] }, { "id": "stirling", @@ -953,10 +777,7 @@ "website": "https://www.stirlingpdf.com/", "docs": "https://docs.stirlingpdf.com/" }, - "tags": [ - "pdf", - "tools" - ] + "tags": ["pdf", "tools"] }, { "id": "lobe-chat", @@ -969,10 +790,7 @@ "website": "https://chat-preview.lobehub.com/", "docs": "https://lobehub.com/docs/self-hosting/platform/docker-compose" }, - "tags": [ - "IA", - "chat" - ] + "tags": ["IA", "chat"] }, { "id": "peppermint", @@ -985,11 +803,7 @@ "website": "https://peppermint.sh/", "docs": "https://docs.peppermint.sh/" }, - "tags": [ - "api", - "development", - "documentation" - ] + "tags": ["api", "development", "documentation"] }, { "id": "windmill", @@ -1002,11 +816,7 @@ "website": "https://www.windmill.dev/", "docs": "https://docs.windmill.dev/" }, - "tags": [ - "workflow", - "automation", - "development" - ] + "tags": ["workflow", "automation", "development"] }, { "id": "activepieces", @@ -1019,11 +829,7 @@ "website": "https://www.activepieces.com/", "docs": "https://www.activepieces.com/docs" }, - "tags": [ - "automation", - "workflow", - "no-code" - ] + "tags": ["automation", "workflow", "no-code"] }, { "id": "invoiceshelf", @@ -1036,11 +842,7 @@ "website": "https://invoiceshelf.com", "docs": "https://github.com/InvoiceShelf/invoiceshelf#readme" }, - "tags": [ - "invoice", - "business", - "finance" - ] + "tags": ["invoice", "business", "finance"] }, { "id": "postiz", @@ -1053,11 +855,7 @@ "website": "https://postiz.com", "docs": "https://docs.postiz.com" }, - "tags": [ - "cms", - "content-management", - "publishing" - ] + "tags": ["cms", "content-management", "publishing"] }, { "id": "slash", @@ -1070,11 +868,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": "discord-tickets", @@ -1087,11 +881,7 @@ "website": "https://discordtickets.app", "docs": "https://discordtickets.app/self-hosting/installation/docker/" }, - "tags": [ - "discord", - "tickets", - "support" - ] + "tags": ["discord", "tickets", "support"] }, { "id": "nextcloud-aio", @@ -1104,10 +894,7 @@ "website": "https://nextcloud.com/", "docs": "https://docs.nextcloud.com/" }, - "tags": [ - "file-manager", - "sync" - ] + "tags": ["file-manager", "sync"] }, { "id": "blender", @@ -1120,11 +907,7 @@ "website": "https://www.blender.org/", "docs": "https://docs.blender.org/" }, - "tags": [ - "3d", - "rendering", - "animation" - ] + "tags": ["3d", "rendering", "animation"] }, { "id": "heyform", @@ -1137,13 +920,7 @@ "website": "https://heyform.net", "docs": "https://docs.heyform.net" }, - "tags": [ - "form", - "builder", - "questionnaire", - "quiz", - "survey" - ] + "tags": ["form", "builder", "questionnaire", "quiz", "survey"] }, { "id": "chatwoot", @@ -1156,11 +933,7 @@ "website": "https://www.chatwoot.com", "docs": "https://www.chatwoot.com/docs" }, - "tags": [ - "support", - "chat", - "customer-service" - ] + "tags": ["support", "chat", "customer-service"] }, { "id": "discourse", @@ -1173,11 +946,7 @@ "website": "https://www.discourse.org/", "docs": "https://meta.discourse.org/" }, - "tags": [ - "forum", - "community", - "discussion" - ] + "tags": ["forum", "community", "discussion"] }, { "id": "immich", @@ -1190,12 +959,7 @@ "website": "https://immich.app/", "docs": "https://immich.app/docs/overview/introduction" }, - "tags": [ - "photos", - "videos", - "backup", - "media" - ] + "tags": ["photos", "videos", "backup", "media"] }, { "id": "twenty", @@ -1208,11 +972,7 @@ "website": "https://twenty.com", "docs": "https://docs.twenty.com" }, - "tags": [ - "crm", - "sales", - "business" - ] + "tags": ["crm", "sales", "business"] }, { "id": "yourls", @@ -1225,10 +985,7 @@ "website": "https://yourls.org/", "docs": "https://yourls.org/#documentation" }, - "tags": [ - "url-shortener", - "php" - ] + "tags": ["url-shortener", "php"] }, { "id": "ryot", @@ -1241,11 +998,7 @@ "website": "https://ryot.io/", "docs": "https://docs.ryot.io/" }, - "tags": [ - "media", - "tracking", - "self-hosted" - ] + "tags": ["media", "tracking", "self-hosted"] }, { "id": "photoprism", @@ -1258,11 +1011,7 @@ "website": "https://www.photoprism.app/", "docs": "https://docs.photoprism.app/" }, - "tags": [ - "media", - "photos", - "self-hosted" - ] + "tags": ["media", "photos", "self-hosted"] }, { "id": "ontime", @@ -1275,9 +1024,7 @@ "website": "https://getontime.no", "docs": "https://docs.getontime.no" }, - "tags": [ - "event" - ] + "tags": ["event"] }, { "id": "triggerdotdev", @@ -1290,10 +1037,7 @@ "website": "https://trigger.dev/", "docs": "https://trigger.dev/docs" }, - "tags": [ - "event-driven", - "applications" - ] + "tags": ["event-driven", "applications"] }, { "id": "browserless", @@ -1306,10 +1050,7 @@ "website": "https://www.browserless.io/", "docs": "https://docs.browserless.io/" }, - "tags": [ - "browser", - "automation" - ] + "tags": ["browser", "automation"] }, { "id": "drawio", @@ -1322,10 +1063,7 @@ "website": "https://draw.io/", "docs": "https://www.drawio.com/doc/" }, - "tags": [ - "drawing", - "diagrams" - ] + "tags": ["drawing", "diagrams"] }, { "id": "kimai", @@ -1338,11 +1076,7 @@ "website": "https://www.kimai.org", "docs": "https://www.kimai.org/documentation" }, - "tags": [ - "invoice", - "business", - "finance" - ] + "tags": ["invoice", "business", "finance"] }, { "id": "logto", @@ -1355,10 +1089,7 @@ "website": "https://logto.io/", "docs": "https://docs.logto.io/introduction" }, - "tags": [ - "identity", - "auth" - ] + "tags": ["identity", "auth"] }, { "id": "pocket-id", @@ -1371,10 +1102,7 @@ "website": "https://pocket-id.org/", "docs": "https://pocket-id.org/docs" }, - "tags": [ - "identity", - "auth" - ] + "tags": ["identity", "auth"] }, { "id": "penpot", @@ -1387,10 +1115,7 @@ "website": "https://penpot.app/", "docs": "https://docs.penpot.app/" }, - "tags": [ - "design", - "collaboration" - ] + "tags": ["design", "collaboration"] }, { "id": "huly", @@ -1403,11 +1128,7 @@ "website": "https://huly.io/", "docs": "https://docs.huly.io/" }, - "tags": [ - "project-management", - "community", - "discussion" - ] + "tags": ["project-management", "community", "discussion"] }, { "id": "unsend", @@ -1420,11 +1141,7 @@ "website": "https://unsend.dev/", "docs": "https://docs.unsend.dev/get-started/" }, - "tags": [ - "e-mail", - "marketing", - "business" - ] + "tags": ["e-mail", "marketing", "business"] }, { "id": "langflow", @@ -1437,9 +1154,7 @@ "website": "https://www.langflow.org/", "docs": "https://docs.langflow.org/" }, - "tags": [ - "ai" - ] + "tags": ["ai"] }, { "id": "elastic-search", @@ -1452,10 +1167,7 @@ "website": "https://www.elastic.co/elasticsearch/", "docs": "https://docs.elastic.co/elasticsearch/" }, - "tags": [ - "search", - "analytics" - ] + "tags": ["search", "analytics"] }, { "id": "onedev", @@ -1468,10 +1180,7 @@ "website": "https://onedev.io/", "docs": "https://docs.onedev.io/" }, - "tags": [ - "self-hosted", - "development" - ] + "tags": ["self-hosted", "development"] }, { "id": "unifi", @@ -1484,10 +1193,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": "glpi", @@ -1500,11 +1206,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": "checkmate", @@ -1517,11 +1219,7 @@ "website": "https://bluewavelabs.ca", "docs": "https://bluewavelabs.gitbook.io/checkmate" }, - "tags": [ - "self-hosted", - "monitoring", - "uptime" - ] + "tags": ["self-hosted", "monitoring", "uptime"] }, { "id": "gotenberg", @@ -1534,12 +1232,7 @@ "website": "https://gotenberg.dev", "docs": "https://gotenberg.dev/docs/getting-started/introduction" }, - "tags": [ - "api", - "backend", - "pdf", - "tools" - ] + "tags": ["api", "backend", "pdf", "tools"] }, { "id": "actualbudget", @@ -1552,11 +1245,7 @@ "website": "https://actualbudget.org", "docs": "https://actualbudget.org/docs" }, - "tags": [ - "budgeting", - "finance", - "money" - ] + "tags": ["budgeting", "finance", "money"] }, { "id": "conduit", @@ -1569,10 +1258,7 @@ "website": "https://conduit.rs/", "docs": "https://docs.conduit.rs/" }, - "tags": [ - "matrix", - "communication" - ] + "tags": ["matrix", "communication"] }, { "id": "evolutionapi", @@ -1585,11 +1271,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": "conduwuit", @@ -1602,13 +1284,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": "cloudflared", @@ -1621,12 +1297,7 @@ "website": "https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/", "docs": "https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/" }, - "tags": [ - "cloud", - "networking", - "security", - "tunnel" - ] + "tags": ["cloud", "networking", "security", "tunnel"] }, { "id": "couchdb", @@ -1639,10 +1310,7 @@ "website": "https://couchdb.apache.org/", "docs": "https://docs.couchdb.org/en/stable/" }, - "tags": [ - "database", - "storage" - ] + "tags": ["database", "storage"] }, { "id": "it-tools", @@ -1655,10 +1323,7 @@ "website": "https://it-tools.tech", "docs": "https://it-tools.tech/docs" }, - "tags": [ - "developer", - "tools" - ] + "tags": ["developer", "tools"] }, { "id": "superset", @@ -1671,13 +1336,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": "glance", @@ -1690,12 +1349,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": "homarr", @@ -1708,10 +1362,7 @@ "docs": "https://homarr.dev/docs/getting-started/installation/docker", "website": "https://homarr.dev/" }, - "tags": [ - "dashboard", - "monitoring" - ] + "tags": ["dashboard", "monitoring"] }, { "id": "erpnext", @@ -1745,10 +1396,7 @@ "website": "https://maybe.finance/", "docs": "https://docs.maybe.finance/" }, - "tags": [ - "finance", - "self-hosted" - ] + "tags": ["finance", "self-hosted"] }, { "id": "spacedrive", @@ -1761,11 +1409,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": "registry", @@ -1778,11 +1422,7 @@ "docs": "https://distribution.github.io/distribution/" }, "logo": "registry.png", - "tags": [ - "registry", - "docker", - "self-hosted" - ] + "tags": ["registry", "docker", "self-hosted"] }, { "id": "alist", @@ -1795,11 +1435,7 @@ "website": "https://alist.nn.ci", "docs": "https://alist.nn.ci/guide/install/docker.html" }, - "tags": [ - "file", - "webdav", - "storage" - ] + "tags": ["file", "webdav", "storage"] }, { "id": "answer", @@ -1812,10 +1448,7 @@ "website": "https://answer.apache.org/", "docs": "https://answer.apache.org/docs" }, - "tags": [ - "q&a", - "self-hosted" - ] + "tags": ["q&a", "self-hosted"] }, { "id": "shlink", @@ -1828,11 +1461,7 @@ "website": "https://shlink.io", "docs": "https://shlink.io/documentation" }, - "tags": [ - "sharing", - "shortener", - "url" - ] + "tags": ["sharing", "shortener", "url"] }, { "id": "frappe-hr", @@ -1865,10 +1494,7 @@ "website": "https://formbricks.com/", "docs": "https://formbricks.com/docs" }, - "tags": [ - "forms", - "analytics" - ] + "tags": ["forms", "analytics"] }, { "id": "trilium", @@ -1881,11 +1507,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": "convex", @@ -1898,11 +1520,7 @@ "website": "https://www.convex.dev/", "docs": "https://www.convex.dev/docs" }, - "tags": [ - "backend", - "database", - "api" - ] + "tags": ["backend", "database", "api"] }, { "id": "wikijs", @@ -1915,11 +1533,7 @@ "website": "https://js.wiki/", "docs": "https://docs.requarks.io/" }, - "tags": [ - "knowledge-base", - "self-hosted", - "documentation" - ] + "tags": ["knowledge-base", "self-hosted", "documentation"] }, { "id": "otterwiki", @@ -1932,12 +1546,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": "lowcoder", @@ -1950,11 +1559,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": "backrest", @@ -1980,12 +1585,7 @@ "website": "https://blinko.space/", "docs": "https://docs.blinko.space/" }, - "tags": [ - "productivity", - "organization", - "workflow", - "nextjs" - ] + "tags": ["productivity", "organization", "workflow", "nextjs"] }, { "id": "pgadmin", @@ -1998,11 +1598,7 @@ "docs": "https://www.pgadmin.org/docs/" }, "logo": "pgadmin.webp", - "tags": [ - "database", - "postgres", - "admin" - ] + "tags": ["database", "postgres", "admin"] }, { "id": "ackee", @@ -2015,10 +1611,7 @@ "website": "https://ackee.electerious.com/", "docs": "https://docs.ackee.electerious.com/" }, - "tags": [ - "analytics", - "self-hosted" - ] + "tags": ["analytics", "self-hosted"] }, { "id": "adguardhome", @@ -2031,12 +1624,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", @@ -2049,12 +1637,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": "affinepro", @@ -2085,11 +1668,7 @@ "website": "https://github.com/Rudloff/alltube", "docs": "https://github.com/Rudloff/alltube/wiki" }, - "tags": [ - "media", - "video", - "downloader" - ] + "tags": ["media", "video", "downloader"] }, { "id": "ampache", @@ -2102,11 +1681,7 @@ "website": "http://ampache.org/", "docs": "https://github.com/ampache/ampache/wiki" }, - "tags": [ - "media", - "music", - "streaming" - ] + "tags": ["media", "music", "streaming"] }, { "id": "anythingllm", @@ -2119,11 +1694,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": "apprise-api", @@ -2136,10 +1707,7 @@ "website": "https://github.com/caronc/apprise-api", "docs": "https://github.com/caronc/apprise-api/wiki" }, - "tags": [ - "notifications", - "api" - ] + "tags": ["notifications", "api"] }, { "id": "arangodb", @@ -2152,11 +1720,7 @@ "website": "https://www.arangodb.com/", "docs": "https://www.arangodb.com/docs/" }, - "tags": [ - "database", - "graph-database", - "nosql" - ] + "tags": ["database", "graph-database", "nosql"] }, { "id": "anonupload", @@ -2169,10 +1733,7 @@ "docs": "https://github.com/Supernova3339/anonupload/blob/main/env.md", "website": "https://anonupload.com/" }, - "tags": [ - "file-sharing", - "privacy" - ] + "tags": ["file-sharing", "privacy"] }, { "id": "argilla", @@ -2185,11 +1746,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", @@ -2202,11 +1759,7 @@ "website": "https://www.audiobookshelf.org", "docs": "https://www.audiobookshelf.org/docs" }, - "tags": [ - "media", - "audiobooks", - "podcasts" - ] + "tags": ["media", "audiobooks", "podcasts"] }, { "id": "authorizer", @@ -2219,11 +1772,7 @@ "website": "https://authorizer.dev", "docs": "https://docs.authorizer.dev/" }, - "tags": [ - "authentication", - "authorization", - "security" - ] + "tags": ["authentication", "authorization", "security"] }, { "id": "automatisch", @@ -2236,11 +1785,7 @@ "website": "https://automatisch.io/docs", "docs": "https://automatisch.io/docs" }, - "tags": [ - "automation", - "workflow", - "integration" - ] + "tags": ["automation", "workflow", "integration"] }, { "id": "babybuddy", @@ -2253,11 +1798,7 @@ "website": "https://babybuddy.app", "docs": "https://docs.babybuddy.app" }, - "tags": [ - "parenting", - "tracking", - "family" - ] + "tags": ["parenting", "tracking", "family"] }, { "id": "baikal", @@ -2270,12 +1811,7 @@ "github": "https://sabre.io/baikal/", "docs": "https://sabre.io/baikal/install/" }, - "tags": [ - "calendar", - "contacts", - "caldav", - "carddav" - ] + "tags": ["calendar", "contacts", "caldav", "carddav"] }, { "id": "barrage", @@ -2288,11 +1824,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": "bazarr", @@ -2305,14 +1837,10 @@ "website": "https://www.bazarr.media/", "docs": "https://www.bazarr.media/docs" }, - "tags": [ - "subtitles", - "sonarr", - "radarr" - ] + "tags": ["subtitles", "sonarr", "radarr"] }, { - "id":"beszel", + "id": "beszel", "name": "Beszel", "version": "0.9.1", "description": "A lightweight server monitoring hub with historical data, docker stats, and alerts.", @@ -2322,11 +1850,7 @@ "website": "https://beszel.app", "docs": "https://beszel.app/docs" }, - "tags": [ - "monitoring", - "docker", - "alerts" - ] + "tags": ["monitoring", "docker", "alerts"] }, { "id": "bytestash", @@ -2339,10 +1863,7 @@ "website": "https://bytestash.com", "docs": "https://bytestash.com/docs" }, - "tags": [ - "file-storage", - "self-hosted" - ] + "tags": ["file-storage", "self-hosted"] }, { "id": "bookstack", @@ -2355,13 +1876,10 @@ "website": "https://www.bookstackapp.com", "docs": "https://www.bookstackapp.com/docs" }, - "tags": [ - "documentation", - "self-hosted" - ] + "tags": ["documentation", "self-hosted"] }, { - "id":"bytebase", + "id": "bytebase", "name": "Bytebase", "version": "latest", "description": "Bytebase is a database management tool that allows you to manage your databases with ease. It provides a simple and effective solution for managing your databases from anywhere.", @@ -2371,13 +1889,10 @@ "website": "https://www.bytebase.com", "docs": "https://www.bytebase.com/docs" }, - "tags": [ - "database", - "self-hosted" - ] + "tags": ["database", "self-hosted"] }, { - "id":"botpress", + "id": "botpress", "name": "Botpress", "version": "latest", "description": "Botpress is a platform for building conversational AI agents. It provides a simple and effective solution for building conversational AI agents from anywhere.", @@ -2387,10 +1902,7 @@ "website": "https://botpress.com", "docs": "https://botpress.com/docs" }, - "tags": [ - "ai", - "self-hosted" - ] + "tags": ["ai", "self-hosted"] }, { "id": "calibre", @@ -2403,10 +1915,7 @@ "website": "https://calibre-ebook.com/", "docs": "https://manual.calibre-ebook.com/" }, - "tags": [ - "Documents", - "E-Commerce" - ] + "tags": ["Documents", "E-Commerce"] }, { "id": "carbone", @@ -2419,12 +1928,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": "changedetection", @@ -2437,11 +1941,7 @@ "website": "https://changedetection.io", "docs": "https://github.com/dgtlmoon/changedetection.io/wiki" }, - "tags": [ - "Monitoring", - "Data", - "Notifications" - ] + "tags": ["Monitoring", "Data", "Notifications"] }, { "id": "chevereto", @@ -2492,11 +1992,7 @@ "website": "https://www.classicpress.net/", "docs": "https://docs.classicpress.net/" }, - "tags": [ - "cms", - "wordpress", - "content-management" - ] + "tags": ["cms", "wordpress", "content-management"] }, { "id": "cloud9", @@ -2509,11 +2005,7 @@ "website": "https://aws.amazon.com/cloud9/", "docs": "https://docs.aws.amazon.com/cloud9/" }, - "tags": [ - "ide", - "development", - "cloud" - ] + "tags": ["ide", "development", "cloud"] }, { "id": "cloudcommander", @@ -2526,11 +2018,7 @@ "website": "https://cloudcmd.io", "docs": "https://cloudcmd.io/#install" }, - "tags": [ - "file-manager", - "web-based", - "console" - ] + "tags": ["file-manager", "web-based", "console"] }, { "id": "cockpit", @@ -2543,11 +2031,7 @@ "website": "https://getcockpit.com", "docs": "https://getcockpit.com/documentation" }, - "tags": [ - "cms", - "content-management", - "api" - ] + "tags": ["cms", "content-management", "api"] }, { "id": "chromium", @@ -2560,11 +2044,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": "codex-docs", @@ -2577,11 +2057,7 @@ "website": "https://codex.so", "docs": "https://docs.codex.so" }, - "tags": [ - "documentation", - "development", - "collaboration" - ] + "tags": ["documentation", "development", "collaboration"] }, { "id": "collabora-office", @@ -2594,11 +2070,7 @@ "website": "https://collaboraonline.com", "docs": "https://sdk.collaboraonline.com/docs" }, - "tags": [ - "office", - "documents", - "collaboration" - ] + "tags": ["office", "documents", "collaboration"] }, { "id": "confluence", @@ -2608,7 +2080,7 @@ "links": { "website": "https://confluence.atlassian.com", "docs": "https://confluence.atlassian.com/doc/confluence-documentation-135922.html", - "github": "https://confluence.atlassian.com" + "github": "https://confluence.atlassian.com" }, "logo": "logo.svg", "tags": [ @@ -2629,11 +2101,7 @@ "github": "https://github.com/souramoo/commentoplusplus" }, "logo": "logo.png", - "tags": [ - "comments", - "discussion", - "website" - ] + "tags": ["comments", "discussion", "website"] }, { "id": "commentoplusplus", @@ -2646,11 +2114,7 @@ "github": "https://github.com/souramoo/commentoplusplus" }, "logo": "logo.png", - "tags": [ - "comments", - "website", - "open-source" - ] + "tags": ["comments", "website", "open-source"] }, { "id": "coralproject", @@ -2663,11 +2127,7 @@ "github": "https://github.com/coralproject/talk" }, "logo": "logo.png", - "tags": [ - "communication", - "community", - "privacy" - ] + "tags": ["communication", "community", "privacy"] }, { "id": "rsshub", @@ -2680,11 +2140,7 @@ "website": "https://rsshub.app/", "docs": "https://docs.rsshub.app/" }, - "tags": [ - "rss", - "api", - "self-hosted" - ] + "tags": ["rss", "api", "self-hosted"] }, { "id": "tailscale-exitnode", @@ -2697,9 +2153,7 @@ "website": "https://tailscale.com/", "docs": "https://tailscale.com/kb/1408/quick-guide-exit-nodes" }, - "tags": [ - "network" - ] + "tags": ["network"] }, { "id": "tooljet", @@ -2708,17 +2162,13 @@ "description": "Tooljet is an open-source low-code platform that allows you to build internal tools quickly and efficiently. It provides a user-friendly interface for creating applications without extensive coding knowledge.", "logo": "logo.png", "links": { - "github":"https://github.com/ToolJet/ToolJet", + "github": "https://github.com/ToolJet/ToolJet", "website": "https://tooljet.ai/", "docs": "https://docs.tooljet.ai/" }, - "tags": [ - "file-sync", - "file-sharing", - "self-hosted" - ] -}, -{ + "tags": ["file-sync", "file-sharing", "self-hosted"] + }, + { "id": "onetimesecret", "name": "One Time Secret", "version": "latest", @@ -2729,11 +2179,19 @@ "website": "https://onetimesecret.com", "docs": "https://docs.onetimesecret.com" }, - "tags": [ - "auth", - "password", - "secret", - "secure" - ] + "tags": ["auth", "password", "secret", "secure"] + }, + { + "id": "bugsink", + "name": "Bugsink", + "version": "v1.4.2", + "description": "Bugsink is a self-hosted Error Tracker. Built to self-host; Sentry-SDK compatible; Scalable and reliable", + "logo": "bugsink.png", + "links": { + "github": "https://github.com/bugsink/bugsink/", + "website": "https://www.bugsink.com/", + "docs": "https://www.bugsink.com/docs/" + }, + "tags": ["hosting", "self-hosted", "development"] } ]