Skip to content

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 Options fields
  • 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:

  • reverse
  • forward
  • connect
  • wsproxy
  • observe
  • proxyruntime

Supporting packages

These are also public, but narrower in scope:

  • cookies
  • proxyhttp
  • socketio
  • mitm

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:

  1. pin a released version in go.mod
  2. keep your own adapter layer between product contracts and transport packages
  3. upgrade one minor release at a time
  4. 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.

Released under the Apache 2.0 License.