A network filter for the Mac, for people who run Macs for an organisation. It shows every connection, can ask before new ones and block the ones you deny, shows how a connection travels (DNS, proxy, content filters, VPN), tests why a destination does not work, and turns what it sees into configuration for Jamf Pro or Intune. Named after the horn that Heimdall blows to warn the gods.
Each new connection with app, destination, port and decision. Wireshark-style filter expressions (ip.addr == 192.* && port == 443), a list that follows live or holds still while you read it, a flow pane per row, CSV and JSON export.
Modes: monitor only, ask, allow everything for a while, block everything, or block list (everything allowed except what a Deny rule matches, for "no IPv6", "no FTP", "no Telnet"). One panel for everything that is waiting.
Per app, developer or every app; per host, domain, address range, port or range, service, IP version and transport; time-limited. Import and export as CSV, JSON or a profile. A preview replays the recorded connections against a rule set before it is enforced.
App, DNS, proxy and PAC, content filters, route or VPN, destination: where it fails, and which component wins. Gjallarhorn shows its own decision first; the order of the stages is not yet verified against several other filters.
Content filters, VPNs, system extensions, proxy and PAC, DNS, a TLS-inspection check, and Test a destination: resolve, connect, TLS handshake, and what the filter did with it.
Administrators can record the bytes of one app's next connections (time and size limited) and save them as a file Wireshark opens. The payload is real, the packet headers are synthetic, TLS stays encrypted.
A configuration profile can force rules, mode and visibility. The app can hide itself completely, and keys, prompts, retention and block messages are configurable. Connection history is visible to administrators only.
Five Apple management processes stay reachable in block mode (identified by Apple's signature, not by name), so a Mac in block mode can still receive its next profile. A helpdesk unlock with signed one-time codes is the last resort.
Rule sets export as CSV, JSON or a profile for Jamf Pro or Intune, with a Jamf Pro schema, an example allowlist profile, a deployment profile and a status extension attribute.
A report for other teams from Connections or Network. Dense and plain, in light and dark mode.
--cli with info, status, rules, history, mode, policy, add-rule, path, test, tls, simulate, report, capture and unlock commands, for extension attributes and remote sessions.
Rules, history and recordings stay on the Mac in root-only files. This version has no AI and no accounts.
All screenshots show made-up demo data (example domains, a fictional "Northwind" network). Nothing from a real Mac or organisation.
Every profile key, visibility, staying manageable in block mode, the helpdesk unlock, deployment, recording, the unified log and uninstalling.
📖 Read the DocumentationmacOS 26 or later, Apple silicon only.
The first start installs the network extension; macOS asks for approval unless the deployment profile is installed first (needs a user-approved MDM enrolment or supervision).
Version 0.1.0. Signed with a Developer ID certificate and notarized by Apple. The package is 2.8 MB, SHA-256 e87618a3…e0e08.
176 unit tests pass (Swift 6, strict concurrency).
Tested with demo data and for a day on one MDM-managed work Mac: the Jamf schema, package deployment, managed rules and modes. Not yet tested on a managed Mac: hidden mode, helpdesk unlock, the audit log and recording under a profile (those were run on an unmanaged Mac). The order of the path stages is unverified against several other content filters.
Until macOS has started the network extension after a restart, the Mac is not filtered. That is the operating system's start-up order, not a setting. The app reports how many seconds after boot the filter started.
Concept app · Free · Signed & Notarized · macOS 26+ · Apple silicon · 2.8 MB
Download Gjallarhorn