From a1785b99541fc0d450cf91231ba901d9bd669785 Mon Sep 17 00:00:00 2001 From: jackspiering <46534141+jackspiering@users.noreply.github.com> Date: Tue, 3 Feb 2026 20:14:16 +0100 Subject: [PATCH 01/13] feat: generate Arcane registry --- .github/workflows/generate-registry.yml | 35 + registry.json | 1192 +++++++++++++++++++++++ scripts/generate_registry.py | 226 +++++ 3 files changed, 1453 insertions(+) create mode 100644 .github/workflows/generate-registry.yml create mode 100644 registry.json create mode 100755 scripts/generate_registry.py diff --git a/.github/workflows/generate-registry.yml b/.github/workflows/generate-registry.yml new file mode 100644 index 0000000..99e2e54 --- /dev/null +++ b/.github/workflows/generate-registry.yml @@ -0,0 +1,35 @@ +name: Generate registry + +on: + push: + branches: + - main + paths: + - "services/**" + - "README.md" + - "scripts/generate_registry.py" + workflow_dispatch: + +permissions: + contents: write + +jobs: + generate: + if: github.actor != 'github-actions[bot]' + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Generate registry.json + run: python3 scripts/generate_registry.py --ref "${{ github.ref_name }}" + - name: Commit registry.json + run: | + if git diff --quiet; then + echo "No registry changes" + exit 0 + fi + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add registry.json + git commit -m "chore: update registry.json" + git push diff --git a/registry.json b/registry.json new file mode 100644 index 0000000..7c877c2 --- /dev/null +++ b/registry.json @@ -0,0 +1,1192 @@ +{ + "name": "ScaleTail Templates", + "description": "Curated Tailscale sidecar Docker configurations for self-hosted services.", + "version": "1.0.0", + "author": "ScaleTail", + "url": "https://github.com/jackspiering/ScaleTail-testing", + "templates": [ + { + "id": "adguardhome", + "name": "AdGuard Home with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [AdGuard Home](https://github.com/AdguardTeam/AdGuardHome) with Tailscale as a sidecar container to securely route DNS traffic over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your DNS queries, ensuring that they are only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/adguardhome/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/adguardhome/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/adguardhome/README.md", + "tags": [ + "networking-and-security" + ] + }, + { + "id": "adguardhome-sync", + "name": "AdGuardHome Sync with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up **[AdGuardHome Sync](https://github.com/bakito/adguardhome-sync)** with Tailscale as a sidecar container to securely synchronize your AdGuard Home instances over a private Tailscale network. By integrating Tailscale, you ensure that configuration data is transmitted securely between nodes and accessible only to authorized devices in your private network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/adguardhome-sync/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/adguardhome-sync/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/adguardhome-sync/README.md", + "tags": [ + "networking-and-security" + ] + }, + { + "id": "audiobookshelf", + "name": "Audiobookshelf with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Audiobookshelf](https://github.com/advplyr/audiobookshelf) with Tailscale as a sidecar container to securely access and manage your audiobook and podcast library over a private Tailscale network. By integrating Tailscale, you can ensure that your Audiobookshelf instance remains private and accessible only to devices within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/audiobookshelf/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/audiobookshelf/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/audiobookshelf/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "bazarr", + "name": "Bazarr with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Bazarr](https://github.com/morpheus65535/bazarr) with Tailscale as a sidecar container to securely manage and access your subtitle management system over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Bazarr instance, ensuring that it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/bazarr/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/bazarr/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/bazarr/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "bentopdf", + "name": "BentoPDF with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up **BentoPDF** with a Tailscale sidecar container, enabling secure access to your self-hosted PDF management interface over your private Tailscale network. With this setup, your BentoPDF instance remains **private and accessible only from authorized devices on your Tailnet**, keeping your documents protected from public exposure.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/bentopdf/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/bentopdf/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/bentopdf/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "beszel-agent", + "name": "Beszel Agent", + "description": "This Docker Compose configuration integrates [Beszel](https://github.com/henrygd/beszel) with Tailscale in a sidecar setup to enhance secure communication over a private Tailscale network. By utilizing Tailscale, this configuration ensures that all communication handled by Beszel remains secure and private within your Tailscale network. Thanks to @[henrygd](https://github.com/henrygd) for the tool development.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/beszel/agent/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/beszel/agent/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/beszel/README.md", + "tags": [ + "monitoring-and-analytics" + ] + }, + { + "id": "beszel-hub", + "name": "Beszel Hub", + "description": "This Docker Compose configuration integrates [Beszel](https://github.com/henrygd/beszel) with Tailscale in a sidecar setup to enhance secure communication over a private Tailscale network. By utilizing Tailscale, this configuration ensures that all communication handled by Beszel remains secure and private within your Tailscale network. Thanks to @[henrygd](https://github.com/henrygd) for the tool development.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/beszel/hub/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/beszel/hub/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/beszel/README.md", + "tags": [ + "monitoring-and-analytics" + ] + }, + { + "id": "booklore", + "name": "BookLore with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [BookLore](https://github.com/booklore-app/booklore) with Tailscale as a sidecar container to securely access and manage your book library over a private Tailscale network. By integrating Tailscale, you can ensure that your BookLore instance remains private and accessible only to devices within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/booklore/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/booklore/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/booklore/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "caddy", + "name": "Caddy with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Caddy](https://github.com/caddyserver/caddy-docker) with Tailscale as a sidecar container to securely manage and route your traffic over a private Tailscale network. By integrating Tailscale, you can enhance the security and privacy of your Caddy instance, ensuring that access is restricted to devices within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/caddy/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/caddy/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/caddy/README.md", + "tags": [ + "networking-and-security" + ] + }, + { + "id": "changedetection", + "name": "ChangeDetection.io with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [ChangeDetection.io](https://github.com/dgtlmoon/changedetection.io) with Tailscale as a sidecar container to securely monitor and access website changes over a private Tailscale network. By using Tailscale in a sidecar configuration, you can ensure that your ChangeDetection.io instance is only accessible within your Tailscale network, providing enhanced security and privacy.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/changedetection/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/changedetection/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/changedetection/README.md", + "tags": [ + "development-tools" + ] + }, + { + "id": "clipcascade", + "name": "ClipCascade with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [ClipCascade](https://github.com/Sathvik-Rao/ClipCascade) with Tailscale as a sidecar container to securely manage and access your clipboard history over a private Tailscale network. By integrating Tailscale, you can ensure that your ClipCascade instance remains private and accessible only to authorized devices on your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/clipcascade/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/clipcascade/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/clipcascade/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "coder", + "name": "Coder with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [**Coder**](https://github.com/coder/coder) with Tailscale as a sidecar container, enabling secure access to your self-hosted cloud development environments from anywhere on your private Tailscale network. With this setup, your Coder instance remains fully private and accessible only from authorized devices.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/coder/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/coder/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/coder/README.md", + "tags": [ + "development-tools" + ] + }, + { + "id": "configarr", + "name": "Configarr with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up **Configarr** with a Tailscale sidecar container, enabling secure and private management of configuration files for your *Radarr*, *Sonarr*, and broader media automation stack. With this setup, Configarr is **only accessible from within your Tailscale network**, keeping your configuration workflows fully private and under your control.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/configarr/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/configarr/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/configarr/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "convertx", + "name": "ConvertX with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [ConvertX](https://github.com/C4illin/ConvertX) with Tailscale as a sidecar container to securely access your media conversion tool over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your ConvertX instance, ensuring that it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/convertx/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/convertx/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/convertx/README.md", + "tags": [ + "utilities" + ] + }, + { + "id": "copyparty", + "name": "Copyparty with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Copyparty](https://github.com/9001/copyparty) with Tailscale as a sidecar container to securely access your lightweight file server and sharing platform over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and accessibility of your Copyparty instance, ensuring it is only available within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/copyparty/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/copyparty/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/copyparty/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "cyberchef", + "name": "CyberChef with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [CyberChef](https://github.com/gchq/CyberChef) with Tailscale as a sidecar container to securely access your data analysis and manipulation tool over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your CyberChef instance, ensuring that it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/cyberchef/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/cyberchef/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/cyberchef/README.md", + "tags": [ + "development-tools" + ] + }, + { + "id": "ddns-updater", + "name": "DDNS Updater with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [DDNS Updater](https://github.com/qdm12/ddns-updater) with Tailscale as a sidecar container, enabling secure and private management of your dynamic DNS records over a Tailscale network. Integrating Tailscale ensures that your DDNS Updater instance is accessible only to authorized devices within your Tailnet, enhancing the security of your DNS management.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ddns-updater/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ddns-updater/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ddns-updater/README.md", + "tags": [ + "networking-and-security" + ] + }, + { + "id": "docmost", + "name": "Docmost with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [**Docmost**](https://github.com/docmost/docmost) with Tailscale as a sidecar container, enabling secure access to your collaborative wiki and documentation platform from anywhere on your private Tailscale network. With this setup, your Docmost instance remains fully private and accessible only to authorized users.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/docmost/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/docmost/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/docmost/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "donetick", + "name": "Donetick with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up **[Donetick](https://github.com/donetick/donetick)** with Tailscale as a sidecar container to securely manage and access your self-hosted task management system over a private Tailscale network. By integrating Tailscale, you can ensure that your Donetick instance remains private and accessible only to authorized devices within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/donetick/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/donetick/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/donetick/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "dozzle", + "name": "Dozzle with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Dozzle](https://github.com/amir20/dozzle) with Tailscale as a sidecar container to securely access your real-time Docker log viewer over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Dozzle instance, ensuring that it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/dozzle/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/dozzle/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/dozzle/README.md", + "tags": [ + "development-tools" + ] + }, + { + "id": "dumbdo", + "name": "DumbDo with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [DumbDo](https://github.com/DumbWareio/DumbDo) with Tailscale as a sidecar container to securely manage and access your lightweight task manager over a private Tailscale network. By integrating Tailscale, you can ensure that your DumbDo instance remains private and accessible only to authorized devices within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/dumbdo/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/dumbdo/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/dumbdo/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "eigenfocus", + "name": "Eigenfocus with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up **[Eigenfocus](https://github.com/Eigenfocus/eigenfocus)** with Tailscale as a sidecar container to securely manage and access your self-hosted task and project management tool over a private Tailscale network. By integrating Tailscale, you can ensure that your Eigenfocus instance remains private and accessible only to authorized devices within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/eigenfocus/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/eigenfocus/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/eigenfocus/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "excalidraw", + "name": "Excalidraw with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Excalidraw](https://github.com/excalidraw/excalidraw) with Tailscale as a sidecar container to securely collaborate on whiteboard diagrams over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you can enhance the security and accessibility of your Excalidraw server, ensuring that it is only available within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/excalidraw/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/excalidraw/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/excalidraw/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "flatnotes", + "name": "Flatnotes with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up **[Flatnotes](https://github.com/dullage/flatnotes)** with Tailscale as a sidecar container to securely manage and access your self-hosted note-taking application over a private Tailscale network. By integrating Tailscale, you can ensure that your Flatnotes instance remains private and accessible only to authorized devices within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/flatnotes/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/flatnotes/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/flatnotes/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "forgejo", + "name": "Forgejo with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [**Forgejo**](https://forgejo.org/) with Tailscale as a sidecar container, enabling secure access to your self-hosted Git service from anywhere on your private Tailscale network. With this setup, your Forgejo instance remains fully private and accessible only from authorized devices.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/forgejo/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/forgejo/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/forgejo/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "formbricks", + "name": "Formbricks with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up **Formbricks** with a Tailscale sidecar container, enabling secure access to your self-hosted user feedback and survey platform over your private Tailscale network. With this setup, your Formbricks instance remains **private and accessible only from authorized devices on your Tailnet**, keeping feedback data and analytics protected from public exposure.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/formbricks/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/formbricks/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/formbricks/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "fossflow", + "name": "FossFLOW with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [FossFLOW](https://github.com/stan-smith/FossFLOW) with Tailscale as a sidecar container, enabling secure access to your visual workflow designer over your private Tailscale network. With this setup, FossFLOW remains fully self-hosted and is only accessible from authorized devices within your Tailnet.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/fossflow/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/fossflow/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/fossflow/README.md", + "tags": [ + "development-tools" + ] + }, + { + "id": "ghost", + "name": "Ghost with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up **[Ghost](https://github.com/TryGhost/Ghost)** with Tailscale as a sidecar container to securely manage and access your self-hosted publishing platform over a private Tailscale network. By integrating Tailscale, you can ensure that your Ghost instance remains private and accessible only to authorized devices within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ghost/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ghost/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ghost/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "gitsave", + "name": "GitSave with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [**GitSave**](https://github.com/TimWitzdam/GitSave) with Tailscale as a sidecar container, enabling secure access to your self-hosted GitHub repository backup solution from anywhere on your private Tailscale network. With this setup, your GitSave instance remains fully private and accessible only from authorized devices.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gitsave/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gitsave/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gitsave/README.md", + "tags": [ + "development-tools" + ] + }, + { + "id": "glance", + "name": "Glance with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Glance](https://github.com/glanceapp/glance) with Tailscale as a sidecar container to securely access your system monitoring dashboard over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Glance instance, ensuring that it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/glance/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/glance/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/glance/README.md", + "tags": [ + "dashboards-and-visualization" + ] + }, + { + "id": "gokapi", + "name": "Gokapi with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Gokapi](https://github.com/Forceu/Gokapi) with Tailscale as a sidecar container to securely manage and access your lightweight file-sharing service over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Gokapi instance, ensuring that it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gokapi/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gokapi/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gokapi/README.md", + "tags": [ + "development-tools" + ] + }, + { + "id": "gotify", + "name": "Gotify with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Gotify](https://github.com/gotify/server) with Tailscale as a sidecar container, enabling secure access to your notification server from anywhere on your private Tailscale network. With this setup, your Gotify instance remains completely private and protected, accessible only to your authorized devices.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gotify/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gotify/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gotify/README.md", + "tags": [ + "utilities" + ] + }, + { + "id": "grampsweb", + "name": "Gramps Web with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [**Gramps Web**](https://github.com/gramps-project/gramps-web) with Tailscale as a sidecar container, enabling secure access to your self-hosted genealogy platform from anywhere on your private Tailscale network. With this setup, your Gramps Web instance remains fully private and accessible only from authorized devices.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/grampsweb/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/grampsweb/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/grampsweb/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "haptic", + "name": "Haptic with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up **[Haptic](https://github.com/chroxify/haptic)** with Tailscale as a sidecar container to securely manage and access your self-hosted bookmark manager over a private Tailscale network. By integrating Tailscale, you can ensure that your Haptic instance remains private and accessible only to authorized devices within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/haptic/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/haptic/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/haptic/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "hemmelig", + "name": "Hemmelig.app with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up **Hemmelig.app** with a Tailscale sidecar container, enabling secure access to your private encrypted secret-sharing platform over your Tailscale network. With this setup, your instance will be **private and reachable only by your authorized Tailscale devices**, ensuring truly confidential communication and secret exchange.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/hemmelig/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/hemmelig/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/hemmelig/README.md", + "tags": [ + "utilities" + ] + }, + { + "id": "homarr", + "name": "Homarr with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Homarr](https://github.com/ajnart/homarr) with Tailscale as a sidecar container to securely manage and access your dashboard over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Homarr instance, ensuring that it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homarr/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homarr/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homarr/README.md", + "tags": [ + "development-tools" + ] + }, + { + "id": "home-assistant", + "name": "Home Assistant with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up **[Home Assistant](https://github.com/home-assistant/)** with Tailscale as a sidecar container to securely manage and access your smart home automation platform over a private Tailscale network. By integrating Tailscale, you can ensure that your Home Assistant instance remains private and accessible only to authorized devices within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/home-assistant/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/home-assistant/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/home-assistant/README.md", + "tags": [ + "smart-home" + ] + }, + { + "id": "homebox", + "name": "Homebox with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up **Homebox** with a Tailscale sidecar container, enabling secure access to your self-hosted inventory and asset management system over your private Tailscale network. With this setup, your Homebox instance remains **private and accessible only from authorized devices on your Tailnet**, keeping inventory data and asset metadata protected from public exposure.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homebox/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homebox/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homebox/README.md", + "tags": [ + "utilities" + ] + }, + { + "id": "homepage", + "name": "Homepage with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Homepage](https://github.com/gethomepage/homepage) with Tailscale as a sidecar container to securely access your personal dashboard over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Homepage instance, ensuring that it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homepage/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homepage/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homepage/README.md", + "tags": [ + "dashboards-and-visualization" + ] + }, + { + "id": "hytale", + "name": "Hytale Server with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up a Hytale game server with Tailscale as a sidecar container to place the server directly on your Tailnet. The Hytale container uses the Tailscale network stack via `network_mode: service:tailscale`, so players connect over Tailscale without exposing the UDP port publicly.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/hytale/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/hytale/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/hytale/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "immich", + "name": "Immich with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up Immich with Tailscale as a sidecar container, enabling secure access to your photo and video library from anywhere on your private Tailscale network. With this setup, your Immich instance remains completely private and protected, accessible only to your authorized devices.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/immich/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/immich/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/immich/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "isley", + "name": "Isley with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Isley](https://github.com/dwot/isley) with Tailscale as a sidecar container, enabling secure and private access to your self-hosted cannabis grow journal over a Tailscale network. With Tailscale, you can ensure that your sensitive grow data and notes are only accessible by trusted devices within your Tailnet.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/isley/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/isley/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/isley/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "it-tools", + "name": "IT-Tools with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [IT-Tools](https://github.com/CorentinTh/it-tools) with Tailscale as a sidecar container to securely access your all-in-one developer utility over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your IT-Tools instance, ensuring that it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/it-tools/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/it-tools/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/it-tools/README.md", + "tags": [ + "development-tools" + ] + }, + { + "id": "jellyfin", + "name": "Jellyfin with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Jellyfin](https://github.com/jellyfin/jellyfin) with Tailscale as a sidecar container to securely manage and access your media server over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Jellyfin instance, ensuring that it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/jellyfin/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/jellyfin/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/jellyfin/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "jellyseerr", + "name": "Jellyseerr with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Jellyseerr](https://docs.jellyseerr.dev/) with Tailscale as a sidecar container to securely manage and access your request management system over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you enhance the privacy and security of your Jellyseerr instance, ensuring it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/jellyseerr/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/jellyseerr/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/jellyseerr/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "kaneo", + "name": "Kaneo with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up **[Kaneo](https://github.com/usekaneo/kaneo)** with Tailscale as a sidecar container to securely manage and access your self-hosted project management platform over a private Tailscale network. By integrating Tailscale, you ensure that your Kaneo instance is only accessible to authorized devices within your Tailscale network, keeping your tasks, projects, and team discussions private.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/kaneo/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/kaneo/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/kaneo/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "karakeep", + "name": "Karakeep with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up **[Karakeep](https://github.com/karakeep-app/karakeep)** with Tailscale as a sidecar container to securely manage and access your self-hosted notes and collaboration app over a private Tailscale network. By integrating Tailscale, you can ensure that your Karakeep instance is only accessible to authorized devices within your Tailscale network, protecting your ideas and information from the public web.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/karakeep/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/karakeep/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/karakeep/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "kavita", + "name": "Kavita with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Kavita](https://github.com/Kareadita/Kavita) with Tailscale as a sidecar container to securely serve your comics, manga, and ebooks over a private Tailscale network. By running Tailscale as a sidecar, you restrict access to your Kavita instance to devices authenticated on your Tailnet, avoiding public exposure.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/kavita/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/kavita/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/kavita/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "languagetool", + "name": "LanguageTool with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [LanguageTool](https://languagetool.org) with Tailscale as a sidecar container to enhance secure networking.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/languagetool/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/languagetool/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/languagetool/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "linkding", + "name": "Linkding with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Linkding](https://github.com/sissbruecker/linkding) with Tailscale as a sidecar container to securely manage and access your self-hosted bookmark manager over a private Tailscale network. By integrating Tailscale, you can ensure that your Linkding instance remains private and accessible only to authorized devices on your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/linkding/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/linkding/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/linkding/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "lube-logger", + "name": "LubeLogger with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up **[LubeLogger](https://github.com/hargata/lubelog)** with Tailscale as a sidecar container, enabling secure access to your vehicle maintenance log from anywhere on your private Tailscale network. With this setup, your LubeLogger instance stays completely private and protected, accessible only to your authorized devices.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/lube-logger/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/lube-logger/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/lube-logger/README.md", + "tags": [ + "utilities" + ] + }, + { + "id": "mattermost", + "name": "Mattermost with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Mattermost](https://mattermost.com/platform-overview/) with Tailscale as a sidecar container to securely manage and access your clipboard history over a private Tailscale network. By integrating Tailscale, you can ensure that your Mattermost instance remains private and accessible only to authorized devices on your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/mattermost/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/mattermost/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/mattermost/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "mealie", + "name": "Mealie with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [**Mealie**](https://github.com/mealie-recipes/mealie/) with Tailscale as a sidecar container, enabling secure access to your personal recipe collection and meal planning platform from anywhere on your private Tailscale network. With this setup, your Mealie instance stays fully private and accessible only to your authorized devices.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/mealie/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/mealie/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/mealie/README.md", + "tags": [ + "food-and-wellness" + ] + }, + { + "id": "metube", + "name": "Metube with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Metube](https://github.com/alexta69/metube) with Tailscale as a sidecar container to securely manage and access your self-hosted YouTube downloader over a private Tailscale network. By integrating Tailscale, you can ensure that your Metube instance remains private and accessible only to authorized devices on your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/metube/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/metube/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/metube/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "miniqr", + "name": "Mini-QR with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up **[Mini-QR](https://github.com/lyqht/mini-qr)** with Tailscale as a sidecar container to securely access your self-hosted QR code generation tool over a private Tailscale network. By integrating Tailscale, you can ensure that your Mini-QR instance is only accessible to authorized devices within your private network, adding an extra layer of privacy and security.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/miniqr/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/miniqr/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/miniqr/README.md", + "tags": [ + "utilities" + ] + }, + { + "id": "nanote", + "name": "Nanote with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up **[Nanote](https://github.com/omarmir/nanote)** with Tailscale as a sidecar container to securely manage and access your self-hosted note-taking application over a private Tailscale network. By integrating Tailscale, you can ensure that your Nanote instance remains private and accessible only to authorized devices within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nanote/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nanote/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nanote/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "navidrome", + "name": "Navidrome with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Navidrome](https://github.com/navidrome/navidrome) with Tailscale as a sidecar container, enabling secure, private access to your music server over your Tailscale network. With this configuration, Navidrome is never exposed to the public internet, and access is limited to authorized devices on your Tailnet.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/navidrome/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/navidrome/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/navidrome/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "nessus", + "name": "Nessus with Tailscale Sidecar Configuration", + "description": "> \u26a0\ufe0f **Important:** This container has no ability for persistent storage - your configuration will be lost when restarting the instance.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nessus/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nessus/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nessus/README.md", + "tags": [ + "networking-and-security" + ] + }, + { + "id": "netbox", + "name": "Netbox with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Netbox](https://github.com/netbox-community/netbox) with Tailscale as a sidecar container to securely access your Network layout over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy, ensuring that they are only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/netbox/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/netbox/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/netbox/README.md", + "tags": [ + "networking-and-security" + ] + }, + { + "id": "nextcloud", + "name": "Nextcloud Server with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Nextcloud Server](https://github.com/nextcloud/server) with Tailscale as a sidecar container to securely manage and access your personal cloud storage over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Nextcloud instance, ensuring that it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nextcloud/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nextcloud/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nextcloud/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "nodered", + "name": "Node-RED with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Node-RED](https://github.com/node-red/node-red) with Tailscale as a sidecar container to securely access and manage your flow-based programming tool over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Node-RED instance, ensuring it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nodered/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nodered/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nodered/README.md", + "tags": [ + "development-tools" + ] + }, + { + "id": "ntfy", + "name": "ntfy with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [ntfy](https://ntfy.sh/) with Tailscale as a sidecar container to securely deliver push notifications over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you enhance the privacy and security of your ntfy instance, ensuring it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ntfy/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ntfy/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ntfy/README.md", + "tags": [ + "utilities" + ] + }, + { + "id": "overseerr", + "name": "Overseerr with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Overseerr](https://github.com/sct/overseerr) with Tailscale as a sidecar container to securely manage and access your request management system over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you enhance the privacy and security of your Overseerr instance, ensuring it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/overseerr/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/overseerr/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/overseerr/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "picard", + "name": "MusicBrainz Picard with Tailscale Sidecar Configuration", + "description": "This Docker Compose setup deploys **MusicBrainz Picard** alongside a **Tailscale sidecar container**, allowing secure access to your self-hosted music tagging and metadata management environment over your private **Tailscale network**. With this setup, Picard remains **private and reachable only from trusted devices within your Tailnet**, ensuring your media metadata library stays secure and isolated from the public internet.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/picard/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/picard/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/picard/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "pihole", + "name": "Pi-hole with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Pi-hole](https://github.com/pi-hole/pi-hole) with Tailscale as a sidecar container to securely manage and access your network-wide ad blocker over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Pi-hole instance, ensuring that it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pihole/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pihole/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pihole/README.md", + "tags": [ + "networking-and-security" + ] + }, + { + "id": "pingvin-share", + "name": "Pingvin Share with Tailscale Sidecar Configuration", + "description": "**PLEASE NOTE** As per June 29, 2025 pingvin-share **has been archived** by the developer.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pingvin-share/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pingvin-share/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pingvin-share/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "plex", + "name": "Plex with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Plex Media Server](https://hub.docker.com/r/linuxserver/plex) with Tailscale as a sidecar container to securely manage and stream your media over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your media server, ensuring that it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/plex/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/plex/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/plex/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "pocket-id", + "name": "Pocket ID with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Pocket ID](https://github.com/stonith404/pocket-id) with Tailscale as a sidecar container to securely manage and access your decentralized identity service over a private Tailscale network. By integrating Tailscale, you can ensure that your Pocket ID instance remains private and accessible only to authorized devices within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pocket-id/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pocket-id/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pocket-id/README.md", + "tags": [ + "networking-and-security" + ] + }, + { + "id": "portainer", + "name": "Portainer with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Portainer](https://github.com/portainer/portainer) with Tailscale as a sidecar container to securely manage and monitor your Docker environments over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Portainer instance, ensuring that it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/portainer/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/portainer/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/portainer/README.md", + "tags": [ + "development-tools" + ] + }, + { + "id": "portracker", + "name": "Portracker with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Portracker](https://github.com/mostafa-wahied/portracker) with Tailscale as a sidecar container to securely access your lightweight port monitoring and tracking tool over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and accessibility of your Portracker instance, ensuring it is only available within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/portracker/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/portracker/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/portracker/README.md", + "tags": [ + "monitoring-and-analytics" + ] + }, + { + "id": "posterizarr", + "name": "Posterizarr with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up **Posterizarr** with a Tailscale sidecar container, enabling secure and private access to your automated poster and artwork management service for *Radarr* and *Sonarr*. With this setup, Posterizarr is **only accessible from within your Tailscale network**, keeping your media automation environment clean, private, and secure.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/posterizarr/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/posterizarr/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/posterizarr/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "prowlarr", + "name": "Prowlarr with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Prowlarr](https://github.com/Prowlarr/Prowlarr) with Tailscale as a sidecar container to securely manage and access your indexer management system over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Prowlarr instance, ensuring that it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/prowlarr/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/prowlarr/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/prowlarr/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "qbittorrent", + "name": "qBittorrent with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [qBittorrent](https://www.qbittorrent.org/) with Tailscale as a sidecar container to securely manage and access your torrent client over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your qBittorrent instance, ensuring that it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/qbittorrent/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/qbittorrent/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/qbittorrent/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "radarr", + "name": "Radarr with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Radarr](https://github.com/Radarr/Radarr) with Tailscale as a sidecar container to securely manage and access your media management system over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Radarr instance, ensuring that it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/radarr/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/radarr/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/radarr/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "recyclarr", + "name": "Recyclarr with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up **Recyclarr** with a Tailscale sidecar container, allowing secure and private synchronization of quality profiles, custom formats, and media settings across your *Radarr* and *Sonarr* instances. With this setup, Recyclarr is **only reachable from within your Tailscale network**, keeping your media automation infrastructure fully private and protected.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/recyclarr/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/recyclarr/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/recyclarr/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "resilio-sync", + "name": "Resilio Sync with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Resilio Sync](https://github.com/linuxserver/docker-resilio-sync) with Tailscale as a sidecar container to securely synchronize and share your files over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your file synchronization, ensuring that Resilio Sync is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/resilio-sync/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/resilio-sync/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/resilio-sync/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "searxng", + "name": "searXNG with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [searXNG](https://github.com/searxng/searxng) with Tailscale as a sidecar container, enabling secure access to your private metasearch engine over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you can ensure that your searXNG instance is accessible only within your Tailscale network, providing an additional layer of security and privacy for your searches.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/searxng/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/searxng/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/searxng/README.md", + "tags": [ + "development-tools" + ] + }, + { + "id": "slink", + "name": "Slink with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Slink](https://github.com/andrii-kryvoviaz/slink) with Tailscale as a sidecar container to securely manage and access your local file-sharing system over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you can ensure that your Slink instance is both secure and private, accessible only within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/slink/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/slink/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/slink/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "sonarr", + "name": "Sonarr with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Sonarr](https://github.com/Sonarr/Sonarr) with Tailscale as a sidecar container to securely manage and access your media management system over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Sonarr instance, ensuring that it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/sonarr/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/sonarr/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/sonarr/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "speedtest-tracker", + "name": "Speedtest Tracker with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Speedtest Tracker](https://github.com/alexjustesen/speedtest-tracker) with Tailscale as a sidecar container to securely monitor and access your internet speed tracking tool over a private Tailscale network. By integrating Tailscale, you can ensure that your Speedtest Tracker instance remains private and accessible only to authorized devices on your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/speedtest-tracker/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/speedtest-tracker/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/speedtest-tracker/README.md", + "tags": [ + "monitoring-and-analytics" + ] + }, + { + "id": "stirlingpdf", + "name": "Stirling-PDF with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF) with Tailscale as a sidecar container to securely manage and manipulate PDF files over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your PDF processing, ensuring that the Stirling-PDF interface is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/stirlingpdf/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/stirlingpdf/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/stirlingpdf/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "subtrackr", + "name": "Subtrackr with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [**Subtrackr**](https://github.com/bscott/subtrackr) with Tailscale as a sidecar container, enabling secure access to your self-hosted subscription tracking platform from anywhere on your private Tailscale network. With this setup, your Subtrackr instance remains fully private and accessible only from authorized devices.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/subtrackr/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/subtrackr/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/subtrackr/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "swingmx", + "name": "Swing Music with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up **Swing Music** with a Tailscale sidecar container, enabling secure access to your self-hosted music streaming server over your private Tailscale network. With this setup, your Swing Music instance remains **private and accessible only from authorized devices on your Tailnet**.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/swingmx/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/swingmx/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/swingmx/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "tailscale-exit-node", + "name": "Tailscale Exit Node Configuration", + "description": "This Docker Compose configuration sets up a Tailscale Exit Node, allowing devices in your Tailscale network to route their internet traffic securely through this node. By configuring a Tailscale Exit Node, you can enhance the privacy and security of your internet browsing by routing traffic through a trusted network, such as your home or office, rather than relying on potentially less secure public networks.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tailscale-exit-node/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tailscale-exit-node/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tailscale-exit-node/README.md", + "tags": [ + "networking-and-security" + ] + }, + { + "id": "tandoor", + "name": "Tandoor Recipes with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [**Tandoor Recipes**](https://github.com/TandoorRecipes/recipes) with Tailscale as a sidecar container, which enables a secure access to your personal recipe and meal planning platform from your Tailscale network. As with all other services inside this repository, your service stays fully private and accessible only to your authorized devices.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tandoor/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tandoor/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tandoor/README.md", + "tags": [ + "food-and-wellness" + ] + }, + { + "id": "tautulli", + "name": "Tautulli with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Tautulli for Docker](https://hub.docker.com/r/linuxserver/tautulli) with Tailscale as a sidecar container to securely monitor and manage your Plex Media Server over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you enhance the security and privacy of your Tautulli installation, ensuring that it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tautulli/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tautulli/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tautulli/README.md", + "tags": [ + "media-and-entertainment" + ] + }, + { + "id": "technitium", + "name": "Technitium DNS server with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up a [Technitium DNS Server](https://github.com/TechnitiumSoftware/DnsServer) with Tailscale as a sidecar container ......", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/technitium/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/technitium/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/technitium/README.md", + "tags": [ + "networking-and-security" + ] + }, + { + "id": "traefik", + "name": "Traefik with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Traefik](https://github.com/traefik/traefik) with Tailscale as a sidecar container to securely manage and route your traffic over a private Tailscale network. By integrating Tailscale, you can enhance the security and privacy of your Traefik instance, ensuring that access is restricted to devices within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/traefik/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/traefik/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/traefik/README.md", + "tags": [ + "networking-and-security" + ] + }, + { + "id": "uptime-kuma", + "name": "Uptime Kuma with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Uptime Kuma](https://github.com/louislam/uptime-kuma) with Tailscale as a sidecar container to securely monitor your services and websites over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your monitoring dashboard, ensuring that it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/uptime-kuma/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/uptime-kuma/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/uptime-kuma/README.md", + "tags": [ + "monitoring-and-analytics" + ] + }, + { + "id": "vaultwarden", + "name": "Vaultwarden with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Vaultwarden](https://github.com/dani-garcia/vaultwarden) with Tailscale as a sidecar container to securely manage and access your password manager over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Vaultwarden instance, ensuring that it is only accessible within your Tailscale network.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/vaultwarden/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/vaultwarden/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/vaultwarden/README.md", + "tags": [ + "productivity-and-collaboration" + ] + }, + { + "id": "wallos", + "name": "Wallos with Tailscale Sidecar Configuration", + "description": "This Docker Compose configuration sets up [Wallos](https://github.com/ellite/Wallos) with Tailscale as a sidecar container, enabling secure, private access to your self-hosted subscription tracker over your Tailscale network. With this setup, Wallos is never exposed to the public internet\u2014access is limited strictly to devices authenticated through your Tailscale Tailnet.", + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/wallos/compose.yaml", + "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/wallos/.env", + "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/wallos/README.md", + "tags": [ + "productivity-and-collaboration" + ] + } + ] +} diff --git a/scripts/generate_registry.py b/scripts/generate_registry.py new file mode 100755 index 0000000..d5b0b37 --- /dev/null +++ b/scripts/generate_registry.py @@ -0,0 +1,226 @@ +#!/usr/bin/env python3 +"""Generate Arcane registry.json from /services.""" +from __future__ import annotations + +import argparse +import json +import os +import re +import subprocess +from pathlib import Path +from typing import Dict, List, Optional, Tuple + +REPO_ROOT = Path(__file__).resolve().parents[1] +SERVICES_DIR = REPO_ROOT / "services" +ROOT_README = REPO_ROOT / "README.md" + + +def slugify(value: str) -> str: + value = value.encode("ascii", "ignore").decode() + value = value.lower() + value = value.replace("&", "and") + value = re.sub(r"[^a-z0-9]+", "-", value) + return value.strip("-") + + +def title_from_id(value: str) -> str: + parts = re.split(r"[-_]+", value) + return " ".join(p.capitalize() for p in parts if p) + + +def first_heading(text: str) -> Optional[str]: + for line in text.splitlines(): + line = line.strip() + if line.startswith("# "): + return line[2:].strip() + return None + + +def first_paragraph(text: str) -> Optional[str]: + lines = text.splitlines() + idx = 0 + # skip leading empty lines + while idx < len(lines) and not lines[idx].strip(): + idx += 1 + # skip first heading line if present + if idx < len(lines) and lines[idx].lstrip().startswith("#"): + idx += 1 + while idx < len(lines) and not lines[idx].strip(): + idx += 1 + if idx >= len(lines): + return None + paragraph: List[str] = [] + while idx < len(lines) and lines[idx].strip(): + paragraph.append(lines[idx].strip()) + idx += 1 + if not paragraph: + return None + return " ".join(paragraph) + + +def read_text(path: Path) -> Optional[str]: + if not path.exists(): + return None + return path.read_text(encoding="utf-8") + + +def parse_category_map(readme_path: Path) -> Dict[str, str]: + text = read_text(readme_path) + if not text: + return {} + category = None + mapping: Dict[str, str] = {} + for line in text.splitlines(): + heading = re.match(r"^###\s+(.+)$", line.strip()) + if heading: + category = heading.group(1).strip() + continue + if not category: + continue + for match in re.finditer(r"\[Details\]\((services/[^)]+)\)", line): + service_path = match.group(1) + service_key = service_path.replace("services/", "", 1).strip("/") + mapping[service_key] = slugify(category) + return mapping + + +def infer_repo_slug(repo_arg: Optional[str]) -> Optional[str]: + if repo_arg: + return repo_arg + env_repo = os.environ.get("GITHUB_REPOSITORY") + if env_repo: + return env_repo + try: + url = ( + subprocess.check_output( + ["git", "remote", "get-url", "origin"], + cwd=REPO_ROOT, + text=True, + ) + .strip() + .rstrip("/") + ) + except Exception: + return None + if url.startswith("git@"): + # git@github.com:owner/repo.git + repo = url.split(":", 1)[-1] + else: + # https://github.com/owner/repo.git + repo = url.split("github.com/", 1)[-1] + if repo.endswith(".git"): + repo = repo[:-4] + return repo + + +def build_raw_base(repo: str, ref: str) -> str: + return f"https://raw.githubusercontent.com/{repo}/{ref}" + + +def pick_readme(compose_dir: Path) -> Tuple[Optional[Path], bool]: + local_readme = compose_dir / "README.md" + if local_readme.exists(): + return local_readme, False + parent_readme = compose_dir.parent / "README.md" + if parent_readme.exists(): + return parent_readme, True + return None, False + + +def build_template( + compose_path: Path, + repo: str, + ref: str, + category_map: Dict[str, str], +) -> Dict[str, object]: + rel_compose = compose_path.relative_to(REPO_ROOT).as_posix() + service_rel = compose_path.parent.relative_to(SERVICES_DIR).as_posix() + template_id = service_rel.replace("/", "-") + name = title_from_id(template_id) + + readme_path, parent_readme = pick_readme(compose_path.parent) + description = None + if readme_path: + readme_text = read_text(readme_path) + if readme_text: + heading = first_heading(readme_text) + if heading and not (parent_readme and "/" in service_rel): + name = heading + description = first_paragraph(readme_text) + + if not description: + description = f"Self-hosted {name} template." + + env_path = compose_path.parent / ".env" + rel_env = env_path.relative_to(REPO_ROOT).as_posix() + + documentation_url = None + if readme_path: + documentation_url = ( + build_raw_base(repo, ref) + "/" + readme_path.relative_to(REPO_ROOT).as_posix() + ) + + category_tag = None + if service_rel in category_map: + category_tag = category_map[service_rel] + else: + parent_key = service_rel.split("/", 1)[0] + category_tag = category_map.get(parent_key, "scaletail") + + template = { + "id": template_id, + "name": name, + "description": description, + "version": "1.0.0", + "author": "ScaleTail", + "compose_url": build_raw_base(repo, ref) + "/" + rel_compose, + "env_url": build_raw_base(repo, ref) + "/" + rel_env, + "documentation_url": documentation_url + or build_raw_base(repo, ref) + "/" + rel_compose, + "tags": [category_tag], + } + return template + + +def main() -> int: + parser = argparse.ArgumentParser(description="Generate registry.json") + parser.add_argument("--repo", help="GitHub repo in owner/name format") + parser.add_argument("--ref", default=os.environ.get("GITHUB_REF_NAME", "main")) + parser.add_argument( + "--output", + default=str(REPO_ROOT / "registry.json"), + help="Output path for registry.json", + ) + args = parser.parse_args() + + repo = infer_repo_slug(args.repo) + if not repo: + raise SystemExit("Unable to determine repo slug; pass --repo owner/name") + + category_map = parse_category_map(ROOT_README) + + templates: List[Dict[str, object]] = [] + for compose_path in sorted(SERVICES_DIR.rglob("compose.yaml")): + env_path = compose_path.parent / ".env" + if not env_path.exists(): + raise SystemExit(f"Missing .env for {compose_path}") + templates.append(build_template(compose_path, repo, args.ref, category_map)) + + templates.sort(key=lambda t: str(t["id"])) + + registry = { + "name": "ScaleTail Templates", + "description": "Curated Tailscale sidecar Docker configurations for self-hosted services.", + "version": "1.0.0", + "author": "ScaleTail", + "url": f"https://github.com/{repo}", + "templates": templates, + } + + output_path = Path(args.output) + output_path.write_text(json.dumps(registry, indent=2) + "\n", encoding="utf-8") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) From 647733fa3b92196734a131dc68b2e7faa7096fc2 Mon Sep 17 00:00:00 2001 From: jackspiering <46534141+jackspiering@users.noreply.github.com> Date: Tue, 3 Feb 2026 20:38:49 +0100 Subject: [PATCH 02/13] chore: simplify registry template names --- registry.json | 180 +++++++++++++++++------------------ scripts/generate_registry.py | 23 +++++ 2 files changed, 113 insertions(+), 90 deletions(-) diff --git a/registry.json b/registry.json index 7c877c2..cec46e9 100644 --- a/registry.json +++ b/registry.json @@ -7,7 +7,7 @@ "templates": [ { "id": "adguardhome", - "name": "AdGuard Home with Tailscale Sidecar Configuration", + "name": "AdGuard Home with Tailscale", "description": "This Docker Compose configuration sets up [AdGuard Home](https://github.com/AdguardTeam/AdGuardHome) with Tailscale as a sidecar container to securely route DNS traffic over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your DNS queries, ensuring that they are only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -20,7 +20,7 @@ }, { "id": "adguardhome-sync", - "name": "AdGuardHome Sync with Tailscale Sidecar Configuration", + "name": "AdGuardHome Sync with Tailscale", "description": "This Docker Compose configuration sets up **[AdGuardHome Sync](https://github.com/bakito/adguardhome-sync)** with Tailscale as a sidecar container to securely synchronize your AdGuard Home instances over a private Tailscale network. By integrating Tailscale, you ensure that configuration data is transmitted securely between nodes and accessible only to authorized devices in your private network.", "version": "1.0.0", "author": "ScaleTail", @@ -33,7 +33,7 @@ }, { "id": "audiobookshelf", - "name": "Audiobookshelf with Tailscale Sidecar Configuration", + "name": "Audiobookshelf with Tailscale", "description": "This Docker Compose configuration sets up [Audiobookshelf](https://github.com/advplyr/audiobookshelf) with Tailscale as a sidecar container to securely access and manage your audiobook and podcast library over a private Tailscale network. By integrating Tailscale, you can ensure that your Audiobookshelf instance remains private and accessible only to devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -46,7 +46,7 @@ }, { "id": "bazarr", - "name": "Bazarr with Tailscale Sidecar Configuration", + "name": "Bazarr with Tailscale", "description": "This Docker Compose configuration sets up [Bazarr](https://github.com/morpheus65535/bazarr) with Tailscale as a sidecar container to securely manage and access your subtitle management system over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Bazarr instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -59,7 +59,7 @@ }, { "id": "bentopdf", - "name": "BentoPDF with Tailscale Sidecar Configuration", + "name": "BentoPDF with Tailscale", "description": "This Docker Compose configuration sets up **BentoPDF** with a Tailscale sidecar container, enabling secure access to your self-hosted PDF management interface over your private Tailscale network. With this setup, your BentoPDF instance remains **private and accessible only from authorized devices on your Tailnet**, keeping your documents protected from public exposure.", "version": "1.0.0", "author": "ScaleTail", @@ -72,7 +72,7 @@ }, { "id": "beszel-agent", - "name": "Beszel Agent", + "name": "Beszel Agent with Tailscale", "description": "This Docker Compose configuration integrates [Beszel](https://github.com/henrygd/beszel) with Tailscale in a sidecar setup to enhance secure communication over a private Tailscale network. By utilizing Tailscale, this configuration ensures that all communication handled by Beszel remains secure and private within your Tailscale network. Thanks to @[henrygd](https://github.com/henrygd) for the tool development.", "version": "1.0.0", "author": "ScaleTail", @@ -85,7 +85,7 @@ }, { "id": "beszel-hub", - "name": "Beszel Hub", + "name": "Beszel Hub with Tailscale", "description": "This Docker Compose configuration integrates [Beszel](https://github.com/henrygd/beszel) with Tailscale in a sidecar setup to enhance secure communication over a private Tailscale network. By utilizing Tailscale, this configuration ensures that all communication handled by Beszel remains secure and private within your Tailscale network. Thanks to @[henrygd](https://github.com/henrygd) for the tool development.", "version": "1.0.0", "author": "ScaleTail", @@ -98,7 +98,7 @@ }, { "id": "booklore", - "name": "BookLore with Tailscale Sidecar Configuration", + "name": "BookLore with Tailscale", "description": "This Docker Compose configuration sets up [BookLore](https://github.com/booklore-app/booklore) with Tailscale as a sidecar container to securely access and manage your book library over a private Tailscale network. By integrating Tailscale, you can ensure that your BookLore instance remains private and accessible only to devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -111,7 +111,7 @@ }, { "id": "caddy", - "name": "Caddy with Tailscale Sidecar Configuration", + "name": "Caddy with Tailscale", "description": "This Docker Compose configuration sets up [Caddy](https://github.com/caddyserver/caddy-docker) with Tailscale as a sidecar container to securely manage and route your traffic over a private Tailscale network. By integrating Tailscale, you can enhance the security and privacy of your Caddy instance, ensuring that access is restricted to devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -124,7 +124,7 @@ }, { "id": "changedetection", - "name": "ChangeDetection.io with Tailscale Sidecar Configuration", + "name": "ChangeDetection.io with Tailscale", "description": "This Docker Compose configuration sets up [ChangeDetection.io](https://github.com/dgtlmoon/changedetection.io) with Tailscale as a sidecar container to securely monitor and access website changes over a private Tailscale network. By using Tailscale in a sidecar configuration, you can ensure that your ChangeDetection.io instance is only accessible within your Tailscale network, providing enhanced security and privacy.", "version": "1.0.0", "author": "ScaleTail", @@ -137,7 +137,7 @@ }, { "id": "clipcascade", - "name": "ClipCascade with Tailscale Sidecar Configuration", + "name": "ClipCascade with Tailscale", "description": "This Docker Compose configuration sets up [ClipCascade](https://github.com/Sathvik-Rao/ClipCascade) with Tailscale as a sidecar container to securely manage and access your clipboard history over a private Tailscale network. By integrating Tailscale, you can ensure that your ClipCascade instance remains private and accessible only to authorized devices on your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -150,7 +150,7 @@ }, { "id": "coder", - "name": "Coder with Tailscale Sidecar Configuration", + "name": "Coder with Tailscale", "description": "This Docker Compose configuration sets up [**Coder**](https://github.com/coder/coder) with Tailscale as a sidecar container, enabling secure access to your self-hosted cloud development environments from anywhere on your private Tailscale network. With this setup, your Coder instance remains fully private and accessible only from authorized devices.", "version": "1.0.0", "author": "ScaleTail", @@ -163,7 +163,7 @@ }, { "id": "configarr", - "name": "Configarr with Tailscale Sidecar Configuration", + "name": "Configarr with Tailscale", "description": "This Docker Compose configuration sets up **Configarr** with a Tailscale sidecar container, enabling secure and private management of configuration files for your *Radarr*, *Sonarr*, and broader media automation stack. With this setup, Configarr is **only accessible from within your Tailscale network**, keeping your configuration workflows fully private and under your control.", "version": "1.0.0", "author": "ScaleTail", @@ -176,7 +176,7 @@ }, { "id": "convertx", - "name": "ConvertX with Tailscale Sidecar Configuration", + "name": "ConvertX with Tailscale", "description": "This Docker Compose configuration sets up [ConvertX](https://github.com/C4illin/ConvertX) with Tailscale as a sidecar container to securely access your media conversion tool over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your ConvertX instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -189,7 +189,7 @@ }, { "id": "copyparty", - "name": "Copyparty with Tailscale Sidecar Configuration", + "name": "Copyparty with Tailscale", "description": "This Docker Compose configuration sets up [Copyparty](https://github.com/9001/copyparty) with Tailscale as a sidecar container to securely access your lightweight file server and sharing platform over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and accessibility of your Copyparty instance, ensuring it is only available within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -202,7 +202,7 @@ }, { "id": "cyberchef", - "name": "CyberChef with Tailscale Sidecar Configuration", + "name": "CyberChef with Tailscale", "description": "This Docker Compose configuration sets up [CyberChef](https://github.com/gchq/CyberChef) with Tailscale as a sidecar container to securely access your data analysis and manipulation tool over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your CyberChef instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -215,7 +215,7 @@ }, { "id": "ddns-updater", - "name": "DDNS Updater with Tailscale Sidecar Configuration", + "name": "DDNS Updater with Tailscale", "description": "This Docker Compose configuration sets up [DDNS Updater](https://github.com/qdm12/ddns-updater) with Tailscale as a sidecar container, enabling secure and private management of your dynamic DNS records over a Tailscale network. Integrating Tailscale ensures that your DDNS Updater instance is accessible only to authorized devices within your Tailnet, enhancing the security of your DNS management.", "version": "1.0.0", "author": "ScaleTail", @@ -228,7 +228,7 @@ }, { "id": "docmost", - "name": "Docmost with Tailscale Sidecar Configuration", + "name": "Docmost with Tailscale", "description": "This Docker Compose configuration sets up [**Docmost**](https://github.com/docmost/docmost) with Tailscale as a sidecar container, enabling secure access to your collaborative wiki and documentation platform from anywhere on your private Tailscale network. With this setup, your Docmost instance remains fully private and accessible only to authorized users.", "version": "1.0.0", "author": "ScaleTail", @@ -241,7 +241,7 @@ }, { "id": "donetick", - "name": "Donetick with Tailscale Sidecar Configuration", + "name": "Donetick with Tailscale", "description": "This Docker Compose configuration sets up **[Donetick](https://github.com/donetick/donetick)** with Tailscale as a sidecar container to securely manage and access your self-hosted task management system over a private Tailscale network. By integrating Tailscale, you can ensure that your Donetick instance remains private and accessible only to authorized devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -254,7 +254,7 @@ }, { "id": "dozzle", - "name": "Dozzle with Tailscale Sidecar Configuration", + "name": "Dozzle with Tailscale", "description": "This Docker Compose configuration sets up [Dozzle](https://github.com/amir20/dozzle) with Tailscale as a sidecar container to securely access your real-time Docker log viewer over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Dozzle instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -267,7 +267,7 @@ }, { "id": "dumbdo", - "name": "DumbDo with Tailscale Sidecar Configuration", + "name": "DumbDo with Tailscale", "description": "This Docker Compose configuration sets up [DumbDo](https://github.com/DumbWareio/DumbDo) with Tailscale as a sidecar container to securely manage and access your lightweight task manager over a private Tailscale network. By integrating Tailscale, you can ensure that your DumbDo instance remains private and accessible only to authorized devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -280,7 +280,7 @@ }, { "id": "eigenfocus", - "name": "Eigenfocus with Tailscale Sidecar Configuration", + "name": "Eigenfocus with Tailscale", "description": "This Docker Compose configuration sets up **[Eigenfocus](https://github.com/Eigenfocus/eigenfocus)** with Tailscale as a sidecar container to securely manage and access your self-hosted task and project management tool over a private Tailscale network. By integrating Tailscale, you can ensure that your Eigenfocus instance remains private and accessible only to authorized devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -293,7 +293,7 @@ }, { "id": "excalidraw", - "name": "Excalidraw with Tailscale Sidecar Configuration", + "name": "Excalidraw with Tailscale", "description": "This Docker Compose configuration sets up [Excalidraw](https://github.com/excalidraw/excalidraw) with Tailscale as a sidecar container to securely collaborate on whiteboard diagrams over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you can enhance the security and accessibility of your Excalidraw server, ensuring that it is only available within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -306,7 +306,7 @@ }, { "id": "flatnotes", - "name": "Flatnotes with Tailscale Sidecar Configuration", + "name": "Flatnotes with Tailscale", "description": "This Docker Compose configuration sets up **[Flatnotes](https://github.com/dullage/flatnotes)** with Tailscale as a sidecar container to securely manage and access your self-hosted note-taking application over a private Tailscale network. By integrating Tailscale, you can ensure that your Flatnotes instance remains private and accessible only to authorized devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -319,7 +319,7 @@ }, { "id": "forgejo", - "name": "Forgejo with Tailscale Sidecar Configuration", + "name": "Forgejo with Tailscale", "description": "This Docker Compose configuration sets up [**Forgejo**](https://forgejo.org/) with Tailscale as a sidecar container, enabling secure access to your self-hosted Git service from anywhere on your private Tailscale network. With this setup, your Forgejo instance remains fully private and accessible only from authorized devices.", "version": "1.0.0", "author": "ScaleTail", @@ -332,7 +332,7 @@ }, { "id": "formbricks", - "name": "Formbricks with Tailscale Sidecar Configuration", + "name": "Formbricks with Tailscale", "description": "This Docker Compose configuration sets up **Formbricks** with a Tailscale sidecar container, enabling secure access to your self-hosted user feedback and survey platform over your private Tailscale network. With this setup, your Formbricks instance remains **private and accessible only from authorized devices on your Tailnet**, keeping feedback data and analytics protected from public exposure.", "version": "1.0.0", "author": "ScaleTail", @@ -345,7 +345,7 @@ }, { "id": "fossflow", - "name": "FossFLOW with Tailscale Sidecar Configuration", + "name": "FossFLOW with Tailscale", "description": "This Docker Compose configuration sets up [FossFLOW](https://github.com/stan-smith/FossFLOW) with Tailscale as a sidecar container, enabling secure access to your visual workflow designer over your private Tailscale network. With this setup, FossFLOW remains fully self-hosted and is only accessible from authorized devices within your Tailnet.", "version": "1.0.0", "author": "ScaleTail", @@ -358,7 +358,7 @@ }, { "id": "ghost", - "name": "Ghost with Tailscale Sidecar Configuration", + "name": "Ghost with Tailscale", "description": "This Docker Compose configuration sets up **[Ghost](https://github.com/TryGhost/Ghost)** with Tailscale as a sidecar container to securely manage and access your self-hosted publishing platform over a private Tailscale network. By integrating Tailscale, you can ensure that your Ghost instance remains private and accessible only to authorized devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -371,7 +371,7 @@ }, { "id": "gitsave", - "name": "GitSave with Tailscale Sidecar Configuration", + "name": "GitSave with Tailscale", "description": "This Docker Compose configuration sets up [**GitSave**](https://github.com/TimWitzdam/GitSave) with Tailscale as a sidecar container, enabling secure access to your self-hosted GitHub repository backup solution from anywhere on your private Tailscale network. With this setup, your GitSave instance remains fully private and accessible only from authorized devices.", "version": "1.0.0", "author": "ScaleTail", @@ -384,7 +384,7 @@ }, { "id": "glance", - "name": "Glance with Tailscale Sidecar Configuration", + "name": "Glance with Tailscale", "description": "This Docker Compose configuration sets up [Glance](https://github.com/glanceapp/glance) with Tailscale as a sidecar container to securely access your system monitoring dashboard over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Glance instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -397,7 +397,7 @@ }, { "id": "gokapi", - "name": "Gokapi with Tailscale Sidecar Configuration", + "name": "Gokapi with Tailscale", "description": "This Docker Compose configuration sets up [Gokapi](https://github.com/Forceu/Gokapi) with Tailscale as a sidecar container to securely manage and access your lightweight file-sharing service over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Gokapi instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -410,7 +410,7 @@ }, { "id": "gotify", - "name": "Gotify with Tailscale Sidecar Configuration", + "name": "Gotify with Tailscale", "description": "This Docker Compose configuration sets up [Gotify](https://github.com/gotify/server) with Tailscale as a sidecar container, enabling secure access to your notification server from anywhere on your private Tailscale network. With this setup, your Gotify instance remains completely private and protected, accessible only to your authorized devices.", "version": "1.0.0", "author": "ScaleTail", @@ -423,7 +423,7 @@ }, { "id": "grampsweb", - "name": "Gramps Web with Tailscale Sidecar Configuration", + "name": "Gramps Web with Tailscale", "description": "This Docker Compose configuration sets up [**Gramps Web**](https://github.com/gramps-project/gramps-web) with Tailscale as a sidecar container, enabling secure access to your self-hosted genealogy platform from anywhere on your private Tailscale network. With this setup, your Gramps Web instance remains fully private and accessible only from authorized devices.", "version": "1.0.0", "author": "ScaleTail", @@ -436,7 +436,7 @@ }, { "id": "haptic", - "name": "Haptic with Tailscale Sidecar Configuration", + "name": "Haptic with Tailscale", "description": "This Docker Compose configuration sets up **[Haptic](https://github.com/chroxify/haptic)** with Tailscale as a sidecar container to securely manage and access your self-hosted bookmark manager over a private Tailscale network. By integrating Tailscale, you can ensure that your Haptic instance remains private and accessible only to authorized devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -449,7 +449,7 @@ }, { "id": "hemmelig", - "name": "Hemmelig.app with Tailscale Sidecar Configuration", + "name": "Hemmelig.app with Tailscale", "description": "This Docker Compose configuration sets up **Hemmelig.app** with a Tailscale sidecar container, enabling secure access to your private encrypted secret-sharing platform over your Tailscale network. With this setup, your instance will be **private and reachable only by your authorized Tailscale devices**, ensuring truly confidential communication and secret exchange.", "version": "1.0.0", "author": "ScaleTail", @@ -462,7 +462,7 @@ }, { "id": "homarr", - "name": "Homarr with Tailscale Sidecar Configuration", + "name": "Homarr with Tailscale", "description": "This Docker Compose configuration sets up [Homarr](https://github.com/ajnart/homarr) with Tailscale as a sidecar container to securely manage and access your dashboard over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Homarr instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -475,7 +475,7 @@ }, { "id": "home-assistant", - "name": "Home Assistant with Tailscale Sidecar Configuration", + "name": "Home Assistant with Tailscale", "description": "This Docker Compose configuration sets up **[Home Assistant](https://github.com/home-assistant/)** with Tailscale as a sidecar container to securely manage and access your smart home automation platform over a private Tailscale network. By integrating Tailscale, you can ensure that your Home Assistant instance remains private and accessible only to authorized devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -488,7 +488,7 @@ }, { "id": "homebox", - "name": "Homebox with Tailscale Sidecar Configuration", + "name": "Homebox with Tailscale", "description": "This Docker Compose configuration sets up **Homebox** with a Tailscale sidecar container, enabling secure access to your self-hosted inventory and asset management system over your private Tailscale network. With this setup, your Homebox instance remains **private and accessible only from authorized devices on your Tailnet**, keeping inventory data and asset metadata protected from public exposure.", "version": "1.0.0", "author": "ScaleTail", @@ -501,7 +501,7 @@ }, { "id": "homepage", - "name": "Homepage with Tailscale Sidecar Configuration", + "name": "Homepage with Tailscale", "description": "This Docker Compose configuration sets up [Homepage](https://github.com/gethomepage/homepage) with Tailscale as a sidecar container to securely access your personal dashboard over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Homepage instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -514,7 +514,7 @@ }, { "id": "hytale", - "name": "Hytale Server with Tailscale Sidecar Configuration", + "name": "Hytale Server with Tailscale", "description": "This Docker Compose configuration sets up a Hytale game server with Tailscale as a sidecar container to place the server directly on your Tailnet. The Hytale container uses the Tailscale network stack via `network_mode: service:tailscale`, so players connect over Tailscale without exposing the UDP port publicly.", "version": "1.0.0", "author": "ScaleTail", @@ -527,7 +527,7 @@ }, { "id": "immich", - "name": "Immich with Tailscale Sidecar Configuration", + "name": "Immich with Tailscale", "description": "This Docker Compose configuration sets up Immich with Tailscale as a sidecar container, enabling secure access to your photo and video library from anywhere on your private Tailscale network. With this setup, your Immich instance remains completely private and protected, accessible only to your authorized devices.", "version": "1.0.0", "author": "ScaleTail", @@ -540,7 +540,7 @@ }, { "id": "isley", - "name": "Isley with Tailscale Sidecar Configuration", + "name": "Isley with Tailscale", "description": "This Docker Compose configuration sets up [Isley](https://github.com/dwot/isley) with Tailscale as a sidecar container, enabling secure and private access to your self-hosted cannabis grow journal over a Tailscale network. With Tailscale, you can ensure that your sensitive grow data and notes are only accessible by trusted devices within your Tailnet.", "version": "1.0.0", "author": "ScaleTail", @@ -553,7 +553,7 @@ }, { "id": "it-tools", - "name": "IT-Tools with Tailscale Sidecar Configuration", + "name": "IT-Tools with Tailscale", "description": "This Docker Compose configuration sets up [IT-Tools](https://github.com/CorentinTh/it-tools) with Tailscale as a sidecar container to securely access your all-in-one developer utility over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your IT-Tools instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -566,7 +566,7 @@ }, { "id": "jellyfin", - "name": "Jellyfin with Tailscale Sidecar Configuration", + "name": "Jellyfin with Tailscale", "description": "This Docker Compose configuration sets up [Jellyfin](https://github.com/jellyfin/jellyfin) with Tailscale as a sidecar container to securely manage and access your media server over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Jellyfin instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -579,7 +579,7 @@ }, { "id": "jellyseerr", - "name": "Jellyseerr with Tailscale Sidecar Configuration", + "name": "Jellyseerr with Tailscale", "description": "This Docker Compose configuration sets up [Jellyseerr](https://docs.jellyseerr.dev/) with Tailscale as a sidecar container to securely manage and access your request management system over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you enhance the privacy and security of your Jellyseerr instance, ensuring it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -592,7 +592,7 @@ }, { "id": "kaneo", - "name": "Kaneo with Tailscale Sidecar Configuration", + "name": "Kaneo with Tailscale", "description": "This Docker Compose configuration sets up **[Kaneo](https://github.com/usekaneo/kaneo)** with Tailscale as a sidecar container to securely manage and access your self-hosted project management platform over a private Tailscale network. By integrating Tailscale, you ensure that your Kaneo instance is only accessible to authorized devices within your Tailscale network, keeping your tasks, projects, and team discussions private.", "version": "1.0.0", "author": "ScaleTail", @@ -605,7 +605,7 @@ }, { "id": "karakeep", - "name": "Karakeep with Tailscale Sidecar Configuration", + "name": "Karakeep with Tailscale", "description": "This Docker Compose configuration sets up **[Karakeep](https://github.com/karakeep-app/karakeep)** with Tailscale as a sidecar container to securely manage and access your self-hosted notes and collaboration app over a private Tailscale network. By integrating Tailscale, you can ensure that your Karakeep instance is only accessible to authorized devices within your Tailscale network, protecting your ideas and information from the public web.", "version": "1.0.0", "author": "ScaleTail", @@ -618,7 +618,7 @@ }, { "id": "kavita", - "name": "Kavita with Tailscale Sidecar Configuration", + "name": "Kavita with Tailscale", "description": "This Docker Compose configuration sets up [Kavita](https://github.com/Kareadita/Kavita) with Tailscale as a sidecar container to securely serve your comics, manga, and ebooks over a private Tailscale network. By running Tailscale as a sidecar, you restrict access to your Kavita instance to devices authenticated on your Tailnet, avoiding public exposure.", "version": "1.0.0", "author": "ScaleTail", @@ -631,7 +631,7 @@ }, { "id": "languagetool", - "name": "LanguageTool with Tailscale Sidecar Configuration", + "name": "LanguageTool with Tailscale", "description": "This Docker Compose configuration sets up [LanguageTool](https://languagetool.org) with Tailscale as a sidecar container to enhance secure networking.", "version": "1.0.0", "author": "ScaleTail", @@ -644,7 +644,7 @@ }, { "id": "linkding", - "name": "Linkding with Tailscale Sidecar Configuration", + "name": "Linkding with Tailscale", "description": "This Docker Compose configuration sets up [Linkding](https://github.com/sissbruecker/linkding) with Tailscale as a sidecar container to securely manage and access your self-hosted bookmark manager over a private Tailscale network. By integrating Tailscale, you can ensure that your Linkding instance remains private and accessible only to authorized devices on your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -657,7 +657,7 @@ }, { "id": "lube-logger", - "name": "LubeLogger with Tailscale Sidecar Configuration", + "name": "LubeLogger with Tailscale", "description": "This Docker Compose configuration sets up **[LubeLogger](https://github.com/hargata/lubelog)** with Tailscale as a sidecar container, enabling secure access to your vehicle maintenance log from anywhere on your private Tailscale network. With this setup, your LubeLogger instance stays completely private and protected, accessible only to your authorized devices.", "version": "1.0.0", "author": "ScaleTail", @@ -670,7 +670,7 @@ }, { "id": "mattermost", - "name": "Mattermost with Tailscale Sidecar Configuration", + "name": "Mattermost with Tailscale", "description": "This Docker Compose configuration sets up [Mattermost](https://mattermost.com/platform-overview/) with Tailscale as a sidecar container to securely manage and access your clipboard history over a private Tailscale network. By integrating Tailscale, you can ensure that your Mattermost instance remains private and accessible only to authorized devices on your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -683,7 +683,7 @@ }, { "id": "mealie", - "name": "Mealie with Tailscale Sidecar Configuration", + "name": "Mealie with Tailscale", "description": "This Docker Compose configuration sets up [**Mealie**](https://github.com/mealie-recipes/mealie/) with Tailscale as a sidecar container, enabling secure access to your personal recipe collection and meal planning platform from anywhere on your private Tailscale network. With this setup, your Mealie instance stays fully private and accessible only to your authorized devices.", "version": "1.0.0", "author": "ScaleTail", @@ -696,7 +696,7 @@ }, { "id": "metube", - "name": "Metube with Tailscale Sidecar Configuration", + "name": "Metube with Tailscale", "description": "This Docker Compose configuration sets up [Metube](https://github.com/alexta69/metube) with Tailscale as a sidecar container to securely manage and access your self-hosted YouTube downloader over a private Tailscale network. By integrating Tailscale, you can ensure that your Metube instance remains private and accessible only to authorized devices on your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -709,7 +709,7 @@ }, { "id": "miniqr", - "name": "Mini-QR with Tailscale Sidecar Configuration", + "name": "Mini-QR with Tailscale", "description": "This Docker Compose configuration sets up **[Mini-QR](https://github.com/lyqht/mini-qr)** with Tailscale as a sidecar container to securely access your self-hosted QR code generation tool over a private Tailscale network. By integrating Tailscale, you can ensure that your Mini-QR instance is only accessible to authorized devices within your private network, adding an extra layer of privacy and security.", "version": "1.0.0", "author": "ScaleTail", @@ -722,7 +722,7 @@ }, { "id": "nanote", - "name": "Nanote with Tailscale Sidecar Configuration", + "name": "Nanote with Tailscale", "description": "This Docker Compose configuration sets up **[Nanote](https://github.com/omarmir/nanote)** with Tailscale as a sidecar container to securely manage and access your self-hosted note-taking application over a private Tailscale network. By integrating Tailscale, you can ensure that your Nanote instance remains private and accessible only to authorized devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -735,7 +735,7 @@ }, { "id": "navidrome", - "name": "Navidrome with Tailscale Sidecar Configuration", + "name": "Navidrome with Tailscale", "description": "This Docker Compose configuration sets up [Navidrome](https://github.com/navidrome/navidrome) with Tailscale as a sidecar container, enabling secure, private access to your music server over your Tailscale network. With this configuration, Navidrome is never exposed to the public internet, and access is limited to authorized devices on your Tailnet.", "version": "1.0.0", "author": "ScaleTail", @@ -748,7 +748,7 @@ }, { "id": "nessus", - "name": "Nessus with Tailscale Sidecar Configuration", + "name": "Nessus with Tailscale", "description": "> \u26a0\ufe0f **Important:** This container has no ability for persistent storage - your configuration will be lost when restarting the instance.", "version": "1.0.0", "author": "ScaleTail", @@ -761,7 +761,7 @@ }, { "id": "netbox", - "name": "Netbox with Tailscale Sidecar Configuration", + "name": "Netbox with Tailscale", "description": "This Docker Compose configuration sets up [Netbox](https://github.com/netbox-community/netbox) with Tailscale as a sidecar container to securely access your Network layout over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy, ensuring that they are only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -774,7 +774,7 @@ }, { "id": "nextcloud", - "name": "Nextcloud Server with Tailscale Sidecar Configuration", + "name": "Nextcloud Server with Tailscale", "description": "This Docker Compose configuration sets up [Nextcloud Server](https://github.com/nextcloud/server) with Tailscale as a sidecar container to securely manage and access your personal cloud storage over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Nextcloud instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -787,7 +787,7 @@ }, { "id": "nodered", - "name": "Node-RED with Tailscale Sidecar Configuration", + "name": "Node-RED with Tailscale", "description": "This Docker Compose configuration sets up [Node-RED](https://github.com/node-red/node-red) with Tailscale as a sidecar container to securely access and manage your flow-based programming tool over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Node-RED instance, ensuring it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -800,7 +800,7 @@ }, { "id": "ntfy", - "name": "ntfy with Tailscale Sidecar Configuration", + "name": "ntfy with Tailscale", "description": "This Docker Compose configuration sets up [ntfy](https://ntfy.sh/) with Tailscale as a sidecar container to securely deliver push notifications over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you enhance the privacy and security of your ntfy instance, ensuring it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -813,7 +813,7 @@ }, { "id": "overseerr", - "name": "Overseerr with Tailscale Sidecar Configuration", + "name": "Overseerr with Tailscale", "description": "This Docker Compose configuration sets up [Overseerr](https://github.com/sct/overseerr) with Tailscale as a sidecar container to securely manage and access your request management system over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you enhance the privacy and security of your Overseerr instance, ensuring it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -826,7 +826,7 @@ }, { "id": "picard", - "name": "MusicBrainz Picard with Tailscale Sidecar Configuration", + "name": "MusicBrainz Picard with Tailscale", "description": "This Docker Compose setup deploys **MusicBrainz Picard** alongside a **Tailscale sidecar container**, allowing secure access to your self-hosted music tagging and metadata management environment over your private **Tailscale network**. With this setup, Picard remains **private and reachable only from trusted devices within your Tailnet**, ensuring your media metadata library stays secure and isolated from the public internet.", "version": "1.0.0", "author": "ScaleTail", @@ -839,7 +839,7 @@ }, { "id": "pihole", - "name": "Pi-hole with Tailscale Sidecar Configuration", + "name": "Pi-hole with Tailscale", "description": "This Docker Compose configuration sets up [Pi-hole](https://github.com/pi-hole/pi-hole) with Tailscale as a sidecar container to securely manage and access your network-wide ad blocker over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Pi-hole instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -852,7 +852,7 @@ }, { "id": "pingvin-share", - "name": "Pingvin Share with Tailscale Sidecar Configuration", + "name": "Pingvin Share with Tailscale", "description": "**PLEASE NOTE** As per June 29, 2025 pingvin-share **has been archived** by the developer.", "version": "1.0.0", "author": "ScaleTail", @@ -865,7 +865,7 @@ }, { "id": "plex", - "name": "Plex with Tailscale Sidecar Configuration", + "name": "Plex with Tailscale", "description": "This Docker Compose configuration sets up [Plex Media Server](https://hub.docker.com/r/linuxserver/plex) with Tailscale as a sidecar container to securely manage and stream your media over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your media server, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -878,7 +878,7 @@ }, { "id": "pocket-id", - "name": "Pocket ID with Tailscale Sidecar Configuration", + "name": "Pocket ID with Tailscale", "description": "This Docker Compose configuration sets up [Pocket ID](https://github.com/stonith404/pocket-id) with Tailscale as a sidecar container to securely manage and access your decentralized identity service over a private Tailscale network. By integrating Tailscale, you can ensure that your Pocket ID instance remains private and accessible only to authorized devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -891,7 +891,7 @@ }, { "id": "portainer", - "name": "Portainer with Tailscale Sidecar Configuration", + "name": "Portainer with Tailscale", "description": "This Docker Compose configuration sets up [Portainer](https://github.com/portainer/portainer) with Tailscale as a sidecar container to securely manage and monitor your Docker environments over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Portainer instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -904,7 +904,7 @@ }, { "id": "portracker", - "name": "Portracker with Tailscale Sidecar Configuration", + "name": "Portracker with Tailscale", "description": "This Docker Compose configuration sets up [Portracker](https://github.com/mostafa-wahied/portracker) with Tailscale as a sidecar container to securely access your lightweight port monitoring and tracking tool over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and accessibility of your Portracker instance, ensuring it is only available within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -917,7 +917,7 @@ }, { "id": "posterizarr", - "name": "Posterizarr with Tailscale Sidecar Configuration", + "name": "Posterizarr with Tailscale", "description": "This Docker Compose configuration sets up **Posterizarr** with a Tailscale sidecar container, enabling secure and private access to your automated poster and artwork management service for *Radarr* and *Sonarr*. With this setup, Posterizarr is **only accessible from within your Tailscale network**, keeping your media automation environment clean, private, and secure.", "version": "1.0.0", "author": "ScaleTail", @@ -930,7 +930,7 @@ }, { "id": "prowlarr", - "name": "Prowlarr with Tailscale Sidecar Configuration", + "name": "Prowlarr with Tailscale", "description": "This Docker Compose configuration sets up [Prowlarr](https://github.com/Prowlarr/Prowlarr) with Tailscale as a sidecar container to securely manage and access your indexer management system over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Prowlarr instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -943,7 +943,7 @@ }, { "id": "qbittorrent", - "name": "qBittorrent with Tailscale Sidecar Configuration", + "name": "qBittorrent with Tailscale", "description": "This Docker Compose configuration sets up [qBittorrent](https://www.qbittorrent.org/) with Tailscale as a sidecar container to securely manage and access your torrent client over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your qBittorrent instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -956,7 +956,7 @@ }, { "id": "radarr", - "name": "Radarr with Tailscale Sidecar Configuration", + "name": "Radarr with Tailscale", "description": "This Docker Compose configuration sets up [Radarr](https://github.com/Radarr/Radarr) with Tailscale as a sidecar container to securely manage and access your media management system over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Radarr instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -969,7 +969,7 @@ }, { "id": "recyclarr", - "name": "Recyclarr with Tailscale Sidecar Configuration", + "name": "Recyclarr with Tailscale", "description": "This Docker Compose configuration sets up **Recyclarr** with a Tailscale sidecar container, allowing secure and private synchronization of quality profiles, custom formats, and media settings across your *Radarr* and *Sonarr* instances. With this setup, Recyclarr is **only reachable from within your Tailscale network**, keeping your media automation infrastructure fully private and protected.", "version": "1.0.0", "author": "ScaleTail", @@ -982,7 +982,7 @@ }, { "id": "resilio-sync", - "name": "Resilio Sync with Tailscale Sidecar Configuration", + "name": "Resilio Sync with Tailscale", "description": "This Docker Compose configuration sets up [Resilio Sync](https://github.com/linuxserver/docker-resilio-sync) with Tailscale as a sidecar container to securely synchronize and share your files over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your file synchronization, ensuring that Resilio Sync is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -995,7 +995,7 @@ }, { "id": "searxng", - "name": "searXNG with Tailscale Sidecar Configuration", + "name": "searXNG with Tailscale", "description": "This Docker Compose configuration sets up [searXNG](https://github.com/searxng/searxng) with Tailscale as a sidecar container, enabling secure access to your private metasearch engine over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you can ensure that your searXNG instance is accessible only within your Tailscale network, providing an additional layer of security and privacy for your searches.", "version": "1.0.0", "author": "ScaleTail", @@ -1008,7 +1008,7 @@ }, { "id": "slink", - "name": "Slink with Tailscale Sidecar Configuration", + "name": "Slink with Tailscale", "description": "This Docker Compose configuration sets up [Slink](https://github.com/andrii-kryvoviaz/slink) with Tailscale as a sidecar container to securely manage and access your local file-sharing system over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you can ensure that your Slink instance is both secure and private, accessible only within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -1021,7 +1021,7 @@ }, { "id": "sonarr", - "name": "Sonarr with Tailscale Sidecar Configuration", + "name": "Sonarr with Tailscale", "description": "This Docker Compose configuration sets up [Sonarr](https://github.com/Sonarr/Sonarr) with Tailscale as a sidecar container to securely manage and access your media management system over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Sonarr instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -1034,7 +1034,7 @@ }, { "id": "speedtest-tracker", - "name": "Speedtest Tracker with Tailscale Sidecar Configuration", + "name": "Speedtest Tracker with Tailscale", "description": "This Docker Compose configuration sets up [Speedtest Tracker](https://github.com/alexjustesen/speedtest-tracker) with Tailscale as a sidecar container to securely monitor and access your internet speed tracking tool over a private Tailscale network. By integrating Tailscale, you can ensure that your Speedtest Tracker instance remains private and accessible only to authorized devices on your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -1047,7 +1047,7 @@ }, { "id": "stirlingpdf", - "name": "Stirling-PDF with Tailscale Sidecar Configuration", + "name": "Stirling-PDF with Tailscale", "description": "This Docker Compose configuration sets up [Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF) with Tailscale as a sidecar container to securely manage and manipulate PDF files over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your PDF processing, ensuring that the Stirling-PDF interface is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -1060,7 +1060,7 @@ }, { "id": "subtrackr", - "name": "Subtrackr with Tailscale Sidecar Configuration", + "name": "Subtrackr with Tailscale", "description": "This Docker Compose configuration sets up [**Subtrackr**](https://github.com/bscott/subtrackr) with Tailscale as a sidecar container, enabling secure access to your self-hosted subscription tracking platform from anywhere on your private Tailscale network. With this setup, your Subtrackr instance remains fully private and accessible only from authorized devices.", "version": "1.0.0", "author": "ScaleTail", @@ -1073,7 +1073,7 @@ }, { "id": "swingmx", - "name": "Swing Music with Tailscale Sidecar Configuration", + "name": "Swing Music with Tailscale", "description": "This Docker Compose configuration sets up **Swing Music** with a Tailscale sidecar container, enabling secure access to your self-hosted music streaming server over your private Tailscale network. With this setup, your Swing Music instance remains **private and accessible only from authorized devices on your Tailnet**.", "version": "1.0.0", "author": "ScaleTail", @@ -1099,7 +1099,7 @@ }, { "id": "tandoor", - "name": "Tandoor Recipes with Tailscale Sidecar Configuration", + "name": "Tandoor Recipes with Tailscale", "description": "This Docker Compose configuration sets up [**Tandoor Recipes**](https://github.com/TandoorRecipes/recipes) with Tailscale as a sidecar container, which enables a secure access to your personal recipe and meal planning platform from your Tailscale network. As with all other services inside this repository, your service stays fully private and accessible only to your authorized devices.", "version": "1.0.0", "author": "ScaleTail", @@ -1112,7 +1112,7 @@ }, { "id": "tautulli", - "name": "Tautulli with Tailscale Sidecar Configuration", + "name": "Tautulli with Tailscale", "description": "This Docker Compose configuration sets up [Tautulli for Docker](https://hub.docker.com/r/linuxserver/tautulli) with Tailscale as a sidecar container to securely monitor and manage your Plex Media Server over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you enhance the security and privacy of your Tautulli installation, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -1125,7 +1125,7 @@ }, { "id": "technitium", - "name": "Technitium DNS server with Tailscale Sidecar Configuration", + "name": "Technitium DNS server with Tailscale", "description": "This Docker Compose configuration sets up a [Technitium DNS Server](https://github.com/TechnitiumSoftware/DnsServer) with Tailscale as a sidecar container ......", "version": "1.0.0", "author": "ScaleTail", @@ -1138,7 +1138,7 @@ }, { "id": "traefik", - "name": "Traefik with Tailscale Sidecar Configuration", + "name": "Traefik with Tailscale", "description": "This Docker Compose configuration sets up [Traefik](https://github.com/traefik/traefik) with Tailscale as a sidecar container to securely manage and route your traffic over a private Tailscale network. By integrating Tailscale, you can enhance the security and privacy of your Traefik instance, ensuring that access is restricted to devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -1151,7 +1151,7 @@ }, { "id": "uptime-kuma", - "name": "Uptime Kuma with Tailscale Sidecar Configuration", + "name": "Uptime Kuma with Tailscale", "description": "This Docker Compose configuration sets up [Uptime Kuma](https://github.com/louislam/uptime-kuma) with Tailscale as a sidecar container to securely monitor your services and websites over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your monitoring dashboard, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -1164,7 +1164,7 @@ }, { "id": "vaultwarden", - "name": "Vaultwarden with Tailscale Sidecar Configuration", + "name": "Vaultwarden with Tailscale", "description": "This Docker Compose configuration sets up [Vaultwarden](https://github.com/dani-garcia/vaultwarden) with Tailscale as a sidecar container to securely manage and access your password manager over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Vaultwarden instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -1177,7 +1177,7 @@ }, { "id": "wallos", - "name": "Wallos with Tailscale Sidecar Configuration", + "name": "Wallos with Tailscale", "description": "This Docker Compose configuration sets up [Wallos](https://github.com/ellite/Wallos) with Tailscale as a sidecar container, enabling secure, private access to your self-hosted subscription tracker over your Tailscale network. With this setup, Wallos is never exposed to the public internet\u2014access is limited strictly to devices authenticated through your Tailscale Tailnet.", "version": "1.0.0", "author": "ScaleTail", diff --git a/scripts/generate_registry.py b/scripts/generate_registry.py index d5b0b37..d261810 100755 --- a/scripts/generate_registry.py +++ b/scripts/generate_registry.py @@ -28,6 +28,27 @@ def title_from_id(value: str) -> str: return " ".join(p.capitalize() for p in parts if p) +def normalize_service_name(value: str) -> str: + base = value.strip() + patterns = [ + r"\s+with\s+Tailscale\s+Sidecar\s+Configuration\s*$", + r"\s+with\s+Tailscale\s+Sidecar\s*$", + r"\s+with\s+Tailscale\s+Configuration\s*$", + r"\s+with\s+Tailscale\s*$", + r"\s+Tailscale\s+Sidecar\s+Configuration\s*$", + r"\s+Tailscale\s+Sidecar\s*$", + r"\s+Sidecar\s+Configuration\s*$", + ] + for pattern in patterns: + base = re.sub(pattern, "", base, flags=re.IGNORECASE) + base = base.strip(" -") + if not base: + base = value.strip() + if re.search(r"tailscale", base, re.IGNORECASE): + return base + return f"{base} with Tailscale" + + def first_heading(text: str) -> Optional[str]: for line in text.splitlines(): line = line.strip() @@ -151,6 +172,8 @@ def build_template( if not description: description = f"Self-hosted {name} template." + name = normalize_service_name(name) + env_path = compose_path.parent / ".env" rel_env = env_path.relative_to(REPO_ROOT).as_posix() From 565fea885a807f142e02b18268799345c1b47cfe Mon Sep 17 00:00:00 2001 From: jackspiering <46534141+jackspiering@users.noreply.github.com> Date: Tue, 3 Feb 2026 21:50:36 +0100 Subject: [PATCH 03/13] Harden registry generator inputs --- scripts/generate_registry.py | 41 +++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/scripts/generate_registry.py b/scripts/generate_registry.py index d261810..019f084 100755 --- a/scripts/generate_registry.py +++ b/scripts/generate_registry.py @@ -13,6 +13,8 @@ REPO_ROOT = Path(__file__).resolve().parents[1] SERVICES_DIR = REPO_ROOT / "services" ROOT_README = REPO_ROOT / "README.md" +REPO_SLUG_RE = re.compile(r"^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$") +REF_RE = re.compile(r"^[A-Za-z0-9._/-]+$") def slugify(value: str) -> str: @@ -105,12 +107,26 @@ def parse_category_map(readme_path: Path) -> Dict[str, str]: return mapping +def validate_repo_slug(repo: str) -> str: + if not REPO_SLUG_RE.match(repo): + raise SystemExit(f"Invalid repo slug '{repo}'; expected owner/name") + return repo + + +def validate_ref(ref: str) -> str: + if not ref or not REF_RE.match(ref): + raise SystemExit(f"Invalid ref '{ref}'") + if ref.startswith("/") or ref.endswith("/") or ".." in ref or "//" in ref: + raise SystemExit(f"Invalid ref '{ref}'") + return ref + + def infer_repo_slug(repo_arg: Optional[str]) -> Optional[str]: if repo_arg: - return repo_arg + return validate_repo_slug(repo_arg) env_repo = os.environ.get("GITHUB_REPOSITORY") if env_repo: - return env_repo + return validate_repo_slug(env_repo) try: url = ( subprocess.check_output( @@ -131,7 +147,21 @@ def infer_repo_slug(repo_arg: Optional[str]) -> Optional[str]: repo = url.split("github.com/", 1)[-1] if repo.endswith(".git"): repo = repo[:-4] - return repo + return validate_repo_slug(repo) + + +def resolve_output_path(output_arg: str) -> Path: + output_path = Path(output_arg) + if not output_path.is_absolute(): + output_path = REPO_ROOT / output_path + resolved = output_path.resolve() + try: + resolved.relative_to(REPO_ROOT) + except ValueError: + raise SystemExit( + f"Output path '{resolved}' must be inside repository {REPO_ROOT}" + ) + return resolved def build_raw_base(repo: str, ref: str) -> str: @@ -219,6 +249,7 @@ def main() -> int: repo = infer_repo_slug(args.repo) if not repo: raise SystemExit("Unable to determine repo slug; pass --repo owner/name") + ref = validate_ref(args.ref) category_map = parse_category_map(ROOT_README) @@ -227,7 +258,7 @@ def main() -> int: env_path = compose_path.parent / ".env" if not env_path.exists(): raise SystemExit(f"Missing .env for {compose_path}") - templates.append(build_template(compose_path, repo, args.ref, category_map)) + templates.append(build_template(compose_path, repo, ref, category_map)) templates.sort(key=lambda t: str(t["id"])) @@ -240,7 +271,7 @@ def main() -> int: "templates": templates, } - output_path = Path(args.output) + output_path = resolve_output_path(args.output) output_path.write_text(json.dumps(registry, indent=2) + "\n", encoding="utf-8") return 0 From 22eb62395da5ab0fd3af9505ae539447e735dbfd Mon Sep 17 00:00:00 2001 From: jackspiering <46534141+jackspiering@users.noreply.github.com> Date: Tue, 3 Feb 2026 21:56:38 +0100 Subject: [PATCH 04/13] Remove Tailscale suffix from names --- scripts/generate_registry.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/scripts/generate_registry.py b/scripts/generate_registry.py index d261810..e7d0c90 100755 --- a/scripts/generate_registry.py +++ b/scripts/generate_registry.py @@ -44,9 +44,7 @@ def normalize_service_name(value: str) -> str: base = base.strip(" -") if not base: base = value.strip() - if re.search(r"tailscale", base, re.IGNORECASE): - return base - return f"{base} with Tailscale" + return base def first_heading(text: str) -> Optional[str]: From 1f387da78409ca05be696cea40dcb6e0816298e1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 3 Feb 2026 20:57:44 +0000 Subject: [PATCH 05/13] chore: update registry.json --- registry.json | 180 +++++++++++++++++++++++++------------------------- 1 file changed, 90 insertions(+), 90 deletions(-) diff --git a/registry.json b/registry.json index cec46e9..e099350 100644 --- a/registry.json +++ b/registry.json @@ -7,7 +7,7 @@ "templates": [ { "id": "adguardhome", - "name": "AdGuard Home with Tailscale", + "name": "AdGuard Home", "description": "This Docker Compose configuration sets up [AdGuard Home](https://github.com/AdguardTeam/AdGuardHome) with Tailscale as a sidecar container to securely route DNS traffic over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your DNS queries, ensuring that they are only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -20,7 +20,7 @@ }, { "id": "adguardhome-sync", - "name": "AdGuardHome Sync with Tailscale", + "name": "AdGuardHome Sync", "description": "This Docker Compose configuration sets up **[AdGuardHome Sync](https://github.com/bakito/adguardhome-sync)** with Tailscale as a sidecar container to securely synchronize your AdGuard Home instances over a private Tailscale network. By integrating Tailscale, you ensure that configuration data is transmitted securely between nodes and accessible only to authorized devices in your private network.", "version": "1.0.0", "author": "ScaleTail", @@ -33,7 +33,7 @@ }, { "id": "audiobookshelf", - "name": "Audiobookshelf with Tailscale", + "name": "Audiobookshelf", "description": "This Docker Compose configuration sets up [Audiobookshelf](https://github.com/advplyr/audiobookshelf) with Tailscale as a sidecar container to securely access and manage your audiobook and podcast library over a private Tailscale network. By integrating Tailscale, you can ensure that your Audiobookshelf instance remains private and accessible only to devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -46,7 +46,7 @@ }, { "id": "bazarr", - "name": "Bazarr with Tailscale", + "name": "Bazarr", "description": "This Docker Compose configuration sets up [Bazarr](https://github.com/morpheus65535/bazarr) with Tailscale as a sidecar container to securely manage and access your subtitle management system over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Bazarr instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -59,7 +59,7 @@ }, { "id": "bentopdf", - "name": "BentoPDF with Tailscale", + "name": "BentoPDF", "description": "This Docker Compose configuration sets up **BentoPDF** with a Tailscale sidecar container, enabling secure access to your self-hosted PDF management interface over your private Tailscale network. With this setup, your BentoPDF instance remains **private and accessible only from authorized devices on your Tailnet**, keeping your documents protected from public exposure.", "version": "1.0.0", "author": "ScaleTail", @@ -72,7 +72,7 @@ }, { "id": "beszel-agent", - "name": "Beszel Agent with Tailscale", + "name": "Beszel Agent", "description": "This Docker Compose configuration integrates [Beszel](https://github.com/henrygd/beszel) with Tailscale in a sidecar setup to enhance secure communication over a private Tailscale network. By utilizing Tailscale, this configuration ensures that all communication handled by Beszel remains secure and private within your Tailscale network. Thanks to @[henrygd](https://github.com/henrygd) for the tool development.", "version": "1.0.0", "author": "ScaleTail", @@ -85,7 +85,7 @@ }, { "id": "beszel-hub", - "name": "Beszel Hub with Tailscale", + "name": "Beszel Hub", "description": "This Docker Compose configuration integrates [Beszel](https://github.com/henrygd/beszel) with Tailscale in a sidecar setup to enhance secure communication over a private Tailscale network. By utilizing Tailscale, this configuration ensures that all communication handled by Beszel remains secure and private within your Tailscale network. Thanks to @[henrygd](https://github.com/henrygd) for the tool development.", "version": "1.0.0", "author": "ScaleTail", @@ -98,7 +98,7 @@ }, { "id": "booklore", - "name": "BookLore with Tailscale", + "name": "BookLore", "description": "This Docker Compose configuration sets up [BookLore](https://github.com/booklore-app/booklore) with Tailscale as a sidecar container to securely access and manage your book library over a private Tailscale network. By integrating Tailscale, you can ensure that your BookLore instance remains private and accessible only to devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -111,7 +111,7 @@ }, { "id": "caddy", - "name": "Caddy with Tailscale", + "name": "Caddy", "description": "This Docker Compose configuration sets up [Caddy](https://github.com/caddyserver/caddy-docker) with Tailscale as a sidecar container to securely manage and route your traffic over a private Tailscale network. By integrating Tailscale, you can enhance the security and privacy of your Caddy instance, ensuring that access is restricted to devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -124,7 +124,7 @@ }, { "id": "changedetection", - "name": "ChangeDetection.io with Tailscale", + "name": "ChangeDetection.io", "description": "This Docker Compose configuration sets up [ChangeDetection.io](https://github.com/dgtlmoon/changedetection.io) with Tailscale as a sidecar container to securely monitor and access website changes over a private Tailscale network. By using Tailscale in a sidecar configuration, you can ensure that your ChangeDetection.io instance is only accessible within your Tailscale network, providing enhanced security and privacy.", "version": "1.0.0", "author": "ScaleTail", @@ -137,7 +137,7 @@ }, { "id": "clipcascade", - "name": "ClipCascade with Tailscale", + "name": "ClipCascade", "description": "This Docker Compose configuration sets up [ClipCascade](https://github.com/Sathvik-Rao/ClipCascade) with Tailscale as a sidecar container to securely manage and access your clipboard history over a private Tailscale network. By integrating Tailscale, you can ensure that your ClipCascade instance remains private and accessible only to authorized devices on your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -150,7 +150,7 @@ }, { "id": "coder", - "name": "Coder with Tailscale", + "name": "Coder", "description": "This Docker Compose configuration sets up [**Coder**](https://github.com/coder/coder) with Tailscale as a sidecar container, enabling secure access to your self-hosted cloud development environments from anywhere on your private Tailscale network. With this setup, your Coder instance remains fully private and accessible only from authorized devices.", "version": "1.0.0", "author": "ScaleTail", @@ -163,7 +163,7 @@ }, { "id": "configarr", - "name": "Configarr with Tailscale", + "name": "Configarr", "description": "This Docker Compose configuration sets up **Configarr** with a Tailscale sidecar container, enabling secure and private management of configuration files for your *Radarr*, *Sonarr*, and broader media automation stack. With this setup, Configarr is **only accessible from within your Tailscale network**, keeping your configuration workflows fully private and under your control.", "version": "1.0.0", "author": "ScaleTail", @@ -176,7 +176,7 @@ }, { "id": "convertx", - "name": "ConvertX with Tailscale", + "name": "ConvertX", "description": "This Docker Compose configuration sets up [ConvertX](https://github.com/C4illin/ConvertX) with Tailscale as a sidecar container to securely access your media conversion tool over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your ConvertX instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -189,7 +189,7 @@ }, { "id": "copyparty", - "name": "Copyparty with Tailscale", + "name": "Copyparty", "description": "This Docker Compose configuration sets up [Copyparty](https://github.com/9001/copyparty) with Tailscale as a sidecar container to securely access your lightweight file server and sharing platform over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and accessibility of your Copyparty instance, ensuring it is only available within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -202,7 +202,7 @@ }, { "id": "cyberchef", - "name": "CyberChef with Tailscale", + "name": "CyberChef", "description": "This Docker Compose configuration sets up [CyberChef](https://github.com/gchq/CyberChef) with Tailscale as a sidecar container to securely access your data analysis and manipulation tool over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your CyberChef instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -215,7 +215,7 @@ }, { "id": "ddns-updater", - "name": "DDNS Updater with Tailscale", + "name": "DDNS Updater", "description": "This Docker Compose configuration sets up [DDNS Updater](https://github.com/qdm12/ddns-updater) with Tailscale as a sidecar container, enabling secure and private management of your dynamic DNS records over a Tailscale network. Integrating Tailscale ensures that your DDNS Updater instance is accessible only to authorized devices within your Tailnet, enhancing the security of your DNS management.", "version": "1.0.0", "author": "ScaleTail", @@ -228,7 +228,7 @@ }, { "id": "docmost", - "name": "Docmost with Tailscale", + "name": "Docmost", "description": "This Docker Compose configuration sets up [**Docmost**](https://github.com/docmost/docmost) with Tailscale as a sidecar container, enabling secure access to your collaborative wiki and documentation platform from anywhere on your private Tailscale network. With this setup, your Docmost instance remains fully private and accessible only to authorized users.", "version": "1.0.0", "author": "ScaleTail", @@ -241,7 +241,7 @@ }, { "id": "donetick", - "name": "Donetick with Tailscale", + "name": "Donetick", "description": "This Docker Compose configuration sets up **[Donetick](https://github.com/donetick/donetick)** with Tailscale as a sidecar container to securely manage and access your self-hosted task management system over a private Tailscale network. By integrating Tailscale, you can ensure that your Donetick instance remains private and accessible only to authorized devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -254,7 +254,7 @@ }, { "id": "dozzle", - "name": "Dozzle with Tailscale", + "name": "Dozzle", "description": "This Docker Compose configuration sets up [Dozzle](https://github.com/amir20/dozzle) with Tailscale as a sidecar container to securely access your real-time Docker log viewer over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Dozzle instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -267,7 +267,7 @@ }, { "id": "dumbdo", - "name": "DumbDo with Tailscale", + "name": "DumbDo", "description": "This Docker Compose configuration sets up [DumbDo](https://github.com/DumbWareio/DumbDo) with Tailscale as a sidecar container to securely manage and access your lightweight task manager over a private Tailscale network. By integrating Tailscale, you can ensure that your DumbDo instance remains private and accessible only to authorized devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -280,7 +280,7 @@ }, { "id": "eigenfocus", - "name": "Eigenfocus with Tailscale", + "name": "Eigenfocus", "description": "This Docker Compose configuration sets up **[Eigenfocus](https://github.com/Eigenfocus/eigenfocus)** with Tailscale as a sidecar container to securely manage and access your self-hosted task and project management tool over a private Tailscale network. By integrating Tailscale, you can ensure that your Eigenfocus instance remains private and accessible only to authorized devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -293,7 +293,7 @@ }, { "id": "excalidraw", - "name": "Excalidraw with Tailscale", + "name": "Excalidraw", "description": "This Docker Compose configuration sets up [Excalidraw](https://github.com/excalidraw/excalidraw) with Tailscale as a sidecar container to securely collaborate on whiteboard diagrams over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you can enhance the security and accessibility of your Excalidraw server, ensuring that it is only available within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -306,7 +306,7 @@ }, { "id": "flatnotes", - "name": "Flatnotes with Tailscale", + "name": "Flatnotes", "description": "This Docker Compose configuration sets up **[Flatnotes](https://github.com/dullage/flatnotes)** with Tailscale as a sidecar container to securely manage and access your self-hosted note-taking application over a private Tailscale network. By integrating Tailscale, you can ensure that your Flatnotes instance remains private and accessible only to authorized devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -319,7 +319,7 @@ }, { "id": "forgejo", - "name": "Forgejo with Tailscale", + "name": "Forgejo", "description": "This Docker Compose configuration sets up [**Forgejo**](https://forgejo.org/) with Tailscale as a sidecar container, enabling secure access to your self-hosted Git service from anywhere on your private Tailscale network. With this setup, your Forgejo instance remains fully private and accessible only from authorized devices.", "version": "1.0.0", "author": "ScaleTail", @@ -332,7 +332,7 @@ }, { "id": "formbricks", - "name": "Formbricks with Tailscale", + "name": "Formbricks", "description": "This Docker Compose configuration sets up **Formbricks** with a Tailscale sidecar container, enabling secure access to your self-hosted user feedback and survey platform over your private Tailscale network. With this setup, your Formbricks instance remains **private and accessible only from authorized devices on your Tailnet**, keeping feedback data and analytics protected from public exposure.", "version": "1.0.0", "author": "ScaleTail", @@ -345,7 +345,7 @@ }, { "id": "fossflow", - "name": "FossFLOW with Tailscale", + "name": "FossFLOW", "description": "This Docker Compose configuration sets up [FossFLOW](https://github.com/stan-smith/FossFLOW) with Tailscale as a sidecar container, enabling secure access to your visual workflow designer over your private Tailscale network. With this setup, FossFLOW remains fully self-hosted and is only accessible from authorized devices within your Tailnet.", "version": "1.0.0", "author": "ScaleTail", @@ -358,7 +358,7 @@ }, { "id": "ghost", - "name": "Ghost with Tailscale", + "name": "Ghost", "description": "This Docker Compose configuration sets up **[Ghost](https://github.com/TryGhost/Ghost)** with Tailscale as a sidecar container to securely manage and access your self-hosted publishing platform over a private Tailscale network. By integrating Tailscale, you can ensure that your Ghost instance remains private and accessible only to authorized devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -371,7 +371,7 @@ }, { "id": "gitsave", - "name": "GitSave with Tailscale", + "name": "GitSave", "description": "This Docker Compose configuration sets up [**GitSave**](https://github.com/TimWitzdam/GitSave) with Tailscale as a sidecar container, enabling secure access to your self-hosted GitHub repository backup solution from anywhere on your private Tailscale network. With this setup, your GitSave instance remains fully private and accessible only from authorized devices.", "version": "1.0.0", "author": "ScaleTail", @@ -384,7 +384,7 @@ }, { "id": "glance", - "name": "Glance with Tailscale", + "name": "Glance", "description": "This Docker Compose configuration sets up [Glance](https://github.com/glanceapp/glance) with Tailscale as a sidecar container to securely access your system monitoring dashboard over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Glance instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -397,7 +397,7 @@ }, { "id": "gokapi", - "name": "Gokapi with Tailscale", + "name": "Gokapi", "description": "This Docker Compose configuration sets up [Gokapi](https://github.com/Forceu/Gokapi) with Tailscale as a sidecar container to securely manage and access your lightweight file-sharing service over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Gokapi instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -410,7 +410,7 @@ }, { "id": "gotify", - "name": "Gotify with Tailscale", + "name": "Gotify", "description": "This Docker Compose configuration sets up [Gotify](https://github.com/gotify/server) with Tailscale as a sidecar container, enabling secure access to your notification server from anywhere on your private Tailscale network. With this setup, your Gotify instance remains completely private and protected, accessible only to your authorized devices.", "version": "1.0.0", "author": "ScaleTail", @@ -423,7 +423,7 @@ }, { "id": "grampsweb", - "name": "Gramps Web with Tailscale", + "name": "Gramps Web", "description": "This Docker Compose configuration sets up [**Gramps Web**](https://github.com/gramps-project/gramps-web) with Tailscale as a sidecar container, enabling secure access to your self-hosted genealogy platform from anywhere on your private Tailscale network. With this setup, your Gramps Web instance remains fully private and accessible only from authorized devices.", "version": "1.0.0", "author": "ScaleTail", @@ -436,7 +436,7 @@ }, { "id": "haptic", - "name": "Haptic with Tailscale", + "name": "Haptic", "description": "This Docker Compose configuration sets up **[Haptic](https://github.com/chroxify/haptic)** with Tailscale as a sidecar container to securely manage and access your self-hosted bookmark manager over a private Tailscale network. By integrating Tailscale, you can ensure that your Haptic instance remains private and accessible only to authorized devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -449,7 +449,7 @@ }, { "id": "hemmelig", - "name": "Hemmelig.app with Tailscale", + "name": "Hemmelig.app", "description": "This Docker Compose configuration sets up **Hemmelig.app** with a Tailscale sidecar container, enabling secure access to your private encrypted secret-sharing platform over your Tailscale network. With this setup, your instance will be **private and reachable only by your authorized Tailscale devices**, ensuring truly confidential communication and secret exchange.", "version": "1.0.0", "author": "ScaleTail", @@ -462,7 +462,7 @@ }, { "id": "homarr", - "name": "Homarr with Tailscale", + "name": "Homarr", "description": "This Docker Compose configuration sets up [Homarr](https://github.com/ajnart/homarr) with Tailscale as a sidecar container to securely manage and access your dashboard over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Homarr instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -475,7 +475,7 @@ }, { "id": "home-assistant", - "name": "Home Assistant with Tailscale", + "name": "Home Assistant", "description": "This Docker Compose configuration sets up **[Home Assistant](https://github.com/home-assistant/)** with Tailscale as a sidecar container to securely manage and access your smart home automation platform over a private Tailscale network. By integrating Tailscale, you can ensure that your Home Assistant instance remains private and accessible only to authorized devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -488,7 +488,7 @@ }, { "id": "homebox", - "name": "Homebox with Tailscale", + "name": "Homebox", "description": "This Docker Compose configuration sets up **Homebox** with a Tailscale sidecar container, enabling secure access to your self-hosted inventory and asset management system over your private Tailscale network. With this setup, your Homebox instance remains **private and accessible only from authorized devices on your Tailnet**, keeping inventory data and asset metadata protected from public exposure.", "version": "1.0.0", "author": "ScaleTail", @@ -501,7 +501,7 @@ }, { "id": "homepage", - "name": "Homepage with Tailscale", + "name": "Homepage", "description": "This Docker Compose configuration sets up [Homepage](https://github.com/gethomepage/homepage) with Tailscale as a sidecar container to securely access your personal dashboard over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Homepage instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -514,7 +514,7 @@ }, { "id": "hytale", - "name": "Hytale Server with Tailscale", + "name": "Hytale Server", "description": "This Docker Compose configuration sets up a Hytale game server with Tailscale as a sidecar container to place the server directly on your Tailnet. The Hytale container uses the Tailscale network stack via `network_mode: service:tailscale`, so players connect over Tailscale without exposing the UDP port publicly.", "version": "1.0.0", "author": "ScaleTail", @@ -527,7 +527,7 @@ }, { "id": "immich", - "name": "Immich with Tailscale", + "name": "Immich", "description": "This Docker Compose configuration sets up Immich with Tailscale as a sidecar container, enabling secure access to your photo and video library from anywhere on your private Tailscale network. With this setup, your Immich instance remains completely private and protected, accessible only to your authorized devices.", "version": "1.0.0", "author": "ScaleTail", @@ -540,7 +540,7 @@ }, { "id": "isley", - "name": "Isley with Tailscale", + "name": "Isley", "description": "This Docker Compose configuration sets up [Isley](https://github.com/dwot/isley) with Tailscale as a sidecar container, enabling secure and private access to your self-hosted cannabis grow journal over a Tailscale network. With Tailscale, you can ensure that your sensitive grow data and notes are only accessible by trusted devices within your Tailnet.", "version": "1.0.0", "author": "ScaleTail", @@ -553,7 +553,7 @@ }, { "id": "it-tools", - "name": "IT-Tools with Tailscale", + "name": "IT-Tools", "description": "This Docker Compose configuration sets up [IT-Tools](https://github.com/CorentinTh/it-tools) with Tailscale as a sidecar container to securely access your all-in-one developer utility over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your IT-Tools instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -566,7 +566,7 @@ }, { "id": "jellyfin", - "name": "Jellyfin with Tailscale", + "name": "Jellyfin", "description": "This Docker Compose configuration sets up [Jellyfin](https://github.com/jellyfin/jellyfin) with Tailscale as a sidecar container to securely manage and access your media server over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Jellyfin instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -579,7 +579,7 @@ }, { "id": "jellyseerr", - "name": "Jellyseerr with Tailscale", + "name": "Jellyseerr", "description": "This Docker Compose configuration sets up [Jellyseerr](https://docs.jellyseerr.dev/) with Tailscale as a sidecar container to securely manage and access your request management system over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you enhance the privacy and security of your Jellyseerr instance, ensuring it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -592,7 +592,7 @@ }, { "id": "kaneo", - "name": "Kaneo with Tailscale", + "name": "Kaneo", "description": "This Docker Compose configuration sets up **[Kaneo](https://github.com/usekaneo/kaneo)** with Tailscale as a sidecar container to securely manage and access your self-hosted project management platform over a private Tailscale network. By integrating Tailscale, you ensure that your Kaneo instance is only accessible to authorized devices within your Tailscale network, keeping your tasks, projects, and team discussions private.", "version": "1.0.0", "author": "ScaleTail", @@ -605,7 +605,7 @@ }, { "id": "karakeep", - "name": "Karakeep with Tailscale", + "name": "Karakeep", "description": "This Docker Compose configuration sets up **[Karakeep](https://github.com/karakeep-app/karakeep)** with Tailscale as a sidecar container to securely manage and access your self-hosted notes and collaboration app over a private Tailscale network. By integrating Tailscale, you can ensure that your Karakeep instance is only accessible to authorized devices within your Tailscale network, protecting your ideas and information from the public web.", "version": "1.0.0", "author": "ScaleTail", @@ -618,7 +618,7 @@ }, { "id": "kavita", - "name": "Kavita with Tailscale", + "name": "Kavita", "description": "This Docker Compose configuration sets up [Kavita](https://github.com/Kareadita/Kavita) with Tailscale as a sidecar container to securely serve your comics, manga, and ebooks over a private Tailscale network. By running Tailscale as a sidecar, you restrict access to your Kavita instance to devices authenticated on your Tailnet, avoiding public exposure.", "version": "1.0.0", "author": "ScaleTail", @@ -631,7 +631,7 @@ }, { "id": "languagetool", - "name": "LanguageTool with Tailscale", + "name": "LanguageTool", "description": "This Docker Compose configuration sets up [LanguageTool](https://languagetool.org) with Tailscale as a sidecar container to enhance secure networking.", "version": "1.0.0", "author": "ScaleTail", @@ -644,7 +644,7 @@ }, { "id": "linkding", - "name": "Linkding with Tailscale", + "name": "Linkding", "description": "This Docker Compose configuration sets up [Linkding](https://github.com/sissbruecker/linkding) with Tailscale as a sidecar container to securely manage and access your self-hosted bookmark manager over a private Tailscale network. By integrating Tailscale, you can ensure that your Linkding instance remains private and accessible only to authorized devices on your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -657,7 +657,7 @@ }, { "id": "lube-logger", - "name": "LubeLogger with Tailscale", + "name": "LubeLogger", "description": "This Docker Compose configuration sets up **[LubeLogger](https://github.com/hargata/lubelog)** with Tailscale as a sidecar container, enabling secure access to your vehicle maintenance log from anywhere on your private Tailscale network. With this setup, your LubeLogger instance stays completely private and protected, accessible only to your authorized devices.", "version": "1.0.0", "author": "ScaleTail", @@ -670,7 +670,7 @@ }, { "id": "mattermost", - "name": "Mattermost with Tailscale", + "name": "Mattermost", "description": "This Docker Compose configuration sets up [Mattermost](https://mattermost.com/platform-overview/) with Tailscale as a sidecar container to securely manage and access your clipboard history over a private Tailscale network. By integrating Tailscale, you can ensure that your Mattermost instance remains private and accessible only to authorized devices on your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -683,7 +683,7 @@ }, { "id": "mealie", - "name": "Mealie with Tailscale", + "name": "Mealie", "description": "This Docker Compose configuration sets up [**Mealie**](https://github.com/mealie-recipes/mealie/) with Tailscale as a sidecar container, enabling secure access to your personal recipe collection and meal planning platform from anywhere on your private Tailscale network. With this setup, your Mealie instance stays fully private and accessible only to your authorized devices.", "version": "1.0.0", "author": "ScaleTail", @@ -696,7 +696,7 @@ }, { "id": "metube", - "name": "Metube with Tailscale", + "name": "Metube", "description": "This Docker Compose configuration sets up [Metube](https://github.com/alexta69/metube) with Tailscale as a sidecar container to securely manage and access your self-hosted YouTube downloader over a private Tailscale network. By integrating Tailscale, you can ensure that your Metube instance remains private and accessible only to authorized devices on your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -709,7 +709,7 @@ }, { "id": "miniqr", - "name": "Mini-QR with Tailscale", + "name": "Mini-QR", "description": "This Docker Compose configuration sets up **[Mini-QR](https://github.com/lyqht/mini-qr)** with Tailscale as a sidecar container to securely access your self-hosted QR code generation tool over a private Tailscale network. By integrating Tailscale, you can ensure that your Mini-QR instance is only accessible to authorized devices within your private network, adding an extra layer of privacy and security.", "version": "1.0.0", "author": "ScaleTail", @@ -722,7 +722,7 @@ }, { "id": "nanote", - "name": "Nanote with Tailscale", + "name": "Nanote", "description": "This Docker Compose configuration sets up **[Nanote](https://github.com/omarmir/nanote)** with Tailscale as a sidecar container to securely manage and access your self-hosted note-taking application over a private Tailscale network. By integrating Tailscale, you can ensure that your Nanote instance remains private and accessible only to authorized devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -735,7 +735,7 @@ }, { "id": "navidrome", - "name": "Navidrome with Tailscale", + "name": "Navidrome", "description": "This Docker Compose configuration sets up [Navidrome](https://github.com/navidrome/navidrome) with Tailscale as a sidecar container, enabling secure, private access to your music server over your Tailscale network. With this configuration, Navidrome is never exposed to the public internet, and access is limited to authorized devices on your Tailnet.", "version": "1.0.0", "author": "ScaleTail", @@ -748,7 +748,7 @@ }, { "id": "nessus", - "name": "Nessus with Tailscale", + "name": "Nessus", "description": "> \u26a0\ufe0f **Important:** This container has no ability for persistent storage - your configuration will be lost when restarting the instance.", "version": "1.0.0", "author": "ScaleTail", @@ -761,7 +761,7 @@ }, { "id": "netbox", - "name": "Netbox with Tailscale", + "name": "Netbox", "description": "This Docker Compose configuration sets up [Netbox](https://github.com/netbox-community/netbox) with Tailscale as a sidecar container to securely access your Network layout over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy, ensuring that they are only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -774,7 +774,7 @@ }, { "id": "nextcloud", - "name": "Nextcloud Server with Tailscale", + "name": "Nextcloud Server", "description": "This Docker Compose configuration sets up [Nextcloud Server](https://github.com/nextcloud/server) with Tailscale as a sidecar container to securely manage and access your personal cloud storage over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Nextcloud instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -787,7 +787,7 @@ }, { "id": "nodered", - "name": "Node-RED with Tailscale", + "name": "Node-RED", "description": "This Docker Compose configuration sets up [Node-RED](https://github.com/node-red/node-red) with Tailscale as a sidecar container to securely access and manage your flow-based programming tool over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Node-RED instance, ensuring it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -800,7 +800,7 @@ }, { "id": "ntfy", - "name": "ntfy with Tailscale", + "name": "ntfy", "description": "This Docker Compose configuration sets up [ntfy](https://ntfy.sh/) with Tailscale as a sidecar container to securely deliver push notifications over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you enhance the privacy and security of your ntfy instance, ensuring it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -813,7 +813,7 @@ }, { "id": "overseerr", - "name": "Overseerr with Tailscale", + "name": "Overseerr", "description": "This Docker Compose configuration sets up [Overseerr](https://github.com/sct/overseerr) with Tailscale as a sidecar container to securely manage and access your request management system over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you enhance the privacy and security of your Overseerr instance, ensuring it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -826,7 +826,7 @@ }, { "id": "picard", - "name": "MusicBrainz Picard with Tailscale", + "name": "MusicBrainz Picard", "description": "This Docker Compose setup deploys **MusicBrainz Picard** alongside a **Tailscale sidecar container**, allowing secure access to your self-hosted music tagging and metadata management environment over your private **Tailscale network**. With this setup, Picard remains **private and reachable only from trusted devices within your Tailnet**, ensuring your media metadata library stays secure and isolated from the public internet.", "version": "1.0.0", "author": "ScaleTail", @@ -839,7 +839,7 @@ }, { "id": "pihole", - "name": "Pi-hole with Tailscale", + "name": "Pi-hole", "description": "This Docker Compose configuration sets up [Pi-hole](https://github.com/pi-hole/pi-hole) with Tailscale as a sidecar container to securely manage and access your network-wide ad blocker over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Pi-hole instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -852,7 +852,7 @@ }, { "id": "pingvin-share", - "name": "Pingvin Share with Tailscale", + "name": "Pingvin Share", "description": "**PLEASE NOTE** As per June 29, 2025 pingvin-share **has been archived** by the developer.", "version": "1.0.0", "author": "ScaleTail", @@ -865,7 +865,7 @@ }, { "id": "plex", - "name": "Plex with Tailscale", + "name": "Plex", "description": "This Docker Compose configuration sets up [Plex Media Server](https://hub.docker.com/r/linuxserver/plex) with Tailscale as a sidecar container to securely manage and stream your media over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your media server, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -878,7 +878,7 @@ }, { "id": "pocket-id", - "name": "Pocket ID with Tailscale", + "name": "Pocket ID", "description": "This Docker Compose configuration sets up [Pocket ID](https://github.com/stonith404/pocket-id) with Tailscale as a sidecar container to securely manage and access your decentralized identity service over a private Tailscale network. By integrating Tailscale, you can ensure that your Pocket ID instance remains private and accessible only to authorized devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -891,7 +891,7 @@ }, { "id": "portainer", - "name": "Portainer with Tailscale", + "name": "Portainer", "description": "This Docker Compose configuration sets up [Portainer](https://github.com/portainer/portainer) with Tailscale as a sidecar container to securely manage and monitor your Docker environments over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Portainer instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -904,7 +904,7 @@ }, { "id": "portracker", - "name": "Portracker with Tailscale", + "name": "Portracker", "description": "This Docker Compose configuration sets up [Portracker](https://github.com/mostafa-wahied/portracker) with Tailscale as a sidecar container to securely access your lightweight port monitoring and tracking tool over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and accessibility of your Portracker instance, ensuring it is only available within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -917,7 +917,7 @@ }, { "id": "posterizarr", - "name": "Posterizarr with Tailscale", + "name": "Posterizarr", "description": "This Docker Compose configuration sets up **Posterizarr** with a Tailscale sidecar container, enabling secure and private access to your automated poster and artwork management service for *Radarr* and *Sonarr*. With this setup, Posterizarr is **only accessible from within your Tailscale network**, keeping your media automation environment clean, private, and secure.", "version": "1.0.0", "author": "ScaleTail", @@ -930,7 +930,7 @@ }, { "id": "prowlarr", - "name": "Prowlarr with Tailscale", + "name": "Prowlarr", "description": "This Docker Compose configuration sets up [Prowlarr](https://github.com/Prowlarr/Prowlarr) with Tailscale as a sidecar container to securely manage and access your indexer management system over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Prowlarr instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -943,7 +943,7 @@ }, { "id": "qbittorrent", - "name": "qBittorrent with Tailscale", + "name": "qBittorrent", "description": "This Docker Compose configuration sets up [qBittorrent](https://www.qbittorrent.org/) with Tailscale as a sidecar container to securely manage and access your torrent client over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your qBittorrent instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -956,7 +956,7 @@ }, { "id": "radarr", - "name": "Radarr with Tailscale", + "name": "Radarr", "description": "This Docker Compose configuration sets up [Radarr](https://github.com/Radarr/Radarr) with Tailscale as a sidecar container to securely manage and access your media management system over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Radarr instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -969,7 +969,7 @@ }, { "id": "recyclarr", - "name": "Recyclarr with Tailscale", + "name": "Recyclarr", "description": "This Docker Compose configuration sets up **Recyclarr** with a Tailscale sidecar container, allowing secure and private synchronization of quality profiles, custom formats, and media settings across your *Radarr* and *Sonarr* instances. With this setup, Recyclarr is **only reachable from within your Tailscale network**, keeping your media automation infrastructure fully private and protected.", "version": "1.0.0", "author": "ScaleTail", @@ -982,7 +982,7 @@ }, { "id": "resilio-sync", - "name": "Resilio Sync with Tailscale", + "name": "Resilio Sync", "description": "This Docker Compose configuration sets up [Resilio Sync](https://github.com/linuxserver/docker-resilio-sync) with Tailscale as a sidecar container to securely synchronize and share your files over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your file synchronization, ensuring that Resilio Sync is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -995,7 +995,7 @@ }, { "id": "searxng", - "name": "searXNG with Tailscale", + "name": "searXNG", "description": "This Docker Compose configuration sets up [searXNG](https://github.com/searxng/searxng) with Tailscale as a sidecar container, enabling secure access to your private metasearch engine over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you can ensure that your searXNG instance is accessible only within your Tailscale network, providing an additional layer of security and privacy for your searches.", "version": "1.0.0", "author": "ScaleTail", @@ -1008,7 +1008,7 @@ }, { "id": "slink", - "name": "Slink with Tailscale", + "name": "Slink", "description": "This Docker Compose configuration sets up [Slink](https://github.com/andrii-kryvoviaz/slink) with Tailscale as a sidecar container to securely manage and access your local file-sharing system over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you can ensure that your Slink instance is both secure and private, accessible only within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -1021,7 +1021,7 @@ }, { "id": "sonarr", - "name": "Sonarr with Tailscale", + "name": "Sonarr", "description": "This Docker Compose configuration sets up [Sonarr](https://github.com/Sonarr/Sonarr) with Tailscale as a sidecar container to securely manage and access your media management system over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Sonarr instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -1034,7 +1034,7 @@ }, { "id": "speedtest-tracker", - "name": "Speedtest Tracker with Tailscale", + "name": "Speedtest Tracker", "description": "This Docker Compose configuration sets up [Speedtest Tracker](https://github.com/alexjustesen/speedtest-tracker) with Tailscale as a sidecar container to securely monitor and access your internet speed tracking tool over a private Tailscale network. By integrating Tailscale, you can ensure that your Speedtest Tracker instance remains private and accessible only to authorized devices on your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -1047,7 +1047,7 @@ }, { "id": "stirlingpdf", - "name": "Stirling-PDF with Tailscale", + "name": "Stirling-PDF", "description": "This Docker Compose configuration sets up [Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF) with Tailscale as a sidecar container to securely manage and manipulate PDF files over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your PDF processing, ensuring that the Stirling-PDF interface is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -1060,7 +1060,7 @@ }, { "id": "subtrackr", - "name": "Subtrackr with Tailscale", + "name": "Subtrackr", "description": "This Docker Compose configuration sets up [**Subtrackr**](https://github.com/bscott/subtrackr) with Tailscale as a sidecar container, enabling secure access to your self-hosted subscription tracking platform from anywhere on your private Tailscale network. With this setup, your Subtrackr instance remains fully private and accessible only from authorized devices.", "version": "1.0.0", "author": "ScaleTail", @@ -1073,7 +1073,7 @@ }, { "id": "swingmx", - "name": "Swing Music with Tailscale", + "name": "Swing Music", "description": "This Docker Compose configuration sets up **Swing Music** with a Tailscale sidecar container, enabling secure access to your self-hosted music streaming server over your private Tailscale network. With this setup, your Swing Music instance remains **private and accessible only from authorized devices on your Tailnet**.", "version": "1.0.0", "author": "ScaleTail", @@ -1099,7 +1099,7 @@ }, { "id": "tandoor", - "name": "Tandoor Recipes with Tailscale", + "name": "Tandoor Recipes", "description": "This Docker Compose configuration sets up [**Tandoor Recipes**](https://github.com/TandoorRecipes/recipes) with Tailscale as a sidecar container, which enables a secure access to your personal recipe and meal planning platform from your Tailscale network. As with all other services inside this repository, your service stays fully private and accessible only to your authorized devices.", "version": "1.0.0", "author": "ScaleTail", @@ -1112,7 +1112,7 @@ }, { "id": "tautulli", - "name": "Tautulli with Tailscale", + "name": "Tautulli", "description": "This Docker Compose configuration sets up [Tautulli for Docker](https://hub.docker.com/r/linuxserver/tautulli) with Tailscale as a sidecar container to securely monitor and manage your Plex Media Server over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you enhance the security and privacy of your Tautulli installation, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -1125,7 +1125,7 @@ }, { "id": "technitium", - "name": "Technitium DNS server with Tailscale", + "name": "Technitium DNS server", "description": "This Docker Compose configuration sets up a [Technitium DNS Server](https://github.com/TechnitiumSoftware/DnsServer) with Tailscale as a sidecar container ......", "version": "1.0.0", "author": "ScaleTail", @@ -1138,7 +1138,7 @@ }, { "id": "traefik", - "name": "Traefik with Tailscale", + "name": "Traefik", "description": "This Docker Compose configuration sets up [Traefik](https://github.com/traefik/traefik) with Tailscale as a sidecar container to securely manage and route your traffic over a private Tailscale network. By integrating Tailscale, you can enhance the security and privacy of your Traefik instance, ensuring that access is restricted to devices within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -1151,7 +1151,7 @@ }, { "id": "uptime-kuma", - "name": "Uptime Kuma with Tailscale", + "name": "Uptime Kuma", "description": "This Docker Compose configuration sets up [Uptime Kuma](https://github.com/louislam/uptime-kuma) with Tailscale as a sidecar container to securely monitor your services and websites over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your monitoring dashboard, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -1164,7 +1164,7 @@ }, { "id": "vaultwarden", - "name": "Vaultwarden with Tailscale", + "name": "Vaultwarden", "description": "This Docker Compose configuration sets up [Vaultwarden](https://github.com/dani-garcia/vaultwarden) with Tailscale as a sidecar container to securely manage and access your password manager over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Vaultwarden instance, ensuring that it is only accessible within your Tailscale network.", "version": "1.0.0", "author": "ScaleTail", @@ -1177,7 +1177,7 @@ }, { "id": "wallos", - "name": "Wallos with Tailscale", + "name": "Wallos", "description": "This Docker Compose configuration sets up [Wallos](https://github.com/ellite/Wallos) with Tailscale as a sidecar container, enabling secure, private access to your self-hosted subscription tracker over your Tailscale network. With this setup, Wallos is never exposed to the public internet\u2014access is limited strictly to devices authenticated through your Tailscale Tailnet.", "version": "1.0.0", "author": "ScaleTail", From f1fc2d6cdd81a846bba65e4c5123e1de1e14f531 Mon Sep 17 00:00:00 2001 From: jackspiering <46534141+jackspiering@users.noreply.github.com> Date: Sun, 8 Feb 2026 23:04:57 +0100 Subject: [PATCH 06/13] Update tags and descriptions --- scripts/generate_registry.py | 88 +++++++++++------------------------- 1 file changed, 27 insertions(+), 61 deletions(-) diff --git a/scripts/generate_registry.py b/scripts/generate_registry.py index d261810..8a6327d 100755 --- a/scripts/generate_registry.py +++ b/scripts/generate_registry.py @@ -12,15 +12,6 @@ REPO_ROOT = Path(__file__).resolve().parents[1] SERVICES_DIR = REPO_ROOT / "services" -ROOT_README = REPO_ROOT / "README.md" - - -def slugify(value: str) -> str: - value = value.encode("ascii", "ignore").decode() - value = value.lower() - value = value.replace("&", "and") - value = re.sub(r"[^a-z0-9]+", "-", value) - return value.strip("-") def title_from_id(value: str) -> str: @@ -28,7 +19,7 @@ def title_from_id(value: str) -> str: return " ".join(p.capitalize() for p in parts if p) -def normalize_service_name(value: str) -> str: +def strip_tailscale_suffix(value: str) -> str: base = value.strip() patterns = [ r"\s+with\s+Tailscale\s+Sidecar\s+Configuration\s*$", @@ -44,6 +35,11 @@ def normalize_service_name(value: str) -> str: base = base.strip(" -") if not base: base = value.strip() + return base + + +def normalize_service_name(value: str) -> str: + base = strip_tailscale_suffix(value) if re.search(r"tailscale", base, re.IGNORECASE): return base return f"{base} with Tailscale" @@ -57,26 +53,23 @@ def first_heading(text: str) -> Optional[str]: return None -def first_paragraph(text: str) -> Optional[str]: +def extract_frontmatter_tag(text: str) -> Optional[str]: lines = text.splitlines() idx = 0 - # skip leading empty lines while idx < len(lines) and not lines[idx].strip(): idx += 1 - # skip first heading line if present - if idx < len(lines) and lines[idx].lstrip().startswith("#"): - idx += 1 - while idx < len(lines) and not lines[idx].strip(): - idx += 1 - if idx >= len(lines): + if idx >= len(lines) or lines[idx].strip() != "---": return None - paragraph: List[str] = [] - while idx < len(lines) and lines[idx].strip(): - paragraph.append(lines[idx].strip()) + idx += 1 + while idx < len(lines) and lines[idx].strip() != "---": + match = re.match(r"^tag\s*:\s*(.+)\s*$", lines[idx], flags=re.IGNORECASE) + if match: + value = match.group(1).strip() + if value.startswith(("'", '"')) and value.endswith(("'", '"')) and len(value) > 1: + value = value[1:-1].strip() + return value or None idx += 1 - if not paragraph: - return None - return " ".join(paragraph) + return None def read_text(path: Path) -> Optional[str]: @@ -85,26 +78,6 @@ def read_text(path: Path) -> Optional[str]: return path.read_text(encoding="utf-8") -def parse_category_map(readme_path: Path) -> Dict[str, str]: - text = read_text(readme_path) - if not text: - return {} - category = None - mapping: Dict[str, str] = {} - for line in text.splitlines(): - heading = re.match(r"^###\s+(.+)$", line.strip()) - if heading: - category = heading.group(1).strip() - continue - if not category: - continue - for match in re.finditer(r"\[Details\]\((services/[^)]+)\)", line): - service_path = match.group(1) - service_key = service_path.replace("services/", "", 1).strip("/") - mapping[service_key] = slugify(category) - return mapping - - def infer_repo_slug(repo_arg: Optional[str]) -> Optional[str]: if repo_arg: return repo_arg @@ -152,7 +125,6 @@ def build_template( compose_path: Path, repo: str, ref: str, - category_map: Dict[str, str], ) -> Dict[str, object]: rel_compose = compose_path.relative_to(REPO_ROOT).as_posix() service_rel = compose_path.parent.relative_to(SERVICES_DIR).as_posix() @@ -160,19 +132,22 @@ def build_template( name = title_from_id(template_id) readme_path, parent_readme = pick_readme(compose_path.parent) - description = None + tag_value = "ScaleTail" if readme_path: readme_text = read_text(readme_path) if readme_text: heading = first_heading(readme_text) if heading and not (parent_readme and "/" in service_rel): name = heading - description = first_paragraph(readme_text) - - if not description: - description = f"Self-hosted {name} template." + tag = extract_frontmatter_tag(readme_text) + if tag: + tag_value = tag name = normalize_service_name(name) + description_name = strip_tailscale_suffix(name) + description = ( + f"ScaleTail configuration for {description_name} running a Tailscale sidecar." + ) env_path = compose_path.parent / ".env" rel_env = env_path.relative_to(REPO_ROOT).as_posix() @@ -183,13 +158,6 @@ def build_template( build_raw_base(repo, ref) + "/" + readme_path.relative_to(REPO_ROOT).as_posix() ) - category_tag = None - if service_rel in category_map: - category_tag = category_map[service_rel] - else: - parent_key = service_rel.split("/", 1)[0] - category_tag = category_map.get(parent_key, "scaletail") - template = { "id": template_id, "name": name, @@ -200,7 +168,7 @@ def build_template( "env_url": build_raw_base(repo, ref) + "/" + rel_env, "documentation_url": documentation_url or build_raw_base(repo, ref) + "/" + rel_compose, - "tags": [category_tag], + "tags": [tag_value], } return template @@ -220,14 +188,12 @@ def main() -> int: if not repo: raise SystemExit("Unable to determine repo slug; pass --repo owner/name") - category_map = parse_category_map(ROOT_README) - templates: List[Dict[str, object]] = [] for compose_path in sorted(SERVICES_DIR.rglob("compose.yaml")): env_path = compose_path.parent / ".env" if not env_path.exists(): raise SystemExit(f"Missing .env for {compose_path}") - templates.append(build_template(compose_path, repo, args.ref, category_map)) + templates.append(build_template(compose_path, repo, args.ref)) templates.sort(key=lambda t: str(t["id"])) From ae0dc28d0e74655237d3dbdc7605acb05cffeef8 Mon Sep 17 00:00:00 2001 From: jackspiering <46534141+jackspiering@users.noreply.github.com> Date: Sun, 8 Feb 2026 23:14:15 +0100 Subject: [PATCH 07/13] Restore repo slug validation helper --- scripts/generate_registry.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/scripts/generate_registry.py b/scripts/generate_registry.py index a3ff253..cd09b5f 100755 --- a/scripts/generate_registry.py +++ b/scripts/generate_registry.py @@ -12,6 +12,7 @@ REPO_ROOT = Path(__file__).resolve().parents[1] SERVICES_DIR = REPO_ROOT / "services" +REPO_SLUG_RE = re.compile(r"^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$") def title_from_id(value: str) -> str: @@ -78,6 +79,12 @@ def read_text(path: Path) -> Optional[str]: return path.read_text(encoding="utf-8") +def validate_repo_slug(repo: str) -> str: + if not REPO_SLUG_RE.match(repo): + raise SystemExit(f"Invalid repo slug '{repo}'; expected owner/name") + return repo + + def infer_repo_slug(repo_arg: Optional[str]) -> Optional[str]: if repo_arg: return validate_repo_slug(repo_arg) From d4111df894f492dbd33977024bba55c9b71b7c8d Mon Sep 17 00:00:00 2001 From: jackspiering <46534141+jackspiering@users.noreply.github.com> Date: Sun, 8 Feb 2026 23:21:10 +0100 Subject: [PATCH 08/13] Restore validate_ref helper --- scripts/generate_registry.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/scripts/generate_registry.py b/scripts/generate_registry.py index cd09b5f..12ff5fb 100755 --- a/scripts/generate_registry.py +++ b/scripts/generate_registry.py @@ -13,6 +13,7 @@ REPO_ROOT = Path(__file__).resolve().parents[1] SERVICES_DIR = REPO_ROOT / "services" REPO_SLUG_RE = re.compile(r"^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$") +REF_RE = re.compile(r"^[A-Za-z0-9._/-]+$") def title_from_id(value: str) -> str: @@ -85,6 +86,14 @@ def validate_repo_slug(repo: str) -> str: return repo +def validate_ref(ref: str) -> str: + if not ref or not REF_RE.match(ref): + raise SystemExit(f"Invalid ref '{ref}'") + if ref.startswith("/") or ref.endswith("/") or ".." in ref or "//" in ref: + raise SystemExit(f"Invalid ref '{ref}'") + return ref + + def infer_repo_slug(repo_arg: Optional[str]) -> Optional[str]: if repo_arg: return validate_repo_slug(repo_arg) From f49e5e0b0f9b9529c2239222e857e558a725ae22 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 8 Feb 2026 22:22:10 +0000 Subject: [PATCH 09/13] chore: update registry.json --- registry.json | 544 +++++++++++++++++++++++++------------------------- 1 file changed, 272 insertions(+), 272 deletions(-) diff --git a/registry.json b/registry.json index e099350..c09cc52 100644 --- a/registry.json +++ b/registry.json @@ -7,1185 +7,1185 @@ "templates": [ { "id": "adguardhome", - "name": "AdGuard Home", - "description": "This Docker Compose configuration sets up [AdGuard Home](https://github.com/AdguardTeam/AdGuardHome) with Tailscale as a sidecar container to securely route DNS traffic over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your DNS queries, ensuring that they are only accessible within your Tailscale network.", + "name": "AdGuard Home with Tailscale", + "description": "ScaleTail configuration for AdGuard Home running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/adguardhome/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/adguardhome/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/adguardhome/README.md", "tags": [ - "networking-and-security" + "ScaleTail" ] }, { "id": "adguardhome-sync", - "name": "AdGuardHome Sync", - "description": "This Docker Compose configuration sets up **[AdGuardHome Sync](https://github.com/bakito/adguardhome-sync)** with Tailscale as a sidecar container to securely synchronize your AdGuard Home instances over a private Tailscale network. By integrating Tailscale, you ensure that configuration data is transmitted securely between nodes and accessible only to authorized devices in your private network.", + "name": "AdGuardHome Sync with Tailscale", + "description": "ScaleTail configuration for AdGuardHome Sync running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/adguardhome-sync/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/adguardhome-sync/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/adguardhome-sync/README.md", "tags": [ - "networking-and-security" + "ScaleTail" ] }, { "id": "audiobookshelf", - "name": "Audiobookshelf", - "description": "This Docker Compose configuration sets up [Audiobookshelf](https://github.com/advplyr/audiobookshelf) with Tailscale as a sidecar container to securely access and manage your audiobook and podcast library over a private Tailscale network. By integrating Tailscale, you can ensure that your Audiobookshelf instance remains private and accessible only to devices within your Tailscale network.", + "name": "Audiobookshelf with Tailscale", + "description": "ScaleTail configuration for Audiobookshelf running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/audiobookshelf/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/audiobookshelf/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/audiobookshelf/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "bazarr", - "name": "Bazarr", - "description": "This Docker Compose configuration sets up [Bazarr](https://github.com/morpheus65535/bazarr) with Tailscale as a sidecar container to securely manage and access your subtitle management system over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Bazarr instance, ensuring that it is only accessible within your Tailscale network.", + "name": "Bazarr with Tailscale", + "description": "ScaleTail configuration for Bazarr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/bazarr/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/bazarr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/bazarr/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "bentopdf", - "name": "BentoPDF", - "description": "This Docker Compose configuration sets up **BentoPDF** with a Tailscale sidecar container, enabling secure access to your self-hosted PDF management interface over your private Tailscale network. With this setup, your BentoPDF instance remains **private and accessible only from authorized devices on your Tailnet**, keeping your documents protected from public exposure.", + "name": "BentoPDF with Tailscale", + "description": "ScaleTail configuration for BentoPDF running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/bentopdf/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/bentopdf/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/bentopdf/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "beszel-agent", - "name": "Beszel Agent", - "description": "This Docker Compose configuration integrates [Beszel](https://github.com/henrygd/beszel) with Tailscale in a sidecar setup to enhance secure communication over a private Tailscale network. By utilizing Tailscale, this configuration ensures that all communication handled by Beszel remains secure and private within your Tailscale network. Thanks to @[henrygd](https://github.com/henrygd) for the tool development.", + "name": "Beszel Agent with Tailscale", + "description": "ScaleTail configuration for Beszel Agent running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/beszel/agent/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/beszel/agent/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/beszel/README.md", "tags": [ - "monitoring-and-analytics" + "ScaleTail" ] }, { "id": "beszel-hub", - "name": "Beszel Hub", - "description": "This Docker Compose configuration integrates [Beszel](https://github.com/henrygd/beszel) with Tailscale in a sidecar setup to enhance secure communication over a private Tailscale network. By utilizing Tailscale, this configuration ensures that all communication handled by Beszel remains secure and private within your Tailscale network. Thanks to @[henrygd](https://github.com/henrygd) for the tool development.", + "name": "Beszel Hub with Tailscale", + "description": "ScaleTail configuration for Beszel Hub running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/beszel/hub/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/beszel/hub/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/beszel/README.md", "tags": [ - "monitoring-and-analytics" + "ScaleTail" ] }, { "id": "booklore", - "name": "BookLore", - "description": "This Docker Compose configuration sets up [BookLore](https://github.com/booklore-app/booklore) with Tailscale as a sidecar container to securely access and manage your book library over a private Tailscale network. By integrating Tailscale, you can ensure that your BookLore instance remains private and accessible only to devices within your Tailscale network.", + "name": "BookLore with Tailscale", + "description": "ScaleTail configuration for BookLore running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/booklore/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/booklore/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/booklore/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "caddy", - "name": "Caddy", - "description": "This Docker Compose configuration sets up [Caddy](https://github.com/caddyserver/caddy-docker) with Tailscale as a sidecar container to securely manage and route your traffic over a private Tailscale network. By integrating Tailscale, you can enhance the security and privacy of your Caddy instance, ensuring that access is restricted to devices within your Tailscale network.", + "name": "Caddy with Tailscale", + "description": "ScaleTail configuration for Caddy running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/caddy/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/caddy/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/caddy/README.md", "tags": [ - "networking-and-security" + "ScaleTail" ] }, { "id": "changedetection", - "name": "ChangeDetection.io", - "description": "This Docker Compose configuration sets up [ChangeDetection.io](https://github.com/dgtlmoon/changedetection.io) with Tailscale as a sidecar container to securely monitor and access website changes over a private Tailscale network. By using Tailscale in a sidecar configuration, you can ensure that your ChangeDetection.io instance is only accessible within your Tailscale network, providing enhanced security and privacy.", + "name": "ChangeDetection.io with Tailscale", + "description": "ScaleTail configuration for ChangeDetection.io running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/changedetection/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/changedetection/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/changedetection/README.md", "tags": [ - "development-tools" + "ScaleTail" ] }, { "id": "clipcascade", - "name": "ClipCascade", - "description": "This Docker Compose configuration sets up [ClipCascade](https://github.com/Sathvik-Rao/ClipCascade) with Tailscale as a sidecar container to securely manage and access your clipboard history over a private Tailscale network. By integrating Tailscale, you can ensure that your ClipCascade instance remains private and accessible only to authorized devices on your Tailscale network.", + "name": "ClipCascade with Tailscale", + "description": "ScaleTail configuration for ClipCascade running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/clipcascade/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/clipcascade/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/clipcascade/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "coder", - "name": "Coder", - "description": "This Docker Compose configuration sets up [**Coder**](https://github.com/coder/coder) with Tailscale as a sidecar container, enabling secure access to your self-hosted cloud development environments from anywhere on your private Tailscale network. With this setup, your Coder instance remains fully private and accessible only from authorized devices.", + "name": "Coder with Tailscale", + "description": "ScaleTail configuration for Coder running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/coder/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/coder/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/coder/README.md", "tags": [ - "development-tools" + "ScaleTail" ] }, { "id": "configarr", - "name": "Configarr", - "description": "This Docker Compose configuration sets up **Configarr** with a Tailscale sidecar container, enabling secure and private management of configuration files for your *Radarr*, *Sonarr*, and broader media automation stack. With this setup, Configarr is **only accessible from within your Tailscale network**, keeping your configuration workflows fully private and under your control.", + "name": "Configarr with Tailscale", + "description": "ScaleTail configuration for Configarr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/configarr/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/configarr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/configarr/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "convertx", - "name": "ConvertX", - "description": "This Docker Compose configuration sets up [ConvertX](https://github.com/C4illin/ConvertX) with Tailscale as a sidecar container to securely access your media conversion tool over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your ConvertX instance, ensuring that it is only accessible within your Tailscale network.", + "name": "ConvertX with Tailscale", + "description": "ScaleTail configuration for ConvertX running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/convertx/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/convertx/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/convertx/README.md", "tags": [ - "utilities" + "ScaleTail" ] }, { "id": "copyparty", - "name": "Copyparty", - "description": "This Docker Compose configuration sets up [Copyparty](https://github.com/9001/copyparty) with Tailscale as a sidecar container to securely access your lightweight file server and sharing platform over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and accessibility of your Copyparty instance, ensuring it is only available within your Tailscale network.", + "name": "Copyparty with Tailscale", + "description": "ScaleTail configuration for Copyparty running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/copyparty/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/copyparty/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/copyparty/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "cyberchef", - "name": "CyberChef", - "description": "This Docker Compose configuration sets up [CyberChef](https://github.com/gchq/CyberChef) with Tailscale as a sidecar container to securely access your data analysis and manipulation tool over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your CyberChef instance, ensuring that it is only accessible within your Tailscale network.", + "name": "CyberChef with Tailscale", + "description": "ScaleTail configuration for CyberChef running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/cyberchef/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/cyberchef/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/cyberchef/README.md", "tags": [ - "development-tools" + "ScaleTail" ] }, { "id": "ddns-updater", - "name": "DDNS Updater", - "description": "This Docker Compose configuration sets up [DDNS Updater](https://github.com/qdm12/ddns-updater) with Tailscale as a sidecar container, enabling secure and private management of your dynamic DNS records over a Tailscale network. Integrating Tailscale ensures that your DDNS Updater instance is accessible only to authorized devices within your Tailnet, enhancing the security of your DNS management.", + "name": "DDNS Updater with Tailscale", + "description": "ScaleTail configuration for DDNS Updater running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ddns-updater/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ddns-updater/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ddns-updater/README.md", "tags": [ - "networking-and-security" + "ScaleTail" ] }, { "id": "docmost", - "name": "Docmost", - "description": "This Docker Compose configuration sets up [**Docmost**](https://github.com/docmost/docmost) with Tailscale as a sidecar container, enabling secure access to your collaborative wiki and documentation platform from anywhere on your private Tailscale network. With this setup, your Docmost instance remains fully private and accessible only to authorized users.", + "name": "Docmost with Tailscale", + "description": "ScaleTail configuration for Docmost running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/docmost/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/docmost/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/docmost/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "donetick", - "name": "Donetick", - "description": "This Docker Compose configuration sets up **[Donetick](https://github.com/donetick/donetick)** with Tailscale as a sidecar container to securely manage and access your self-hosted task management system over a private Tailscale network. By integrating Tailscale, you can ensure that your Donetick instance remains private and accessible only to authorized devices within your Tailscale network.", + "name": "Donetick with Tailscale", + "description": "ScaleTail configuration for Donetick running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/donetick/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/donetick/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/donetick/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "dozzle", - "name": "Dozzle", - "description": "This Docker Compose configuration sets up [Dozzle](https://github.com/amir20/dozzle) with Tailscale as a sidecar container to securely access your real-time Docker log viewer over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Dozzle instance, ensuring that it is only accessible within your Tailscale network.", + "name": "Dozzle with Tailscale", + "description": "ScaleTail configuration for Dozzle running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/dozzle/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/dozzle/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/dozzle/README.md", "tags": [ - "development-tools" + "ScaleTail" ] }, { "id": "dumbdo", - "name": "DumbDo", - "description": "This Docker Compose configuration sets up [DumbDo](https://github.com/DumbWareio/DumbDo) with Tailscale as a sidecar container to securely manage and access your lightweight task manager over a private Tailscale network. By integrating Tailscale, you can ensure that your DumbDo instance remains private and accessible only to authorized devices within your Tailscale network.", + "name": "DumbDo with Tailscale", + "description": "ScaleTail configuration for DumbDo running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/dumbdo/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/dumbdo/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/dumbdo/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "eigenfocus", - "name": "Eigenfocus", - "description": "This Docker Compose configuration sets up **[Eigenfocus](https://github.com/Eigenfocus/eigenfocus)** with Tailscale as a sidecar container to securely manage and access your self-hosted task and project management tool over a private Tailscale network. By integrating Tailscale, you can ensure that your Eigenfocus instance remains private and accessible only to authorized devices within your Tailscale network.", + "name": "Eigenfocus with Tailscale", + "description": "ScaleTail configuration for Eigenfocus running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/eigenfocus/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/eigenfocus/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/eigenfocus/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "excalidraw", - "name": "Excalidraw", - "description": "This Docker Compose configuration sets up [Excalidraw](https://github.com/excalidraw/excalidraw) with Tailscale as a sidecar container to securely collaborate on whiteboard diagrams over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you can enhance the security and accessibility of your Excalidraw server, ensuring that it is only available within your Tailscale network.", + "name": "Excalidraw with Tailscale", + "description": "ScaleTail configuration for Excalidraw running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/excalidraw/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/excalidraw/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/excalidraw/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "flatnotes", - "name": "Flatnotes", - "description": "This Docker Compose configuration sets up **[Flatnotes](https://github.com/dullage/flatnotes)** with Tailscale as a sidecar container to securely manage and access your self-hosted note-taking application over a private Tailscale network. By integrating Tailscale, you can ensure that your Flatnotes instance remains private and accessible only to authorized devices within your Tailscale network.", + "name": "Flatnotes with Tailscale", + "description": "ScaleTail configuration for Flatnotes running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/flatnotes/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/flatnotes/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/flatnotes/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "forgejo", - "name": "Forgejo", - "description": "This Docker Compose configuration sets up [**Forgejo**](https://forgejo.org/) with Tailscale as a sidecar container, enabling secure access to your self-hosted Git service from anywhere on your private Tailscale network. With this setup, your Forgejo instance remains fully private and accessible only from authorized devices.", + "name": "Forgejo with Tailscale", + "description": "ScaleTail configuration for Forgejo running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/forgejo/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/forgejo/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/forgejo/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "formbricks", - "name": "Formbricks", - "description": "This Docker Compose configuration sets up **Formbricks** with a Tailscale sidecar container, enabling secure access to your self-hosted user feedback and survey platform over your private Tailscale network. With this setup, your Formbricks instance remains **private and accessible only from authorized devices on your Tailnet**, keeping feedback data and analytics protected from public exposure.", + "name": "Formbricks with Tailscale", + "description": "ScaleTail configuration for Formbricks running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/formbricks/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/formbricks/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/formbricks/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "fossflow", - "name": "FossFLOW", - "description": "This Docker Compose configuration sets up [FossFLOW](https://github.com/stan-smith/FossFLOW) with Tailscale as a sidecar container, enabling secure access to your visual workflow designer over your private Tailscale network. With this setup, FossFLOW remains fully self-hosted and is only accessible from authorized devices within your Tailnet.", + "name": "FossFLOW with Tailscale", + "description": "ScaleTail configuration for FossFLOW running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/fossflow/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/fossflow/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/fossflow/README.md", "tags": [ - "development-tools" + "ScaleTail" ] }, { "id": "ghost", - "name": "Ghost", - "description": "This Docker Compose configuration sets up **[Ghost](https://github.com/TryGhost/Ghost)** with Tailscale as a sidecar container to securely manage and access your self-hosted publishing platform over a private Tailscale network. By integrating Tailscale, you can ensure that your Ghost instance remains private and accessible only to authorized devices within your Tailscale network.", + "name": "Ghost with Tailscale", + "description": "ScaleTail configuration for Ghost running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ghost/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ghost/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ghost/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "gitsave", - "name": "GitSave", - "description": "This Docker Compose configuration sets up [**GitSave**](https://github.com/TimWitzdam/GitSave) with Tailscale as a sidecar container, enabling secure access to your self-hosted GitHub repository backup solution from anywhere on your private Tailscale network. With this setup, your GitSave instance remains fully private and accessible only from authorized devices.", + "name": "GitSave with Tailscale", + "description": "ScaleTail configuration for GitSave running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gitsave/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gitsave/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gitsave/README.md", "tags": [ - "development-tools" + "ScaleTail" ] }, { "id": "glance", - "name": "Glance", - "description": "This Docker Compose configuration sets up [Glance](https://github.com/glanceapp/glance) with Tailscale as a sidecar container to securely access your system monitoring dashboard over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Glance instance, ensuring that it is only accessible within your Tailscale network.", + "name": "Glance with Tailscale", + "description": "ScaleTail configuration for Glance running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/glance/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/glance/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/glance/README.md", "tags": [ - "dashboards-and-visualization" + "ScaleTail" ] }, { "id": "gokapi", - "name": "Gokapi", - "description": "This Docker Compose configuration sets up [Gokapi](https://github.com/Forceu/Gokapi) with Tailscale as a sidecar container to securely manage and access your lightweight file-sharing service over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Gokapi instance, ensuring that it is only accessible within your Tailscale network.", + "name": "Gokapi with Tailscale", + "description": "ScaleTail configuration for Gokapi running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gokapi/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gokapi/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gokapi/README.md", "tags": [ - "development-tools" + "ScaleTail" ] }, { "id": "gotify", - "name": "Gotify", - "description": "This Docker Compose configuration sets up [Gotify](https://github.com/gotify/server) with Tailscale as a sidecar container, enabling secure access to your notification server from anywhere on your private Tailscale network. With this setup, your Gotify instance remains completely private and protected, accessible only to your authorized devices.", + "name": "Gotify with Tailscale", + "description": "ScaleTail configuration for Gotify running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gotify/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gotify/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gotify/README.md", "tags": [ - "utilities" + "ScaleTail" ] }, { "id": "grampsweb", - "name": "Gramps Web", - "description": "This Docker Compose configuration sets up [**Gramps Web**](https://github.com/gramps-project/gramps-web) with Tailscale as a sidecar container, enabling secure access to your self-hosted genealogy platform from anywhere on your private Tailscale network. With this setup, your Gramps Web instance remains fully private and accessible only from authorized devices.", + "name": "Gramps Web with Tailscale", + "description": "ScaleTail configuration for Gramps Web running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/grampsweb/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/grampsweb/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/grampsweb/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "haptic", - "name": "Haptic", - "description": "This Docker Compose configuration sets up **[Haptic](https://github.com/chroxify/haptic)** with Tailscale as a sidecar container to securely manage and access your self-hosted bookmark manager over a private Tailscale network. By integrating Tailscale, you can ensure that your Haptic instance remains private and accessible only to authorized devices within your Tailscale network.", + "name": "Haptic with Tailscale", + "description": "ScaleTail configuration for Haptic running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/haptic/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/haptic/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/haptic/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "hemmelig", - "name": "Hemmelig.app", - "description": "This Docker Compose configuration sets up **Hemmelig.app** with a Tailscale sidecar container, enabling secure access to your private encrypted secret-sharing platform over your Tailscale network. With this setup, your instance will be **private and reachable only by your authorized Tailscale devices**, ensuring truly confidential communication and secret exchange.", + "name": "Hemmelig.app with Tailscale", + "description": "ScaleTail configuration for Hemmelig.app running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/hemmelig/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/hemmelig/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/hemmelig/README.md", "tags": [ - "utilities" + "ScaleTail" ] }, { "id": "homarr", - "name": "Homarr", - "description": "This Docker Compose configuration sets up [Homarr](https://github.com/ajnart/homarr) with Tailscale as a sidecar container to securely manage and access your dashboard over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Homarr instance, ensuring that it is only accessible within your Tailscale network.", + "name": "Homarr with Tailscale", + "description": "ScaleTail configuration for Homarr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homarr/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homarr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homarr/README.md", "tags": [ - "development-tools" + "ScaleTail" ] }, { "id": "home-assistant", - "name": "Home Assistant", - "description": "This Docker Compose configuration sets up **[Home Assistant](https://github.com/home-assistant/)** with Tailscale as a sidecar container to securely manage and access your smart home automation platform over a private Tailscale network. By integrating Tailscale, you can ensure that your Home Assistant instance remains private and accessible only to authorized devices within your Tailscale network.", + "name": "Home Assistant with Tailscale", + "description": "ScaleTail configuration for Home Assistant running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/home-assistant/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/home-assistant/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/home-assistant/README.md", "tags": [ - "smart-home" + "ScaleTail" ] }, { "id": "homebox", - "name": "Homebox", - "description": "This Docker Compose configuration sets up **Homebox** with a Tailscale sidecar container, enabling secure access to your self-hosted inventory and asset management system over your private Tailscale network. With this setup, your Homebox instance remains **private and accessible only from authorized devices on your Tailnet**, keeping inventory data and asset metadata protected from public exposure.", + "name": "Homebox with Tailscale", + "description": "ScaleTail configuration for Homebox running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homebox/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homebox/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homebox/README.md", "tags": [ - "utilities" + "ScaleTail" ] }, { "id": "homepage", - "name": "Homepage", - "description": "This Docker Compose configuration sets up [Homepage](https://github.com/gethomepage/homepage) with Tailscale as a sidecar container to securely access your personal dashboard over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Homepage instance, ensuring that it is only accessible within your Tailscale network.", + "name": "Homepage with Tailscale", + "description": "ScaleTail configuration for Homepage running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homepage/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homepage/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homepage/README.md", "tags": [ - "dashboards-and-visualization" + "ScaleTail" ] }, { "id": "hytale", - "name": "Hytale Server", - "description": "This Docker Compose configuration sets up a Hytale game server with Tailscale as a sidecar container to place the server directly on your Tailnet. The Hytale container uses the Tailscale network stack via `network_mode: service:tailscale`, so players connect over Tailscale without exposing the UDP port publicly.", + "name": "Hytale Server with Tailscale", + "description": "ScaleTail configuration for Hytale Server running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/hytale/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/hytale/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/hytale/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "immich", - "name": "Immich", - "description": "This Docker Compose configuration sets up Immich with Tailscale as a sidecar container, enabling secure access to your photo and video library from anywhere on your private Tailscale network. With this setup, your Immich instance remains completely private and protected, accessible only to your authorized devices.", + "name": "Immich with Tailscale", + "description": "ScaleTail configuration for Immich running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/immich/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/immich/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/immich/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "isley", - "name": "Isley", - "description": "This Docker Compose configuration sets up [Isley](https://github.com/dwot/isley) with Tailscale as a sidecar container, enabling secure and private access to your self-hosted cannabis grow journal over a Tailscale network. With Tailscale, you can ensure that your sensitive grow data and notes are only accessible by trusted devices within your Tailnet.", + "name": "Isley with Tailscale", + "description": "ScaleTail configuration for Isley running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/isley/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/isley/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/isley/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "it-tools", - "name": "IT-Tools", - "description": "This Docker Compose configuration sets up [IT-Tools](https://github.com/CorentinTh/it-tools) with Tailscale as a sidecar container to securely access your all-in-one developer utility over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your IT-Tools instance, ensuring that it is only accessible within your Tailscale network.", + "name": "IT-Tools with Tailscale", + "description": "ScaleTail configuration for IT-Tools running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/it-tools/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/it-tools/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/it-tools/README.md", "tags": [ - "development-tools" + "ScaleTail" ] }, { "id": "jellyfin", - "name": "Jellyfin", - "description": "This Docker Compose configuration sets up [Jellyfin](https://github.com/jellyfin/jellyfin) with Tailscale as a sidecar container to securely manage and access your media server over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Jellyfin instance, ensuring that it is only accessible within your Tailscale network.", + "name": "Jellyfin with Tailscale", + "description": "ScaleTail configuration for Jellyfin running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/jellyfin/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/jellyfin/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/jellyfin/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "jellyseerr", - "name": "Jellyseerr", - "description": "This Docker Compose configuration sets up [Jellyseerr](https://docs.jellyseerr.dev/) with Tailscale as a sidecar container to securely manage and access your request management system over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you enhance the privacy and security of your Jellyseerr instance, ensuring it is only accessible within your Tailscale network.", + "name": "Jellyseerr with Tailscale", + "description": "ScaleTail configuration for Jellyseerr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/jellyseerr/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/jellyseerr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/jellyseerr/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "kaneo", - "name": "Kaneo", - "description": "This Docker Compose configuration sets up **[Kaneo](https://github.com/usekaneo/kaneo)** with Tailscale as a sidecar container to securely manage and access your self-hosted project management platform over a private Tailscale network. By integrating Tailscale, you ensure that your Kaneo instance is only accessible to authorized devices within your Tailscale network, keeping your tasks, projects, and team discussions private.", + "name": "Kaneo with Tailscale", + "description": "ScaleTail configuration for Kaneo running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/kaneo/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/kaneo/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/kaneo/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "karakeep", - "name": "Karakeep", - "description": "This Docker Compose configuration sets up **[Karakeep](https://github.com/karakeep-app/karakeep)** with Tailscale as a sidecar container to securely manage and access your self-hosted notes and collaboration app over a private Tailscale network. By integrating Tailscale, you can ensure that your Karakeep instance is only accessible to authorized devices within your Tailscale network, protecting your ideas and information from the public web.", + "name": "Karakeep with Tailscale", + "description": "ScaleTail configuration for Karakeep running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/karakeep/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/karakeep/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/karakeep/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "kavita", - "name": "Kavita", - "description": "This Docker Compose configuration sets up [Kavita](https://github.com/Kareadita/Kavita) with Tailscale as a sidecar container to securely serve your comics, manga, and ebooks over a private Tailscale network. By running Tailscale as a sidecar, you restrict access to your Kavita instance to devices authenticated on your Tailnet, avoiding public exposure.", + "name": "Kavita with Tailscale", + "description": "ScaleTail configuration for Kavita running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/kavita/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/kavita/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/kavita/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "languagetool", - "name": "LanguageTool", - "description": "This Docker Compose configuration sets up [LanguageTool](https://languagetool.org) with Tailscale as a sidecar container to enhance secure networking.", + "name": "LanguageTool with Tailscale", + "description": "ScaleTail configuration for LanguageTool running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/languagetool/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/languagetool/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/languagetool/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "linkding", - "name": "Linkding", - "description": "This Docker Compose configuration sets up [Linkding](https://github.com/sissbruecker/linkding) with Tailscale as a sidecar container to securely manage and access your self-hosted bookmark manager over a private Tailscale network. By integrating Tailscale, you can ensure that your Linkding instance remains private and accessible only to authorized devices on your Tailscale network.", + "name": "Linkding with Tailscale", + "description": "ScaleTail configuration for Linkding running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/linkding/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/linkding/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/linkding/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "lube-logger", - "name": "LubeLogger", - "description": "This Docker Compose configuration sets up **[LubeLogger](https://github.com/hargata/lubelog)** with Tailscale as a sidecar container, enabling secure access to your vehicle maintenance log from anywhere on your private Tailscale network. With this setup, your LubeLogger instance stays completely private and protected, accessible only to your authorized devices.", + "name": "LubeLogger with Tailscale", + "description": "ScaleTail configuration for LubeLogger running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/lube-logger/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/lube-logger/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/lube-logger/README.md", "tags": [ - "utilities" + "ScaleTail" ] }, { "id": "mattermost", - "name": "Mattermost", - "description": "This Docker Compose configuration sets up [Mattermost](https://mattermost.com/platform-overview/) with Tailscale as a sidecar container to securely manage and access your clipboard history over a private Tailscale network. By integrating Tailscale, you can ensure that your Mattermost instance remains private and accessible only to authorized devices on your Tailscale network.", + "name": "Mattermost with Tailscale", + "description": "ScaleTail configuration for Mattermost running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/mattermost/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/mattermost/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/mattermost/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "mealie", - "name": "Mealie", - "description": "This Docker Compose configuration sets up [**Mealie**](https://github.com/mealie-recipes/mealie/) with Tailscale as a sidecar container, enabling secure access to your personal recipe collection and meal planning platform from anywhere on your private Tailscale network. With this setup, your Mealie instance stays fully private and accessible only to your authorized devices.", + "name": "Mealie with Tailscale", + "description": "ScaleTail configuration for Mealie running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/mealie/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/mealie/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/mealie/README.md", "tags": [ - "food-and-wellness" + "ScaleTail" ] }, { "id": "metube", - "name": "Metube", - "description": "This Docker Compose configuration sets up [Metube](https://github.com/alexta69/metube) with Tailscale as a sidecar container to securely manage and access your self-hosted YouTube downloader over a private Tailscale network. By integrating Tailscale, you can ensure that your Metube instance remains private and accessible only to authorized devices on your Tailscale network.", + "name": "Metube with Tailscale", + "description": "ScaleTail configuration for Metube running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/metube/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/metube/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/metube/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "miniqr", - "name": "Mini-QR", - "description": "This Docker Compose configuration sets up **[Mini-QR](https://github.com/lyqht/mini-qr)** with Tailscale as a sidecar container to securely access your self-hosted QR code generation tool over a private Tailscale network. By integrating Tailscale, you can ensure that your Mini-QR instance is only accessible to authorized devices within your private network, adding an extra layer of privacy and security.", + "name": "Mini-QR with Tailscale", + "description": "ScaleTail configuration for Mini-QR running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/miniqr/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/miniqr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/miniqr/README.md", "tags": [ - "utilities" + "ScaleTail" ] }, { "id": "nanote", - "name": "Nanote", - "description": "This Docker Compose configuration sets up **[Nanote](https://github.com/omarmir/nanote)** with Tailscale as a sidecar container to securely manage and access your self-hosted note-taking application over a private Tailscale network. By integrating Tailscale, you can ensure that your Nanote instance remains private and accessible only to authorized devices within your Tailscale network.", + "name": "Nanote with Tailscale", + "description": "ScaleTail configuration for Nanote running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nanote/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nanote/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nanote/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "navidrome", - "name": "Navidrome", - "description": "This Docker Compose configuration sets up [Navidrome](https://github.com/navidrome/navidrome) with Tailscale as a sidecar container, enabling secure, private access to your music server over your Tailscale network. With this configuration, Navidrome is never exposed to the public internet, and access is limited to authorized devices on your Tailnet.", + "name": "Navidrome with Tailscale", + "description": "ScaleTail configuration for Navidrome running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/navidrome/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/navidrome/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/navidrome/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "nessus", - "name": "Nessus", - "description": "> \u26a0\ufe0f **Important:** This container has no ability for persistent storage - your configuration will be lost when restarting the instance.", + "name": "Nessus with Tailscale", + "description": "ScaleTail configuration for Nessus running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nessus/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nessus/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nessus/README.md", "tags": [ - "networking-and-security" + "ScaleTail" ] }, { "id": "netbox", - "name": "Netbox", - "description": "This Docker Compose configuration sets up [Netbox](https://github.com/netbox-community/netbox) with Tailscale as a sidecar container to securely access your Network layout over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy, ensuring that they are only accessible within your Tailscale network.", + "name": "Netbox with Tailscale", + "description": "ScaleTail configuration for Netbox running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/netbox/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/netbox/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/netbox/README.md", "tags": [ - "networking-and-security" + "ScaleTail" ] }, { "id": "nextcloud", - "name": "Nextcloud Server", - "description": "This Docker Compose configuration sets up [Nextcloud Server](https://github.com/nextcloud/server) with Tailscale as a sidecar container to securely manage and access your personal cloud storage over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Nextcloud instance, ensuring that it is only accessible within your Tailscale network.", + "name": "Nextcloud Server with Tailscale", + "description": "ScaleTail configuration for Nextcloud Server running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nextcloud/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nextcloud/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nextcloud/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "nodered", - "name": "Node-RED", - "description": "This Docker Compose configuration sets up [Node-RED](https://github.com/node-red/node-red) with Tailscale as a sidecar container to securely access and manage your flow-based programming tool over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Node-RED instance, ensuring it is only accessible within your Tailscale network.", + "name": "Node-RED with Tailscale", + "description": "ScaleTail configuration for Node-RED running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nodered/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nodered/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nodered/README.md", "tags": [ - "development-tools" + "ScaleTail" ] }, { "id": "ntfy", - "name": "ntfy", - "description": "This Docker Compose configuration sets up [ntfy](https://ntfy.sh/) with Tailscale as a sidecar container to securely deliver push notifications over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you enhance the privacy and security of your ntfy instance, ensuring it is only accessible within your Tailscale network.", + "name": "ntfy with Tailscale", + "description": "ScaleTail configuration for ntfy running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ntfy/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ntfy/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ntfy/README.md", "tags": [ - "utilities" + "ScaleTail" ] }, { "id": "overseerr", - "name": "Overseerr", - "description": "This Docker Compose configuration sets up [Overseerr](https://github.com/sct/overseerr) with Tailscale as a sidecar container to securely manage and access your request management system over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you enhance the privacy and security of your Overseerr instance, ensuring it is only accessible within your Tailscale network.", + "name": "Overseerr with Tailscale", + "description": "ScaleTail configuration for Overseerr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/overseerr/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/overseerr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/overseerr/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "picard", - "name": "MusicBrainz Picard", - "description": "This Docker Compose setup deploys **MusicBrainz Picard** alongside a **Tailscale sidecar container**, allowing secure access to your self-hosted music tagging and metadata management environment over your private **Tailscale network**. With this setup, Picard remains **private and reachable only from trusted devices within your Tailnet**, ensuring your media metadata library stays secure and isolated from the public internet.", + "name": "MusicBrainz Picard with Tailscale", + "description": "ScaleTail configuration for MusicBrainz Picard running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/picard/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/picard/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/picard/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "pihole", - "name": "Pi-hole", - "description": "This Docker Compose configuration sets up [Pi-hole](https://github.com/pi-hole/pi-hole) with Tailscale as a sidecar container to securely manage and access your network-wide ad blocker over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Pi-hole instance, ensuring that it is only accessible within your Tailscale network.", + "name": "Pi-hole with Tailscale", + "description": "ScaleTail configuration for Pi-hole running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pihole/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pihole/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pihole/README.md", "tags": [ - "networking-and-security" + "ScaleTail" ] }, { "id": "pingvin-share", - "name": "Pingvin Share", - "description": "**PLEASE NOTE** As per June 29, 2025 pingvin-share **has been archived** by the developer.", + "name": "Pingvin Share with Tailscale", + "description": "ScaleTail configuration for Pingvin Share running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pingvin-share/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pingvin-share/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pingvin-share/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "plex", - "name": "Plex", - "description": "This Docker Compose configuration sets up [Plex Media Server](https://hub.docker.com/r/linuxserver/plex) with Tailscale as a sidecar container to securely manage and stream your media over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your media server, ensuring that it is only accessible within your Tailscale network.", + "name": "Plex with Tailscale", + "description": "ScaleTail configuration for Plex running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/plex/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/plex/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/plex/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "pocket-id", - "name": "Pocket ID", - "description": "This Docker Compose configuration sets up [Pocket ID](https://github.com/stonith404/pocket-id) with Tailscale as a sidecar container to securely manage and access your decentralized identity service over a private Tailscale network. By integrating Tailscale, you can ensure that your Pocket ID instance remains private and accessible only to authorized devices within your Tailscale network.", + "name": "Pocket ID with Tailscale", + "description": "ScaleTail configuration for Pocket ID running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pocket-id/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pocket-id/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pocket-id/README.md", "tags": [ - "networking-and-security" + "ScaleTail" ] }, { "id": "portainer", - "name": "Portainer", - "description": "This Docker Compose configuration sets up [Portainer](https://github.com/portainer/portainer) with Tailscale as a sidecar container to securely manage and monitor your Docker environments over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Portainer instance, ensuring that it is only accessible within your Tailscale network.", + "name": "Portainer with Tailscale", + "description": "ScaleTail configuration for Portainer running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/portainer/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/portainer/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/portainer/README.md", "tags": [ - "development-tools" + "ScaleTail" ] }, { "id": "portracker", - "name": "Portracker", - "description": "This Docker Compose configuration sets up [Portracker](https://github.com/mostafa-wahied/portracker) with Tailscale as a sidecar container to securely access your lightweight port monitoring and tracking tool over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and accessibility of your Portracker instance, ensuring it is only available within your Tailscale network.", + "name": "Portracker with Tailscale", + "description": "ScaleTail configuration for Portracker running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/portracker/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/portracker/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/portracker/README.md", "tags": [ - "monitoring-and-analytics" + "ScaleTail" ] }, { "id": "posterizarr", - "name": "Posterizarr", - "description": "This Docker Compose configuration sets up **Posterizarr** with a Tailscale sidecar container, enabling secure and private access to your automated poster and artwork management service for *Radarr* and *Sonarr*. With this setup, Posterizarr is **only accessible from within your Tailscale network**, keeping your media automation environment clean, private, and secure.", + "name": "Posterizarr with Tailscale", + "description": "ScaleTail configuration for Posterizarr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/posterizarr/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/posterizarr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/posterizarr/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "prowlarr", - "name": "Prowlarr", - "description": "This Docker Compose configuration sets up [Prowlarr](https://github.com/Prowlarr/Prowlarr) with Tailscale as a sidecar container to securely manage and access your indexer management system over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Prowlarr instance, ensuring that it is only accessible within your Tailscale network.", + "name": "Prowlarr with Tailscale", + "description": "ScaleTail configuration for Prowlarr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/prowlarr/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/prowlarr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/prowlarr/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "qbittorrent", - "name": "qBittorrent", - "description": "This Docker Compose configuration sets up [qBittorrent](https://www.qbittorrent.org/) with Tailscale as a sidecar container to securely manage and access your torrent client over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your qBittorrent instance, ensuring that it is only accessible within your Tailscale network.", + "name": "qBittorrent with Tailscale", + "description": "ScaleTail configuration for qBittorrent running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/qbittorrent/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/qbittorrent/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/qbittorrent/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "radarr", - "name": "Radarr", - "description": "This Docker Compose configuration sets up [Radarr](https://github.com/Radarr/Radarr) with Tailscale as a sidecar container to securely manage and access your media management system over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Radarr instance, ensuring that it is only accessible within your Tailscale network.", + "name": "Radarr with Tailscale", + "description": "ScaleTail configuration for Radarr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/radarr/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/radarr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/radarr/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "recyclarr", - "name": "Recyclarr", - "description": "This Docker Compose configuration sets up **Recyclarr** with a Tailscale sidecar container, allowing secure and private synchronization of quality profiles, custom formats, and media settings across your *Radarr* and *Sonarr* instances. With this setup, Recyclarr is **only reachable from within your Tailscale network**, keeping your media automation infrastructure fully private and protected.", + "name": "Recyclarr with Tailscale", + "description": "ScaleTail configuration for Recyclarr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/recyclarr/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/recyclarr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/recyclarr/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "resilio-sync", - "name": "Resilio Sync", - "description": "This Docker Compose configuration sets up [Resilio Sync](https://github.com/linuxserver/docker-resilio-sync) with Tailscale as a sidecar container to securely synchronize and share your files over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your file synchronization, ensuring that Resilio Sync is only accessible within your Tailscale network.", + "name": "Resilio Sync with Tailscale", + "description": "ScaleTail configuration for Resilio Sync running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/resilio-sync/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/resilio-sync/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/resilio-sync/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "searxng", - "name": "searXNG", - "description": "This Docker Compose configuration sets up [searXNG](https://github.com/searxng/searxng) with Tailscale as a sidecar container, enabling secure access to your private metasearch engine over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you can ensure that your searXNG instance is accessible only within your Tailscale network, providing an additional layer of security and privacy for your searches.", + "name": "searXNG with Tailscale", + "description": "ScaleTail configuration for searXNG running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/searxng/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/searxng/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/searxng/README.md", "tags": [ - "development-tools" + "ScaleTail" ] }, { "id": "slink", - "name": "Slink", - "description": "This Docker Compose configuration sets up [Slink](https://github.com/andrii-kryvoviaz/slink) with Tailscale as a sidecar container to securely manage and access your local file-sharing system over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you can ensure that your Slink instance is both secure and private, accessible only within your Tailscale network.", + "name": "Slink with Tailscale", + "description": "ScaleTail configuration for Slink running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/slink/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/slink/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/slink/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "sonarr", - "name": "Sonarr", - "description": "This Docker Compose configuration sets up [Sonarr](https://github.com/Sonarr/Sonarr) with Tailscale as a sidecar container to securely manage and access your media management system over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Sonarr instance, ensuring that it is only accessible within your Tailscale network.", + "name": "Sonarr with Tailscale", + "description": "ScaleTail configuration for Sonarr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/sonarr/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/sonarr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/sonarr/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "speedtest-tracker", - "name": "Speedtest Tracker", - "description": "This Docker Compose configuration sets up [Speedtest Tracker](https://github.com/alexjustesen/speedtest-tracker) with Tailscale as a sidecar container to securely monitor and access your internet speed tracking tool over a private Tailscale network. By integrating Tailscale, you can ensure that your Speedtest Tracker instance remains private and accessible only to authorized devices on your Tailscale network.", + "name": "Speedtest Tracker with Tailscale", + "description": "ScaleTail configuration for Speedtest Tracker running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/speedtest-tracker/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/speedtest-tracker/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/speedtest-tracker/README.md", "tags": [ - "monitoring-and-analytics" + "ScaleTail" ] }, { "id": "stirlingpdf", - "name": "Stirling-PDF", - "description": "This Docker Compose configuration sets up [Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF) with Tailscale as a sidecar container to securely manage and manipulate PDF files over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your PDF processing, ensuring that the Stirling-PDF interface is only accessible within your Tailscale network.", + "name": "Stirling-PDF with Tailscale", + "description": "ScaleTail configuration for Stirling-PDF running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/stirlingpdf/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/stirlingpdf/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/stirlingpdf/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "subtrackr", - "name": "Subtrackr", - "description": "This Docker Compose configuration sets up [**Subtrackr**](https://github.com/bscott/subtrackr) with Tailscale as a sidecar container, enabling secure access to your self-hosted subscription tracking platform from anywhere on your private Tailscale network. With this setup, your Subtrackr instance remains fully private and accessible only from authorized devices.", + "name": "Subtrackr with Tailscale", + "description": "ScaleTail configuration for Subtrackr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/subtrackr/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/subtrackr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/subtrackr/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "swingmx", - "name": "Swing Music", - "description": "This Docker Compose configuration sets up **Swing Music** with a Tailscale sidecar container, enabling secure access to your self-hosted music streaming server over your private Tailscale network. With this setup, your Swing Music instance remains **private and accessible only from authorized devices on your Tailnet**.", + "name": "Swing Music with Tailscale", + "description": "ScaleTail configuration for Swing Music running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/swingmx/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/swingmx/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/swingmx/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "tailscale-exit-node", "name": "Tailscale Exit Node Configuration", - "description": "This Docker Compose configuration sets up a Tailscale Exit Node, allowing devices in your Tailscale network to route their internet traffic securely through this node. By configuring a Tailscale Exit Node, you can enhance the privacy and security of your internet browsing by routing traffic through a trusted network, such as your home or office, rather than relying on potentially less secure public networks.", + "description": "ScaleTail configuration for Tailscale Exit Node Configuration running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tailscale-exit-node/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tailscale-exit-node/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tailscale-exit-node/README.md", "tags": [ - "networking-and-security" + "ScaleTail" ] }, { "id": "tandoor", - "name": "Tandoor Recipes", - "description": "This Docker Compose configuration sets up [**Tandoor Recipes**](https://github.com/TandoorRecipes/recipes) with Tailscale as a sidecar container, which enables a secure access to your personal recipe and meal planning platform from your Tailscale network. As with all other services inside this repository, your service stays fully private and accessible only to your authorized devices.", + "name": "Tandoor Recipes with Tailscale", + "description": "ScaleTail configuration for Tandoor Recipes running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tandoor/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tandoor/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tandoor/README.md", "tags": [ - "food-and-wellness" + "ScaleTail" ] }, { "id": "tautulli", - "name": "Tautulli", - "description": "This Docker Compose configuration sets up [Tautulli for Docker](https://hub.docker.com/r/linuxserver/tautulli) with Tailscale as a sidecar container to securely monitor and manage your Plex Media Server over a private Tailscale network. By integrating Tailscale in a sidecar configuration, you enhance the security and privacy of your Tautulli installation, ensuring that it is only accessible within your Tailscale network.", + "name": "Tautulli with Tailscale", + "description": "ScaleTail configuration for Tautulli running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tautulli/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tautulli/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tautulli/README.md", "tags": [ - "media-and-entertainment" + "ScaleTail" ] }, { "id": "technitium", - "name": "Technitium DNS server", - "description": "This Docker Compose configuration sets up a [Technitium DNS Server](https://github.com/TechnitiumSoftware/DnsServer) with Tailscale as a sidecar container ......", + "name": "Technitium DNS server with Tailscale", + "description": "ScaleTail configuration for Technitium DNS server running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/technitium/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/technitium/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/technitium/README.md", "tags": [ - "networking-and-security" + "ScaleTail" ] }, { "id": "traefik", - "name": "Traefik", - "description": "This Docker Compose configuration sets up [Traefik](https://github.com/traefik/traefik) with Tailscale as a sidecar container to securely manage and route your traffic over a private Tailscale network. By integrating Tailscale, you can enhance the security and privacy of your Traefik instance, ensuring that access is restricted to devices within your Tailscale network.", + "name": "Traefik with Tailscale", + "description": "ScaleTail configuration for Traefik running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/traefik/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/traefik/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/traefik/README.md", "tags": [ - "networking-and-security" + "ScaleTail" ] }, { "id": "uptime-kuma", - "name": "Uptime Kuma", - "description": "This Docker Compose configuration sets up [Uptime Kuma](https://github.com/louislam/uptime-kuma) with Tailscale as a sidecar container to securely monitor your services and websites over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your monitoring dashboard, ensuring that it is only accessible within your Tailscale network.", + "name": "Uptime Kuma with Tailscale", + "description": "ScaleTail configuration for Uptime Kuma running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/uptime-kuma/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/uptime-kuma/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/uptime-kuma/README.md", "tags": [ - "monitoring-and-analytics" + "ScaleTail" ] }, { "id": "vaultwarden", - "name": "Vaultwarden", - "description": "This Docker Compose configuration sets up [Vaultwarden](https://github.com/dani-garcia/vaultwarden) with Tailscale as a sidecar container to securely manage and access your password manager over a private Tailscale network. By using Tailscale in a sidecar configuration, you can enhance the security and privacy of your Vaultwarden instance, ensuring that it is only accessible within your Tailscale network.", + "name": "Vaultwarden with Tailscale", + "description": "ScaleTail configuration for Vaultwarden running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/vaultwarden/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/vaultwarden/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/vaultwarden/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] }, { "id": "wallos", - "name": "Wallos", - "description": "This Docker Compose configuration sets up [Wallos](https://github.com/ellite/Wallos) with Tailscale as a sidecar container, enabling secure, private access to your self-hosted subscription tracker over your Tailscale network. With this setup, Wallos is never exposed to the public internet\u2014access is limited strictly to devices authenticated through your Tailscale Tailnet.", + "name": "Wallos with Tailscale", + "description": "ScaleTail configuration for Wallos running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", "compose_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/wallos/compose.yaml", "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/wallos/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/wallos/README.md", "tags": [ - "productivity-and-collaboration" + "ScaleTail" ] } ] From 8ca5e049e0f179059585f14ddb67700b4f00dd30 Mon Sep 17 00:00:00 2001 From: jackspiering <46534141+jackspiering@users.noreply.github.com> Date: Sun, 8 Feb 2026 23:27:02 +0100 Subject: [PATCH 10/13] Support multiple tags in frontmatter --- scripts/generate_registry.py | 56 +++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/scripts/generate_registry.py b/scripts/generate_registry.py index 12ff5fb..7b3fe0c 100755 --- a/scripts/generate_registry.py +++ b/scripts/generate_registry.py @@ -55,23 +55,51 @@ def first_heading(text: str) -> Optional[str]: return None -def extract_frontmatter_tag(text: str) -> Optional[str]: +def _parse_tag_values(raw: str) -> List[str]: + value = raw.strip() + if value.startswith(("'", '"')) and value.endswith(("'", '"')) and len(value) > 1: + value = value[1:-1].strip() + if value.startswith("[") and value.endswith("]") and len(value) > 1: + value = value[1:-1].strip() + parts = [part.strip() for part in value.split(",")] + tags: List[str] = [] + for part in parts: + if not part: + continue + if part.startswith(("'", '"')) and part.endswith(("'", '"')) and len(part) > 1: + part = part[1:-1].strip() + if part: + tags.append(part) + return tags + + +def extract_frontmatter_tags(text: str) -> List[str]: lines = text.splitlines() idx = 0 while idx < len(lines) and not lines[idx].strip(): idx += 1 if idx >= len(lines) or lines[idx].strip() != "---": - return None + return [] idx += 1 + tags_value: Optional[str] = None + tag_value: Optional[str] = None while idx < len(lines) and lines[idx].strip() != "---": - match = re.match(r"^tag\s*:\s*(.+)\s*$", lines[idx], flags=re.IGNORECASE) - if match: - value = match.group(1).strip() - if value.startswith(("'", '"')) and value.endswith(("'", '"')) and len(value) > 1: - value = value[1:-1].strip() - return value or None + if tags_value is None: + match_tags = re.match( + r"^tags\s*:\s*(.+)\s*$", lines[idx], flags=re.IGNORECASE + ) + if match_tags: + tags_value = match_tags.group(1).strip() + if tag_value is None: + match_tag = re.match(r"^tag\s*:\s*(.+)\s*$", lines[idx], flags=re.IGNORECASE) + if match_tag: + tag_value = match_tag.group(1).strip() idx += 1 - return None + if tags_value: + return _parse_tag_values(tags_value) + if tag_value: + return _parse_tag_values(tag_value) + return [] def read_text(path: Path) -> Optional[str]: @@ -162,16 +190,16 @@ def build_template( name = title_from_id(template_id) readme_path, parent_readme = pick_readme(compose_path.parent) - tag_value = "ScaleTail" + tag_values = ["ScaleTail"] if readme_path: readme_text = read_text(readme_path) if readme_text: heading = first_heading(readme_text) if heading and not (parent_readme and "/" in service_rel): name = heading - tag = extract_frontmatter_tag(readme_text) - if tag: - tag_value = tag + tags = extract_frontmatter_tags(readme_text) + if tags: + tag_values = tags name = normalize_service_name(name) description_name = strip_tailscale_suffix(name) @@ -198,7 +226,7 @@ def build_template( "env_url": build_raw_base(repo, ref) + "/" + rel_env, "documentation_url": documentation_url or build_raw_base(repo, ref) + "/" + rel_compose, - "tags": [tag_value], + "tags": tag_values, } return template From 1487cf3345db7707689d04812dd927064ad275d4 Mon Sep 17 00:00:00 2001 From: jackspiering <46534141+jackspiering@users.noreply.github.com> Date: Sun, 8 Feb 2026 23:36:51 +0100 Subject: [PATCH 11/13] Always include ScaleTail tag --- scripts/generate_registry.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/scripts/generate_registry.py b/scripts/generate_registry.py index 7b3fe0c..3af1e90 100755 --- a/scripts/generate_registry.py +++ b/scripts/generate_registry.py @@ -102,6 +102,12 @@ def extract_frontmatter_tags(text: str) -> List[str]: return [] +def ensure_scaletail_tag(tags: List[str]) -> List[str]: + if any(tag.lower() == "scaletail" for tag in tags): + return tags + return ["ScaleTail", *tags] + + def read_text(path: Path) -> Optional[str]: if not path.exists(): return None @@ -200,6 +206,7 @@ def build_template( tags = extract_frontmatter_tags(readme_text) if tags: tag_values = tags + tag_values = ensure_scaletail_tag(tag_values) name = normalize_service_name(name) description_name = strip_tailscale_suffix(name) From 0b5d1bfab807416044e038a49a43a21fc9d041f9 Mon Sep 17 00:00:00 2001 From: jackspiering <46534141+jackspiering@users.noreply.github.com> Date: Sun, 8 Feb 2026 23:48:20 +0100 Subject: [PATCH 12/13] Sanitize tags and names --- scripts/generate_registry.py | 45 +++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/scripts/generate_registry.py b/scripts/generate_registry.py index 3af1e90..9a513ef 100755 --- a/scripts/generate_registry.py +++ b/scripts/generate_registry.py @@ -14,6 +14,10 @@ SERVICES_DIR = REPO_ROOT / "services" REPO_SLUG_RE = re.compile(r"^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$") REF_RE = re.compile(r"^[A-Za-z0-9._/-]+$") +TAG_MAX_LEN = 32 +NAME_MAX_LEN = 80 +TAG_SANITIZE_RE = re.compile(r"[^A-Za-z0-9 _.-]") +NAME_SANITIZE_RE = re.compile(r"[\x00-\x1f\x7f<>]") def title_from_id(value: str) -> str: @@ -55,6 +59,22 @@ def first_heading(text: str) -> Optional[str]: return None +def sanitize_name(value: str) -> str: + cleaned = NAME_SANITIZE_RE.sub("", value) + cleaned = re.sub(r"\s+", " ", cleaned).strip() + if not cleaned: + cleaned = "Service" + return cleaned[:NAME_MAX_LEN] + + +def sanitize_tag(value: str) -> Optional[str]: + cleaned = TAG_SANITIZE_RE.sub("", value) + cleaned = re.sub(r"\s+", " ", cleaned).strip() + if not cleaned: + return None + return cleaned[:TAG_MAX_LEN] + + def _parse_tag_values(raw: str) -> List[str]: value = raw.strip() if value.startswith(("'", '"')) and value.endswith(("'", '"')) and len(value) > 1: @@ -68,8 +88,9 @@ def _parse_tag_values(raw: str) -> List[str]: continue if part.startswith(("'", '"')) and part.endswith(("'", '"')) and len(part) > 1: part = part[1:-1].strip() - if part: - tags.append(part) + cleaned = sanitize_tag(part) + if cleaned: + tags.append(cleaned) return tags @@ -102,10 +123,22 @@ def extract_frontmatter_tags(text: str) -> List[str]: return [] +def dedupe_tags(tags: List[str]) -> List[str]: + seen: set[str] = set() + result: List[str] = [] + for tag in tags: + key = tag.lower() + if key in seen: + continue + seen.add(key) + result.append(tag) + return result + + def ensure_scaletail_tag(tags: List[str]) -> List[str]: if any(tag.lower() == "scaletail" for tag in tags): - return tags - return ["ScaleTail", *tags] + return dedupe_tags(tags) + return dedupe_tags(["ScaleTail", *tags]) def read_text(path: Path) -> Optional[str]: @@ -193,7 +226,7 @@ def build_template( rel_compose = compose_path.relative_to(REPO_ROOT).as_posix() service_rel = compose_path.parent.relative_to(SERVICES_DIR).as_posix() template_id = service_rel.replace("/", "-") - name = title_from_id(template_id) + name = sanitize_name(title_from_id(template_id)) readme_path, parent_readme = pick_readme(compose_path.parent) tag_values = ["ScaleTail"] @@ -202,7 +235,7 @@ def build_template( if readme_text: heading = first_heading(readme_text) if heading and not (parent_readme and "/" in service_rel): - name = heading + name = sanitize_name(heading) tags = extract_frontmatter_tags(readme_text) if tags: tag_values = tags From 5c502f5b68118f20623f5c4b247e749530d6b91d Mon Sep 17 00:00:00 2001 From: jackspiering <46534141+jackspiering@users.noreply.github.com> Date: Fri, 13 Feb 2026 12:31:06 +0100 Subject: [PATCH 13/13] feat: add AGENTS.md and fix registry generation - Add AGENTS.md with development guidelines for agentic coding agents - Remove ' with Tailscale' suffix from service names - Always add ScaleTail and Tailscale as mandatory tags --- AGENTS.md | 225 +++++++++++++++++ registry.json | 453 +++++++++++++++++++++-------------- scripts/generate_registry.py | 13 +- 3 files changed, 504 insertions(+), 187 deletions(-) create mode 100644 AGENTS.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..057419d --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,225 @@ +# AGENTS.md - ScaleTail Development Guide + +This document provides guidelines for agentic coding agents working in the ScaleTail repository. + +## Project Overview + +ScaleTail is a collection of Docker Compose configurations that set up various self-hosted services with Tailscale as a sidecar container. Each service directory contains: +- `compose.yaml` - Docker Compose configuration +- `.env` - Environment variables (no secrets) +- `README.md` - Service documentation + +## Build/Lint/Test Commands + +### Linting (Markdown) + +```bash +# Run markdown linting locally using the config +markdownlint ./services/**/*.md + +# Or with Docker +docker run -v $PWD:/work avto-dev/markdown-lint@v1.5.0 --config .markdownlint.yml ./services/**/*.md +``` + +### Generate Registry + +```bash +# Generate registry.json from services (Python 3 required) +python3 scripts/generate_registry.py + +# With custom repo and ref +python3 scripts/generate_registry.py --repo owner/repo --ref main +``` + +### Docker Compose Validation + +```bash +# Validate a service's compose.yaml +docker compose -f services//compose.yaml config +``` + +### Running Tests + +There are no automated unit tests in this repository. Validation is done via: +1. Markdown linting (CI runs on push/PR) +2. Docker Compose config validation +3. Registry generation (CI runs on push to main) + +## Code Style Guidelines + +### File Organization + +- Service directories go in `services//` +- Each service must have exactly three files: + - `compose.yaml` + - `.env` + - `README.md` +- Use the template in `templates/service-template/` when adding new services + +### Docker Compose Conventions + +1. **Tailscale container naming**: Must be `tailscale-` +2. **Application container naming**: Must be `app-` +3. **Network mode**: Application must use `network_mode: service:tailscale` +4. **Health checks**: Both containers require health checks +5. **depends_on**: Must reference Tailscale with `condition: service_healthy` +6. **Ports**: Keep `ports` section commented unless LAN exposure is explicitly required +7. **Volumes**: Pre-create bind-mount paths to avoid root-owned folders + +### Compose.yaml Structure + +```yaml +configs: + ts-serve: + content: | + {"TCP":{"443":{"HTTPS":true}}, + "Web":{"$${TS_CERT_DOMAIN}:443": + {"Handlers":{"/": + {"Proxy":"http://127.0.0.1:"}}}}, + "AllowFunnel":{"$${TS_CERT_DOMAIN}:443":false}} + +services: + tailscale: + image: tailscale/tailscale:latest + container_name: tailscale-${SERVICE} + hostname: ${SERVICE} + environment: + - TS_AUTHKEY=${TS_AUTHKEY} + - TS_STATE_DIR=/var/lib/tailscale + - TS_SERVE_CONFIG=/config/serve.json # Remove if not using Serve + - TS_USERSPACE=false + - TS_ENABLE_HEALTH_CHECK=true + - TS_LOCAL_ADDR_PORT=127.0.0.1:41234 + volumes: + - ./config:/config + - ./ts/state:/var/lib/tailscale + devices: + - /dev/net/tun:/dev/net/tun + cap_add: + - net_admin + healthcheck: + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:41234/healthz"] + interval: 1m + timeout: 10s + retries: 3 + start_period: 10s + restart: always + + application: + image: ${IMAGE_URL} + network_mode: service:tailscale + container_name: app-${SERVICE} + environment: + - + volumes: + - ./${SERVICE}-data/:/container/path + depends_on: + tailscale: + condition: service_healthy + healthcheck: + test: ["CMD", ""] + interval: 1m + timeout: 10s + retries: 3 + start_period: 30s + restart: always +``` + +### .env File Structure + +```bash +#version=1.1 +#URL=https://github.com/tailscale-dev/ScaleTail + +# Service Configuration +SERVICE= +IMAGE_URL= + +# Network Configuration +SERVICEPORT= +DNS_SERVER=9.9.9.9 + +# Tailscale Configuration +TS_AUTHKEY= + +# Optional Service variables +TAILNET_NAME= +``` + +### README.md Structure + +```markdown +# with Tailscale Sidecar Configuration + +Brief description of the service and why Tailscale helps. + +## + +More detailed description from upstream project. + +## Configuration Overview + +Explain the sidecar setup and how traffic is routed. +``` + +### Markdown Conventions + +- Use ATX-style headers (`#`, `##`, `###`) +- Keep line length reasonable (markdownlint default rules apply) +- No inline HTML unless necessary +- Use fenced code blocks with language identifiers + +### Naming Conventions + +- **Service directories**: lowercase with hyphens (e.g., `qbittorrent`, `home-assistant`) +- **Environment variables**: uppercase with underscores (e.g., `TS_AUTHKEY`, `SERVICEPORT`) +- **Container names**: use `${SERVICE}` variable (e.g., `tailscale-${SERVICE}`) +- **Docker images**: Use `${IMAGE_URL}` variable; prefer `:latest` tag + +### Variable Usage in compose.yaml + +- Use `${VARIABLE}` syntax for environment variables +- Use `$$` prefix for literal dollar signs (e.g., `$${TS_CERT_DOMAIN}`) +- Always define all variables in `.env` file + +### Error Handling + +- Always validate compose files with `docker compose config` +- Ensure health checks are properly configured for both containers +- Use `restart: always` for production reliability +- Pre-create directories for bind mounts to avoid root-owned folders + +### Adding New Services + +1. Copy `templates/service-template/` to `services//` +2. Rename files and update content +3. Update `compose.yaml`: + - Set correct `SERVICEPORT` and `IMAGE_URL` in `.env` + - Update `Proxy` port in `TS_SERVE_CONFIG` to match internal app port + - Remove `TS_SERVE_CONFIG` if not using Tailscale Serve/Funnel + - Add required volumes, devices, or capabilities +4. Fill in README with service description and any gotchas +5. Validate with `docker compose config` +6. Run markdown lint before committing + +### Registry Generation + +The `scripts/generate_registry.py` script: +- Scans `services/` for all `compose.yaml` files +- Requires each service to have a corresponding `.env` file +- Extracts service name from README frontmatter or first heading +- Generates `registry.json` for the ScaleTail catalog + +### Git Workflow + +- Create feature branches for changes +- Run markdown linting before submitting PRs +- Ensure `docker compose config` passes for modified services +- Update `registry.json` by running the generation script (or let CI do it) + +### Important Notes + +- **Never commit real secrets** - use placeholder values in `.env` +- **Keep Tailscale health check** - ensures app starts after Tailscale is ready +- **Document port exposures** - explain why any `ports:` section is uncommented +- **Test locally first** - use `docker compose up -d` to verify before submitting diff --git a/registry.json b/registry.json index c09cc52..f074282 100644 --- a/registry.json +++ b/registry.json @@ -7,7 +7,7 @@ "templates": [ { "id": "adguardhome", - "name": "AdGuard Home with Tailscale", + "name": "AdGuard Home", "description": "ScaleTail configuration for AdGuard Home running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -15,12 +15,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/adguardhome/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/adguardhome/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "adguardhome-sync", - "name": "AdGuardHome Sync with Tailscale", + "name": "AdGuardHome Sync", "description": "ScaleTail configuration for AdGuardHome Sync running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -28,12 +29,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/adguardhome-sync/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/adguardhome-sync/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "audiobookshelf", - "name": "Audiobookshelf with Tailscale", + "name": "Audiobookshelf", "description": "ScaleTail configuration for Audiobookshelf running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -41,12 +43,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/audiobookshelf/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/audiobookshelf/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "bazarr", - "name": "Bazarr with Tailscale", + "name": "Bazarr", "description": "ScaleTail configuration for Bazarr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -54,12 +57,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/bazarr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/bazarr/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "bentopdf", - "name": "BentoPDF with Tailscale", + "name": "BentoPDF", "description": "ScaleTail configuration for BentoPDF running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -67,12 +71,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/bentopdf/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/bentopdf/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "beszel-agent", - "name": "Beszel Agent with Tailscale", + "name": "Beszel Agent", "description": "ScaleTail configuration for Beszel Agent running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -80,12 +85,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/beszel/agent/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/beszel/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "beszel-hub", - "name": "Beszel Hub with Tailscale", + "name": "Beszel Hub", "description": "ScaleTail configuration for Beszel Hub running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -93,12 +99,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/beszel/hub/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/beszel/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "booklore", - "name": "BookLore with Tailscale", + "name": "BookLore", "description": "ScaleTail configuration for BookLore running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -106,12 +113,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/booklore/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/booklore/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "caddy", - "name": "Caddy with Tailscale", + "name": "Caddy", "description": "ScaleTail configuration for Caddy running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -119,12 +127,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/caddy/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/caddy/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "changedetection", - "name": "ChangeDetection.io with Tailscale", + "name": "ChangeDetection.io", "description": "ScaleTail configuration for ChangeDetection.io running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -132,12 +141,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/changedetection/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/changedetection/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "clipcascade", - "name": "ClipCascade with Tailscale", + "name": "ClipCascade", "description": "ScaleTail configuration for ClipCascade running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -145,12 +155,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/clipcascade/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/clipcascade/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "coder", - "name": "Coder with Tailscale", + "name": "Coder", "description": "ScaleTail configuration for Coder running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -158,12 +169,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/coder/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/coder/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "configarr", - "name": "Configarr with Tailscale", + "name": "Configarr", "description": "ScaleTail configuration for Configarr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -171,12 +183,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/configarr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/configarr/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "convertx", - "name": "ConvertX with Tailscale", + "name": "ConvertX", "description": "ScaleTail configuration for ConvertX running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -184,12 +197,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/convertx/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/convertx/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "copyparty", - "name": "Copyparty with Tailscale", + "name": "Copyparty", "description": "ScaleTail configuration for Copyparty running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -197,12 +211,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/copyparty/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/copyparty/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "cyberchef", - "name": "CyberChef with Tailscale", + "name": "CyberChef", "description": "ScaleTail configuration for CyberChef running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -210,12 +225,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/cyberchef/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/cyberchef/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "ddns-updater", - "name": "DDNS Updater with Tailscale", + "name": "DDNS Updater", "description": "ScaleTail configuration for DDNS Updater running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -223,12 +239,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ddns-updater/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ddns-updater/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "docmost", - "name": "Docmost with Tailscale", + "name": "Docmost", "description": "ScaleTail configuration for Docmost running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -236,12 +253,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/docmost/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/docmost/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "donetick", - "name": "Donetick with Tailscale", + "name": "Donetick", "description": "ScaleTail configuration for Donetick running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -249,12 +267,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/donetick/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/donetick/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "dozzle", - "name": "Dozzle with Tailscale", + "name": "Dozzle", "description": "ScaleTail configuration for Dozzle running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -262,12 +281,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/dozzle/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/dozzle/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "dumbdo", - "name": "DumbDo with Tailscale", + "name": "DumbDo", "description": "ScaleTail configuration for DumbDo running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -275,12 +295,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/dumbdo/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/dumbdo/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "eigenfocus", - "name": "Eigenfocus with Tailscale", + "name": "Eigenfocus", "description": "ScaleTail configuration for Eigenfocus running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -288,12 +309,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/eigenfocus/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/eigenfocus/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "excalidraw", - "name": "Excalidraw with Tailscale", + "name": "Excalidraw", "description": "ScaleTail configuration for Excalidraw running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -301,12 +323,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/excalidraw/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/excalidraw/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "flatnotes", - "name": "Flatnotes with Tailscale", + "name": "Flatnotes", "description": "ScaleTail configuration for Flatnotes running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -314,12 +337,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/flatnotes/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/flatnotes/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "forgejo", - "name": "Forgejo with Tailscale", + "name": "Forgejo", "description": "ScaleTail configuration for Forgejo running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -327,12 +351,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/forgejo/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/forgejo/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "formbricks", - "name": "Formbricks with Tailscale", + "name": "Formbricks", "description": "ScaleTail configuration for Formbricks running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -340,12 +365,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/formbricks/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/formbricks/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "fossflow", - "name": "FossFLOW with Tailscale", + "name": "FossFLOW", "description": "ScaleTail configuration for FossFLOW running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -353,12 +379,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/fossflow/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/fossflow/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "ghost", - "name": "Ghost with Tailscale", + "name": "Ghost", "description": "ScaleTail configuration for Ghost running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -366,12 +393,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ghost/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ghost/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "gitsave", - "name": "GitSave with Tailscale", + "name": "GitSave", "description": "ScaleTail configuration for GitSave running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -379,12 +407,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gitsave/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gitsave/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "glance", - "name": "Glance with Tailscale", + "name": "Glance", "description": "ScaleTail configuration for Glance running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -392,12 +421,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/glance/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/glance/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "gokapi", - "name": "Gokapi with Tailscale", + "name": "Gokapi", "description": "ScaleTail configuration for Gokapi running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -405,12 +435,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gokapi/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gokapi/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "gotify", - "name": "Gotify with Tailscale", + "name": "Gotify", "description": "ScaleTail configuration for Gotify running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -418,12 +449,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gotify/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/gotify/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "grampsweb", - "name": "Gramps Web with Tailscale", + "name": "Gramps Web", "description": "ScaleTail configuration for Gramps Web running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -431,12 +463,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/grampsweb/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/grampsweb/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "haptic", - "name": "Haptic with Tailscale", + "name": "Haptic", "description": "ScaleTail configuration for Haptic running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -444,12 +477,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/haptic/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/haptic/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "hemmelig", - "name": "Hemmelig.app with Tailscale", + "name": "Hemmelig.app", "description": "ScaleTail configuration for Hemmelig.app running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -457,12 +491,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/hemmelig/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/hemmelig/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "homarr", - "name": "Homarr with Tailscale", + "name": "Homarr", "description": "ScaleTail configuration for Homarr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -470,12 +505,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homarr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homarr/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "home-assistant", - "name": "Home Assistant with Tailscale", + "name": "Home Assistant", "description": "ScaleTail configuration for Home Assistant running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -483,12 +519,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/home-assistant/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/home-assistant/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "homebox", - "name": "Homebox with Tailscale", + "name": "Homebox", "description": "ScaleTail configuration for Homebox running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -496,12 +533,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homebox/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homebox/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "homepage", - "name": "Homepage with Tailscale", + "name": "Homepage", "description": "ScaleTail configuration for Homepage running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -509,12 +547,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homepage/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/homepage/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "hytale", - "name": "Hytale Server with Tailscale", + "name": "Hytale Server", "description": "ScaleTail configuration for Hytale Server running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -522,12 +561,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/hytale/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/hytale/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "immich", - "name": "Immich with Tailscale", + "name": "Immich", "description": "ScaleTail configuration for Immich running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -535,12 +575,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/immich/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/immich/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "isley", - "name": "Isley with Tailscale", + "name": "Isley", "description": "ScaleTail configuration for Isley running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -548,12 +589,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/isley/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/isley/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "it-tools", - "name": "IT-Tools with Tailscale", + "name": "IT-Tools", "description": "ScaleTail configuration for IT-Tools running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -561,12 +603,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/it-tools/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/it-tools/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "jellyfin", - "name": "Jellyfin with Tailscale", + "name": "Jellyfin", "description": "ScaleTail configuration for Jellyfin running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -574,12 +617,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/jellyfin/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/jellyfin/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "jellyseerr", - "name": "Jellyseerr with Tailscale", + "name": "Jellyseerr", "description": "ScaleTail configuration for Jellyseerr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -587,12 +631,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/jellyseerr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/jellyseerr/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "kaneo", - "name": "Kaneo with Tailscale", + "name": "Kaneo", "description": "ScaleTail configuration for Kaneo running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -600,12 +645,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/kaneo/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/kaneo/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "karakeep", - "name": "Karakeep with Tailscale", + "name": "Karakeep", "description": "ScaleTail configuration for Karakeep running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -613,12 +659,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/karakeep/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/karakeep/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "kavita", - "name": "Kavita with Tailscale", + "name": "Kavita", "description": "ScaleTail configuration for Kavita running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -626,12 +673,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/kavita/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/kavita/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "languagetool", - "name": "LanguageTool with Tailscale", + "name": "LanguageTool", "description": "ScaleTail configuration for LanguageTool running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -639,12 +687,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/languagetool/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/languagetool/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "linkding", - "name": "Linkding with Tailscale", + "name": "Linkding", "description": "ScaleTail configuration for Linkding running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -652,12 +701,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/linkding/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/linkding/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "lube-logger", - "name": "LubeLogger with Tailscale", + "name": "LubeLogger", "description": "ScaleTail configuration for LubeLogger running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -665,12 +715,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/lube-logger/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/lube-logger/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "mattermost", - "name": "Mattermost with Tailscale", + "name": "Mattermost", "description": "ScaleTail configuration for Mattermost running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -678,12 +729,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/mattermost/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/mattermost/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "mealie", - "name": "Mealie with Tailscale", + "name": "Mealie", "description": "ScaleTail configuration for Mealie running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -691,12 +743,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/mealie/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/mealie/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "metube", - "name": "Metube with Tailscale", + "name": "Metube", "description": "ScaleTail configuration for Metube running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -704,12 +757,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/metube/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/metube/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "miniqr", - "name": "Mini-QR with Tailscale", + "name": "Mini-QR", "description": "ScaleTail configuration for Mini-QR running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -717,12 +771,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/miniqr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/miniqr/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "nanote", - "name": "Nanote with Tailscale", + "name": "Nanote", "description": "ScaleTail configuration for Nanote running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -730,12 +785,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nanote/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nanote/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "navidrome", - "name": "Navidrome with Tailscale", + "name": "Navidrome", "description": "ScaleTail configuration for Navidrome running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -743,12 +799,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/navidrome/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/navidrome/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "nessus", - "name": "Nessus with Tailscale", + "name": "Nessus", "description": "ScaleTail configuration for Nessus running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -756,12 +813,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nessus/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nessus/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "netbox", - "name": "Netbox with Tailscale", + "name": "Netbox", "description": "ScaleTail configuration for Netbox running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -769,12 +827,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/netbox/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/netbox/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "nextcloud", - "name": "Nextcloud Server with Tailscale", + "name": "Nextcloud Server", "description": "ScaleTail configuration for Nextcloud Server running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -782,12 +841,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nextcloud/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nextcloud/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "nodered", - "name": "Node-RED with Tailscale", + "name": "Node-RED", "description": "ScaleTail configuration for Node-RED running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -795,12 +855,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nodered/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/nodered/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "ntfy", - "name": "ntfy with Tailscale", + "name": "ntfy", "description": "ScaleTail configuration for ntfy running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -808,12 +869,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ntfy/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/ntfy/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "overseerr", - "name": "Overseerr with Tailscale", + "name": "Overseerr", "description": "ScaleTail configuration for Overseerr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -821,12 +883,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/overseerr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/overseerr/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "picard", - "name": "MusicBrainz Picard with Tailscale", + "name": "MusicBrainz Picard", "description": "ScaleTail configuration for MusicBrainz Picard running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -834,12 +897,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/picard/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/picard/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "pihole", - "name": "Pi-hole with Tailscale", + "name": "Pi-hole", "description": "ScaleTail configuration for Pi-hole running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -847,12 +911,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pihole/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pihole/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "pingvin-share", - "name": "Pingvin Share with Tailscale", + "name": "Pingvin Share", "description": "ScaleTail configuration for Pingvin Share running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -860,12 +925,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pingvin-share/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pingvin-share/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "plex", - "name": "Plex with Tailscale", + "name": "Plex", "description": "ScaleTail configuration for Plex running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -873,12 +939,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/plex/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/plex/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "pocket-id", - "name": "Pocket ID with Tailscale", + "name": "Pocket ID", "description": "ScaleTail configuration for Pocket ID running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -886,12 +953,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pocket-id/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/pocket-id/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "portainer", - "name": "Portainer with Tailscale", + "name": "Portainer", "description": "ScaleTail configuration for Portainer running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -899,12 +967,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/portainer/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/portainer/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "portracker", - "name": "Portracker with Tailscale", + "name": "Portracker", "description": "ScaleTail configuration for Portracker running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -912,12 +981,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/portracker/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/portracker/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "posterizarr", - "name": "Posterizarr with Tailscale", + "name": "Posterizarr", "description": "ScaleTail configuration for Posterizarr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -925,12 +995,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/posterizarr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/posterizarr/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "prowlarr", - "name": "Prowlarr with Tailscale", + "name": "Prowlarr", "description": "ScaleTail configuration for Prowlarr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -938,12 +1009,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/prowlarr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/prowlarr/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "qbittorrent", - "name": "qBittorrent with Tailscale", + "name": "qBittorrent", "description": "ScaleTail configuration for qBittorrent running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -951,12 +1023,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/qbittorrent/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/qbittorrent/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "radarr", - "name": "Radarr with Tailscale", + "name": "Radarr", "description": "ScaleTail configuration for Radarr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -964,12 +1037,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/radarr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/radarr/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "recyclarr", - "name": "Recyclarr with Tailscale", + "name": "Recyclarr", "description": "ScaleTail configuration for Recyclarr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -977,12 +1051,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/recyclarr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/recyclarr/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "resilio-sync", - "name": "Resilio Sync with Tailscale", + "name": "Resilio Sync", "description": "ScaleTail configuration for Resilio Sync running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -990,12 +1065,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/resilio-sync/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/resilio-sync/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "searxng", - "name": "searXNG with Tailscale", + "name": "searXNG", "description": "ScaleTail configuration for searXNG running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -1003,12 +1079,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/searxng/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/searxng/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "slink", - "name": "Slink with Tailscale", + "name": "Slink", "description": "ScaleTail configuration for Slink running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -1016,12 +1093,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/slink/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/slink/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "sonarr", - "name": "Sonarr with Tailscale", + "name": "Sonarr", "description": "ScaleTail configuration for Sonarr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -1029,12 +1107,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/sonarr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/sonarr/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "speedtest-tracker", - "name": "Speedtest Tracker with Tailscale", + "name": "Speedtest Tracker", "description": "ScaleTail configuration for Speedtest Tracker running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -1042,12 +1121,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/speedtest-tracker/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/speedtest-tracker/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "stirlingpdf", - "name": "Stirling-PDF with Tailscale", + "name": "Stirling-PDF", "description": "ScaleTail configuration for Stirling-PDF running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -1055,12 +1135,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/stirlingpdf/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/stirlingpdf/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "subtrackr", - "name": "Subtrackr with Tailscale", + "name": "Subtrackr", "description": "ScaleTail configuration for Subtrackr running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -1068,12 +1149,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/subtrackr/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/subtrackr/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "swingmx", - "name": "Swing Music with Tailscale", + "name": "Swing Music", "description": "ScaleTail configuration for Swing Music running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -1081,7 +1163,8 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/swingmx/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/swingmx/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { @@ -1094,12 +1177,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tailscale-exit-node/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tailscale-exit-node/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "tandoor", - "name": "Tandoor Recipes with Tailscale", + "name": "Tandoor Recipes", "description": "ScaleTail configuration for Tandoor Recipes running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -1107,12 +1191,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tandoor/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tandoor/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "tautulli", - "name": "Tautulli with Tailscale", + "name": "Tautulli", "description": "ScaleTail configuration for Tautulli running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -1120,12 +1205,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tautulli/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/tautulli/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "technitium", - "name": "Technitium DNS server with Tailscale", + "name": "Technitium DNS server", "description": "ScaleTail configuration for Technitium DNS server running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -1133,12 +1219,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/technitium/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/technitium/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "traefik", - "name": "Traefik with Tailscale", + "name": "Traefik", "description": "ScaleTail configuration for Traefik running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -1146,12 +1233,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/traefik/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/traefik/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "uptime-kuma", - "name": "Uptime Kuma with Tailscale", + "name": "Uptime Kuma", "description": "ScaleTail configuration for Uptime Kuma running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -1159,12 +1247,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/uptime-kuma/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/uptime-kuma/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "vaultwarden", - "name": "Vaultwarden with Tailscale", + "name": "Vaultwarden", "description": "ScaleTail configuration for Vaultwarden running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -1172,12 +1261,13 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/vaultwarden/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/vaultwarden/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] }, { "id": "wallos", - "name": "Wallos with Tailscale", + "name": "Wallos", "description": "ScaleTail configuration for Wallos running a Tailscale sidecar.", "version": "1.0.0", "author": "ScaleTail", @@ -1185,7 +1275,8 @@ "env_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/wallos/.env", "documentation_url": "https://raw.githubusercontent.com/jackspiering/ScaleTail-testing/main/services/wallos/README.md", "tags": [ - "ScaleTail" + "ScaleTail", + "Tailscale" ] } ] diff --git a/scripts/generate_registry.py b/scripts/generate_registry.py index 9a513ef..f50b8f9 100755 --- a/scripts/generate_registry.py +++ b/scripts/generate_registry.py @@ -46,9 +46,7 @@ def strip_tailscale_suffix(value: str) -> str: def normalize_service_name(value: str) -> str: base = strip_tailscale_suffix(value) - if re.search(r"tailscale", base, re.IGNORECASE): - return base - return f"{base} with Tailscale" + return base def first_heading(text: str) -> Optional[str]: @@ -136,9 +134,12 @@ def dedupe_tags(tags: List[str]) -> List[str]: def ensure_scaletail_tag(tags: List[str]) -> List[str]: - if any(tag.lower() == "scaletail" for tag in tags): - return dedupe_tags(tags) - return dedupe_tags(["ScaleTail", *tags]) + mandatory = ["ScaleTail", "Tailscale"] + existing_lower = {tag.lower() for tag in tags} + for tag in mandatory: + if tag.lower() not in existing_lower: + tags.append(tag) + return dedupe_tags(tags) def read_text(path: Path) -> Optional[str]: