Chute iOS Release Note
Version 1.2.0 (351)
New Features:
- Added the web console's address to the Control Panel: the Web UI row shows the host, and tapping it offers Open, Copy Address and Copy Access Token — Open carries the token in the URL, so it signs in without typing it
- Added a Runtime Diagnostic Bundle as the last row of the Control Panel's LOCAL PROXY section: the running engine builds a redacted archive (configuration, health snapshot, this run's events, loaded rules and policies, DNS, traffic and the log shards) and hands it to the share sheet; it needs the tunnel to be connected, but no
external-http-controller - Added an Offline Diagnostic Bundle under Settings → DIAGNOSIS, built by the app with no tunnel running: device and app details, the VPN profile as iOS holds it, a summary of the selected configuration and its parse errors, the three diagnosis pages as text, the redacted head of the configuration, how the previous run ended, the newest session's log tails and any pending crash reports
- Added Share Log to the session view, offering every shard of the session's log
- Added rewrite attribution to the session detail: the POLICY section now names the URL Rewrite, Header Rewrite, Body Rewrite, Map Local, Map Remote or Mock rule that changed a request, beside the rule and policy that routed it
- Added a Network Address Changed notification, replacing Exit IP Changed: it shows this device's own IPv4 and IPv6 on the physical link, one line per family, and marks an IPv4 that sits behind NAT; IPv6 and a routable IPv4 are read locally, and only a NAT-local IPv4 costs a single STUN request
- Added French as a built-in language
- Added a redesigned Wi-Fi upload page in the web console's style, localized in nine languages
- Added Current and History tabs, an inspect view (matched rule, rule source, policy, adapter, DNS source, process, close reason, request and response bodies), a Rules page that shows which rewrite rules have fired, and a Diagnostics page (footprint, CPU, uptime, flows, how the previous run ended, refusal tally, event log, Tailscale snapshot, and ping / DNS / egress / URL-test probes) to the web console, which is now complete in all nine languages
- Added HTTP Control API endpoints:
/api/health,/api/events,/api/tailscale, the/api/diagnostics/probes,/api/connections/export?format=har,/api/diagnostics/bundle, rewrite and MitM host management under/api/rewritesand/api/mitm/hosts,POST /api/rules/matchto dry-run a request against the rule table (both DNS passes reported),GET|PUT /api/loglevelto change the log level and subsystem sections without a reload, andPOST /api/config/validateto check a profile without applying it
Improves:
- The HTTP Control API no longer serves open when the configuration names no
external-http-secret: the engine generates a token, which the Control Panel shows and copies; setexternal-http-secret = noneto keep anonymous access, and a wildcard listen address is no longer treated as loopback - Rule matching is much faster on large lists: RULE-SET and DOMAIN-SET payloads are indexed when downloaded or restored instead of being streamed per connection, and a rule table made only of domain rules is matched through a hashed plan — a 50k-line list goes from about 94 ms to under 2 ms per lookup, at roughly 100 KB of memory per index
- UDP flows are matched once: a flow's decision is remembered for 60 seconds, so repeat datagrams skip both matching passes and the DNS query between them
- Better recovery after a network change: tunnels whose upstream source address no longer exists on any interface are closed instead of hanging apps until the idle timeout, a same-type path change (a cellular reattach) is now noticed, and a path that accepts connections but moves no data is reported as a black hole
- Session logs are written in 8 MB shards (up to eight per run, oldest dropped), each opening with a header that names the run and its start time, so a long session no longer produces one file too large to retrieve; the log viewer loads every shard in order and keeps following the one being written
- The engine keeps a run marker while it runs and, on the next start, reports whether the previous run stopped cleanly or was killed — in the log header,
/api/statusand both diagnostic bundles - HAR export is now built by the engine from the recorded frames, so status codes, timestamps and timings are real, and every entry carries the chosen policy, matched rule and rewrite hits under
_kl; Export as HAR on the Dashboard and the connection detail both use it - Only the three features the purchase page sells require a license — Advanced Server Control, MitM and Traffic Recorder; Protocol Sniffing, Optimus DNS, External Access, HTTP API, Web UI and Purge DNS Cache no longer ask for one
- The Control Panel follows the tunnel: it resets its state when the tunnel stops, re-queries on reconnect, and offers the console address only while the page is actually served
- The configuration editor locks the two listener switches while
allow-wifi-accessis on, since the engine widens both listeners itself, and restores the configured interfaces when the flag is turned off - When Restore IAP Purchase finds nothing, the alert offers View Manual, which opens the cross-platform licensing instructions in the app's language; the purchase notice now says that one purchase covers three iPhone or iPad devices and three Apple TV devices
- The tailnet node list now matches the other lists — inset-grouped, with a No Item row for an empty section — and re-queries node status each time it appears
- At
loglevel = info, a bulk flow that moved at least 1 MiB logs one line at close saying how long it waited on the remote leg and on the app leg - The Diagnosis pages offer Copy only on rows that have something to copy
Bug Fixes:
- Fixed MitM in TUN mode: a host matched by a MitM rule stalled until timeout, so HTTPS Header Rewrite, Body Rewrite, Map Local, Mock and decrypted captures never took effect for app traffic (traffic through the local HTTP/SOCKS5 proxy was unaffected)
- Fixed
allow-wifi-accesshaving no effect: the local HTTP and SOCKS5 listeners stayed on loopback, so nothing on the Wi-Fi could reach them; the flag (and sing-boxallow-lanon import) now widens both listeners, and turning it off rebinds them - Fixed a response Header Rewrite over MitM HTTP/1.1 being recorded as applied while the client received the original header, and never matching a rule written against the full URL
- Fixed Mock Response building its reply from the request header — request line where the status line belongs, request headers carried over, wrong Content-Length — and, on plain HTTP, sending the origin's header in front of it
- Fixed
no-resolveIP rules (IP-CIDR, GEOIP, IP-ASN) skipping a connection made to an IP literal when protocol sniffing had supplied a Host header or a reverse-DNS name for it; a sniffed IP literal no longer matches DOMAIN rules either, so the verdict no longer depends on whether sniffing is on - Fixed RULE-SET payload lines that carry options after the content (
GEOIP,CN,no-resolve,DOMAIN,example.com,force-remote-dns) being dropped or matching nothing, and AND/OR/NOT sub-rules losingno-resolve - Fixed HOSTNAME-TYPE never matching: the record type is now A for a connection dialed over IPv4 and AAAA over IPv6, and the rule editor's placeholder says so
- Fixed a domain routed to a proxy by an AND/OR/NOT rule with a domain sub-rule still being resolved for real by the DNS server, so the DNS answer and the routing decision disagreed
- Fixed a bracketed IPv6 literal in a sniffed Host header (
[2001:db8::1]:8080) being read as the hostname[2001 - Fixed starting the tunnel with a select group set to anything but its first member posting a "policy group switched" notification, and the rebuilds that follow a start tripping the flapping warning; a group with no remembered pick now honours the profile's
default=instead of being forced onto its first member - Fixed the Control Panel freezing the app at 100% CPU with memory climbing when opened after the tunnel had been up for a while
- Fixed HAR export writing wrong status codes and 1970 timestamps, and the connection detail export producing a file no HAR reader could open
- Fixed
[Replica] hide-crashlytics-requestbeing parsed but never applied to captures - Fixed
external-http-controller = *:9090and:::9090— both documented spellings — being rejected, so the controller silently did not start - Fixed
$klne.startURLTest()never triggering a latency test, and a URL test on a policy that does not exist reporting a plausible failure instead of an error - Fixed an occasional crash in the XHTTP transport under load
- Fixed re-serialized HTTP/1.1 responses going out with an empty reason phrase
- Fixed the license screen labelling a tvOS- or Android-issued license as Unknown, and a certificate this app cannot hold as an iOS & macOS & tvOS bundle
- Fixed the dead App Store link on the About screen; Rate now opens the review sheet
- Various stability and performance improvements
Version 1.1.9 (322)
New Features:
- Added XHTTP transport to the policy editor — enable toggle, mode (auto, packet-up, stream-up, stream-one), path, and host — for Trojan, VMess, and VLESS
- Added AEGIS-128L and AEGIS-256 Shadowsocks encryption methods
- Added ECH (Encrypted Client Hello) settings for TLS policies — enable toggle, pinned ECH config (
ech-config), and cover-name override (ech-public-name) - Added client fingerprint (uTLS) per policy, plus a profile-wide default
- Added AmneziaWG protocol support, including a parameter editor for this WireGuard variant with traffic obfuscation
- Added Clash and sing-box profile import from subscription URLs, files, and Wi-Fi uploads
- Added a configuration error report page with copyable contents to replace alerts that block interaction
- Added X25519MLKEM768 post-quantum hybrid key exchange for TLS 1.3
Improves:
- When saving, the policy editor now preserves existing options that are not available for editing (ECH, ALPN, certificate pinning,
test-url,underlying-proxy,udp-relay)
Bug Fixes:
- Fixed a tunnel crash caused by malformed
IP-CIDRrules - Fixed the SSH
idle-timeoutsetting being written under the wrong key and discarded on save - Fixed onboarding rules placing the policy name after
no-resolve, which could break IP-based rules - Various stability and performance improvements
Version 1.1.8 (300)
New Features:
- Added Tailscale as a built-in proxy type: configure a Tailscale account directly in Chute, join a tailnet, and route traffic through Tailscale nodes — no separate client required
- Added Tailscale section editor: enter the auth key securely, verify the connection, list tailnet nodes, and switch exit nodes from within the app
- Added a Tailscale control panel that shows real-time node status (online/offline, IP, last seen) and lets you switch exit nodes on the fly
- Added system notifications for proxy diagnostics, including egress-IP changes and Tailscale connection events, with per-type toggles in settings
- Added the MASQUE proxy type to the policy editor
Improves:
- Improved TUN throughput on iOS
- Improved Tailscale and WireGuard connection stability and throughput
- Improved UDP tunnel stability and the accuracy of traffic statistics
- Improved stability when stopping the VPN, reducing cases where the system terminates the connection abnormally
- Improved language switching reliability
- Sanitized configuration file names to prevent invalid path characters from causing load failures
Bug Fixes:
- Fixed an issue where on-demand rules could become inconsistent between VPN start and stop
- Fixed a rare crash caused by concurrent language switching
- Fixed network-change handling to avoid unnecessary VPN reconnections
- Various stability and performance improvements
Version 1.1.7 (290)
New Features:
- Added JavaScript Scripting system: run custom scripts for request/response modification, DNS resolution, custom rule matching, and scheduled tasks
- Added Body Rewrite: search and replace HTTP request/response body content using regex (with capture group support) or JSONPath expressions
- Added ShadowTLS protocol support
- Added gRPC transport for VMess and VLESS protocols
- Added DNS-over-QUIC (DoQ) and DNS-over-HTTP/3 (DoH3) support
- Added DNS-over-TLS (DoT) support
- Added HTTP Control API and Web UI for monitoring and controlling the proxy runtime
- Added Module system (.sgmodule) for modular configuration management
- Added Proxy Provider for dynamic proxy list updates
- Added Notification Reporting: detects connection failures, proxy unavailability, traffic surges, config update failures, and policy group switches; dispatches events for system notifications
- Added Mock Response: return mock data to matched requests without reaching the real server
- Added LoadBalance policy group with round-robin, consistent-hashing, and sticky-sessions strategies
- Added URL Rewrite new modes: reject-200, reject-img, reject-dict
- Added Header Rewrite response direction support
- Added PROTOCOL rule type with 10 protocol type values
- Added SCRIPT rule type for JavaScript-based custom matching
- Added extended-matching and requires-resolve options for rules
- Added AnyTLS multi-layer padding scheme
- Added SS2022 encryption methods (2022-blake3-aes-128/256-gcm, chacha20-poly1305)
- Added Managed Configuration support
- Added Replica support for configuration replication
- Added WireGuard configuration UI
- Added interrupt-exist-connections global option
Improves:
- Policy groups now support expected-status, hidden, idle-timeout, and lazy options
- Enhanced URL Rewrite with template variable support in Map Local format
- Improved DNS server with DoQ, DoH3, and DoT protocol support
- Expanded rule system from 6 to 30+ rule types with full coverage
Bug Fixes:
- Fixed IPv6 default value (false → true)
- Fixed log level default value (notify → warning), added none and fatal levels
- Fixed Shadowsocks/ShadowsocksR naming consistency throughout documentation
- Various stability and performance improvements
Version 1.1.6 (256)
New Features:
- Added Hysteria2 protocol support
- Added WireGuard protocol support
- Added VLESS REALITY protocol support
- Added protocol sniffer for TUN traffic
- Added IP-ASN rule support
- Added AND/OR/NOT logical rule support
Bug Fixes:
- Fixed UDP adapter memory issues
- Optimized performance for Rule-Set and Domain-Set matching
- Resolved other minor bugs and stability issues
- Fix license view crash
Version 1.1.5 (245)
New Features:
- Added TUIC protocol support
- Added Shadowsocks 2022 (SS2022) support
- Introduced tunnel configuration
- Improved log display in session
Bug Fixes:
- Fixed UDP adapter issue
- Optimized performance for Rule-Set and Domain-Set matching
- Resolved other minor bugs and stability issues
Version 1.1.2 (231)
New Features:
- iOS 26 UI
Bug Fixes:
- Fix DNS IPv6 response for Gemini App
- RULE-SET with comment content support
- Widget center switch button status fix
Version 1.1.1 (218)
New Features:
- AnyTLS Policy support
- Domain-Set support
- Remote Rule-set support
Improves:
- Tunnel rebuild for better performance
- Full-tested UDP tunnel
Bug Fixes:
- Fix memory leaks
Version 1.1.0 (210)
Bug Fixes:
- Fix some bug
Version 1.0.9 (199)
New Features:
- iOS 18 control center switch button
Bug Fixes:
- TUN with IPv6 now redirect to IPv6 tunnel, to fix some service issues
Version 1.0.8 (188)
New Features:
- SSH Policy support
- Add remote dashboard connect
Improves:
- Change TUN network to 198.18.0.0/15 to avoid IPv4 internal address issue
- Some text updated
Bug Fixes:
- Fix DNS issues
Version 1.0.7 (167)
New Features:
- PIP mode
- iCloud sync for configuration files
- Add remote configuration manager tvOS
Bug Fixes:
- Fix Vmess with Websocket
Version 1.0.6 (160)
New Features
- New UI
- Add upload configuration via Wi-Fi
- Add Network Diagnosis & Proxy Diagnosis
- Add reset VPN configuration function
- Add ICMP(Ping) packet support
- Add VPN status check
Improves:
- Improve configuration edit UI/UX
- Update MTU to 4000
Bug Fixes
- Bug fix
- Fix IPv6 TUN setting
Version 1.0.5 (147)
New Features
- Add VLESS protocol support
- Add XTLS support with VLESS
- Add Session Viewer to review proxy sessions and logs
- You can review your UDP connection with Chute Dashboard macOS application
Improves:
- Improve configuration edit
- Improve local DNS server to avoid DNS pollution
- Improve UDP relay
Bug Fixes
- Fix IPv6 display
- Fix DNS server
Version 1.0.4 (143)
New Features
- Support local HTTP/Socks5 proxy server
- Full IPv6 support
- Add
syslibsupport for DNS server
Improves:
- Improve configuration edit
- Add Optimistic DNS switch
- Improve local DNS server
Bug Fixes
- Fix iOS local proxy server address could stop application to access the network
- Fix DNS server
Version 1.0.3 (138)
New Features
- Fake IP to avoid DNS cache poisoning
- Download configuration file from internet or QR code
Bug Fixes
- Fix FINAL rule edit issue
Version 1.0.2 (130)
New Features
- iPad support
- Support for
chute://scheme &x-callback-url - Dashboard action
- iPhone 12 support
- Rebuild DNS server for better performance & stability
Bug Fixes
- Improve TCP stability
- Rebuild TCP lock to improve performance
- Improve UDP stability
- Configuration crash fix
Version 1.0.1 (111)
- Fix WeChat Share Extension failure
- Fix IPv6 Support
- Update HTTP complete check
Version 1.0.0 (101)
- First release