NetShift is a simple DNS and hosts file manager for macOS. It lets you edit hosts files, switch between them, and change DNS servers with a single click.
| Hosts Editor | DNS Profiles |
|---|---|
![]() |
![]() |
| Benchmark | Preferences |
|---|---|
![]() |
![]() |
Requires macOS 14 (Sonoma) or later.
Download latest release (1.0.0)
brew tap musanmaz/netshift
brew install --cask netshift- Download
NetShift-macos.zipfrom Releases - Unzip and drag
NetShift.appto your Applications folder - Important: Since the app is not notarized, macOS may block it. To fix this, open Terminal and run:
xattr -cr /Applications/NetShift.app
- Launch NetShift and complete the one-time setup
NetShift monitors the /etc/hosts system file and updates it with whichever hosts file you activate.
Your custom hosts files are stored in ~/Library/NetShift.
NetShift uses the macOS networksetup command to change DNS servers on all your network interfaces. It automatically flushes the DNS cache after each change.
The log file is located at ~/Library/Logs/DNS Helper.log. Check this file when reporting issues.
NetShift typically runs in the background. It adds an icon to the menu bar — from there you can access the main editor window and quickly switch between hosts files and DNS profiles.
The main editor consists of three parts: the toolbar, the hosts file list on the left, and the file editor on the right. By default, you'll find a file called Original under the "Local" section, which is a copy of your original /etc/hosts file.
Use the segmented control at the top of the editor window to switch between the Hosts and DNS panels.
Click the Create (+) button in the toolbar to add a new file, then choose the file type (Local, Remote, or Combined).
Select a file and click the Delete button in the toolbar.
Select a file and click the Activate button, or choose it from the menu bar icon. NetShift will update /etc/hosts with the activated file's content. The active file is shown with a checkmark in the list.
Local files that you can freely edit.
Files that NetShift downloads and syncs from remote URLs. You can adjust the update frequency in Preferences or force an update from the menu bar. These files cannot be edited since they are overwritten on updates.
A standout feature of NetShift. A combined file contains a list of local and remote files rather than hosts entries. When activated, the contents of all child files are merged and applied together.
| Profile | Primary DNS | Secondary DNS | Description |
|---|---|---|---|
| Cloudflare | 1.1.1.1 | 1.0.0.1 | Fast, privacy-focused DNS |
| 8.8.8.8 | 8.8.4.4 | Google Public DNS | |
| Quad9 | 9.9.9.9 | 149.112.112.112 | Security-focused DNS |
| OpenDNS | 208.67.222.222 | 208.67.220.220 | Cisco OpenDNS |
Custom DNS servers can also be entered from the DNS panel.
Compare the performance of all profiles from the Benchmark section in the DNS panel. Average, P50 and P90 latency values along with success rates are displayed.
| Shortcut | Action |
|---|---|
| Cmd+N | Create new file |
| Cmd+Shift+A | Activate selected file |
| Cmd+, | Preferences |
| Cmd+E | Open editor |
| Cmd+Q | Quit |
- Xcode 15 or later
- macOS 13+ SDK
Open the project with Xcode:
open Package.swiftOr build from the command line:
swift build./build-app.shBuild the app in release mode, zip it, and upload to GitHub:
swift build -c release
./build-app.sh
cd build && zip -r NetShift-macos.zip NetShift.app && cd ..
gh release create v1.0.0 build/NetShift-macos.zip --title "NetShift v1.0.0" --notes "Initial release"dns-helper/
├── DNSHelper/
│ ├── App/ # App entry point
│ ├── Models/ # Data models
│ ├── Services/ # Business logic services
│ ├── Views/ # SwiftUI views
│ │ ├── MenuBar/ # Menu bar
│ │ ├── Editor/ # Main editor window
│ │ ├── DNS/ # DNS management panel
│ │ ├── Preferences/ # Preferences
│ │ ├── Onboarding/ # First-run guide
│ │ └── Shared/ # Shared components
│ ├── Theme/ # Design system
│ └── Resources/ # Assets, Info.plist
├── legacy-go/ # Legacy Go CLI code (reference)
├── Package.swift # Swift Package Manager
└── README.md
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
This project is licensed under the Apache License 2.0 — see the LICENSE file for details.
This app modifies system DNS settings and the /etc/hosts file. Admin password is required only once during initial setup. The helper tool only supports 4 specific commands and cannot execute arbitrary code.
Developed by Mehmet Sirin Usanmaz — GitHub



