{"id":29874692,"url":"https://github.com/atj4me/ddev-tailscale-router","last_synced_at":"2025-07-31T01:01:51.558Z","repository":{"id":283133301,"uuid":"950788832","full_name":"atj4me/ddev-tailscale-router","owner":"atj4me","description":"A router for Tailnet with MagicDNS and HTTPS","archived":false,"fork":false,"pushed_at":"2025-07-30T02:50:48.000Z","size":102,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-07-30T04:43:20.743Z","etag":null,"topics":["ddev-addon","ddev-get","tailscale","tailscale-funnel"],"latest_commit_sha":null,"homepage":"https://www.linkedin.com/pulse/day-my-development-environment-nearly-broke-me-how-i-thampi-joseph-ildhc?utm_source=share\u0026utm_medium=member_android\u0026utm_campaign=share_via","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/atj4me.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-03-18T17:28:50.000Z","updated_at":"2025-07-30T02:49:18.000Z","dependencies_parsed_at":null,"dependency_job_id":"4e45679b-59b6-4302-84b9-3e76348b8ddc","html_url":"https://github.com/atj4me/ddev-tailscale-router","commit_stats":null,"previous_names":["atj4me/ddev-tailscale-router"],"tags_count":9,"template":false,"template_full_name":"ddev/ddev-addon-template","purl":"pkg:github/atj4me/ddev-tailscale-router","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atj4me%2Fddev-tailscale-router","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atj4me%2Fddev-tailscale-router/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atj4me%2Fddev-tailscale-router/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atj4me%2Fddev-tailscale-router/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/atj4me","download_url":"https://codeload.github.com/atj4me/ddev-tailscale-router/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atj4me%2Fddev-tailscale-router/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267972166,"owners_count":24174367,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-30T02:00:09.044Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ddev-addon","ddev-get","tailscale","tailscale-funnel"],"created_at":"2025-07-31T01:00:46.252Z","updated_at":"2025-07-31T01:01:51.496Z","avatar_url":"https://github.com/atj4me.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![add-on registry](https://img.shields.io/badge/DDEV-Add--on_Registry-blue)](https://addons.ddev.com)\n[![tests](https://github.com/atj4me/ddev-tailscale-router/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/atj4me/ddev-tailscale-router/actions/workflows/tests.yml?query=branch%3Amain)\n[![last commit](https://img.shields.io/github/last-commit/atj4me/ddev-tailscale-router)](https://github.com/atj4me/ddev-tailscale-router/commits)\n[![release](https://img.shields.io/github/v/release/atj4me/ddev-tailscale-router)](https://github.com/atj4me/ddev-tailscale-router/releases/latest)\n\n# ddev-tailscale-router \u003c!-- omit in toc --\u003e\n\n- [What is ddev-tailscale-router?](#what-is-ddev-tailscale-router)\n- [Components of the Repository](#components-of-the-repository)\n- [Getting Started](#getting-started)\n- [Testing](#testing)\n- [Contributing](#contributing)\n- [License](#license)\n\n## What is ddev-tailscale-router?\n\n**ddev-tailscale-router** is a DDEV add-on that enables a **Tailscale subnet router** inside a DDEV-managed environment. This allows you to access your local DDEV development sites securely over Tailscale from anywhere without exposing them publicly.\n\nWith this setup, your development sites become accessible over Tailscale's secure, peer-to-peer VPN, making it ideal for remote development, testing, and collaboration.\n\n## Components of the Repository\n\n- **`install.yaml`**  \n  The DDEV add-on installation manifest. It copies the necessary files into your project's `.ddev` directory.\n- **`docker-compose.tailscale-router.yaml`**  \n  The core Docker Compose configuration that defines the `tailscale-router` service. It handles authenticating with Tailscale and uses `socat` to forward traffic from the Tailscale network to the DDEV web container.\n- **`tailscale-router/config/`**\n  This directory is copied into your project's `.ddev/tailscale-router/` directory. It contains the JSON configuration files for Tailscale's `serve` command, controlling whether the share is private or public. The Tailscale state is managed in a dedicated Docker volume, which is automatically cleaned up when the project is deleted.\n- **`tests/test.bats`**  \n  A test script to verify that the Tailscale integration is working correctly.\n- **GitHub Actions (`.github/workflows/tests.yml`)**  \n  Automates testing to ensure functionality on every push and on a schedule.\n- **Issue and PR Templates (`.github/`)**\n  Templates for filing bug reports, feature requests, and submitting pull requests to streamline contributions.\n\n## Getting Started\n\n\u003e [!WARNING]\n\u003e This add-on is only supported on Linux and Windows (WSL2). It is not compatible with macOS or systems with an `arm64` architecture (like Apple Silicon).\n\n### 1. Install DDEV and Tailscale\n\nEnsure you have:\n- [DDEV](https://ddev.readthedocs.io/en/stable/) installed\n- [Docker](https://www.docker.com/get-started) installed and running\n- A [Tailscale](https://tailscale.com/) account and auth key\n\n### 2. Add ddev-tailscale-router to Your Project\n\n```bash\nddev add-on get atj4me/ddev-tailscale-router\nddev restart\n```\n\n### 3. Authenticate with Tailscale\n\nAfter installation, a `.ddev/.env.tailscale-router` file is created in your project. You need to add your Tailscale auth key to this file.\n\nObtain an auth key (e.g., an ephemeral, reusable key) and set it using the `ddev dotenv` command:\n\n```bash\nddev dotenv set .ddev/.env.tailscale-router --ts-authkey=tskey-auth-xxxx\n```\n\nThen restart DDEV:\n\n```bash\nddev restart\n```\n\n### 4. Configure Share Privacy (Optional) \nBy default, this add-on creates a private share, accessible only by you. You can change this to a public share (accessible to anyone in your Tailnet) by setting the TS_PRIVACY environment variable. \n\n* To enable public sharing: \n\n  ```bash\n  ddev dotenv set .ddev/.env.tailscale-router --ts-privacy=public\n  ```\n\n* To switch back to private sharing (the default): \n\n  ```bash\n  ddev dotenv set .ddev/.env.tailscale-router --ts-privacy=private\n  ```\n\nRemember to ddev restart after changing this setting for it to take effect. \n\n### 5. Access Your DDEV Sites Securely\n\nOnce connected to Tailscale, use the **Tailscale-assigned IP** of your DDEV environment to access your local development sites securely from any connected device.\n\n## Testing\n\nThis add-on includes automated tests to ensure that the Tailscale router works correctly inside a DDEV environment.\n\nTo run tests locally:\n\n```bash\nbats tests/test.bats\n```\n\nTests also run automatically in GitHub Actions on every push.\n\n## Contributing\n\nContributions are welcome! If you have suggestions, bug reports, or feature requests, please:\n\n1. Fork the repository.\n2. Create a new branch.\n3. Make your changes.\n4. Submit a pull request.\n\n## License\n\nThis project is licensed under the Apache License 2.0. See the [LICENSE](LICENSE) file for details.\n\n---\n\nMaintained by `@atj4me` 🚀  \n\nLet me know if you want any tweaks! 🎯\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatj4me%2Fddev-tailscale-router","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fatj4me%2Fddev-tailscale-router","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatj4me%2Fddev-tailscale-router/lists"}