{"id":45454557,"url":"https://github.com/udayasri0/v2link-client","last_synced_at":"2026-03-02T20:02:05.588Z","repository":{"id":336793587,"uuid":"1150784685","full_name":"UdayaSri0/v2link-client","owner":"UdayaSri0","description":"Linux vless:// client with ping/speed test, live traffic metrics, system proxy toggle, and built-in diagnostics (PyQt6 + Xray-core).","archived":false,"fork":false,"pushed_at":"2026-02-28T16:08:40.000Z","size":462,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-28T19:21:53.127Z","etag":null,"topics":["diagnostics","linux-app","linux-gui","networking-tools","open-source-project","proxy","pyqt6-desktop-application","python","v2ray","vless","xray-core"],"latest_commit_sha":null,"homepage":"","language":"Python","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/UdayaSri0.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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-02-05T17:28:24.000Z","updated_at":"2026-02-28T15:50:33.000Z","dependencies_parsed_at":"2026-02-28T18:01:51.788Z","dependency_job_id":null,"html_url":"https://github.com/UdayaSri0/v2link-client","commit_stats":null,"previous_names":["udayasri0/v2link-client"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/UdayaSri0/v2link-client","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UdayaSri0%2Fv2link-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UdayaSri0%2Fv2link-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UdayaSri0%2Fv2link-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UdayaSri0%2Fv2link-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/UdayaSri0","download_url":"https://codeload.github.com/UdayaSri0/v2link-client/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UdayaSri0%2Fv2link-client/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30018507,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-02T17:00:27.440Z","status":"ssl_error","status_checked_at":"2026-03-02T17:00:03.402Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["diagnostics","linux-app","linux-gui","networking-tools","open-source-project","proxy","pyqt6-desktop-application","python","v2ray","vless","xray-core"],"created_at":"2026-02-22T06:02:25.272Z","updated_at":"2026-03-02T20:02:05.571Z","avatar_url":"https://github.com/UdayaSri0.png","language":"Python","readme":"# v2link-client\n\nLinux desktop client for V2Ray-style links built with Python 3.11+ and PyQt6.\n\nCurrent status: **early beta** — the app currently supports **`vless://`** links (a useful subset) and runs **Xray-core** under the hood.\n\n## Screenshots\n\n\u003cp\u003e\n  \u003cimg src=\"images/app-dark.png\" width=\"900\" alt=\"v2link-client (Dark)\" /\u003e\n\u003c/p\u003e\n\n\u003cp\u003e\n  \u003cimg src=\"images/app-light.png\" width=\"900\" alt=\"v2link-client (Light)\" /\u003e\n\u003c/p\u003e\n\n## Features\n\n- Paste a `vless://` link → validate → start/stop the core\n- Save multiple VPN URLs as named profiles (favorite/default supported)\n- Profile dropdown + manager dialog (add/edit/delete/duplicate/set default)\n- Ping server (TCP/TLS) + built-in speed test (through the tunnel)\n- Live session metrics: uptime, upload/download speed, total traffic used\n- Local proxy inbounds:\n  - SOCKS5 on `127.0.0.1:\u003cport\u003e`\n  - HTTP proxy on `127.0.0.1:\u003cport\u003e`\n- Connectivity indicator: `CONNECTING` / `ONLINE` / `DEGRADED` / `OFFLINE`\n- Built-in diagnostics and log access\n- About dialog (Help -\u003e About)\n- Light/Dark theme toggle (saved to your profile)\n\n## Requirements (runtime)\n\n- Linux desktop (GNOME/KDE/etc.)\n- **Xray-core** available in your `PATH` (`xray version` should work)\n\n## Installation (download release)\n\n1) Open GitHub Releases and download the latest `*.AppImage` file.\n\n2) Make it executable and run it:\n\n```bash\nchmod +x v2link-client-*.AppImage\n./v2link-client-*.AppImage\n```\n\n3) (Optional) Add launcher entry:\n\n```bash\nmkdir -p ~/.local/bin\ncp v2link-client-*.AppImage ~/.local/bin/v2link-client.AppImage\nchmod +x ~/.local/bin/v2link-client.AppImage\n```\n\nCreate `~/.local/share/applications/v2link-client.desktop`:\n\n```ini\n[Desktop Entry]\nName=v2link-client\nExec=/home/YOUR_USER/.local/bin/v2link-client.AppImage\nIcon=v2link-client\nType=Application\nCategories=Network;\nTerminal=false\n```\n\nReplace `YOUR_USER` with your Linux username.\n\nIf `xray version` fails, install Xray-core first and re-run the app.\n\n## Installation (run from source)\n\n1) Install system packages (Ubuntu/Debian):\n\n```bash\nsudo apt update\nsudo apt install -y python3-venv python3-pip\n```\n\n2) Install Xray-core:\n\n```bash\nxray version\n```\n\nIf that command fails, install `xray` using your distro’s package manager or from the upstream project and make sure it’s on your `PATH`.\n\n3) Create a virtual environment and install Python dependencies:\n\n```bash\npython3 -m venv .venv\nsource .venv/bin/activate\npython -m pip install --upgrade pip\npip install -r requirements.txt\n```\n\n4) Run the app:\n\n```bash\n./scripts/dev_run.sh\n```\n\n## Release process (maintainers)\n\nBuild artifacts locally:\n\n```bash\n./scripts/build_release.sh\n```\n\nOutputs are written to `dist/`:\n- `v2link-client-\u003cversion\u003e-linux-\u003carch\u003e.AppImage`\n- `SHA256SUMS`\n\nPublish on GitHub:\n\n```bash\ngit tag v0.1.0\ngit push origin v0.1.0\n```\n\nTag pushes matching `v*` trigger `.github/workflows/release.yml`, which builds the AppImage and uploads assets to the GitHub Release automatically.\n\n## Usage\n\n1) Paste your `vless://` link.\n2) Click **Validate \u0026 Save**.\n3) Click **Start**.\n4) To proxy the whole system, enable **System Proxy** (recommended).  \n   If you prefer manual setup, configure your browser/app to use the proxy:\n   - Click **Copy manual proxy settings** in the app and paste them where needed.\n\nNotes:\n- The app defaults to SOCKS5 `127.0.0.1:1080` and HTTP `127.0.0.1:8080`, but will pick free ports if those are busy.\n- The selected theme is saved in your profile and restored on next launch.\n- System proxy auto-apply currently targets GNOME/libproxy via `gsettings`. Other desktops may require manual proxy setup.\n\n## Saved Profiles (URLs)\n\nSaved Profiles let you store multiple VPN share links and quickly reuse them.\n\n- Create a profile:\n  - Paste a URL, click **Validate \u0026 Save**, then enter a profile name and save.\n  - If the URL already exists, the app offers **Update Profile** or **Save as New**.\n- Switch profiles:\n  - Use the **Profile** dropdown to load any saved profile URL into the input field.\n- Manage profiles:\n  - Click **Manage** next to the profile dropdown.\n  - From Profile Manager you can Add/Edit/Delete profiles, Set Default, Duplicate, and toggle Favorite.\n- Default profile:\n  - The default profile is auto-selected on app start and its URL is loaded automatically.\n- Storage location:\n  - `profiles.json` is stored at `$XDG_CONFIG_HOME/v2link-client/profiles.json`.\n  - If `XDG_CONFIG_HOME` is unset, fallback is `~/.config/v2link-client/profiles.json`.\n- Migration:\n  - On first launch after upgrading, an older single saved URL (from `profile.json`) is auto-imported as an `Imported Profile` and set as default.\n\n## Supported link subset (today)\n\n`vless://` with:\n- `security=tls` or `security=none`\n- transports: `type=tcp`, `type=ws`, `type=grpc`\n- optional: `sni`, `fp` (fingerprint), `alpn`, `allowInsecure`, `flow`\n- TCP `headerType=none` (and limited support for `headerType=http`)\n\nNot supported yet:\n- `vmess://`, `trojan://`, `ss://`\n- REALITY, advanced XTLS options, complex routing rules\n\n## Logs \u0026 data locations\n\n- Saved profiles: `$XDG_CONFIG_HOME/v2link-client/profiles.json` (fallback `~/.config/v2link-client/profiles.json`)\n- UI preferences + legacy compatibility: `~/.config/v2link-client/profile.json`\n- State + generated core config: `~/.local/state/v2link-client/`\n- Logs: `~/.local/state/v2link-client/logs/`\n  - `app.log` (app logs)\n  - `xray_access.log`, `xray_error.log`, `xray_stdout.log`\n\n## Troubleshooting\n\n### Connectivity shows OFFLINE / SSL EOF errors\n\nThis usually means the tunnel is not working end-to-end (server down/blocked, wrong TLS/SNI, etc.).\n\nCommon cause: the link sets an `sni=...` that does not match the server certificate **while** `allowInsecure=0`.\nIn that case, TLS verification fails and the proxy tunnel may drop during handshake.\n\nWhat to try:\n- Remove `sni` or set it to the server host (or set `allowInsecure=1` if you understand the risk).\n- Check the logs via **Open logs folder**.\n\n### Qt fails with \"Could not load the Qt platform plugin xcb\"\n\nIf startup fails with messages mentioning `xcb` and `libxcb-cursor`, install the missing runtime dependency:\n\n```bash\nsudo apt update\nsudo apt install -y libxcb-cursor0\n```\n\nThen run the app again.\n\n## Development\n\nDeveloper deps:\n\n```bash\nsource .venv/bin/activate\npip install -r requirements-dev.txt\n```\n\nRun tests:\n\n```bash\nPYTHONPATH=src python -m pytest -q\n```\n\n## Author\n\nUdaya Sri\n\n## License\n\nMIT License\n\nCopyright (c) 2026 Udaya Sri\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fudayasri0%2Fv2link-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fudayasri0%2Fv2link-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fudayasri0%2Fv2link-client/lists"}