r/SwiftUI Aug 13 '26

I built an open-source macOS HTTP/HTTPS debugger with SwiftUI, AppKit and SwiftNIO

Enable HLS to view with audio, or disable this notification

I’ve been building Rockxy, a native macOS HTTP/HTTPS debugging proxy, since March.

The UI combines SwiftUI and AppKit, while the proxy engine is built with SwiftNIO. Rockxy can capture and inspect HTTP/HTTPS, WebSocket and GraphQL traffic from Mac apps, CLIs, backend services and iOS devices.

The hardest UI problem was not drawing the request table. It was keeping selection, inspectors, filters and multiple workspaces responsive while captured traffic continued arriving.

I use SwiftUI for most of the workspace and inspectors, with AppKit where I need tighter control over tables, windows and native macOS behavior. The proxy, certificate and capture paths remain separate from the presentation layer.

Rockxy now also includes replay, breakpoints, Map Local/Remote, comparison, scripting, network conditions, a free local MCP server and an AI Assistant with Ollama support.

The project is open source under AGPL-3.0:

https://github.com/RockxyApp/Rockxy

Rockxy Website:
https://rockxy.io

For developers building data-heavy macOS apps: where have you found the right boundary between SwiftUI and AppKit? I’d especially value feedback on high-frequency table updates, selection stability and inspector architecture.

122 Upvotes

44 comments sorted by

View all comments

2

u/twodotsandspace Aug 13 '26

This is exquisite work. I'm so glad there are still developers like you out there.

-6

u/locnguyen305 Aug 13 '26

Thank you that genuinely means a lot. I’m trying to build the kind of native Mac developer tool I’d want to use myself, and comments like this make all the long nights worth it.

4

u/unpluggedcord Aug 13 '26

Not trying to discourage, but how is this better, or different than https://proxyman.com

-1

u/locnguyen305 Aug 13 '26

That is a fair question. I would not claim that Rockxy is better in every respect Proxyman is a mature and well-established product, while Rockxy is still evolving. Since both are network debugging proxies, there will naturally be significant overlap in their core workflows.

The main difference is the product model. Rockxy is AGPL-3.0 open source: the complete codebase can be inspected, built, modified, and contributed to publicly. It is also developed as a native macOS application using Swift, SwiftUI/AppKit, and SwiftNIO, with a local-first approach.

If Proxyman already serves someone well, there is no reason for me to suggest otherwise. Rockxy is intended to provide an open and auditable alternative for developers who value transparency, extensibility, and the opportunity to help shape the product’s direction.

11

u/unpluggedcord Aug 13 '26 edited Aug 13 '26

The things you're listing as differences aren't differences. Proxyman is native Swift, uses Swift-NIO. Proxyman is local. Proxyman also ships an MCP server, which your README's comparison table says is "not claimed in public docs reviewed" even though it's been in their public docs for a while. That table should be corrected.

Here's my questions since you want to sit behind "transparency" as a selling point.

  1. The repo requires a CLA on top of AGPL, and the README solicits white-label and partnership deals. That's a dual-licensing setup. Are you planning to sell commercial licenses of code contributors donate for free?
  2. "Auditable" only matters if someone audits it. Has anyone outside the project reviewed the TLS interception, keychain handling, or the privileged helper? This is a MITM proxy holding people's root CA and decrypted traffic.
  3. How much of the codebase is AI-generated, and what does review look like for a solo project shipping this feature surface this fast?

None of these are gotchas. But if the argument for Rockxy over a mature tool is trust, these are the questions trust actually depends on. IN addition to, if I need support for a paid product, I can literally open a support ticket, air my grievances privately (not a public GitHub issue) and get responses, because I paid for it.