Skip to content

110 - Adopt plugin versioning scheme#110

Open
robobario wants to merge 1 commit into
kroxylicious:mainfrom
robobario:explicit-plugin-versioning
Open

110 - Adopt plugin versioning scheme#110
robobario wants to merge 1 commit into
kroxylicious:mainfrom
robobario:explicit-plugin-versioning

Conversation

@robobario
Copy link
Copy Markdown
Member

@robobario robobario commented May 14, 2026

This is a smaller idea for adopting plugin versioning without tackling all of the other ideas like contract-first Configuration based on JSON schemas, kubernetes sympathy by decomposing into multiple configuration files which are covered in #96 . It only makes versioning explicit and adopts k8s CRD versioning conventions to try and make our stability guarantees explicit.

Proposal generated with the help of Claude Sonnet 4.5

@robobario robobario requested a review from a team as a code owner May 14, 2026 05:11
Assisted-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Signed-off-by: Robert Young <robertyoungnz@gmail.com>
@robobario
Copy link
Copy Markdown
Member Author

Prototype implementation kroxylicious/kroxylicious#3952

@robobario robobario changed the title Adopt plugin versioning scheme 110 - Adopt plugin versioning scheme May 14, 2026
@robobario robobario mentioned this pull request May 14, 2026
For proxy users, configuration syntax extends from `type: RecordEncryption` to support `type: RecordEncryption/v1alpha1`.
When a version is present in the type string, the proxy uses it both for validation and for name resolution.
A plugin named RecordEncryption annotated with `@Version("v1alpha1")` can be referenced as either `RecordEncryption/v1alpha1` (explicit version) or `RecordEncryption` (implicit, triggers warning).
If multiple RecordEncryption implementations exist with different versions (v1alpha1 and v1beta1), users disambiguate by including the version rather than switching to fully qualified class names.
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that should say can disambiguate it's optional and they could still disambiguate using fully qualified name, backwards compat is preserved in phase 1.0.0

Kroxylicious is approaching its 1.0.0 release, which will establish backward compatibility guarantees for public APIs.
However, different plugins may have different maturity levels and API stability guarantees.
Coupling all plugin APIs to a single project version creates tension between shipping experimental features and maintaining stability.
The Record Encryption filter, for example, may need multiple major revisions before its API stabilizes, but tying those revisions to the project version would either delay 1.0.0 or force premature API commitments.
Copy link
Copy Markdown
Member Author

@robobario robobario May 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

claude has picked our most stable plugin for the example 🤷


Phase 2 begins with the 1.0.0 release.

- The enforcement policy changes from warning to error when a plugin declares a version but the configuration omits it.
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

needs a bullet to say that the annotation on the plugin becomes mandatory too

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant