Download
A menu-bar app for macOS 13.0 and later, on Apple Silicon (arm64). It installs no system component: the only thing it leaves running is one root process that exits when you quit.
Build from source
No release has been published yet
build from source
git clone https://github.com/rioukkevin/localhost-aliases.git cd localhost-aliases bun install make bundle # builds dist/LocalhostAliases.app make install # copies it into /Applications
Needs Bun 1.2.5 or later and the Xcode command line tools (swiftc). Nothing on your Mac changes until you launch the app and accept the one admin prompt — make install only copies the bundle, and make uninstall reverses every change, including the /etc/hosts block.
Requirements
macOS only- macOS 13.0 Ventura or later —
LSMinimumSystemVersionin the bundle, and the Swift deployment target. - Apple Silicon only. The tray is compiled
-target arm64-apple-macos13.0and there is no universal binary, so there is no x86_64 slice. An Intel Mac cannot run it, and Rosetta translates the other direction. - An admin account, for one prompt at launch. Nothing is installed into
/Library, and there is nosudoersentry. - No network connection. Resolution is a line in
/etc/hosts, and the traffic never leaves loopback.
What macOS will say
Gatekeeper judges the com.apple.quarantine attribute a browser attaches to a downloaded file. That single fact explains both cases below.
if you build from source
Nothing happens. make install copies the bundle you just compiled and clears the quarantine attribute, so there is no downloaded file for Gatekeeper to judge and no dialog. What you are trusting there is your own compiler, not our signature.
if you download a build that is not notarized
macOS refuses the first launch and says “Apple could not verify “LocalhostAliases.app” is free of malware that may harm your Mac or compromise your privacy.” Opening it anyway is deliberate, and where the override lives moved: on macOS 13 and 14 it is Control-click the app then Open; on macOS 15 and later Apple removed that shortcut and it is System Settings → Privacy & Security → Open Anyway after the first refusal.
No release has been published, so no build has been signed with a Developer ID or notarized. When one is, do not take this page's word for it — ask the file:
what the file itself says
shasum -a 256 LocalhostAliases.dmg spctl -a -vvv -t install /Volumes/Localhost\ Aliases/LocalhostAliases.app xcrun stapler validate /Volumes/Localhost\ Aliases/LocalhostAliases.app
accepted / source=Notarized Developer ID is the only output that means notarized. Anything else — rejected, an ad-hoc signature, no stapled ticket — means it is not, whatever any web page says.
What it changes on your Mac
Three things, all visible and all reversible: a marked block in /etc/hosts, one loopback address per alias on lo0, and one root process forwarding 127.0.0.x:80 to the port your dev server already listens on. The root process exits by itself when the app stops, and make uninstall takes the other two back out.
Project aliases are http:// only — the forwarder moves raw bytes and never parses them, so nothing in that path could terminate TLS. The FAQ covers what runs as root and for how long, including the tradeoff that comes with it, and the source is the final word on all of it.