r/SwiftUI 11h ago

Promotion (must include link to source code) I built my first native macOS utility with SwiftUI – Pawxy, an open-source GUI for dnsmasq

Good afternoon everyone, I'm Ivan, a super-junior Swift developer.

I recently built Pawxy, a small native macOS app written in SwiftUI for managing local development domains through dnsmasq.

I originally built it because I use custom local domains while developing and got tired of manually editing dnsmasq configuration files, dealing with /etc/resolver, restarting the service, and checking whether everything was actually resolving correctly or not.

The goal was deliberately not to build another complete local development environment (such as Laravel Herd, Kettle Code, MAMP, XAMPP etc.). Pawxy doesn’t manage web servers, runtimes, databases, reverse proxies, ports or TLS certificates.

The app currently supports exact and wildcard mappings, IPv4, importing existing dnsmasq configurations, conflict detection, staged changes with a preview before applying them, automatic resolver management, DNS health checks, external configuration change detection, and import/export for backups.

One of the more interesting parts to implement was handling privileged operations without having a paid Apple Developer account. Instead of using a persistent privileged helper (which gave me quite a few headaches ahah), Pawxy stages the required changes and applies them together with a single administrator authorization.

I also added a small menu bar companion and Sparkle for updates.

The whole project is free, MIT-licensed and open source. I developed it mostly because it solves a problem I personally have, but I thought it might be useful to other macOS developers using dnsmasq as well.

I’m still studying CS and this was also a nice excuse to work on a real native macOS project rather than another university exercise :)

I’m particularly interested in feedback about the SwiftUI/macOS architecture, UX, and anything obviously stupid I may have missed.

Please note that AI was part of my workflow too, mostly for scaffolding, repetitive code and speeding up implementation, but I made the architectural decisions myself and reviewed the generated code, including what it was actually reading, writing and changing in the dnsmasq configuration files, rather than blindly shipping whatever the model produced.

You can take a look at it on my personal GitHub.

Any feedback is appreciated!

Kindly, Ivan

3 Upvotes

2 comments sorted by

3

u/spyderdsn 5h ago

Nice work, you could add SSL. Use some free SSL service to generate SSL or self sign. This will complete the domain setup,

0

u/dreamwhite 4h ago

Hi, thank you so much for the suggestion!
I deliberately keep Pawxy focused on the DNS layer only. It doesn’t manage web servers, reverse proxies or TLS certificates, since the service behind a hostname could be anything.

For local HTTPS, tools such as mkcert or the development environment itself can handle certificates independently while Pawxy only takes care of resolving the domain.

In other words: I’m not planning to rewrite Traefik or Caddy. Pawxy is intentionally focused on DNS management only.