hawkff/NekoBoxForAndroid

NekoBox for Android / sing-box / universal proxy toolchain for Android

★ 1Forks 0KotlinGitHub ↗Compare

README

🐱 NekoBox for Android 🐱

One app, every modern proxy. Built on sing-box.

API License


⚠️ Disclaimer

This project is intended solely for technical research and code learning purposes and does not provide any form of network proxy service. Please do not use this project for any activity that violates local laws and regulations, and do not use it in production environments. Users are fully responsible for any risks that may arise from using this project. If you download or reference this project, please delete all related content within 24 hours and avoid long-term storage, distribution, or dissemination of any part of it. The author reserves the right to modify, update, or remove any part of this project or its contents at any time without prior notice.


📥 Downloads

🛑 Note: The Google Play build has been controlled by a third party since May 2024 and is closed-source. Please don't install it.

Grab the latest signed APK from the Releases page.


🚀 Protocols

🧩 Core

SOCKS 4/4a/5 · HTTP(S) · SSH · Shadowsocks · ShadowsocksR · VMess · VLESS · Trojan

🔐 Modern TLS & multiplexing

AnyTLS · ShadowTLS · Snell 1–5 · VLESS-XHTTP · VLESS-Reality

XHTTP / Reality config examples are below.

⚡ QUIC & high-speed

TUIC 5 · Juicity · Hysteria 2

The Hysteria 2 client supports Salamander and Gecko obfuscation.

🛡️ WireGuard family

WireGuard · AmneziaWG

🌐 Obfuscated transports

  • NaïveProxy (Bundled)
  • Mieru (Bundled)
🕰️ Legacy protocols (kept for compatibility)
  • Hysteria 1 - native over UDP; an external sidecar covers the rare faketcp transport

XHTTP - TLS configuration example

{
    "no_grpc_header": false,  // stream-up/one
	"x_padding_bytes": "100-10000",
	"sc_max_each_post_bytes": 1000000, // packet-up only
	"sc_min_posts_interval_ms": 30, // packet-up only
	"xmux": {
		"max_concurrency": "16-32",
		"max_connections": "0-0",
		"c_max_reuse_times": "0-0",
		"h_max_request_times": "600-900",
		"h_max_reusable_secs": "1800-3000",
		"h_keep_alive_period": 0
	},
    "x_padding_obfs_mode": false,
    "x_padding_key": "",
    "x_padding_header": "",
    "x_padding_placement": "",
    "x_padding_method": "",
    "uplink_http_method": "",
    "session_placement": "",
    "session_key": "",
    "seq_placement": "",
    "seq_key": "",
    "uplink_data_placement": "",
    "uplink_data_key": "",
    "uplink_chunk_size": 0,
	"download": {
		"mode": "auto",
		"host": "b.yourdomain.com",
		"path": "/xhttp",
        "no_grpc_header": false,  // stream-up/one
	    "x_padding_bytes": "100-10000",
	    "sc_max_each_post_bytes": 1000000, // packet-up only
	    "sc_min_posts_interval_ms": 30, // packet-up only
		"xmux": {
			"max_concurrency": "16-32",
			"max_connections": "0-0",
			"c_max_reuse_times": "0-0",
			"h_max_request_times": "600-900",
			"h_max_reusable_secs": "1800-3000",
			"h_keep_alive_period": 0
		},
        "x_padding_obfs_mode": false,
        "x_padding_key": "",
        "x_padding_header": "",
        "x_padding_placement": "",
        "x_padding_method": "",
        "uplink_http_method": "",
        "session_placement": "",
        "session_key": "",
        "seq_placement": "",
        "seq_key": "",
        "uplink_data_placement": "",
        "uplink_data_key": "",
        "uplink_chunk_size": 0,
		"server": "$(ip_or_domain_of_your_cdn)",
		"server_port": 443,
		"tls": {
			"enabled": true,
			"server_name": "b.yourdomain.com",
			"alpn": "h2",
			"utls": {
				"enabled": true,
				"fingerprint": "chrome"
			}
		}
	}
}
XHTTP - Reality configuration example

{
    "no_grpc_header": false,  // stream-up/one
	"x_padding_bytes": "100-10000",
	"sc_max_each_post_bytes": 1000000, // packet-up only
	"sc_min_posts_interval_ms": 30, // packet-up only
	"xmux": {
		"max_concurrency": "16-32",
		"max_connections": "0-0",
		"c_max_reuse_times": "0-0",
		"h_max_request_times": "600-900",
		"h_max_reusable_secs": "1800-3000",
		"h_keep_alive_period": 0
	},
    "x_padding_obfs_mode": false,
    "x_padding_key": "",
    "x_padding_header": "",
    "x_padding_placement": "",
    "x_padding_method": "",
    "uplink_http_method": "",
    "session_placement": "",
    "session_key": "",
    "seq_placement": "",
    "seq_key": "",
    "uplink_data_placement": "",
    "uplink_data_key": "",
    "uplink_chunk_size": 0,
	"download": {
		"mode": "auto",
		"host": "example.com",
		"path": "/xhttp",
        "no_grpc_header": false,  // stream-up/one
	    "x_padding_bytes": "100-10000",
	    "sc_max_each_post_bytes": 1000000, // packet-up only
	    "sc_min_posts_interval_ms": 30, // packet-up only
		"xmux": {
			"max_concurrency": "16-32",
			"max_connections": "0-0",
			"c_max_reuse_times": "0-0",
			"h_max_request_times": "600-900",
			"h_max_reusable_secs": "1800-3000",
			"h_keep_alive_period": 0
		},
        "x_padding_obfs_mode": false,
        "x_padding_key": "",
        "x_padding_header": "",
        "x_padding_placement": "",
        "x_padding_method": "",
        "uplink_http_method": "",
        "session_placement": "",
        "session_key": "",
        "seq_placement": "",
        "seq_key": "",
        "uplink_data_placement": "",
        "uplink_data_key": "",
        "uplink_chunk_size": 0,
		"server": "$(ip_or_domain_of_your_cdn)",
		"server_port": 443,
		"tls": {
			"enabled": true,
			"server_name": "example.com",
			"reality": {
				"enabled": true,
				"public_key": "$(your_publicKey)",
				"short_id": "$(your_shortId)"
			},
			"utls": {
				"enabled": true,
				"fingerprint": "chrome"
			}
		}
	}
}

🔗 Subscriptions

Imports the common formats: Shadowsocks, ClashMeta, v2rayN, and sing-box outbounds. Only nodes are parsed; routing rules and other non-node fields are ignored.

Provider metadata

The app reads these keys from response headers or from #key: value lines at the top of the body. Headers win, and a fetch that omits a key clears it.

Key Effect
profile-title Group name (plain or base64: prefixed)
subscription-userinfo Traffic and expire= shown on the group; a reminder is posted daily during the last three days and once after expiry
support-url, profile-web-page-url Menu entries on the group (http and https links only)
announce Text shown on the group, up to 200 characters, plain or base64: prefixed
profile-update-interval Auto-update interval in hours, applied when the provider changes it; your own edits stay in between
routing An sn://routing/ link, see below; the subscription stores it and refreshes only the profile it delivered, never activates it and never touches your own profiles

Routing profile links

sn://routing/<base64> carries an exported routing profile (Route → Routing profiles → Export to clipboard). Opening the link, pasting it into Routing profiles → Import from Clipboard, or delivering it through the routing subscription key imports the profile. A profile with the same name is replaced; the active profile is applied live when refreshed.


Credits

Core:

Android GUI:

Web Dashboard:

Contributors

Contributors

Contributors

arm64v8ahawkffstariflypurofleMisaka-blogxchacha20-poly1305coderabbitai[bot]NeroBlackstoneturikhaymak7im01enfeinRestia-AshbellmehrazinoddzzkunyeKimmyXYCzizzdogxymopenChocolate4UcancanneednewsSodaWithoutSparklesNanamiNakanoKittyskjKiteABHnDK0dou23Erspitmaskedeken

Issues