{"id":51068060,"url":"https://github.com/yzfly/litevpn","last_synced_at":"2026-06-23T08:03:47.046Z","repository":{"id":364315086,"uuid":"1267338305","full_name":"yzfly/LiteVPN","owner":"yzfly","description":"Minimal \u0026 lightweight OpenVPN menu bar client for macOS. Coexists with Clash. 极简 macOS OpenVPN 菜单栏客户端, 与 Clash 分流共存","archived":false,"fork":false,"pushed_at":"2026-06-12T13:52:40.000Z","size":936,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-12T15:23:44.807Z","etag":null,"topics":["clash","macos","macos-app","menubar-app","network-extension","openvpn","openvpn-client","swift","swiftui","tunnelkit","vpn","vpn-client"],"latest_commit_sha":null,"homepage":null,"language":"Swift","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/yzfly.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-12T12:57:05.000Z","updated_at":"2026-06-12T13:52:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/yzfly/LiteVPN","commit_stats":null,"previous_names":["yzfly/litevpn"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/yzfly/LiteVPN","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yzfly%2FLiteVPN","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yzfly%2FLiteVPN/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yzfly%2FLiteVPN/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yzfly%2FLiteVPN/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yzfly","download_url":"https://codeload.github.com/yzfly/LiteVPN/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yzfly%2FLiteVPN/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34680621,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-23T02:00:07.161Z","response_time":65,"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":["clash","macos","macos-app","menubar-app","network-extension","openvpn","openvpn-client","swift","swiftui","tunnelkit","vpn","vpn-client"],"created_at":"2026-06-23T08:03:46.166Z","updated_at":"2026-06-23T08:03:47.041Z","avatar_url":"https://github.com/yzfly.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LiteVPN\n\n**English** | [简体中文](README.zh-CN.md)\n\n![macOS 13+](https://img.shields.io/badge/macOS-13%2B-green.svg)\n![Swift](https://img.shields.io/badge/Swift-5-orange.svg)\n![License GPL-3.0](https://img.shields.io/badge/license-GPL--3.0-lightgray.svg)\n\nA minimal, lightweight **OpenVPN menu bar client for macOS** — built as an alternative to the bulky OpenVPN Connect. Instant to open, light on memory, with no account system, no push notifications, and no update popups.\n\n100% Swift, powered by [TunnelKit](https://github.com/partout-io/tunnelkit) — the pure-Swift OpenVPN protocol implementation that drives the open-source client Passepartout.\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"docs/screenshot.png\" width=\"560\" alt=\"LiteVPN — OpenVPN menu bar client for macOS (connected state)\"\u003e\u003c/p\u003e\n\n## Features\n\n- **Lives in the menu bar** (no Dock icon), one-click connect / disconnect\n- **.ovpn import**: drag \u0026 drop onto the panel or use the file picker, validated at import time, multiple profiles\n- **Live status**: connection duration, download / upload traffic\n- **Clash Compatible Mode**: leaves the default route alone so it coexists with Clash TUN / system proxy (see below)\n- **Auto-reconnect** on drops (built into TunnelKit), optional **Launch at Login**\n- Tunnel runs in a separate Network Extension process — quitting the app keeps the connection alive\n- Localized UI: English \u0026 简体中文 (follows system language)\n- Supabase-style light interface\n\nDeliberately minimal: only certificate-embedded profiles (inline `\u003cca\u003e` / `\u003ccert\u003e` / `\u003ckey\u003e`) are supported. No username/password authentication.\n\n## Coexisting with Clash\n\nConflicts between VPN clients and Clash come down to **who owns the routing table**. With Clash Compatible Mode enabled:\n\n- LiteVPN does not take over the default route; it only claims the specific subnets from your profile and server-pushed routes (e.g. `10.0.0.0/8`)\n- Traffic to VPN subnets goes through the OpenVPN tunnel; everything else flows through Clash as usual (TUN mode or system proxy)\n- The routing table arbitrates by longest-prefix match — the two virtual interfaces never fight\n\nRecommended Clash-side configuration:\n\n```yaml\nrules:\n  - IP-CIDR,\u003cyour-vpn-server-ip\u003e/32,DIRECT   # keep the VPN handshake out of the proxy\n```\n\nIf you access intranet services by domain name, add those domains to Clash's `fake-ip-filter`.\n\n## Architecture\n\n```\n┌─────────────────────────┐      ┌──────────────────────────────┐\n│ LiteVPN.app (menu bar)  │      │ LiteVPNTunnel.appex          │\n│ SwiftUI MenuBarExtra    │─────▶│ NEPacketTunnelProvider       │\n│ NetworkExtensionVPN     │ NE   │ └─ TunnelKit OpenVPN engine  │\n│ profiles/status/traffic │◀─────│    (protocol + data channel) │\n└─────────────────────────┘ AppGroup └──────────────────────────┘\n```\n\n- The protocol engine surface is kept deliberately small (tunnel subclass + parser + connection manager), leaving room for a future WireGuard engine\n- TunnelKit v6.3.2 is vendored at `Vendor/tunnelkit/` with WireGuard stripped (upstream is archived and its wireguard-apple dependency repo was deleted, so remote references are no longer reliable) — see [Vendor/tunnelkit/LITEVPN-MODIFICATIONS.md](Vendor/tunnelkit/LITEVPN-MODIFICATIONS.md)\n- The crypto layer is pinned to the OpenSSL **3.5 LTS** line (supported until April 2030) via `.upToNextMinor`, so dependency resolution only picks up 3.5.x patch releases and never drifts onto a short-lived release line\n\n## Building\n\nRequirements: Xcode (full install), [XcodeGen](https://github.com/yonaskolb/XcodeGen) (`brew install xcodegen`), and a paid Apple Developer account (required for the Network Extension capability).\n\n1. **Use your own signing identity** (two places):\n   - `project.yml` → set `DEVELOPMENT_TEAM` to your Team ID\n   - `App/AppConstants.swift` → update the Team ID prefix in `appGroup`\n2. Generate the project and build:\n\n```bash\nxcodegen generate\nopen LiteVPN.xcodeproj   # Run in Xcode; automatic signing creates the profiles\n```\n\nOr from the command line:\n\n```bash\nxcodebuild -project LiteVPN.xcodeproj -scheme LiteVPN \\\n  -allowProvisioningUpdates -allowProvisioningDeviceRegistration build\n```\n\nOn first connect macOS will ask to add a VPN configuration — allow it once.\n\n\u003e **No prebuilt binary is shipped.** A macOS Network Extension app can't be distributed in a form that runs on arbitrary Macs without per-machine signing, so building from source with your own Apple Developer account (about 5 minutes) is the supported path.\n\n## Usage\n\n1. Click the shield icon in the menu bar\n2. Drag in your `.ovpn` file (or click \"+ Import\")\n3. Hit **Connect**\n\n## Credits\n\n- [TunnelKit](https://github.com/partout-io/tunnelkit) by Davide De Rosa — OpenVPN protocol engine\n- [OpenSSL](https://github.com/partout-io/openssl-apple) — crypto layer (3.5 LTS)\n\n## License\n\n[GPL-3.0](LICENSE) (inherited from the TunnelKit engine).\n\n## Author\n\n云中江树 (yzfly) · WeChat Official Account: 云中江树\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyzfly%2Flitevpn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyzfly%2Flitevpn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyzfly%2Flitevpn/lists"}