Compatibility and Versioning
This page explains what stability means in proxykit.
Versioning model
proxykit uses normal Go module semantic versioning.
That means:
- additive changes should land in new minor releases
- breaking public API changes should land only in a new major version
- patch releases should fix bugs without changing the intended API shape
What counts as public API
For this repository, public API includes:
- exported Go identifiers in public packages
- documented package behavior described in this docs site
- compile-checked examples
- module path and package layout
It does not include:
- internal package details
- undocumented incidental behavior
- product-specific route names from applications that embed
proxykit
Compatibility promise
The project aims to grow by:
- adding new packages
- adding new
Optionsfields - adding new helper functions
- tightening docs around already intended behavior
The project should avoid:
- breaking constructor signatures without a major release
- collapsing multiple focused packages into a monolith
- adding app-specific DTOs, route contracts, or monitor protocols to the public surface
Stability expectations by package
Core packages
These are the main foundation packages and should evolve conservatively:
reverseforwardconnectwsproxyobserveproxyruntime
Supporting packages
These are also public, but narrower in scope:
cookiesproxyhttpsocketiomitm
They should still be stable, but they are intentionally more focused helpers, not the main entry points for most users.
How to adopt safely
If your application depends on proxykit, the safest pattern is:
- pin a released version in
go.mod - keep your own adapter layer between product contracts and transport packages
- upgrade one minor release at a time
- run your integration tests against the new version before shipping
What this repo will not promise
proxykit will not promise stability for:
- your application's route names
- your storage schema
- your frontend delivery protocol
- your admin API shapes
Those belong in your application layer, not in the module.