{"id":47802571,"url":"https://github.com/bindreams/hole","last_synced_at":"2026-04-03T17:12:54.734Z","repository":{"id":345799971,"uuid":"1186262185","full_name":"bindreams/hole","owner":"bindreams","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-28T16:21:11.000Z","size":326,"stargazers_count":0,"open_issues_count":11,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-28T16:35:55.555Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bindreams.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-19T12:48:38.000Z","updated_at":"2026-03-28T16:00:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bindreams/hole","commit_stats":null,"previous_names":["bindreams/hole"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/bindreams/hole","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bindreams%2Fhole","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bindreams%2Fhole/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bindreams%2Fhole/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bindreams%2Fhole/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bindreams","download_url":"https://codeload.github.com/bindreams/hole/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bindreams%2Fhole/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31365078,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T15:19:21.178Z","status":"ssl_error","status_checked_at":"2026-04-03T15:19:20.670Z","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":[],"created_at":"2026-04-03T17:12:52.313Z","updated_at":"2026-04-03T17:12:54.723Z","avatar_url":"https://github.com/bindreams.png","language":"Rust","readme":"# Hole\n\nShadowsocks GUI with transparent proxy (TUN), system tray, and v2ray-plugin support for macOS and Windows.\n\n## Features\n\n- **Transparent proxy** via TUN interface — zero config for all apps, including those that ignore system proxy settings\n- **SOCKS5 proxy** on port 4073 for advanced users\n- **DNS leak prevention** — all DNS traffic routed through the tunnel\n- **System tray** — Enable/Disable, Start at Login, Settings, Exit\n- **Server import** — import from shadowsocks client config files (single and multi-server)\n- **v2ray-plugin** support (built from source)\n- **Logging** with daily rotation\n\n## Architecture\n\nSingle-binary design — `hole` serves as both the Tauri GUI and the privileged daemon depending on CLI arguments:\n\n| Mode              | Privilege     | Role                                                        |\n| ----------------- | ------------- | ----------------------------------------------------------- |\n| `hole` (no args)  | User          | Tauri GUI — system tray, settings window, config management |\n| `hole daemon run` | Root / SYSTEM | Privileged helper — TUN, routing, shadowsocks-service       |\n\nCommunication happens over IPC (Unix socket on macOS, named pipe on Windows) using HTTP/1.1 REST (JSON).\n\n## Build\n\nPrerequisites: Rust toolchain, Go toolchain, Node.js (for Tauri CLI and E2E tests).\n\n```sh\n# Build all crates (build.rs automatically builds v2ray-plugin from source\n# and downloads wintun.dll on Windows)\ncargo build --workspace\n\n# Run GUI in dev mode\nnpx tauri dev\n\n# Run all tests\ncargo test --workspace\n```\n\n## Project layout\n\n```\ncrates/\n  common/    hole-common — shared types (protocol, config, import)\n  daemon/    hole-daemon — privileged daemon library\n  gui/       hole-gui    — Tauri app + CLI (binary name: \"hole\")\nexternal/\n  v2ray-plugin/  v2ray-plugin source (git subrepo)\nmsi-installer/  WiX MSI installer (Python project: source, build script, tests)\nui/             Frontend HTML/CSS/JS\nscripts/        Utility scripts\ntests/       E2E test specs (WebDriverIO)\n```\n\n## Testing\n\nUnit tests use the [skuld](https://github.com/bindreams/skuld) framework. Test files are siblings to their source files (`foo.rs` → `foo_tests.rs`).\n\n```sh\ncargo test --workspace           # all unit tests\nnpm run test:e2e                 # E2E tests (requires release build)\n```\n\n## Emergency network reset\n\nIf routing gets into a bad state during development:\n\n```sh\n# macOS\nsudo python scripts/network-reset.py\n\n# Windows (run as Administrator)\npython scripts/network-reset.py\n```\n\n## License\n\nTBD\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbindreams%2Fhole","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbindreams%2Fhole","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbindreams%2Fhole/lists"}