Transport-first
Separate packages for reverse HTTP, forward HTTP, CONNECT tunneling, WebSocket proxying, cookie rewriting, and runtime listener lifecycle.
Build reverse, forward, CONNECT, WebSocket, and runtime-aware proxy workflows without dragging product-specific REST contracts into your core.
Most Go proxy projects fall into one of two buckets:
proxykit aims for a third shape:
That means the repo is intentionally smaller than a full proxy product backend. It contains the proxy foundation, not your entire application stack.
goproxy, oxy, or Martian? goproxy when you want a long-standing all-in-one programmable HTTP/HTTPS proxyoxy when your center of gravity is reverse-proxy middleware compositionMartian when your main need is deep modifier-driven HTTP testing and mutationChoose proxykit when your application needs one embeddable foundation for reverse HTTP, forward HTTP, CONNECT, and WebSocket, without pushing storage, routes, admin APIs, or UI DTOs into the transport layer.
reverse for mounted reverse proxy handlersforward for absolute-URI HTTP forward proxyingconnect for plain CONNECT tunnelingwsproxy for bidirectional WebSocket proxyingproxyruntime for forward and SOCKS listener lifecycleobserve for transport-neutral hooks and event structscookies, proxyhttp, socketio, and mitm as focused supporting packages| Need | Package |
|---|---|
| mounted reverse proxy route | reverse |
| absolute-URI forward proxy | forward |
| plain CONNECT tunneling | connect |
| bidirectional WebSocket proxy | wsproxy |
| transport-neutral hooks | observe |
| listener lifecycle | proxyruntime |
| cookie rewriting helpers | cookies |
| focused transport helpers | proxyhttp, socketio, mitm |
proxykit is not just a greenfield library extraction. It already powers a real application:
flutter_network_debugger - a Flutter + Go network debugging app that uses proxykit as its reusable proxy foundationThat app keeps its own REST routes, storage model, realtime delivery, and UI contracts outside the public proxykit surface.
flowchart LR
A["proxykit core"] --> B["application adapters"]
B --> C["flutter_network_debugger"]proxykit in an existing codebase: read MigrationThe following concerns are deliberately not part of proxykit:
/httpproxy or /_api/v1/proxy/configIf you need those, build them in your adapter layer on top of the transport packages.