Sloth Clash

Sloth ClashClash Meta (Mihomo) desktop client — Windows · macOS · Linux

🦥 latest: v0.9.2 · 03 Sep 2026

Downloads

Verify downloads against SHA256SUMS (minisign-signed: .minisig).

Install via package manager (auto-updates)

Debian / Ubuntu

curl -fsSL https://nemu-x.github.io/SlothClash/apt/key.gpg | sudo tee /usr/share/keyrings/slothclash.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/slothclash.gpg] https://nemu-x.github.io/SlothClash/apt ./" | sudo tee /etc/apt/sources.list.d/slothclash.list
sudo apt update && sudo apt install sloth-clash

Fedora / openSUSE

sudo dnf config-manager --add-repo https://nemu-x.github.io/SlothClash/rpm/slothclash.repo
sudo dnf install sloth-clash

Arch Linux (AUR)

yay -S sloth-clash-bin      # or: paru -S sloth-clash-bin

Or a one-off install without an AUR helper: sudo pacman -U https://github.com/Nemu-x/SlothClash/releases/latest/download/sloth-clash-linux-amd64.pkg.tar.zst

Releases

🦥 SlothClash v0.9.203 Sep 2026

> ℹ️ You may be asked once to reinstall the helper service after this update. The privileged service only spawns cores whose hash it has pinned, and the core changed — on Windows the installer re-pins it silently, on macOS/Linux click the banner and accept the prompt.

✨ JavaScript config override — the escape hatch the other editors can't cover

  • A profile can now carry a function main(config, ctx) that rewrites its generated configuration before the core sees it. It is for everything the extend-config / proxy-groups / rules editors cannot express, because they are declarative and this is not: rename every node matching a pattern, build one group per country, drop nodes by name, apply a tweak only in TUN mode. Open it from a profile's context menu → Script (JS).
  • Preview before you apply. The preview runs your script through the real generation pipeline twice — with and without it — and shows a side-by-side diff of the two configs plus anything you console.log. It writes nothing and does not touch the running connection, so it is safe to press while connected.
  • A broken script can never break your VPN. Syntax error, thrown exception, endless loop, a value that cannot be written to the config — the script's output is discarded, the configuration is generated exactly as it would have been without a script, and the reason (with line and column) is shown in the editor and badged on the profile. Connecting still works.
  • A script cannot cut the app off from its own core. The proxy port, the controller endpoint and its secret, and the corporate-VPN split are re-applied after your script runs. Everything else — DNS, TUN, sniffer, rules, proxies, groups — is yours.
  • Scripts run in a sandboxed interpreter with no filesystem, network, process or timer access, a fresh state on every run, a 3-second limit and a bounded output buffer. A script can only ever come from your own editor: a subscription, a provider header, a share link or an imported profile can never set one. Full API reference: docs/SCRIPT_OVERRIDE.md.

🐛 Sites felt slower than they should — dead IPv6 addresses handed to apps, fixed

  • On profiles whose TUN section excludes the private IPv6 range (fc00::/7 — a very common default), the IPv6 addresses we handed out for every domain had no route into the tunnel. Apps still tried them first: the browser burned a full connection timeout on the IPv6 attempt of every dual-stack site before falling back to IPv4, which showed up as pages (YouTube, Google Fonts and friends) taking seconds to pull assets, with nothing in the logs. Measured: curl -6 hung for 21 s where curl -4 finished in 0.27 s. We now drop the IPv6 fake-address pool whenever the profile's own routing rules would leave it unreachable, so apps go straight to the working path. IPv6 itself stays enabled and still travels inside the tunnel — nothing leaks.

🐛 A broken dns: section in a hand-edited profile was silently swallowed

  • If a profile's DNS section was malformed (a list where a mapping belongs, typically from a hand-edited merge template), the pre-launch check quietly replaced it with defaults instead of telling you the core had rejected it. The real error is now surfaced.
  • Mihomo core updated to v1.19.30. Brings a security fix in the core's Go TLS stack (CVE-2026-56862) and a TUN fix where hijacked DNS replies could be sent zero-filled or stale. New protocol coverage lands with it: ZeroTier outbound, AmneziaWG 3.0/3.1, an ip-stack option for WireGuard/OpenVPN/MASQUE/ZeroTier, H2C and QUICv2 sniffing, handshake-timeout for Hysteria2, client-metadata for AnyTLS and rate-limit for the restls listener. Config generation and the runtime pipeline were verified against the new core.

What's Changed

Full Changelog: https://github.com/Nemu-x/SlothClash/compare/v0.9.1...v0.9.2

🦥 SlothClash v0.9.108 Aug 2026

🐛 Auto-connect on startup could hang on "connecting" — fixed

  • With Auto-connect on startup enabled, the connection could get stuck on "connecting" after launch. A background startup task claimed a connect "generation" *after* the auto-connect had already fired, which aborted the auto-connect's attempt and left the status hanging. The startup ordering is fixed so auto-connect — and a fast manual Connect — can no longer be superseded that way, and auto-connect now waits for the background boot to settle before firing and retries only on a real failure. (Auto-connect is off by default; only users who enabled it were affected.)

What's Changed

Full Changelog: https://github.com/Nemu-x/SlothClash/compare/v0.9.0...v0.9.1

🦥 SlothClash v0.9.008 Aug 2026

> ⚠️ After updating you'll be asked once to reinstall the helper service (this release needs helper service 2.5.0, which powers the new Corporate VPN and the latest fixes). Click the banner, accept the UAC prompt — it won't come back.

🏢 Corporate VPN (OpenConnect) alongside your tunnel — new

  • A new opt-in Corporate VPN tab runs a corporate SSL-VPN (Cisco AnyConnect protocol, via bundled OpenConnect) at the same time as your regular tunnel — split-tunnel: your company's subnets go through the corporate VPN, everything else keeps flowing through SlothClash. Dead-simple login (server + username), remembers your server and username (never the password), and trusts the gateway certificate once. Works on Windows (bundled TAP driver, installed on demand) and macOS. Turn it on in Settings → Experimental.

🛡️ IPv6 leak closed

  • With TUN active, blocked sites could still leak over your real IPv6 connection — the tunnel only captured IPv4, so a site could quietly load over IPv6 outside the VPN (invisible until your network actually had working IPv6). IPv6 is now routed through the tunnel by default, so nothing leaks. You can still turn it off in Settings → Connection ("Enable IPv6") if your network's IPv6 is broken.

🚀 Auto-connect on startup (opt-in) — reliable on a cold boot

  • A new "Auto-connect on startup" switch brings the VPN up automatically when the app launches. On a cold boot it now waits for the privileged helper service to be ready and retries, instead of firing once too early and silently not connecting ("launched but the adapter never came up").

🐛 Switching Proxy ↔ TUN no longer strands you

  • If applying a traffic-mode switch to the running core fails, the app now rolls back to the previous mode (and restores the system proxy) instead of leaving you with no working connection.

🩹 Clearer TUN adapter errors

  • When the TUN adapter can't be created, the message now matches what actually happened — e.g. if the helper service is too old to clear a leftover adapter, it points you to the "Update service" banner instead of promising a fix that can't run.

🔒 Lock the proxy port

  • The local mixed-port is random by default (a fresh free port each start, which avoids collisions but changes on reconnect / subscription switch). New "Lock proxy port" switch in Settings → Connection pins it to a fixed value, so apps you point at 127.0.0.1:<port> manually keep working. If the pinned port is busy, we fall back to a random one for that session and note it in diagnostics.

🔁 Rule toggles apply to live traffic immediately

  • Enabling/disabling a rule (or editing rules) now closes existing connections after the reload, so the change takes effect on already-open sockets (e.g. a browser's) instead of only new ones — no more toggling the VPN off and on to make it stick.

🎨 Proxy group icons

  • Proxy groups now show the icon from your subscription (as many providers set) next to the group name. Broken image URLs are hidden gracefully; emoji icons are supported too.

🐛 Rules can target a proxy node directly

  • A rule whose policy is an individual proxy (not a group), e.g. IP-CIDR,…,HK-FL-Mieru, no longer fails validation with *"references unknown policy"*. mihomo accepts it, so we do too now.

🐛 First Connect after launch is reliable

  • Fixed a startup race where the first Connect could race the background core warm-up and show green while traffic didn't route (a reconnect fixed it). Connect now waits for the warm-up to settle and the warm-up steps aside once you hit Connect.

🛡️ A crash in one screen no longer blanks the whole app

  • Each screen is wrapped in an error boundary: if a page hits a render error, it shows a recoverable message (with a copyable error and a reload button) while the sidebar stays usable, instead of leaving a blank window.

🐛 Update button on macOS/Linux opens the release page

  • The "update available" action on non-Windows no longer tries to download the Windows installer (on an Apple-silicon Mac it was grabbing the arm64 Windows .exe); it now opens the release page, where the right build lives. Direct download+install stays Windows-only.

What's Changed

Full Changelog: https://github.com/Nemu-x/SlothClash/compare/v0.8.1...v0.9.0

🦥 SlothClash v0.8.129 Jul 2026

> ⚠️ After updating you'll be asked once to reinstall the helper service (requires helper service 2.4.2+, which powers the TUN recovery below). Click the banner, accept the UAC prompt — it won't come back.

🛠️ TUN "Access was denied creating the TUN adapter" — fixed for good

A force-killed core (an in-app update, a crash, Task-Manager) never deleted its wintun adapter, and the leftover registered adapter made every later connect fail with *"access is denied"* — a state that survived both a reboot and a service reinstall, because a registered network device is untouched by either. Now:

  • 🧹 The privileged service can force-remove a stale wintun adapter (new DELETE /tun/remove) — the one thing the unprivileged app could never do itself.
  • 🔁 On a failed connect with that signature, the app removes the leftover adapter and retries automatically — no more manual Device Manager surgery.
  • 🚀 After an unclean previous exit, any leftover adapter is cleared at startup, before the first connect.
  • 🏷️ The Windows TUN adapter now has a stable name (SlothClash) instead of the generic Meta, so a fresh adapter never collides with a stale one or a co-installed Clash client. A subscription- or user-set device name still wins; macOS/Linux are unchanged.

✅ Rules — enable/disable individual rules from the dashboard

  • A checkbox on every row in the Rules table. Turn a rule off and it applies live (no manual reconnect) and stays listed so you can turn it back on.
  • Works for both subscription rules and your own custom ones. A rule-set toggles as a whole.

🌐 Proxies — reveal hidden groups

  • Proxy groups the subscription marks as hidden are collapsed by default. A "Show hidden" toggle in the Proxies header reveals them (badged), and only appears when there's something to reveal.

🔒 Security & dependencies

  • Production dependency audit is now clean — patched/removed the flagged packages (js-yaml, dompurify; dropped an unused react-router) and refreshed dependencies within their version ranges.

What's Changed

Full Changelog: https://github.com/Nemu-x/SlothClash/compare/v0.8.0...v0.8.1

🦥 SlothClash 0.8.019 Jul 2026

> ⚠️ After updating you will be asked once to reinstall the helper service. This release moves the service binary out of a temporary folder into an admin-only location next to the app — a security fix (below). Click the button on the banner, accept the UAC prompt, and it won't come back.

🔒 Security

The helper service no longer runs from a temporary folder. The privileged service — which runs as SYSTEM on Windows and root on macOS/Linux — was registered from a per-user temp directory. A non-admin user could replace that binary while the service was stopped and get code execution as SYSTEM.

It is now copied into an admin-only location and registered against *that* path:

| Platform | Location |

|---|---|

| Windows | %ProgramFiles%\Nemu-x\Sloth Clash\service |

| Linux | /usr/local/lib/sloth-clash |

| macOS | /Library/PrivilegedHelperTools (already correct) |

Requires helper service 2.4.0+. The installer also re-pins the service in place during an upgrade, and both "reinstall service" conditions now surface an actionable banner instead of a raw error.

✨ New

  • Operator branding. Providers can brand the app through HTTP response headers on the subscription (X-Brand-Desktop-*): name, logo, accent colour, greeting and links. A button in the Home header opens an operator dialog showing subscription traffic and expiry, device slots, provider links, and a one-click "copy info for support" block. Providers can also hide non-critical UI — Global mode, Proxy mode, local configs, Advanced. Full protocol: wiki → Branding.
  • Custom accent colour. Pick any colour by hex in Settings → Appearance. A contrast guard keeps it readable in both themes, and your choice always wins over a provider's.

🐞 Fixed

  • The Connection settings actually work now. *Allow LAN binding*, *Enable IPv6 DNS* and *Smart DNS fallback* were inert placeholders. They now drive allow-lan (rewriting a loopback bind-address so LAN access really works), dns.ipv6 and dns.respect-rules.
  • IPv6 resolution under TUN. Fake-IP mode ran with IPv6 enabled but no IPv6 fake-IP pool, so AAAA lookups never resolved. Added fake-ip-range6 to both config paths.
  • Suspend/resume detection. The resume check compared monotonic time, which doesn't advance while the machine sleeps — so the post-wake TUN repair never ran ("closed the lid, opened it, no internet"). It now measures the wall clock.
  • Interface scale. Below 100% the UI no longer leaves an empty band at the bottom; above 100% it no longer overflows the window.
  • UI polish. The status banner is dismissable and auto-retires instead of hanging forever and raising a false warning badge on Home. *Update available* is now a labelled accent pill. The helper service version is always visible in Settings → Info.

🔧 Core

Mihomo v1.19.29 · Helper service 2.4.1

Full changelog: https://github.com/Nemu-x/SlothClash/compare/v0.7.0...v0.8.0

What's Changed

Full Changelog: https://github.com/Nemu-x/SlothClash/compare/v0.7.0...v0.8.0