{"id":37163002,"url":"https://github.com/stupside/moley","last_synced_at":"2026-01-14T19:23:39.438Z","repository":{"id":301822136,"uuid":"1010395208","full_name":"stupside/moley","owner":"stupside","description":null,"archived":false,"fork":false,"pushed_at":"2025-12-16T13:04:41.000Z","size":8369,"stargazers_count":85,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-20T03:20:17.146Z","etag":null,"topics":["access","cli","cloudflare","cloudflared","go","localhost","proxy","tunnel","zerotrust"],"latest_commit_sha":null,"homepage":"http://moley.dev/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stupside.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":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-29T01:18:33.000Z","updated_at":"2025-12-16T13:04:38.000Z","dependencies_parsed_at":"2025-06-29T03:43:23.692Z","dependency_job_id":"d5d6db9d-940b-402b-b92d-770f809a8a64","html_url":"https://github.com/stupside/moley","commit_stats":null,"previous_names":["stupside/moley"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/stupside/moley","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stupside%2Fmoley","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stupside%2Fmoley/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stupside%2Fmoley/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stupside%2Fmoley/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stupside","download_url":"https://codeload.github.com/stupside/moley/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stupside%2Fmoley/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28432587,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T18:57:19.464Z","status":"ssl_error","status_checked_at":"2026-01-14T18:52:48.501Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["access","cli","cloudflare","cloudflared","go","localhost","proxy","tunnel","zerotrust"],"created_at":"2026-01-14T19:23:38.897Z","updated_at":"2026-01-14T19:23:39.424Z","avatar_url":"https://github.com/stupside.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\".github/images/moley.png\" alt=\"Moley Logo\" width=\"200\"/\u003e\u003cbr/\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/stupside/moley/releases/latest\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/v/release/stupside/moley?style=flat-square\" alt=\"Latest Release\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://pkg.go.dev/github.com/stupside/moley\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Go-Reference-00ADD8?style=flat-square\u0026logo=go\" alt=\"Go Reference\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/stupside/homebrew-tap/blob/main/Casks/moley.rb\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Homebrew-Available-FBB040?style=flat-square\u0026logo=homebrew\" alt=\"Homebrew\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/stupside/moley/blob/main/LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/license/stupside/moley?style=flat-square\" alt=\"License\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/stupside/moley/actions\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/actions/workflow/status/stupside/moley/ci.yml?style=flat-square\" alt=\"Build Status\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n# Moley\n\n**Turn localhost into production URLs with one command.**\n\n[Cloudflare Tunnels](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/) are free, unlimited, and enterprise-grade but the manual setup (YAML editing, DNS commands for each subdomain and manual cleanup) is so tedious that developers turn to paid alternatives just to avoid the friction.\n\nMoley automates everything so you get all the Cloudflare benefits on your custom domain without the manual work.\n\n## What Moley Does\n\n### Without Moley (manual cloudflared setup)\n\n```bash\n# 1. Authenticate with Cloudflare\ncloudflared tunnel login\n\n# 2. Create tunnel manually\ncloudflared tunnel create my-tunnel\n\n# 3. Configure tunnel YAML file with ingress rules\nvim ~/.cloudflared/config.yml\n# (figure out tunnel ID, credentials path, hostnames, services, catch-all rule...)\n\n# 4. Route DNS via CLI for each subdomain\ncloudflared tunnel route dns my-tunnel api.example.com\ncloudflared tunnel route dns my-tunnel app.example.com\n# (repeat for every subdomain... wait for DNS propagation...)\n\n# 5. Run tunnel\ncloudflared tunnel run my-tunnel\n\n# 6. Manually delete tunnel and DNS records from dashboard when done\n# (or forget and accumulate zombie tunnels...)\n```\n\n### With Moley\n\n```bash\nmoley tunnel run\n```\n\n**That's it.** Moley handles everything automatically:\n\n- ✅ **Authenticates** with Cloudflare API\n- ✅ **Creates tunnels** programmatically\n- ✅ **Generates config** with ingress rules (no YAML editing)\n- ✅ **Creates DNS records** for all subdomains (no CLI gymnastics)\n- ✅ **Runs tunnel** in foreground or background (`--detach`)\n- ✅ **Cleans up** tunnels and DNS when stopping (no zombie tunnels)\n\nOne command. Multiple apps. Zero manual configuration.\n\n## 📦 Installation\n\n### Homebrew (Recommended)\n```bash\nbrew install --cask stupside/tap/moley\n```\n\n### Go Install\n```bash\ngo install github.com/stupside/moley@latest\n```\n\n### Manual Download\nDownload the latest binary from the [releases page](https://github.com/stupside/moley/releases/latest).\n\n## 🚀 Quick Start\n\n1. **Authentication**\n   ```bash\n   # Authenticate cloudflared with your account\n   cloudflared tunnel login\n\n   # Option 1: Set API token in config file\n   moley config set --cloudflare.token=\"your-api-token\"\n\n   # Option 2: Use environment variable (recommended for CI/CD)\n   export MOLEY_CLOUDFLARE_TOKEN=\"your-api-token\"\n   ```\n\n2. **Initialize your project**\n   ```bash\n   moley tunnel init\n   ```\n\n3. **Configure your apps**\n   ```bash\n   # Option 1: Edit the generated moley.yml file\n   # Option 2: Use environment variables (great for containers/CI)\n   export MOLEY_TUNNEL_INGRESS_ZONE=\"yourdomain.com\"\n   export MOLEY_TUNNEL_INGRESS_APPS_0_TARGET_PORT=\"8080\"\n   export MOLEY_TUNNEL_INGRESS_APPS_0_EXPOSE_SUBDOMAIN=\"api\"\n   ```\n\n4. **Start tunneling**\n   ```bash\n   # Foreground mode\n   moley tunnel run\n\n   # Background mode\n   moley tunnel run --detach\n\n   # Or run with everything configured via environment variables\n   MOLEY_CLOUDFLARE_TOKEN=\"token\" MOLEY_TUNNEL_INGRESS_ZONE=\"yourdomain.com\" moley tunnel run\n   ```\n\nYour app is now accessible at `https://api.yourdomain.com`! 🎉\n\n\u003e 💡 **Pro tip**: Environment variables take precedence over config files and are perfect for CI/CD, Docker containers, and keeping secrets secure.\n\n## 📚 Documentation\n\nFor complete documentation including configuration options, troubleshooting, and advanced usage, visit our [documentation site](https://stupside.github.io/moley).\n\n### Quick Links\n\n- 📖 **[Installation Guide](https://stupside.github.io/moley/docs/installation/)** - Detailed installation instructions\n- ⚡ **[Quick Start](https://stupside.github.io/moley/docs/quick-start/)** - Get up and running in minutes\n- ⚙️ **[Configuration](https://stupside.github.io/moley/docs/configuration/)** - Advanced configuration options\n- 🔧 **[Troubleshooting](https://stupside.github.io/moley/docs/troubleshooting/)** - Common issues and solutions\n\n## 🛠️ Development\n\n### Prerequisites\n\n- Go 1.23+\n- [Cloudflared](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/) installed\n\n### Building from Source\n\n```bash\ngit clone https://github.com/stupside/moley.git\ncd moley\ngo mod download\ngo build -o moley .\n```\n\n### Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🙏 Acknowledgments\n\n- [Cloudflare](https://cloudflare.com) for providing the tunnel infrastructure\n- [Cloudflared](https://github.com/cloudflare/cloudflared) team for the tunnel client\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstupside%2Fmoley","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstupside%2Fmoley","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstupside%2Fmoley/lists"}