diff --git a/blueprints/gitlab-ce/docker-compose.yml b/blueprints/gitlab-ce/docker-compose.yml new file mode 100644 index 00000000..3100a148 --- /dev/null +++ b/blueprints/gitlab-ce/docker-compose.yml @@ -0,0 +1,65 @@ +services: + gitlab: + image: gitlab/gitlab-ce:latest + restart: unless-stopped + hostname: gitlab.example.com + environment: + GITLAB_OMNIBUS_CONFIG: | + external_url 'http://${GITLAB_HOST}' + gitlab_rails['gitlab_ssh_host'] = '${GITLAB_HOST}' + gitlab_rails['gitlab_shell_ssh_port'] = 2224 + gitlab_rails['db_adapter'] = 'postgresql' + gitlab_rails['db_host'] = 'postgresql' + gitlab_rails['db_port'] = '5432' + gitlab_rails['db_database'] = '${POSTGRES_DB}' + gitlab_rails['db_username'] = '${POSTGRES_USER}' + gitlab_rails['db_password'] = '${POSTGRES_PASSWORD}' + # Redis config for external TCP connection + gitlab_rails['redis_url'] = 'redis://redis:6379/0' + gitlab_rails['redis_host'] = 'redis' + gitlab_rails['redis_port'] = 6379 + gitlab_rails['redis_socket'] = nil + gitlab_rails['gitlab_email_enabled'] = false + gitlab_rails['gitlab_default_can_create_group'] = true + gitlab_rails['gitlab_username_changing_enabled'] = false + unicorn['worker_processes'] = 2 + unicorn['worker_timeout'] = 60 + postgresql['enable'] = false + redis['enable'] = false + nginx['enable'] = true + nginx['listen_port'] = 80 + nginx['listen_https'] = false + prometheus_monitoring['enable'] = false + ports: + - "80" + - "2224" + volumes: + - gitlab_config:/etc/gitlab + - gitlab_logs:/var/log/gitlab + - gitlab_data:/var/opt/gitlab + depends_on: + - postgresql + - redis + + postgresql: + image: postgres:16-alpine + restart: unless-stopped + environment: + POSTGRES_DB: ${POSTGRES_DB} + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + volumes: + - postgresql_data:/var/lib/postgresql/data + + redis: + image: redis:7-alpine + restart: unless-stopped + volumes: + - redis_data:/data + +volumes: + gitlab_config: + gitlab_logs: + gitlab_data: + postgresql_data: + redis_data: diff --git a/blueprints/gitlab-ce/gitlab-ce.svg b/blueprints/gitlab-ce/gitlab-ce.svg new file mode 100644 index 00000000..2d93df35 --- /dev/null +++ b/blueprints/gitlab-ce/gitlab-ce.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/blueprints/gitlab-ce/template.toml b/blueprints/gitlab-ce/template.toml new file mode 100644 index 00000000..1bc24e87 --- /dev/null +++ b/blueprints/gitlab-ce/template.toml @@ -0,0 +1,18 @@ +[variables] +main_domain = "${domain}" +postgres_db = "gitlab" +postgres_user = "gitlab" +postgres_password = "${password:32}" + +[config] +env = [ + "GITLAB_HOST=${main_domain}", + "POSTGRES_DB=${postgres_db}", + "POSTGRES_USER=${postgres_user}", + "POSTGRES_PASSWORD=${postgres_password}", +] + +[[config.domains]] +serviceName = "gitlab" +port = 80 +host = "${main_domain}" diff --git a/meta.json b/meta.json index 621bd350..89507966 100644 --- a/meta.json +++ b/meta.json @@ -10,12 +10,7 @@ "docs": "https://autobase.tech/docs" }, "logo": "autobase.svg", - "tags": [ - "database", - "postgres", - "self-hosted", - "server" - ] + "tags": ["database", "postgres", "self-hosted", "server"] }, { "id": "freescout", @@ -28,13 +23,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": "openresty-manager", @@ -47,14 +36,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": "appwrite", @@ -67,11 +49,7 @@ "docs": "https://appwrite.io/docs" }, "logo": "appwrite.svg", - "tags": [ - "database", - "firebase", - "postgres" - ] + "tags": ["database", "firebase", "postgres"] }, { "id": "outline", @@ -84,11 +62,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", @@ -101,11 +75,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" }, { @@ -119,11 +89,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" }, { @@ -137,11 +103,7 @@ "website": "https://pocketbase.io/", "docs": "https://pocketbase.io/docs/" }, - "tags": [ - "backend", - "database", - "api" - ] + "tags": ["backend", "database", "api"] }, { "id": "plausible", @@ -154,9 +116,7 @@ "website": "https://plausible.io/", "docs": "https://plausible.io/docs" }, - "tags": [ - "analytics" - ] + "tags": ["analytics"] }, { "id": "calcom", @@ -169,10 +129,7 @@ "docs": "https://cal.com/docs" }, "logo": "calcom.jpg", - "tags": [ - "scheduling", - "booking" - ] + "tags": ["scheduling", "booking"] }, { "id": "grafana", @@ -185,9 +142,7 @@ "website": "https://grafana.com/", "docs": "https://grafana.com/docs/" }, - "tags": [ - "monitoring" - ] + "tags": ["monitoring"] }, { "id": "stalwart", @@ -221,12 +176,7 @@ "website": "https://datalens.tech/", "docs": "https://datalens.tech/docs/" }, - "tags": [ - "analytics", - "self-hosted", - "bi", - "monitoring" - ] + "tags": ["analytics", "self-hosted", "bi", "monitoring"] }, { "id": "directus", @@ -239,9 +189,7 @@ "website": "https://directus.io/", "docs": "https://docs.directus.io/" }, - "tags": [ - "cms" - ] + "tags": ["cms"] }, { "id": "baserow", @@ -254,9 +202,7 @@ "website": "https://baserow.io/", "docs": "https://baserow.io/docs/index" }, - "tags": [ - "database" - ] + "tags": ["database"] }, { "id": "budibase", @@ -269,12 +215,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", @@ -287,10 +228,7 @@ "website": "https://forgejo.org/", "docs": "https://forgejo.org/docs/latest/" }, - "tags": [ - "self-hosted", - "storage" - ] + "tags": ["self-hosted", "storage"] }, { "id": "ghost", @@ -303,9 +241,7 @@ "website": "https://ghost.org/", "docs": "https://ghost.org/docs/" }, - "tags": [ - "cms" - ] + "tags": ["cms"] }, { "id": "lodestone", @@ -318,11 +254,7 @@ "website": "https://lodestone.cc", "docs": "https://github.com/Lodestone-Team/lodestone/wiki" }, - "tags": [ - "minecraft", - "hosting", - "server" - ] + "tags": ["minecraft", "hosting", "server"] }, { "id": "dragonfly-db", @@ -335,10 +267,7 @@ "website": "https://www.dragonflydb.io/", "docs": "https://www.dragonflydb.io/docs" }, - "tags": [ - "database", - "redis" - ] + "tags": ["database", "redis"] }, { "id": "stack-auth", @@ -351,11 +280,7 @@ "website": "https://stack-auth.com/", "docs": "https://docs.stack-auth.com/next/overview" }, - "tags": [ - "authentication", - "auth", - "authorization" - ] + "tags": ["authentication", "auth", "authorization"] }, { "id": "uptime-kuma", @@ -368,9 +293,7 @@ "website": "https://uptime.kuma.pet/", "docs": "https://github.com/louislam/uptime-kuma/wiki" }, - "tags": [ - "monitoring" - ] + "tags": ["monitoring"] }, { "id": "n8n", @@ -383,9 +306,7 @@ "website": "https://n8n.io/", "docs": "https://docs.n8n.io/" }, - "tags": [ - "automation" - ] + "tags": ["automation"] }, { "id": "kestra", @@ -398,9 +319,7 @@ "website": "https://kestra.io", "docs": "https://kestra.io/docs" }, - "tags": [ - "automation" - ] + "tags": ["automation"] }, { "id": "wordpress", @@ -413,9 +332,7 @@ "website": "https://wordpress.org/", "docs": "https://wordpress.org/documentation/" }, - "tags": [ - "cms" - ] + "tags": ["cms"] }, { "id": "odoo", @@ -428,9 +345,7 @@ "website": "https://odoo.com/", "docs": "https://www.odoo.com/documentation/" }, - "tags": [ - "cms" - ] + "tags": ["cms"] }, { "id": "appsmith", @@ -443,9 +358,7 @@ "website": "https://appsmith.com/", "docs": "https://docs.appsmith.com/" }, - "tags": [ - "cms" - ] + "tags": ["cms"] }, { "id": "excalidraw", @@ -458,9 +371,7 @@ "website": "https://excalidraw.com/", "docs": "https://docs.excalidraw.com/" }, - "tags": [ - "drawing" - ] + "tags": ["drawing"] }, { "id": "documenso", @@ -473,9 +384,7 @@ "docs": "https://documenso.com/docs" }, "logo": "documenso.png", - "tags": [ - "document-signing" - ] + "tags": ["document-signing"] }, { "id": "nocodb", @@ -488,12 +397,7 @@ "docs": "https://docs.nocodb.com/" }, "logo": "nocodb.png", - "tags": [ - "database", - "spreadsheet", - "low-code", - "nocode" - ] + "tags": ["database", "spreadsheet", "low-code", "nocode"] }, { "id": "meilisearch", @@ -506,9 +410,7 @@ "website": "https://www.meilisearch.com/", "docs": "https://docs.meilisearch.com/" }, - "tags": [ - "search" - ] + "tags": ["search"] }, { "id": "mattermost", @@ -521,10 +423,7 @@ "website": "https://mattermost.com/", "docs": "https://docs.mattermost.com/" }, - "tags": [ - "chat", - "self-hosted" - ] + "tags": ["chat", "self-hosted"] }, { "id": "phpmyadmin", @@ -537,9 +436,7 @@ "website": "https://www.phpmyadmin.net/", "docs": "https://www.phpmyadmin.net/docs/" }, - "tags": [ - "database" - ] + "tags": ["database"] }, { "id": "rocketchat", @@ -552,9 +449,7 @@ "website": "https://rocket.chat/", "docs": "https://rocket.chat/docs/" }, - "tags": [ - "chat" - ] + "tags": ["chat"] }, { "id": "minio", @@ -567,9 +462,7 @@ "website": "https://minio.io/", "docs": "https://docs.minio.io/" }, - "tags": [ - "storage" - ] + "tags": ["storage"] }, { "id": "metabase", @@ -582,10 +475,7 @@ "website": "https://www.metabase.com/", "docs": "https://www.metabase.com/docs/" }, - "tags": [ - "database", - "dashboard" - ] + "tags": ["database", "dashboard"] }, { "id": "glitchtip", @@ -598,9 +488,7 @@ "website": "https://glitchtip.com/", "docs": "https://glitchtip.com/documentation" }, - "tags": [ - "hosting" - ] + "tags": ["hosting"] }, { "id": "open-webui", @@ -613,9 +501,7 @@ "website": "https://openwebui.com/", "docs": "https://docs.openwebui.com/" }, - "tags": [ - "chat" - ] + "tags": ["chat"] }, { "id": "mailpit", @@ -628,10 +514,7 @@ "website": "https://mailpit.axllent.org/", "docs": "https://mailpit.axllent.org/docs/" }, - "tags": [ - "email", - "smtp" - ] + "tags": ["email", "smtp"] }, { "id": "listmonk", @@ -644,11 +527,7 @@ "website": "https://listmonk.app/", "docs": "https://listmonk.app/docs/" }, - "tags": [ - "email", - "newsletter", - "mailing-list" - ] + "tags": ["email", "newsletter", "mailing-list"] }, { "id": "doublezero", @@ -661,9 +540,7 @@ "website": "https://www.double-zero.cloud/", "docs": "https://github.com/technomancy-dev/00" }, - "tags": [ - "email" - ] + "tags": ["email"] }, { "id": "umami", @@ -676,9 +553,7 @@ "website": "https://umami.is", "docs": "https://umami.is/docs" }, - "tags": [ - "analytics" - ] + "tags": ["analytics"] }, { "id": "jellyfin", @@ -691,9 +566,7 @@ "website": "https://jellyfin.org/", "docs": "https://jellyfin.org/docs/" }, - "tags": [ - "media system" - ] + "tags": ["media system"] }, { "id": "teable", @@ -706,12 +579,7 @@ "website": "https://teable.io/", "docs": "https://help.teable.io/" }, - "tags": [ - "database", - "spreadsheet", - "low-code", - "nocode" - ] + "tags": ["database", "spreadsheet", "low-code", "nocode"] }, { "id": "zipline", @@ -724,10 +592,7 @@ "website": "https://zipline.diced.sh/", "docs": "https://zipline.diced.sh/docs/" }, - "tags": [ - "media system", - "storage" - ] + "tags": ["media system", "storage"] }, { "id": "soketi", @@ -740,9 +605,7 @@ "website": "https://soketi.app/", "docs": "https://docs.soketi.app/" }, - "tags": [ - "chat" - ] + "tags": ["chat"] }, { "id": "aptabase", @@ -755,10 +618,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", @@ -771,11 +631,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", @@ -788,11 +644,7 @@ "website": "https://typecho.org/", "docs": "http://docs.typecho.org" }, - "tags": [ - "blog", - "cms", - "php" - ] + "tags": ["blog", "cms", "php"] }, { "id": "gitea", @@ -805,10 +657,20 @@ "website": "https://gitea.com/", "docs": "https://docs.gitea.com/installation/install-with-docker" }, - "tags": [ - "self-hosted", - "storage" - ] + "tags": ["self-hosted", "storage"] + }, + { + "id": "gitlab-ce", + "name": "GitLab Community Edition", + "version": "latest", + "description": "GitLab Community Edition is a complete DevOps platform that enables professionals to perform all the tasks in a project—from project planning and source code management to monitoring and security. It's the open source alternative to GitLab Enterprise Edition.", + "logo": "gitlab-ce.svg", + "links": { + "github": "https://github.com/gitlabhq/gitlabhq", + "website": "https://gitlab.com/", + "docs": "https://docs.gitlab.com/ee/install/docker.html" + }, + "tags": ["git", "devops", "ci-cd", "self-hosted", "code-review"] }, { "id": "gitea-mirror", @@ -821,14 +683,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": "roundcube", @@ -841,11 +696,7 @@ "website": "https://roundcube.net/", "docs": "https://roundcube.net/about/" }, - "tags": [ - "self-hosted", - "email", - "webmail" - ] + "tags": ["self-hosted", "email", "webmail"] }, { "id": "filebrowser", @@ -858,10 +709,7 @@ "website": "https://filebrowser.org/", "docs": "https://filebrowser.org/" }, - "tags": [ - "file-manager", - "storage" - ] + "tags": ["file-manager", "storage"] }, { "id": "focalboard", @@ -874,9 +722,7 @@ "website": "https://focalboard.com", "docs": "https://www.focalboard.com/docs/" }, - "tags": [ - "kanban" - ] + "tags": ["kanban"] }, { "id": "tolgee", @@ -889,12 +735,7 @@ "website": "https://tolgee.io", "docs": "https://tolgee.io/platform" }, - "tags": [ - "self-hosted", - "i18n", - "localization", - "translations" - ] + "tags": ["self-hosted", "i18n", "localization", "translations"] }, { "id": "portainer", @@ -907,10 +748,7 @@ "website": "https://www.portainer.io/", "docs": "https://docs.portainer.io/" }, - "tags": [ - "cloud", - "monitoring" - ] + "tags": ["cloud", "monitoring"] }, { "id": "plane", @@ -923,9 +761,7 @@ "website": "https://plane.so", "docs": "https://docs.plane.so/" }, - "tags": [ - "kanban" - ] + "tags": ["kanban"] }, { "id": "pterodactyl", @@ -938,11 +774,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": "pyrodactyl", @@ -955,11 +787,7 @@ "website": "https://pyrodactyl.dev", "docs": "https://pyrodactyl.dev/docs" }, - "tags": [ - "self-hosted", - "open-source", - "management" - ] + "tags": ["self-hosted", "open-source", "management"] }, { "id": "influxdb", @@ -972,12 +800,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", @@ -990,10 +813,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", @@ -1006,11 +826,7 @@ "website": "https://docmost.com/", "docs": "https://docmost.com/docs/" }, - "tags": [ - "self-hosted", - "open-source", - "manager" - ] + "tags": ["self-hosted", "open-source", "manager"] }, { "id": "vaultwarden", @@ -1023,9 +839,7 @@ "website": "", "docs": "https://github.com/dani-garcia/vaultwarden/wiki" }, - "tags": [ - "open-source" - ] + "tags": ["open-source"] }, { "id": "linkwarden", @@ -1038,10 +852,7 @@ "website": "https://linkwarden.app/", "docs": "https://docs.linkwarden.app/" }, - "tags": [ - "bookmarks", - "link-sharing" - ] + "tags": ["bookmarks", "link-sharing"] }, { "id": "hi-events", @@ -1054,11 +865,7 @@ "website": "https://hi.events/", "docs": "https://hi.events/docs" }, - "tags": [ - "self-hosted", - "open-source", - "manager" - ] + "tags": ["self-hosted", "open-source", "manager"] }, { "id": "hoarder", @@ -1071,11 +878,7 @@ "website": "https://hoarder.app/", "docs": "https://docs.hoarder.app/" }, - "tags": [ - "self-hosted", - "bookmarks", - "link-sharing" - ] + "tags": ["self-hosted", "bookmarks", "link-sharing"] }, { "id": "windows", @@ -1088,11 +891,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", @@ -1105,11 +904,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", @@ -1122,11 +917,7 @@ "website": "https://coder.com/", "docs": "https://coder.com/docs" }, - "tags": [ - "self-hosted", - "open-source", - "builder" - ] + "tags": ["self-hosted", "open-source", "builder"] }, { "id": "stirling", @@ -1139,10 +930,7 @@ "website": "https://www.stirlingpdf.com/", "docs": "https://docs.stirlingpdf.com/" }, - "tags": [ - "pdf", - "tools" - ] + "tags": ["pdf", "tools"] }, { "id": "lobe-chat", @@ -1155,10 +943,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", @@ -1171,11 +956,7 @@ "website": "https://peppermint.sh/", "docs": "https://docs.peppermint.sh/" }, - "tags": [ - "api", - "development", - "documentation" - ] + "tags": ["api", "development", "documentation"] }, { "id": "windmill", @@ -1188,11 +969,7 @@ "website": "https://www.windmill.dev/", "docs": "https://docs.windmill.dev/" }, - "tags": [ - "workflow", - "automation", - "development" - ] + "tags": ["workflow", "automation", "development"] }, { "id": "activepieces", @@ -1205,11 +982,7 @@ "website": "https://www.activepieces.com/", "docs": "https://www.activepieces.com/docs" }, - "tags": [ - "automation", - "workflow", - "no-code" - ] + "tags": ["automation", "workflow", "no-code"] }, { "id": "invoiceshelf", @@ -1222,11 +995,7 @@ "website": "https://invoiceshelf.com", "docs": "https://github.com/InvoiceShelf/invoiceshelf#readme" }, - "tags": [ - "invoice", - "business", - "finance" - ] + "tags": ["invoice", "business", "finance"] }, { "id": "postiz", @@ -1239,11 +1008,7 @@ "website": "https://postiz.com", "docs": "https://docs.postiz.com" }, - "tags": [ - "cms", - "content-management", - "publishing" - ] + "tags": ["cms", "content-management", "publishing"] }, { "id": "slash", @@ -1256,11 +1021,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", @@ -1273,11 +1034,7 @@ "website": "https://discordtickets.app", "docs": "https://discordtickets.app/self-hosting/installation/docker/" }, - "tags": [ - "discord", - "tickets", - "support" - ] + "tags": ["discord", "tickets", "support"] }, { "id": "nextcloud-aio", @@ -1290,10 +1047,7 @@ "website": "https://nextcloud.com/", "docs": "https://docs.nextcloud.com/" }, - "tags": [ - "file-manager", - "sync" - ] + "tags": ["file-manager", "sync"] }, { "id": "blender", @@ -1306,11 +1060,7 @@ "website": "https://www.blender.org/", "docs": "https://docs.blender.org/" }, - "tags": [ - "3d", - "rendering", - "animation" - ] + "tags": ["3d", "rendering", "animation"] }, { "id": "heyform", @@ -1323,13 +1073,7 @@ "website": "https://heyform.net", "docs": "https://docs.heyform.net" }, - "tags": [ - "form", - "builder", - "questionnaire", - "quiz", - "survey" - ] + "tags": ["form", "builder", "questionnaire", "quiz", "survey"] }, { "id": "chatwoot", @@ -1342,11 +1086,7 @@ "website": "https://www.chatwoot.com", "docs": "https://www.chatwoot.com/docs" }, - "tags": [ - "support", - "chat", - "customer-service" - ] + "tags": ["support", "chat", "customer-service"] }, { "id": "discourse", @@ -1359,11 +1099,7 @@ "website": "https://www.discourse.org/", "docs": "https://meta.discourse.org/" }, - "tags": [ - "forum", - "community", - "discussion" - ] + "tags": ["forum", "community", "discussion"] }, { "id": "immich", @@ -1376,12 +1112,7 @@ "website": "https://immich.app/", "docs": "https://immich.app/docs/overview/introduction" }, - "tags": [ - "photos", - "videos", - "backup", - "media" - ] + "tags": ["photos", "videos", "backup", "media"] }, { "id": "twenty", @@ -1394,11 +1125,7 @@ "website": "https://twenty.com", "docs": "https://docs.twenty.com" }, - "tags": [ - "crm", - "sales", - "business" - ] + "tags": ["crm", "sales", "business"] }, { "id": "yourls", @@ -1411,10 +1138,7 @@ "website": "https://yourls.org/", "docs": "https://yourls.org/#documentation" }, - "tags": [ - "url-shortener", - "php" - ] + "tags": ["url-shortener", "php"] }, { "id": "ryot", @@ -1427,11 +1151,7 @@ "website": "https://ryot.io/", "docs": "https://docs.ryot.io/" }, - "tags": [ - "media", - "tracking", - "self-hosted" - ] + "tags": ["media", "tracking", "self-hosted"] }, { "id": "photoprism", @@ -1444,11 +1164,7 @@ "website": "https://www.photoprism.app/", "docs": "https://docs.photoprism.app/" }, - "tags": [ - "media", - "photos", - "self-hosted" - ] + "tags": ["media", "photos", "self-hosted"] }, { "id": "ontime", @@ -1461,9 +1177,7 @@ "website": "https://getontime.no", "docs": "https://docs.getontime.no" }, - "tags": [ - "event" - ] + "tags": ["event"] }, { "id": "triggerdotdev", @@ -1476,10 +1190,7 @@ "website": "https://trigger.dev/", "docs": "https://trigger.dev/docs" }, - "tags": [ - "event-driven", - "applications" - ] + "tags": ["event-driven", "applications"] }, { "id": "browserless", @@ -1492,10 +1203,7 @@ "website": "https://www.browserless.io/", "docs": "https://docs.browserless.io/" }, - "tags": [ - "browser", - "automation" - ] + "tags": ["browser", "automation"] }, { "id": "drawio", @@ -1508,10 +1216,7 @@ "website": "https://draw.io/", "docs": "https://www.drawio.com/doc/" }, - "tags": [ - "drawing", - "diagrams" - ] + "tags": ["drawing", "diagrams"] }, { "id": "kimai", @@ -1524,11 +1229,7 @@ "website": "https://www.kimai.org", "docs": "https://www.kimai.org/documentation" }, - "tags": [ - "invoice", - "business", - "finance" - ] + "tags": ["invoice", "business", "finance"] }, { "id": "logto", @@ -1541,10 +1242,7 @@ "website": "https://logto.io/", "docs": "https://docs.logto.io/introduction" }, - "tags": [ - "identity", - "auth" - ] + "tags": ["identity", "auth"] }, { "id": "pocket-id", @@ -1557,10 +1255,7 @@ "website": "https://pocket-id.org/", "docs": "https://pocket-id.org/docs" }, - "tags": [ - "identity", - "auth" - ] + "tags": ["identity", "auth"] }, { "id": "penpot", @@ -1573,10 +1268,7 @@ "website": "https://penpot.app/", "docs": "https://docs.penpot.app/" }, - "tags": [ - "design", - "collaboration" - ] + "tags": ["design", "collaboration"] }, { "id": "huly", @@ -1589,11 +1281,7 @@ "website": "https://huly.io/", "docs": "https://docs.huly.io/" }, - "tags": [ - "project-management", - "community", - "discussion" - ] + "tags": ["project-management", "community", "discussion"] }, { "id": "unsend", @@ -1606,11 +1294,7 @@ "website": "https://unsend.dev/", "docs": "https://docs.unsend.dev/get-started/" }, - "tags": [ - "e-mail", - "marketing", - "business" - ] + "tags": ["e-mail", "marketing", "business"] }, { "id": "langflow", @@ -1623,9 +1307,7 @@ "website": "https://www.langflow.org/", "docs": "https://docs.langflow.org/" }, - "tags": [ - "ai" - ] + "tags": ["ai"] }, { "id": "elastic-search", @@ -1638,10 +1320,7 @@ "website": "https://www.elastic.co/elasticsearch/", "docs": "https://docs.elastic.co/elasticsearch/" }, - "tags": [ - "search", - "analytics" - ] + "tags": ["search", "analytics"] }, { "id": "onedev", @@ -1654,10 +1333,7 @@ "website": "https://onedev.io/", "docs": "https://docs.onedev.io/" }, - "tags": [ - "self-hosted", - "development" - ] + "tags": ["self-hosted", "development"] }, { "id": "unifi", @@ -1670,10 +1346,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", @@ -1686,11 +1359,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", @@ -1703,11 +1372,7 @@ "website": "https://bluewavelabs.ca", "docs": "https://bluewavelabs.gitbook.io/checkmate" }, - "tags": [ - "self-hosted", - "monitoring", - "uptime" - ] + "tags": ["self-hosted", "monitoring", "uptime"] }, { "id": "gotenberg", @@ -1720,12 +1385,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", @@ -1738,11 +1398,7 @@ "website": "https://actualbudget.org", "docs": "https://actualbudget.org/docs" }, - "tags": [ - "budgeting", - "finance", - "money" - ] + "tags": ["budgeting", "finance", "money"] }, { "id": "conduit", @@ -1755,10 +1411,7 @@ "website": "https://conduit.rs/", "docs": "https://docs.conduit.rs/" }, - "tags": [ - "matrix", - "communication" - ] + "tags": ["matrix", "communication"] }, { "id": "evolutionapi", @@ -1771,11 +1424,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", @@ -1788,13 +1437,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", @@ -1807,12 +1450,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", @@ -1825,10 +1463,7 @@ "website": "https://couchdb.apache.org/", "docs": "https://docs.couchdb.org/en/stable/" }, - "tags": [ - "database", - "storage" - ] + "tags": ["database", "storage"] }, { "id": "it-tools", @@ -1841,10 +1476,7 @@ "website": "https://it-tools.tech", "docs": "https://it-tools.tech/docs" }, - "tags": [ - "developer", - "tools" - ] + "tags": ["developer", "tools"] }, { "id": "superset", @@ -1857,13 +1489,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", @@ -1876,12 +1502,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", @@ -1894,10 +1515,7 @@ "docs": "https://homarr.dev/docs/getting-started/installation/docker", "website": "https://homarr.dev/" }, - "tags": [ - "dashboard", - "monitoring" - ] + "tags": ["dashboard", "monitoring"] }, { "id": "erpnext", @@ -1931,10 +1549,7 @@ "website": "https://maybe.finance/", "docs": "https://docs.maybe.finance/" }, - "tags": [ - "finance", - "self-hosted" - ] + "tags": ["finance", "self-hosted"] }, { "id": "spacedrive", @@ -1947,11 +1562,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", @@ -1964,11 +1575,7 @@ "docs": "https://distribution.github.io/distribution/" }, "logo": "registry.png", - "tags": [ - "registry", - "docker", - "self-hosted" - ] + "tags": ["registry", "docker", "self-hosted"] }, { "id": "alist", @@ -1981,11 +1588,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", @@ -1998,10 +1601,7 @@ "website": "https://answer.apache.org/", "docs": "https://answer.apache.org/docs" }, - "tags": [ - "q&a", - "self-hosted" - ] + "tags": ["q&a", "self-hosted"] }, { "id": "shlink", @@ -2014,11 +1614,7 @@ "website": "https://shlink.io", "docs": "https://shlink.io/documentation" }, - "tags": [ - "sharing", - "shortener", - "url" - ] + "tags": ["sharing", "shortener", "url"] }, { "id": "frappe-hr", @@ -2051,10 +1647,7 @@ "website": "https://formbricks.com/", "docs": "https://formbricks.com/docs" }, - "tags": [ - "forms", - "analytics" - ] + "tags": ["forms", "analytics"] }, { "id": "trilium", @@ -2067,11 +1660,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", @@ -2084,11 +1673,7 @@ "website": "https://www.convex.dev/", "docs": "https://www.convex.dev/docs" }, - "tags": [ - "backend", - "database", - "api" - ] + "tags": ["backend", "database", "api"] }, { "id": "wikijs", @@ -2101,11 +1686,7 @@ "website": "https://js.wiki/", "docs": "https://docs.requarks.io/" }, - "tags": [ - "knowledge-base", - "self-hosted", - "documentation" - ] + "tags": ["knowledge-base", "self-hosted", "documentation"] }, { "id": "otterwiki", @@ -2118,12 +1699,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", @@ -2136,11 +1712,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", @@ -2153,9 +1725,7 @@ "docs": "https://garethgeorge.github.io/backrest/introduction/getting-started" }, "logo": "backrest.svg", - "tags": [ - "backup" - ] + "tags": ["backup"] }, { "id": "blinko", @@ -2168,12 +1738,7 @@ "website": "https://blinko.space/", "docs": "https://docs.blinko.space/" }, - "tags": [ - "productivity", - "organization", - "workflow", - "nextjs" - ] + "tags": ["productivity", "organization", "workflow", "nextjs"] }, { "id": "pgadmin", @@ -2186,11 +1751,7 @@ "docs": "https://www.pgadmin.org/docs/" }, "logo": "pgadmin.webp", - "tags": [ - "database", - "postgres", - "admin" - ] + "tags": ["database", "postgres", "admin"] }, { "id": "ackee", @@ -2203,10 +1764,7 @@ "website": "https://ackee.electerious.com/", "docs": "https://docs.ackee.electerious.com/" }, - "tags": [ - "analytics", - "self-hosted" - ] + "tags": ["analytics", "self-hosted"] }, { "id": "adguardhome", @@ -2219,12 +1777,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", @@ -2237,12 +1790,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", @@ -2273,11 +1821,7 @@ "website": "https://github.com/Rudloff/alltube", "docs": "https://github.com/Rudloff/alltube/wiki" }, - "tags": [ - "media", - "video", - "downloader" - ] + "tags": ["media", "video", "downloader"] }, { "id": "ampache", @@ -2290,11 +1834,7 @@ "website": "http://ampache.org/", "docs": "https://github.com/ampache/ampache/wiki" }, - "tags": [ - "media", - "music", - "streaming" - ] + "tags": ["media", "music", "streaming"] }, { "id": "anythingllm", @@ -2307,11 +1847,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", @@ -2324,10 +1860,7 @@ "website": "https://github.com/caronc/apprise-api", "docs": "https://github.com/caronc/apprise-api/wiki" }, - "tags": [ - "notifications", - "api" - ] + "tags": ["notifications", "api"] }, { "id": "arangodb", @@ -2340,11 +1873,7 @@ "website": "https://www.arangodb.com/", "docs": "https://www.arangodb.com/docs/" }, - "tags": [ - "database", - "graph-database", - "nosql" - ] + "tags": ["database", "graph-database", "nosql"] }, { "id": "anonupload", @@ -2357,10 +1886,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", @@ -2373,11 +1899,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", @@ -2390,11 +1912,7 @@ "website": "https://www.audiobookshelf.org", "docs": "https://www.audiobookshelf.org/docs" }, - "tags": [ - "media", - "audiobooks", - "podcasts" - ] + "tags": ["media", "audiobooks", "podcasts"] }, { "id": "authorizer", @@ -2407,11 +1925,7 @@ "website": "https://authorizer.dev", "docs": "https://docs.authorizer.dev/" }, - "tags": [ - "authentication", - "authorization", - "security" - ] + "tags": ["authentication", "authorization", "security"] }, { "id": "automatisch", @@ -2424,11 +1938,7 @@ "website": "https://automatisch.io/docs", "docs": "https://automatisch.io/docs" }, - "tags": [ - "automation", - "workflow", - "integration" - ] + "tags": ["automation", "workflow", "integration"] }, { "id": "babybuddy", @@ -2441,11 +1951,7 @@ "website": "https://babybuddy.app", "docs": "https://docs.babybuddy.app" }, - "tags": [ - "parenting", - "tracking", - "family" - ] + "tags": ["parenting", "tracking", "family"] }, { "id": "baikal", @@ -2458,12 +1964,7 @@ "github": "https://sabre.io/baikal/", "docs": "https://sabre.io/baikal/install/" }, - "tags": [ - "calendar", - "contacts", - "caldav", - "carddav" - ] + "tags": ["calendar", "contacts", "caldav", "carddav"] }, { "id": "barrage", @@ -2476,11 +1977,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", @@ -2493,11 +1990,7 @@ "website": "https://www.bazarr.media/", "docs": "https://www.bazarr.media/docs" }, - "tags": [ - "subtitles", - "sonarr", - "radarr" - ] + "tags": ["subtitles", "sonarr", "radarr"] }, { "id": "beszel", @@ -2510,11 +2003,7 @@ "website": "https://beszel.dev", "docs": "https://beszel.dev/guide/getting-started" }, - "tags": [ - "monitoring", - "docker", - "alerts" - ] + "tags": ["monitoring", "docker", "alerts"] }, { "id": "bytestash", @@ -2527,10 +2016,7 @@ "website": "https://bytestash.com", "docs": "https://bytestash.com/docs" }, - "tags": [ - "file-storage", - "self-hosted" - ] + "tags": ["file-storage", "self-hosted"] }, { "id": "bookstack", @@ -2543,10 +2029,7 @@ "website": "https://www.bookstackapp.com", "docs": "https://www.bookstackapp.com/docs" }, - "tags": [ - "documentation", - "self-hosted" - ] + "tags": ["documentation", "self-hosted"] }, { "id": "bytebase", @@ -2559,10 +2042,7 @@ "website": "https://www.bytebase.com", "docs": "https://www.bytebase.com/docs" }, - "tags": [ - "database", - "self-hosted" - ] + "tags": ["database", "self-hosted"] }, { "id": "botpress", @@ -2575,10 +2055,7 @@ "website": "https://botpress.com", "docs": "https://botpress.com/docs" }, - "tags": [ - "ai", - "self-hosted" - ] + "tags": ["ai", "self-hosted"] }, { "id": "calibre", @@ -2591,10 +2068,7 @@ "website": "https://calibre-ebook.com/", "docs": "https://manual.calibre-ebook.com/" }, - "tags": [ - "Documents", - "E-Commerce" - ] + "tags": ["Documents", "E-Commerce"] }, { "id": "carbone", @@ -2607,12 +2081,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", @@ -2648,11 +2117,7 @@ "website": "https://changedetection.io", "docs": "https://github.com/dgtlmoon/changedetection.io/wiki" }, - "tags": [ - "Monitoring", - "Data", - "Notifications" - ] + "tags": ["Monitoring", "Data", "Notifications"] }, { "id": "chevereto", @@ -2703,11 +2168,7 @@ "website": "https://www.classicpress.net/", "docs": "https://docs.classicpress.net/" }, - "tags": [ - "cms", - "wordpress", - "content-management" - ] + "tags": ["cms", "wordpress", "content-management"] }, { "id": "cloud9", @@ -2720,11 +2181,7 @@ "website": "https://aws.amazon.com/cloud9/", "docs": "https://docs.aws.amazon.com/cloud9/" }, - "tags": [ - "ide", - "development", - "cloud" - ] + "tags": ["ide", "development", "cloud"] }, { "id": "cloudcommander", @@ -2737,11 +2194,7 @@ "website": "https://cloudcmd.io", "docs": "https://cloudcmd.io/#install" }, - "tags": [ - "file-manager", - "web-based", - "console" - ] + "tags": ["file-manager", "web-based", "console"] }, { "id": "cockpit", @@ -2754,11 +2207,7 @@ "website": "https://getcockpit.com", "docs": "https://getcockpit.com/documentation" }, - "tags": [ - "cms", - "content-management", - "api" - ] + "tags": ["cms", "content-management", "api"] }, { "id": "chromium", @@ -2771,11 +2220,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", @@ -2788,11 +2233,7 @@ "website": "https://codex.so", "docs": "https://docs.codex.so" }, - "tags": [ - "documentation", - "development", - "collaboration" - ] + "tags": ["documentation", "development", "collaboration"] }, { "id": "colanode", @@ -2805,11 +2246,7 @@ "website": "https://colanode.com", "docs": "https://colanode.com/docs/" }, - "tags": [ - "documentation", - "knowledge-base", - "collaboration" - ] + "tags": ["documentation", "knowledge-base", "collaboration"] }, { "id": "collabora-office", @@ -2822,11 +2259,7 @@ "website": "https://collaboraonline.com", "docs": "https://sdk.collaboraonline.com/docs" }, - "tags": [ - "office", - "documents", - "collaboration" - ] + "tags": ["office", "documents", "collaboration"] }, { "id": "confluence", @@ -2857,11 +2290,7 @@ "github": "https://github.com/souramoo/commentoplusplus" }, "logo": "logo.png", - "tags": [ - "comments", - "discussion", - "website" - ] + "tags": ["comments", "discussion", "website"] }, { "id": "commentoplusplus", @@ -2874,11 +2303,7 @@ "github": "https://github.com/souramoo/commentoplusplus" }, "logo": "logo.png", - "tags": [ - "comments", - "website", - "open-source" - ] + "tags": ["comments", "website", "open-source"] }, { "id": "coralproject", @@ -2891,11 +2316,7 @@ "github": "https://github.com/coralproject/talk" }, "logo": "logo.png", - "tags": [ - "communication", - "community", - "privacy" - ] + "tags": ["communication", "community", "privacy"] }, { "id": "rsshub", @@ -2908,11 +2329,7 @@ "website": "https://rsshub.app/", "docs": "https://docs.rsshub.app/" }, - "tags": [ - "rss", - "api", - "self-hosted" - ] + "tags": ["rss", "api", "self-hosted"] }, { "id": "tailscale-exitnode", @@ -2925,9 +2342,7 @@ "website": "https://tailscale.com/", "docs": "https://tailscale.com/kb/1408/quick-guide-exit-nodes" }, - "tags": [ - "network" - ] + "tags": ["network"] }, { "id": "homebridge", @@ -2940,13 +2355,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": "homeassistant", @@ -2978,11 +2387,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": "onetimesecret", @@ -2995,12 +2400,7 @@ "website": "https://onetimesecret.com", "docs": "https://docs.onetimesecret.com" }, - "tags": [ - "auth", - "password", - "secret", - "secure" - ] + "tags": ["auth", "password", "secret", "secure"] }, { "id": "bugsink", @@ -3013,11 +2413,7 @@ "website": "https://www.bugsink.com/", "docs": "https://www.bugsink.com/docs/" }, - "tags": [ - "hosting", - "self-hosted", - "development" - ] + "tags": ["hosting", "self-hosted", "development"] }, { "id": "bolt.diy", @@ -3030,14 +2426,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": "qdrant", @@ -3050,11 +2439,7 @@ "website": "https://qdrant.tech/", "docs": "https://qdrant.tech/documentation/" }, - "tags": [ - "vector-db", - "database", - "search" - ] + "tags": ["vector-db", "database", "search"] }, { "id": "trmnl-byos-laravel", @@ -3067,9 +2452,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": "chibisafe", @@ -3082,11 +2465,7 @@ "website": "https://chibisafe.app", "docs": "https://chibisafe.app/docs/intro" }, - "tags": [ - "media system", - "storage", - "file-sharing" - ] + "tags": ["media system", "storage", "file-sharing"] }, { "id": "rybbit", @@ -3099,9 +2478,7 @@ "website": "https://rybbit.io", "docs": "https://www.rybbit.io/docs" }, - "tags": [ - "analytics" - ] + "tags": ["analytics"] }, { "id": "seafile", @@ -3114,11 +2491,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": "flagsmith", @@ -3149,9 +2522,7 @@ "website": "https://www.docuseal.com/", "docs": "https://www.docuseal.com/" }, - "tags": [ - "document-signing" - ] + "tags": ["document-signing"] }, { "id": "kutt", @@ -3164,10 +2535,7 @@ "website": "https://kutt.it", "docs": "https://github.com/thedevs-network/kutt#kuttit" }, - "tags": [ - "link-shortener", - "link-sharing" - ] + "tags": ["link-shortener", "link-sharing"] }, { "id": "palmr", @@ -3180,11 +2548,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": "karakeep", @@ -3266,12 +2630,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": "rabbitmq", @@ -3284,11 +2643,7 @@ "website": "https://www.rabbitmq.com/", "docs": "https://www.rabbitmq.com/documentation.html" }, - "tags": [ - "message-broker", - "queue", - "rabbitmq" - ] + "tags": ["message-broker", "queue", "rabbitmq"] }, { "id": "zitadel", @@ -3313,4 +2668,4 @@ "multi-tenant" ] } -] \ No newline at end of file +]