Repository navigation
Releases
Rat v1.8.0-nightly.20261102.2c43636
Nightly build of main toward Rat 1.8.0, commit 2c43636. For testing: not a stable release.
Ad-hoc signed, Apple Silicon, macOS 14+. First launch: right-click Rat › Open. Update the helper afterwards if Settings › Security asks for it.
Changes since v1.7.0
No changes recorded yet.
SHA-256 of Rat-v1.8.0-nightly.20261102.2c43636-arm64.dmg: e5ee5157519a6d4caff1ed3fca378255221adcfd36de8ad0502d38d519ed73d3
Rat v1.7.0
Added
- Click a place on the map (its pin or a line to it) to see what goes there: the inspector shows the city with its flag, the open connections and their apps, the data sent and received and the rate now, and every connection with its tags and its own ✗/✓ to deny or allow it right there. An app in that list shows the app; Escape, the close button or a click on empty map goes back. The map's own + / − buttons zoom without letting go of the place.
Fixed
- The total download and upload rate (menu bar), the session's totals and the traffic chart count the Mac's traffic once, as the network line carries it: traffic between programs on the Mac (loopback, a local proxy) no longer counts, and traffic through a VPN no longer counts twice (once in the tunnel, once for the VPN app that carries it). On a 50 Mbps line the rate stays under about 6 MB/s instead of reaching 10–12 MB/s. Each app's, process's and connection's own traffic is unchanged.
- Safari web apps made with Add to Dock show as themselves, with the name and icon you gave them, instead of one "Web App" row for all of them. Their WebKit networking process is listed under the web app it works for. A ✗ on a web app blocks that web app only, not your other web apps or Safari; the helper needs Update Helper for this.
- The View Options menu's Group By and Sort By submenus stay open and take the click while traffic updates the list.
Development
- Demo mode, used for the README screenshots and UI tests, shows a fixed account name and a fixed place for This Mac, and the screenshots use English number formats, so they show nothing of the Mac they were taken on; the screenshots are retaken.
- The READMEs (English and Persian) open with what is new in 1.6 and show Only through a VPN in a country in a screenshot; the Persian page gives Only through a VPN and country rules sections of their own.
- The READMEs (English and Persian) open with what is new in 1.7 and show a place chosen on the map in a new screenshot (map-place.png, taken from demo data by scripts/readme-screenshots.sh).
Ad-hoc signed, Apple Silicon, macOS 14+. First launch: right-click Rat › Open. Update the helper afterwards if Settings › Security asks for it.
SHA-256 of Rat-v1.7.0-arm64.dmg: 4748a1dc65167affa727d98c76ac0b9bf1a87190e0c116a4c170fc1bc09dd3bd
Rat v1.7.0-nightly.20261102.fa6c9e8
Nightly build of main toward Rat 1.7.0, commit fa6c9e8. For testing: not a stable release.
Ad-hoc signed, Apple Silicon, macOS 14+. First launch: right-click Rat › Open. Update the helper afterwards if Settings › Security asks for it.
Changes since v1.6.0
Added
- Click a place on the map (its pin or a line to it) to see what goes there: the inspector shows the city with its flag, the open connections and their apps, the data sent and received and the rate now, and every connection with its tags and its own ✗/✓ to deny or allow it right there. An app in that list shows the app; Escape, the close button or a click on empty map goes back.
Fixed
- The total download and upload rate (menu bar), the session's totals and the traffic chart count the Mac's traffic once, as the network line carries it: traffic between programs on the Mac (loopback, a local proxy) no longer counts, and traffic through a VPN no longer counts twice (once in the tunnel, once for the VPN app that carries it). On a 50 Mbps line the rate stays under about 6 MB/s instead of reaching 10–12 MB/s. Each app's, process's and connection's own traffic is unchanged.
- The View Options menu's Group By and Sort By submenus stay open and take the click while traffic updates the list.
Development
- Demo mode, used for the README screenshots and UI tests, shows a fixed account name and a fixed place for This Mac, and the screenshots use English number formats, so they show nothing of the Mac they were taken on; the screenshots are retaken.
- The READMEs (English and Persian) open with what is new in 1.6 and show Only through a VPN in a country in a screenshot; the Persian page gives Only through a VPN and country rules sections of their own.
SHA-256 of Rat-v1.7.0-nightly.20261102.fa6c9e8-arm64.dmg: 6959082c85a9268d01958690966924da213ef84596e3eec6e611fea829a4a50d
Rat v1.7.0-nightly.20261102.bc658db
Nightly build of main toward Rat 1.7.0, commit bc658db. For testing: not a stable release.
Ad-hoc signed, Apple Silicon, macOS 14+. First launch: right-click Rat › Open. Update the helper afterwards if Settings › Security asks for it.
Changes since v1.6.0
Added
- Click a place on the map (its pin or a line to it) to see what goes there: the inspector shows the city with its flag, the open connections and their apps, the data sent and received and the rate now, and every connection with its tags and its own ✗/✓ to deny or allow it right there. An app in that list shows the app; Escape, the close button or a click on empty map goes back.
Fixed
- The total download and upload rate (menu bar), the session's totals and the traffic chart count the Mac's traffic once, as the network line carries it: traffic between programs on the Mac (loopback, a local proxy) no longer counts, and traffic through a VPN no longer counts twice (once in the tunnel, once for the VPN app that carries it). On a 50 Mbps line the rate stays under about 6 MB/s instead of reaching 10–12 MB/s. Each app's, process's and connection's own traffic is unchanged.
- Safari web apps made with Add to Dock show as themselves, with the name and icon you gave them, instead of one "Web App" row for all of them. Their WebKit networking process is listed under the web app it works for. A ✗ on a web app blocks that web app only, not your other web apps or Safari; the helper needs Update Helper for this.
- The View Options menu's Group By and Sort By submenus stay open and take the click while traffic updates the list.
Development
- Demo mode, used for the README screenshots and UI tests, shows a fixed account name and a fixed place for This Mac, and the screenshots use English number formats, so they show nothing of the Mac they were taken on; the screenshots are retaken.
- The READMEs (English and Persian) open with what is new in 1.6 and show Only through a VPN in a country in a screenshot; the Persian page gives Only through a VPN and country rules sections of their own.
SHA-256 of Rat-v1.7.0-nightly.20261102.bc658db-arm64.dmg: b0bfd4333a0c54ff244181016080559c6490680f16309cb2da5a26bc4d90c1ac
Rat v1.7.0-nightly.20261102.49dc850
Nightly build of main toward Rat 1.7.0, commit 49dc850. For testing: not a stable release.
Ad-hoc signed, Apple Silicon, macOS 14+. First launch: right-click Rat › Open. Update the helper afterwards if Settings › Security asks for it.
Changes since v1.6.0
Added
- Click a place on the map (its pin or a line to it) to see what goes there: the inspector shows the city with its flag, the open connections and their apps, the data sent and received and the rate now, and every connection with its tags and its own ✗/✓ to deny or allow it right there. An app in that list shows the app; Escape, the close button or a click on empty map goes back.
Fixed
- The total download and upload rate (menu bar), the session's totals and the traffic chart count the Mac's traffic once, as the network line carries it: traffic between programs on the Mac (loopback, a local proxy) no longer counts, and traffic through a VPN no longer counts twice (once in the tunnel, once for the VPN app that carries it). On a 50 Mbps line the rate stays under about 6 MB/s instead of reaching 10–12 MB/s. Each app's, process's and connection's own traffic is unchanged.
Development
- Demo mode, used for the README screenshots and UI tests, shows a fixed account name and a fixed place for This Mac, and the screenshots use English number formats, so they show nothing of the Mac they were taken on; the screenshots are retaken.
- The READMEs (English and Persian) open with what is new in 1.6 and show Only through a VPN in a country in a screenshot; the Persian page gives Only through a VPN and country rules sections of their own.
SHA-256 of Rat-v1.7.0-nightly.20261102.49dc850-arm64.dmg: 8d48e699aa7b35e83f31763c2862f288485f2a7d126f2c8a5173cc2842cb81ff
Rat v1.7.0-nightly.20261102.33e248d
Nightly build of main toward Rat 1.7.0, commit 33e248d. For testing: not a stable release.
Ad-hoc signed, Apple Silicon, macOS 14+. First launch: right-click Rat › Open. Update the helper afterwards if Settings › Security asks for it.
Changes since v1.6.0
Added
- Click a place on the map (its pin or a line to it) to see what goes there: the inspector shows the city with its flag, the open connections and their apps, the data sent and received and the rate now, and every connection with its tags and its own ✗/✓ to deny or allow it right there. An app in that list shows the app; Escape, the close button or a click on empty map goes back. The map's own + / − buttons zoom without letting go of the place.
Fixed
- The total download and upload rate (menu bar), the session's totals and the traffic chart count the Mac's traffic once, as the network line carries it: traffic between programs on the Mac (loopback, a local proxy) no longer counts, and traffic through a VPN no longer counts twice (once in the tunnel, once for the VPN app that carries it). On a 50 Mbps line the rate stays under about 6 MB/s instead of reaching 10–12 MB/s. Each app's, process's and connection's own traffic is unchanged.
- Safari web apps made with Add to Dock show as themselves, with the name and icon you gave them, instead of one "Web App" row for all of them. Their WebKit networking process is listed under the web app it works for. A ✗ on a web app blocks that web app only, not your other web apps or Safari; the helper needs Update Helper for this.
- The View Options menu's Group By and Sort By submenus stay open and take the click while traffic updates the list.
Development
- Demo mode, used for the README screenshots and UI tests, shows a fixed account name and a fixed place for This Mac, and the screenshots use English number formats, so they show nothing of the Mac they were taken on; the screenshots are retaken.
- The READMEs (English and Persian) open with what is new in 1.6 and show Only through a VPN in a country in a screenshot; the Persian page gives Only through a VPN and country rules sections of their own.
- The READMEs (English and Persian) open with what is new in 1.7 and show a place chosen on the map in a new screenshot (map-place.png, taken from demo data by scripts/readme-screenshots.sh).
SHA-256 of Rat-v1.7.0-nightly.20261102.33e248d-arm64.dmg: 8e751dbbe1e8f89782dbc046bb5179186e0218c1b7bf42b9b0d3b38322aa2e06
Rat v1.6.0
Added
- Rules can name the servers in one country (picked with its flag in the Rules window, or started from a connection's inspector or a country group): the helper looks servers up in the same offline database as the map and cuts only the matching sockets by their local ports.
- Only through a VPN can name the VPN's country (Only through a VPN in 🇩🇪 Germany): Rat and the helper find each tunnel's server offline from the VPN app's own connection (for WireGuard, the route it keeps to its server) and cut the app's connections through a tunnel that leads elsewhere.
- Only through a VPN (#45): a switch in the inspector for an app or one of its processes, and a condition in the Rules window. Every connection the app makes outside a VPN tunnel is cut by the helper within milliseconds, whatever ✓ it has; Rat cuts after a connection opens, so its first packets can still leave (update the helper in Settings > Security for the fast cut).
Changed
- The inspector's Rules section no longer repeats the ✗/✓ of the selected app, process or connection: set them on its row in the list, and the inspector lists the rules that result.
- Local connections have a labeled Local switch beside the search field: turn it off to hide this Mac's own, LAN and Bonjour traffic in the list, the map and the Summary. It replaces the small house icon inside the search field, and keeps its setting.
- Traffic on the map is drawn as laser tracers: a glowing beam with a fading tail races along each line (purple out from this Mac, blue in from the server) and a ring ripples out where it lands.
Fixed
- With nothing blocked, the helper checks pf every 10 s instead of every 2 s (a fifth of the
pfctlruns) and sleeps a second between passes. A new block is enforced as fast as before: the helper loads its ports first and checks pf on the next pass. - The map's moving traffic stays on its lines and inside the map: after the window took its saved size at launch, or the inspector was shown or hidden, pulses ran beside their lines and some were drawn over the app list.
Development
- The helper deletes 1.0.3's leftover address list before its first pf check, so
verify-blocking.sh's start-up check no longer fails on a cold start; phase 5 skips the cut outside the tunnel when something else (a VPN's kill switch) already blocks it.
Ad-hoc signed, Apple Silicon, macOS 14+. First launch: right-click Rat › Open. Update the helper afterwards if Settings › Security asks for it.
SHA-256 of Rat-v1.6.0-arm64.dmg: befb3976d6c82531747aa30a7540398accd7ed1591561c2bf0996b399a5fb402
Rat v1.5.0
Added
- Connections a peer started (to a port this Mac listens on) are rows of their own, tagged ↓ Incoming, without ✗/✓ and never asked about in Alert Mode; long-lived connections that mostly receive (a download, a server push, a media stream) are tagged ↓ stream.
- The helper now applies rules for one process of an app and for one connection itself, every few milliseconds, as it does for an app denied as a whole: such a connection is cut while it is being opened instead of after Rat's next pass, when it is already open. Rat hands the helper its rules and the names it found for servers in
deny-rules.json; only the local ports of matching sockets are blocked, never a server's address. Update Helper in Settings > Security to use it. - Places show their country's flag (connection rows and their tooltips, the inspector, Top Countries, map labels), and a Hide Local chip, remembered between launches, leaves out loopback, LAN, link-local, Bonjour and mDNS connections and the apps and processes that have only those, in the list, the map and the Summary.
- The map shows traffic moving: purple pulses run out from This Mac for what it sends, blue ones run in for what it receives, both on a two-way line, at 24–30 frames a second and only while the window is seen and something moves (Reduce Motion stops them).
- Rules can be for one process of an app (a helper, an updater, the WebKit process working for Safari) and for one connection of a process (its server, port and protocol). The process list's Deny and Allow decide the narrowest first: a connection's, then a process's, then the app's, over the app's rules from alerts.
- The process list has ✗/✓ for each process and each connection (a TCP and a UDP connection to one server are separate rows), showing what a row follows from its process or app; the inspector lists the rules about the selected app, process or connection and sets its ✗/✓; Manage Rules… opens the Rules window on that row (new Apps / Processes section) and New Rule starts from it.
Fixed
- Rows in the list keep their numbers whole: a connection's port and size and a process's connection count and size are never cut or wrapped ("TCP…", "1,7…", "430 / bytes"). With little room the tags shrink to their symbols, the port drops its service name and a process drops its pid, and only then is a long name cut in the middle. The macOS inspector writes pids without a thousands separator ("pid 2086", not "pid 2.086").
- A ✗ on a process or connection of Safari or another program macOS loads from a cryptex (WebKit's networking process, Safari's helpers) now blocks it: Rat took some paths from
psand the helper from the kernel, which name those programs differently, so the rule never matched. Rat now names every process by the kernel's path and both compare paths in one spelling; rules saved before still match. A ✗ or ✓ in the list now takes effect at once instead of on the next 1.5 s pass. - A deny made while nothing else was denied takes effect at once: the helper now wakes as soon as Rat hands it the change, instead of up to a quarter of a second later, so a download already under way is cut before more of it arrives.
- When an app opens several connections to the same server and port, a rule that denies them now cuts all of them, not only the first.
- The helper no longer stops enforcing rules after running for a while: every pfctl run left a file open until it hit the system's limit, after which pf could not be checked, repaired or updated.
- The helper uses much less CPU while a ✗ is set on one process or connection (14.5 % → 3.6 % with a ✗ on Safari's SearchHelper): it reads only the processes the rule can match, not every process of the app, and lists the Mac's processes only when one has started. While a denied program is not running, the helper now checks for it every 20 ms instead of every 0.25 s.
- The map no longer redraws on every pass when only traffic numbers change, address caches stay bounded on a Mac that stays up, and the helper no longer keeps a core busy for two seconds when it starts or when an app is denied or allowed.
- A rule for one system service in the macOS row (for example /usr/sbin/mDNSResponder or /usr/bin/curl), or for one helper's path, now matches that service; before, only the app's path was compared and such rules never applied.
Development
- A weekly security audit (Mondays, on demand, and on PRs that change dependencies or workflows) checks the pinned GitHub Actions against the GitHub Advisory Database and package lockfiles with osv-scanner, and opens a security issue when something is found. CLAUDE.md now requires tests, UI tests, live verification and a CPU and memory measurement (scripts/measure-resources.sh) for every change.
- scripts/verify-blocking.sh's mid-stream checks measure what was already in curl's socket buffer at the deny (macOS grows it to 4 MB, and a rate-limited curl reads it for seconds after the cut) and the pf states of its port, so buffered bytes no longer count as a leak; a buffer that cannot be read fails the check.
Ad-hoc signed, Apple Silicon, macOS 14+. First launch: right-click Rat › Open. Update the helper afterwards if Settings › Security asks for it.
SHA-256 of Rat-v1.5.0-arm64.dmg: 9c180ffb654ad72f82c4465408adc0755bdcf1de5ad81d05a61765889d01735e
Rat v1.4.0
Changed
- Allow (✓) in the process list now allows the whole app past its own narrower deny rules, as Deny (✗) already wins over its narrower allow rules. Rules for any process still apply.
Fixed
- The firewall helper checks every 2 seconds that pf still holds Rat's rules and loads them again when they were dropped (sleep and wake, a VPN client reloading pf), and it puts Apple's anchors back in front of a VPN client's anchor that passes traffic first. A firewall whose own rules pass traffic before Rat's is reported in Settings > Security.
- Update Helper is now shown whenever the helper installed or running is not the one in this copy of Rat, compared by SHA-256: after updating Rat, the old helper no longer keeps running unnoticed (Settings > Security, the Inspector and the sidebar say so).
- Denied apps were not blocked after a VPN client (Cloudflare WARP) turned the packet filter off or replaced its main ruleset. The firewall helper now puts pf right within 2 seconds: it turns pf on again (loading macOS's /etc/pf.conf first when another program's leftover rules are in it) and restores the com.apple anchors next to a running VPN's own. Settings > Security says what happened and has Repair Firewall Now. Update the helper (Settings > Security) to get it.
- Windscribe's tunnels (windscribeamneziawg, windscribeopenvpn and the others its helper runs from /Library/Application Support/Windscribe) are listed under Windscribe and are covered when Windscribe is denied.
Development
- The README is rewritten for 1.3.0 with fresh screenshots from the demo data (
scripts/readme-screenshots.sh), and a Persian README (README.fa.md) is added.
Ad-hoc signed, Apple Silicon, macOS 14+. First launch: right-click Rat › Open. Update the helper afterwards if Settings › Security asks for it.
SHA-256 of Rat-v1.4.0-arm64.dmg: 0a9a4014c0ea4c0ce06fe0a70a0a56bafb719c23bce0410ec22275882efb0724
Rat v1.3.0
Added
- The map shows only what the list shows: the search, the VPN and proxy filter (chip or the words vpn / proxy), and the other filters narrow its lines and pins too; searching a city draws only the lines to it.
- Apps expand into a tree: the main process's connections first, then each helper or XPC service (and each macOS service) with its PIDs, traffic and own connections. Every connection shows the bytes of its open sockets, command-line tools show the app that started them, and selecting an app, a process or one connection scopes the map and the inspector.
- Connections through a VPN or a proxy carry a tag in the list and the inspector:
VPN · Windscribe · utun3,Proxy · ssh,Proxy · System HTTPS. Loopback connections to a local proxy program (ssh, Tor, Clash, V2Ray, mitmproxy, …) are tagged even without the firewall helper. Typevpnorproxyin the search field, or use the new route filter, to see only those connections.
Changed
- The Summary in the inspector counts what the search and filters leave (apps, domains, countries, networks, traffic, denied and unconfirmed connections) and says when it is filtered.
Fixed
- A connection through a plain forwarding proxy (one that connects to the destination itself) no longer shows the destination as the proxy's server on the map; connections through a local proxy on [::1] name the right listener.
- A slow or unreachable DNS server no longer stalls the Network Monitor: host names are looked up in the background (at most four at a time) and loopback, unspecified and link-local addresses are never looked up. A connection whose name is still pending is judged by the rules a moment later (at most 3 seconds), so domain rules still match.
- Fixed three bugs the UI tests found: Allow/Deny and the Rules window took up to a sampling pass (1.5 s) to show a change, the active profile's checkmark in the Rules sidebar did not move when another profile was activated, and the Advanced tab of Settings was hidden in the toolbar's overflow menu.
- App and process rows show the VPN and proxy tags of their connections (each tag once; when the row is narrow they fold into a count, then into symbols). A connection without an address of its own is tagged VPN when the routing table sends it through the tunnel, and the VPN client's own connection to its server is tagged "VPN server" instead of VPN.
Development
- Demo mode (Debug builds with
RAT_DEMO_MAP, used by screenshots and the UI tests) uses its own preferences, sees no firewall helper, cannot install or remove it, and skips the update check. - CI checks a PR's changelog fragment against the base commit of the event, so retargeting a stacked PR no longer fails the check.
- Live proxy tests: real curl through a loopback SOCKS5 and HTTP CONNECT proxy (IPv4 and IPv6) must show the real destination with its Proxy tag, from the command line and, where the firewall helper is installed, from its lo0 capture.
- GitHub Actions check every pull request, publish a nightly pre-release for every merge into
mainand the stable release from thereleasebranch, each with a styled DMG and its SHA-256. - A UI test suite (
RatUITests, run withscripts/test-ui.sh) clicks through the process tree, VPN and proxy tags, search and route filters, Allow/Deny, the Rules window, profiles and every Settings tab on demo data, under its own bundle identifier so the running Rat is never touched. - scripts/test-ui.sh switches a non-Latin keyboard layout to U.S. or ABC for the run and restores it, and the UI tests ignore saved window state, so a window minimized in an earlier run no longer breaks every test.
- The version lives in the root
Versionfile, and every change carries a changelog fragment inchangelog.d/that releases compile intoCHANGELOG.md.
Ad-hoc signed, Apple Silicon, macOS 14+. First launch: right-click Rat › Open. Update the helper afterwards if Settings › Security asks for it.
SHA-256 of Rat-v1.3.0-arm64.dmg: a19afa07ad876a3e86bbbf9554e5ba7c0d433938d284a36454288a4c3c879de7