Chute tvOS Release Note

Version 1.5.1 (90)

New Features:

  • Added proxy chaining to the editors: a policy now offers underlying-proxy for every proxy type, so its connection is dialled through the named policy — stream protocols ride the upstream's stream, Hysteria2, TUIC, MASQUE and XHTTP over HTTP/3 ride its UDP relay, WireGuard and AmneziaWG tunnel through it, and SSH and AnyTLS sessions open over it — and a chain that loops, runs deeper than 16 levels or names a policy that does not exist is refused at load instead of dialling straight out. Every proxy type but Tailscale can be chained, and TUIC, Hysteria2, WireGuard, AmneziaWG and ShadowTLS policies are otherwise written back exactly as they were read
  • Added the group-level upstream: a group editor writes underlying-proxy= once — quoted when the name carries a comma or a space — so every member of that group reaches its server through the one policy named there
  • Added the Front Proxy row under Advanced: it writes global-underlying-proxy, picked from None and the profile's policies and groups, and covers every node that sets no upstream of its own; close-if-proxy-chain-missing has no row and is kept exactly as written
  • Added Download Via to the rule provider and the proxy provider editors: policy= fetches that list through the chosen policy, and None downloads it directly; the proxy provider editor also keeps the provider's underlying-proxy
  • Added UDP over TCP to the Shadowsocks editor: a udp-over-tcp switch and, while it is on, a UoT Version picker (1 or 2; 2 is used when no version is written), so this proxy's UDP rides inside its TCP connections and keeps working through an upstream that carries no UDP. The server has to support UoT, and mihomo uses version 1. A version the picker cannot show is kept as written until you pick another
  • Added the Proxy Chain row to the connection detail: a connection that went through a chain names every hop — Airport/HK-01 → Landing — beside the policy that routed it; the web console's request detail and UDP list show the same path, and HAR export carries it
  • Added relay groups (relay, as in Clash and mihomo): the members are chained in the order written — the first is dialled directly, each later one is reached through the ones before it, and the last connects to the destination. Relay is in the group type picker; a relay group shows Name, Group Type and Hidden, keeps its members in that order and carries its parameters through a save, and fewer than two members with no dynamic source is refused with its own message
  • Added random groups (random, as in Shadowrocket): every connection picks a member at random, UDP only among the members that carry UDP. A random group has no selection to change, so it is left out wherever you pick a group's policy, and the group editor keeps it a random group
  • Added UDP to VMess and VLESS: UDP sent to either used to be refused outright (it followed udp-policy-not-supported-behaviour, REJECT by default); it now travels over one connection per destination, as in mihomo, sing-box and Shadowrocket
  • Added the reason to a provider whose rule set failed to load — a download that never succeeded, or a payload over the size limit — shown in red on its row; such a provider used to look exactly like a working one while every rule naming it matched nothing
  • The editors no longer drop what they cannot show: rules keep the options they have no row for (notification-text, no-resolve, update-interval and the rest), write pre-matching after the policy and only for REJECT, load a SUBNET rule's KEY:value, tell SYSTEM, LAN, provider and URL apart in RULE-SET and can build AND / OR / NOT sub-rules that parse; groups load their declared members, hide the provider a policy-path synthesizes, and keep filters, include-*, default=, interrupt-exist-connections and unknown parameters in their own order; hosts keep the whole server list with #proxy and the comment, show DoH / DoT / DoQ / DoH3 values and gain a Script type; Map Local keeps binary bodies, its data type and its status code, and keeps a Surge-style header whose value contains a colon; Modules keep their #!system_version and other-platform lines
  • Added rows for the settings the editors could not show: DoT / DoQ / DoH3, dedicated direct / proxy-server / fallback DNS, SVCB, encrypted DNS that follows the rules and can skip certificate checks, UDP without relay, proxy-test-url / internet-test-url / test-timeout, MitM HTTP/2 and QUIC blocking with excluded hostnames, the Replica filter mode, the REJECT variants and the built-in PROXY in the policy pickers, dns-failed on FINAL, and IPv6 literals as policy hosts; Header Rewrite gains Replace (Regex), URL Rewrite gains Reject Array and Reject Tiny GIF, Scripts gain the generic type and an event name, and port ranges, HOSTNAME-TYPE, PROTOCOL and the provider formats get placeholders that show what they accept
  • Added tun-included-routes: the listed CIDRs join the tunnel's routes after its default route, so a range that the network interface's own subnet would otherwise take — the system prefers the more specific route — goes through Chute. Entries that would cut the tunnel off (loopback, the tunnel's own subnets, link-local, multicast, broadcast, a prefix length of 0) are refused with the reason logged, private ranges are accepted with a warning, and an edited list applies on a hot reload without restarting the tunnel
  • Added jq to Body Rewrite: http-request-jq and http-response-jq, written in the configuration file, run a real jq program over a JSON body (the Body Rewrite editor on Apple TV does not offer them); an invalid program is reported and its rule skipped, and a non-JSON body, a program that fails or empty output all leave the body untouched
  • Added generic scripts: a type=generic script has no automatic trigger and runs only on demand, over GET /api/scripts and POST /api/scripts/run
  • Added dedicated DNS pools: direct-dns-server resolves the domains a rule sends DIRECT, proxy-dns-server resolves your proxy servers' own hostnames, and fallback-dns-server is asked when the main servers give no answer; each falls back to the global servers
  • Added #proxy / #proxy=<policy> to DNS upstreams, DoQ and DoH3 included: a QUIC resolver rides the policy's UDP relay, a policy that cannot carry UDP skips that server instead of asking it directly, a plain resolver sent through a policy switches to DNS over TCP, and plain tcp:// upstreams are accepted for paths that drop DNS over UDP
  • Added encrypted-dns-follow-outbound-mode, allow-dns-svcb — HTTPS and SVCB questions are answered empty unless it is on — and per-server #h3, #skip-cert-verify, #disable-ipv4, #disable-ipv6 and #disable-qtype=
  • Added more to Local DNS Mapping: a [Host] entry keeps every server it lists and queries them in parallel, maps one domain to several addresses, keys on a rule set (RULE-SET:<url>) and runs a type=dns script for that domain (script:<name>)
  • Added FINAL,<policy>,dns-failed: when a name cannot be resolved, the connection is opened on the FINAL policy with remote resolution instead of being closed
  • Added the REJECT family as real policies — REJECT-DROP, REJECT-NO-DROP, REJECT-TINYGIF, REJECT-IMG, REJECT-DICT, REJECT-ARRAY, REJECT-200 and REJECT-VIDEO — each answering an HTTP request with its documented body, with a host rejected more than 50 times in 30 seconds upgraded to REJECT-DROP
  • Added inline rule sets: [Ruleset Name] sections in the configuration file are referenced as RULE-SET,<name>, including references between them — up to eight deep, with loops refused; the rule provider list shows them and leaves their editing to the configuration file
  • Added DEST-PORT, SRC-PORT and IN-PORT ranges and comparisons (80-81, >=50000, / lists), HOSTNAME-TYPE values IPv4, IPv6, DOMAIN and SIMPLE, and working IN-TYPE, IN-USER and IN-NAME rules, which now match live traffic instead of only a dry run
  • Added MitM controls: decrypt HTTP/2 (h2), block QUIC to decrypted hosts so HTTP/3 cannot step around decryption (auto-quic-block), exclude hosts from decryption, and match the Host List keywords <ipv4-address>, <ipv6-address> and <simple-hostname>
  • Added QUIC routing by domain: the name is read from the client's QUIC Initial, a ClientHello split across several Initials is reassembled, and the flow is held until the name is known, so DOMAIN rules route HTTP/3 connections made to a bare address
  • Added icmp-auto-reply, on by default: a ping inside the tunnel is answered locally, over IPv4 and IPv6, instead of timing out
  • Added import breadth: mihomo GEOSITE and category GEOIP rules expand into rule sets that work, policy-path groups synthesize a provider with update-interval, filters and include lists, mihomo SUB-RULE expands into AND rules, sing-box detour and mihomo dialer-proxy import as chaining, WireGuard allowed-ips is compiled and enforced so a split tunnel no longer swallows every destination, and a policy's interface= / allow-other-interface= pins its connections to one network interface
  • Added script API breadth: $httpAPI calls the engine's own routes without opening a socket, $httpClient honours a policy, read-etc-hosts feeds the hosts file to DNS, and $event.name reports the event that actually fired

Improves:

  • Every string the app shows now exists in all eight languages: eight labels that used to fall back to English, the Tailscale rows among them, are translated, and 88 texts where the app's built-in wording disagreed with its language files now agree
  • Terms now match across the Chute apps: the log's severity filter and its seven badges use the engine's level names, the load-balance labels follow Chute Mac, and Web Console, Traffic Capture, Mock Response, Local DNS Mapping and HTTP Control API are named consistently within each of the eight languages
  • Importing a published profile no longer loses routing: dns-server accepts encrypted DNS URLs, listener lines accept a password, quoted group members survive, sing-box logical rules convert as documented, PASS members are dropped instead of becoming REJECT, and an unsupported protocol or group type warns instead of taking its group down — in imported mihomo profiles, rules that can never match went from most of the list to almost none
  • Rule sets need far less memory: providers download one after another instead of failing outright after the 35th, conversion peaks fell by 62–73%, index connections are capped and released under memory pressure, and a payload too large for Apple TV is refused with the reason shown on its provider's row
  • Resource limits keep an oversized configuration from pushing the tunnel extension past its memory limit: the MitM certificate store, the capture backlog, script size and count, the console's request budget, Tailscale peers and the DNS cache are each capped on Apple TV
  • Latency tests use the right target: a group's test-url and test-timeout, the profile's proxy-test-url and a member's own test-url and expected-status all participate, and a chained node is probed through its chain instead of directly
  • The web console and control API: a rule added at runtime no longer lingers after the same profile is reloaded, and log cursors stay monotonic so polling never skips an entry
  • ShadowTLS now checks the cover site's certificate when sni= is written, as sing-box does; skip-cert-verify=true turns the check off (the option used to be ignored, and no certificate was checked at all), and without sni= the check is skipped with a warning

Bug Fixes:

  • Fixed the configuration list disappearing after an app update: configurations live in the app's Caches folder — the only place tvOS lets an app write, and one the system empties whenever it wants the space back — so an upgrade could leave an empty list with nothing on screen to say why. From this version on, every configuration is also kept in the app's settings storage, which the system does not clear (its text while that text is 256 KB or less, its subscription address and refresh interval always); missing files are written back at launch and when the app returns to the foreground, configurations that kept only an address are downloaded again, and the main screen reports "Restored N configuration(s)." A configuration you delete is forgotten, so it does not come back. It cannot bring back configurations lost before this version first ran, or a configuration over 256 KB that came from no address, and nothing is restored when the tunnel is started from Control Center before the app has ever been opened
  • Fixed SSID settings on Apple TV: opening SSID Suspend threw for any entry that has no SSID (TYPE:, BSSID: or ROUTER:), the list rewrote [SSID Setting] on every visit, and the SSID and subnet editors dropped members they had no row for. The list now shows only the simple "<name>" suspend=true entries and keeps everything else in place, the ssid group editor keeps its members in declaration order with a Match By choice, and saving one of these says the settings are not available on Apple TV and are saved for use on iOS and macOS
  • Fixed editors damaging entries they could not fully display: a [Host] entry with several addresses was cut down to the first one the moment it was opened, a [Script] value holding a comma (a cron 0 8,20 * * *, a JSON argument) was cut short on every save, a [Body Rewrite] line lost its extra regex pairs, a rule, group, host, Map Local or header-rewrite line lost the options it had no row for, and Advanced stripped the spaces inside its list entries on every visit. A profile saved without opening the entry was never affected, which is why this went unnoticed
  • Fixed downloads getting mixed up: each download now goes to its own temporary file, deleted once it has been read and also when the download or the read fails, so a managed refresh no longer reads its first download forever and two addresses with the same suggested name no longer overwrite each other — and a file name suggested by the server can no longer decide where the file is written
  • Fixed the format being decided by the file name: Download From URL and the managed-configuration refresh now judge what an address serves by its body, so a .conf address that serves Clash is converted when it is added and a refresh that finds one leaves the file as it is; the conversion happens before any MANAGED-CONFIG header goes on, a conversion that fails shows its first error, and its notices are counted on screen and written to the log
  • Fixed the Wi-Fi page's upload and download: /up converts Clash and sing-box as /upload does, both save <name>.conf, a name already taken by another configuration is turned down, /download no longer produces .conf.conf and now sends an encoded filename*, and /delete compares names in NFC with an exact match first — so the configuration in use can neither be deleted nor slip past the in-use check through the same name written in another Unicode form
  • Fixed saving over a configuration of the same name happening silently: the editor and Download From URL now ask first, and overwriting the configuration the tunnel is running reloads it
  • Fixed hidden policy groups appearing in the tunnel's group and Global lists; a hidden group that is in use stays, and a Global pointed at a select group is listed, checked and restored by name
  • Fixed the Wi-Fi upload page's QR handover: the chute://tv?url= handover lives inline in the page again, so scanning it brings the Chute iOS app up as the page promises; an iPad hands over as well, because iPadOS reports a desktop browser that the phone-only check missed; and a browser that refuses a custom scheme without a tap now gets an "Open in Chute" button, localized in the page's nine languages
  • Fixed several crashes: in Settings › Sessions, in the configuration editor for a profile that sets loglevel = none, on a session the tunnel had left half-written (which could then never be opened), on every launch after an unexpected reply from the license server, at launch and in View License when a license could not be read, and on every visit to the configuration list when the shared folder held a stray system file. Clearing a field in the settings now really clears it
  • Fixed a due subscription refresh holding up the configuration list and saving edits for up to 30 seconds; the refresh now carries on when its download completes, without holding anything up
  • Fixed crashes caused by two threads changing the same data at once — during a cold launch, while the session log was being read, and while the session list was being refreshed
  • Fixed a restarted tunnel reusing the previous run's first local port and TCP sequence numbers, which a WireGuard peer still holding the old connection answered with resets; the tunnel's TCP stack now seeds itself from the system's random source and picks initial sequence numbers as RFC 6528 describes
  • Fixed XHTTP stalling through the tunnel after the app's first write, so a TLS handshake never finished and an upload sent a single chunk; each write now completes in order, and once more than 1 MB is waiting to upload, the next write waits for it to drain
  • Fixed PROTOCOL,TCP and PROTOCOL,UDP never matching: every inbound now decides its transport, so the usual way to block QUIC with an AND rule works
  • Fixed RULE-SET and DOMAIN-SET inside AND / OR / NOT always evaluating false — which made NOT,((RULE-SET,…)) reject domestic traffic too — and SCRIPT inside a logical rule always evaluating true
  • Fixed RULE-SET,<name>,<policy>,no-resolve losing no-resolve when written by name, GEOIP and IP-ASN UNKNOWN never matching, Map Local's status-code= being ignored over HTTP/2, and a response Header Rewrite over plain HTTP matching only the path, so a pattern written against the full URL could never match
  • Fixed block-quic accepting only one of Surge's values, where every other value meant no QUIC blocking at all
  • Fixed the script API: $klne.getPolicyGroups() and selectPolicy() no longer throw the first time they are used, reloadConfiguration() reloads, getActiveConnections() reports the real host, port and id, closeConnection() closes, and a before-send script with requires-body finally receives the body
  • Fixed [Replica] keyword-filter comparing the whole host name instead of checking that it contains the keyword, so keyword-filter = google did not cover www.google.com
  • Fixed PROCESS-PATH and PROCESS-NAME-REGEX rules being checked on Apple TV against a name that is not a process; like PROCESS-NAME, they work only on macOS and never match here
  • Various stability and performance improvements

Version 1.4 (75)

New Features:

  • Added a Web Console Address row to the Control Panel: it appears once the console's listener is actually up, and opening it shows a QR code whose URL carries the access token — scanning it with a phone signs in without transcribing an address and 32 hex characters with the remote
  • Added an Offline Diagnostic Bundle under Settings, built by the app with no tunnel running: device and app details, the VPN profile as tvOS holds it, a summary of the selected configuration and its parse errors, a network section (reachability, link type, DNS servers, local addresses and interfaces), the redacted head of the configuration, how the previous run ended, the newest session's log shards and any pending crash reports. Since tvOS has no share sheet, the archive is served by a one-shot local HTTP server on an unguessable path and shown as a QR code; the link stops working when the screen closes
  • Added a severity filter to the session log — All, Notify+, Warning+, Fatal — so "show me the warnings" is one click rather than a search typed on an on-screen keyboard; lines the parser cannot classify are never hidden
  • Added rewrite attribution to the session detail: a REWRITES section names the URL Rewrite, Header Rewrite, Body Rewrite or Mock Response rule that changed a request, beside the rule and policy that routed it
  • Added an Allow Wi-Fi Access row to the configuration editor — the key a Surge http-listen = 0.0.0.0:… or a sing-box allow-lan import produces, and a state the editor previously could not display at all; while it is on the two listener rows show On and are locked, because the engine widens both listeners itself
  • Added French as a built-in language, and declared all eight built-in languages to the App Store
  • Added Current and History tabs, an inspect view (matched rule, rule source, policy, adapter, DNS source, 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 — the console is also where a tvOS user downloads a Runtime Diagnostic Bundle or a HAR export, since the TV itself has nowhere to put a file
  • 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/rewrites and /api/mitm/hosts, POST /api/rules/match to dry-run a request against the rule table (both DNS passes reported), GET|PUT /api/loglevel to change the log level and subsystem sections without a reload, and POST /api/config/validate to 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 Web Console Address QR code carries; set external-http-secret = none to 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, 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); the log view takes the newest shards up to one shard's worth instead of reading a whole run into memory, says when older shards were left out, and keeps following the shard being written across a rotation
  • 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/status and 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
  • Only the three features the purchase page sells require a license — Multiple Configurations, Local Proxy Server Control and Traffic Recorder; the HTTP API and Web Console switches, Protocol Sniffing, Optimus DNS, Purge DNS Cache and the Web Console Address row no longer ask for one, and a free user with the tunnel down is told to start it rather than shown a purchase sheet
  • A console bound to a loopback address now says that it opens only on this Apple TV, and what to set instead, rather than offering a QR code that leads nowhere; the access token is no longer printed on a screen the whole room can read
  • The purchase notice now says that one purchase covers three Apple TV devices and three iPhone or iPad devices; when Restore IAP Purchase finds nothing, the alert offers View Manual and presents a QR code for the cross-platform licensing instructions in the app's language
  • 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

Bug Fixes:

  • Fixed MitM in TUN mode: a host matched by a MitM rule stalled until timeout, so HTTPS Header Rewrite, Body Rewrite, Mock Response and decrypted captures never took effect for app traffic (traffic through the local HTTP/SOCKS5 proxy was unaffected)
  • Fixed allow-wifi-access having no effect: the local HTTP and SOCKS5 listeners stayed on loopback, so nothing on the Wi-Fi could reach them; the flag (and sing-box allow-lan on import) now widens both listeners, and turning it off rebinds them
  • Fixed toggling any switch in the Control Panel's second section crashing the app once the Web Console Address row could appear, because the table's row count changed under a per-row reload
  • Fixed the session view showing an arbitrary slice of a run, and a session losing its date after the eighth rotation, once the engine began rotating its log at a fixed size; shards are now ordered by index and the live view no longer freezes at a rotation
  • Fixed the log view reading every shard of a session into memory at once — up to 64 MB of text on an Apple TV — and the severity filter letting a multi-line entry's continuation lines through the filter that hid the entry they belong to
  • 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-resolve IP 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
  • 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 losing no-resolve
  • Fixed HOSTNAME-TYPE never matching: the record type is now A for a connection dialed over IPv4 and AAAA over IPv6. The rule editor's placeholder for it read http | https, which belongs to PROTOCOL, and IN-TYPE's read TCP | UDP; both now say what the rule accepts
  • 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 external-http-controller = *:9090 and :::9090 — both documented spellings — being rejected, so the controller silently did not start
  • Fixed an occasional crash in the XHTTP transport under load
  • Fixed the license screen labelling another product's certificate as a Chute bundle; anything this app cannot legitimately hold now reads Unknown, and the Android label was added
  • Fixed the About screen's Chute iOS QR code pointing at a dead App Store ID, and Rate opening the iOS listing instead of this app's
  • Fixed the layout of the Wi-Fi upload page
  • Corrected the Chinese and Thai names of the rewrite families so that they match the manual and the configuration file's own section names
  • Various stability and performance improvements

Version 1.3 (62)

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 the previously missing Shadowsocks 2022 (SS2022) encryption methods: 2022-blake3-aes-128-gcm, 2022-blake3-aes-256-gcm, and 2022-blake3-chacha20-poly1305
  • 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, a WireGuard variant with traffic obfuscation
  • Added a configuration error report screen with tvOS focus navigation to replace the alert that blocks 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, udp-relay)

Bug Fixes:

  • Fixed a tunnel crash caused by malformed IP-CIDR rules
  • Fixed the SSH idle-timeout and REALITY spiderx settings being written under the wrong keys and discarded on save
  • Fixed a crash when switching languages
  • Fixed display issues affecting on-screen controls
  • Various stability and performance improvements

Version 1.2 (45)

New Features:

  • Added Tailscale as a built-in proxy type: configure a Tailscale account, join a tailnet, and route Apple TV traffic through Tailscale nodes — no separate client required
  • Added a Tailscale control panel that shows real-time node status (online/offline, IP, last seen) and lets you switch exit nodes from the remote
  • Added a full-screen Dashboard and Sessions view with a dark, per-level session log
  • Added a tunnel detail panel for inspecting active tunnels
  • Added the MASQUE proxy type to the policy editor

Improves:

  • Improved TUN throughput on Apple TV
  • Improved Tailscale and WireGuard connection stability and throughput
  • Refined the home-screen focus navigation across lists, the power button, and the About row to feel more predictable
  • Aligned Settings with the iOS layout (removed the Always On entry, Twitter → X, and polished APNs, Rate, and Language rows)
  • Showed the device IP on the home right-side list only when the VPN is off

Bug Fixes:

  • Fixed false "VPN not running" status and stale "Running" labels on the dashboard
  • Fixed focus loss and jumps when opening Dashboard/Sessions and when returning from the Tailscale node list
  • Fixed the Menu button behavior so it dismisses lists and returns focus reliably
  • Fixed session-list footer text to say "long press to delete" instead of "swipe"
  • Various stability and performance improvements

Version 1.0 (35)

  • First release
S. Smart Rabbit LLC © All Rights Reserved            updated 2026-10-01 17:54:51

results matching ""

    No results matching ""