Contributing to PureSnitch
May 23, 2026 · View on GitHub
Thanks for considering a contribution. The bar is: ship working code, keep the diff small, leave the codebase clearer than you found it.
Quick start
git clone https://github.com/momenbasel/puresnitch.git
cd puresnitch
brew install xcodegen
xcodegen generate
open PureSnitch.xcodeproj
Build target: PureSnitch. Hit ⌘R. The first run will fail to install the helper daemon if you're not signed with a Developer ID — that's expected for dev builds. The GUI still launches and is fully interactive against in-memory state.
Conventions
- Swift 5.10, macOS 14+ deployment target.
- No new dependencies unless there's a load-bearing reason. SQLite via
import SQLite3is fine; a third-party Swift package needs justification in the PR. - f-strings? no. This is Swift. String interpolation, not Python.
- No emoji in code or commits. Yes, even there.
- Match the existing style. SwiftUI views split into small private computed properties. No mega-views.
- Comments are for why, not what. Identifier names should carry the what.
Areas where help is most welcome
- Network Extension path (Sources/NetExt/). If you have access to the
com.apple.developer.networking.networkextensionentitlement and want to wire up true per-process filtering, this is the highest-impact contribution. - macOS 15 / 16 / 26 compatibility. Test on every macOS you have, report breakage with a paste of the build error.
- Localization. The strings are not yet
.strings-extracted. Help wanted. - Blocklist curation. Add high-quality, low-false-positive lists; remove anything stale.
- UI polish. Pixel-level fidelity to Little Snitch is the bar. Submit screenshots in the PR.
Pull request checklist
- Builds clean with
xcodegen generate && xcodebuild -project PureSnitch.xcodeproj -scheme PureSnitch - No new warnings in your changed files
- Manual test pass: app launches, menubar popover appears, Network Monitor opens, Rules Manager opens
- If you touched the helper:
sudo lsof -nP -iUDP:53shows the proxy still binds,pfctl -a puresnitch -s rulesshows your rules
Reporting bugs
Open an issue. Include:
- macOS version
- PureSnitch version (Settings → About)
- Reproduction steps
- Console output from
log stream --predicate 'subsystem == "io.moamenbasel.puresnitch"'
License
By contributing you agree your contributions are licensed under the MIT License.