Integrate sing-box proxies into your python applications with ease on any device.
- sing-box auto-install & easy management
- zero dependencies for base functionality
- seamless integration with existing applications
- tuned for best performance and latency in mind
This module supports these sing-box protocols:
- VMess (vmess://)
- VLESS (vless://)
- Shadowsocks (ss://)
- Trojan (trojan://)
- Hysteria2* (hy2://,hysteria2://)
- Hysteria* (hysteria://)
- TUIC* (tuic://)
- WireGuard (wg://)
- SSH (ssh://)
- HTTP/HTTPS (http://,https://)
- SOCKS (socks://,socks4://,socks5://)
- NaiveProxy* (naive+https://)
*: Chaining as a middle proxy not supported, according to the sing-box docs
with pip
pip install singbox2proxy with uv
uv pip install singbox2proxy build from source
git clone https://github.com/nichind/singbox2proxy.git
cd singbox2proxy
pip install -e .Using built-in client powered by curl-cffi or requests
from singbox2proxy import SingBoxProxy
proxy = SingBoxProxy("vless://...")
response = proxy.request("GET", "https://api.ipify.org?format=json")  # IF curl-cffi is installed, it will be used; otherwise, requests will be used.
print(response.status_code, response.text)  # 200, {"ip":"..."}Integrating with your own HTTP client
import requests
from singbox2proxy import SingBoxProxy
proxy = SingBoxProxy("hy2://...")
session = requests.Session()
session.proxies = proxy.proxy_for_requests  # {"http": "http://127.0.0.1:<port>", "https": "http://127.0.0.1:<port>"}
response = session.get("https://api.ipify.org?format=json")
print(response.status_code, response.text)  # 200, {"ip":"..."}Example with aiohttp
from singbox2proxy import SingBoxProxy
import aiohttp
async def main():
    proxy = SingBoxProxy("vmess://...")
    async with aiohttp.ClientSession(proxy=proxy.socks5_proxy_url or proxy.http_proxy_url) as session:
        async with session.get("https://api.ipify.org?format=json") as response:
            print(response.status, await response.text())  # 200, {"ip":"..."}Chained proxies allow you to route your traffic through multiple proxy servers if you'll ever need more privacy or easy restriction bypass. You can chain multiple proxies together by specifying a chain_proxy with a gate SingBoxProxy instance when creating a new SingBoxProxy.
Note
See what protocols can be used as middleman proxies at supported protocols
from singbox2proxy import SingBoxProxy
proxy1 = SingBoxProxy("vmess://...")
proxy2 = SingBoxProxy("vless://...", chain_proxy=proxy1)
response = proxy2.request("GET", "https://api.ipify.org?format=json")
print(response.status_code, response.text)  # 200, {"ip": "<proxy2's IP>"}
# Here, requests made through `proxy2` will first go through `proxy1`, then proxy1 will forward the request to proxy2, and finally proxy2 will send the request to the target server.Create a virtual network interface to route all system traffic through the proxy. This requires root/administrator privileges.
Important
Very experimental, use at your own risk.
# Requires root/admin privileges
proxy = SingBoxProxy("vless://...", tun_enabled=True)
# All system traffic is now routed through the proxy
# Use like a normal VPN connectionAutomatically configure your OS proxy settings. This is a great alternative to TUN mode when you don't have root access.
Note
The system proxy settings will be restored to their original state when the SingBoxProxy instance is closed or goes out of scope, but multiple instances may interfere with each other, may be better to backup your initial settings before using this feature.
# Automatically sets system proxy and restores on exit
with SingBoxProxy("vless://...", set_system_proxy=True) as proxy:
    # Your web browser and other apps will now use the proxy
    print(f"System proxy configured to use {proxy.http_proxy_url}")Note
If the singbox2proxy or sb2p command isn't working in your terminal, use python -m singbox2proxy <command>, uv run -m singbox2proxy <command>, etc. instead.
Start a single proxy:
sb2p "vmess://eyJ2IjoiMiIsInBzIj..."Specify custom ports:
sb2p "ss://..." --http-port 8080 --socks-port False  # Socks disabledTest the proxy connection:
sb2p "trojan://..." --testChain multiple proxies (traffic flows: you -> proxy1 -> proxy2 -> target):
sb2p "vmess://..." "vless://..." "hy2://..." --chainNote
See what protocols can be used as middleman proxies at supported protocols
The first URL becomes the entry point, and the last URL connects to the target server.
Generate configuration without starting:
sb2p "vless://..." --config-onlySave configuration to file:
sb2p "vmess://..." --output-config config.jsonEnable verbose logging:
sb2p "ss://..." --verboseDisable all logging:
sb2p "hy2://..." --quietEnable TUN mode to route all system traffic through the proxy.
# Linux/macOS (requires sudo)
sudo sb2p "vless://..." --tun
# Windows (run as Administrator)
sb2p "vless://..." --tunImportant
Very experimental, use at your own risk.
Automatically configure your OS to use the proxy.
# Set system proxy on start, restore on stop
sb2p "vless://..." --set-system-proxyNote
The system proxy settings will be restored to their original state when the SingBoxProxy instance is closed or goes out of scope, but multiple instances may interfere with each other, may be better to backup your initial settings before using this feature.
I'm not responsible for possible misuse of this software. Please use it in accordance with the law and respect the terms of service of the services you access through proxies.