Skip to content

Latest commit

 

History

History
47 lines (32 loc) · 2.53 KB

File metadata and controls

47 lines (32 loc) · 2.53 KB

Contributing

Thanks for considering a contribution. Keep it small, keep it tested.

Reporting bugs

Open an issue with:

  • macOS version (e.g. Sonoma 14.5)
  • Apple Silicon or Intel
  • Steps to reproduce
  • Expected vs. actual behaviour
  • Any output from log show --process NetworkUsageMonitor --last 1m

Submitting a change

  1. Fork, branch from main (the default branch).
  2. swift build and swift test must both pass — the suite runs headlessly, no signing or extension required.
  3. If you touch the firewall glue under FilterExtension/, also confirm xcodegen generate + the xcodebuild app/extension build compiles (CI does this on every push).
  4. Format-wise: keep the existing terse comment style; explain why, not what.
  5. Open a PR with a one-paragraph description plus a screenshot if the change is visible.

Licensing of contributions

This project is source-available under the PolyForm Noncommercial License 1.0.0, and the maintainer also offers paid commercial licenses. By submitting a contribution (a PR or patch you authored), you confirm that:

  • it is your own original work, or you otherwise have the right to submit it, and
  • you license it to the project under the PolyForm Noncommercial terms and grant the maintainer (Siddharth Sangwan) a perpetual, irrevocable, worldwide right to relicense your contribution — including under commercial terms — as part of the project.

This "inbound = outbound, plus a commercial-relicensing grant" is what keeps the dual-license model workable. If you can't agree to it, please don't submit code — bug reports and ideas are always welcome regardless.

Architectural ground rules

  • Privacy first. The app must never make outbound network connections. Any feature that would need one is out of scope.
  • Stay out of the sandbox. We need nettop and NSWorkspace; the App Sandbox blocks both. Don't add features that would force us to sandbox.
  • No telemetry, no auto-update phone-home. Sparkle / similar updaters are fine because the user opts in; analytics aren't.
  • Idle CPU should stay below 1%. If a feature needs more, gate it behind something user-triggered.

Code style

  • Swift API design guidelines.
  • Comments explain why, not what. The code already shows what.
  • Prefer private until something needs wider visibility.
  • New persistent files go under ~/Library/Application Support/NetworkUsageMonitor/.

Releases

Maintainers: see DISTRIBUTION.md for the release workflow (signing, notarization, Homebrew Cask submission).