[ANNOUNCEMENT] kcp project is transitioning to the monorepo structure

10 views
Skip to first unread message

Marko Mudrinić

unread,
Oct 4, 2025, 9:58:14 AMOct 4
to kcp...@googlegroups.com, kcp-...@googlegroups.com

Dear kcp folks,


We’re happy to announce that the kcp project is transitioning towards the monorepo structure. We believe that this will significantly improve the experience of those who are contributing to kcp and of those who are using kcp projects/libraries covered by this change.


This announcement explains how this change will look like and how it will affect you as a user and as a contributor.


When will this happen?


The exact transition date is yet to be determined, but we expect sometime next week (week of October 6th).


What does that mean?


TL:DR: If you are familiar with github.com/kubernetes/kubernetes staging pattern - it's the same.  


The source code for some projects close to the kcp core will live in the kcp-dev/kcp [1]  repository under the “staging/src/github.com/kcp-dev” directory. That source code (i.e. relevant commits) will be periodically synchronized from the kcp repository to the original repositories (which will be called “published repositories” from now on). Aside from the source code, branches and tags will also be synchronized from the kcp repository to the published repositories.


The affected projects at this time are: kcp-dev/apimachinery [2], kcp-dev/client-go [3], and kcp-dev/code-generator [4].


What does that mean for users?


There are no significant changes for users and developers who are using the affected projects as libraries. There will be some minor organisational changes that will be explained in this section.


Because we’re synchronizing the source code to the original/published repositories, all these projects will still have their own original/dedicated Go module. For example, the Go module under “github.com/kcp-dev/client-go” will remain fully functional.


Prior to this change, we didn’t have a standard for branches and tags in these repositories. This will be the biggest change for developers who are using the affected projects as libraries.


We will be synchronizing branches and tags from the core kcp repository to the published repositories. That means that once we create a new branch in the core kcp repository, let’s say release-0.29, that branch will also be created in the published repositories upon the next synchronization. The same applies to tags, but with a small caveat.


Tags will inherit the major version of their original Go module. That means if the Go module major version for that project is v2, the tag will have v2 as the major version. For example, if we push v0.29.0 in the kcp repository, the tag in the published repository that has Go module major version v2 will be v2.29.0.


Concretely:

  • kcp-dev/client-go has the Go module major version at v0, so tags will be v0.x.y.

  • kcp-dev/apimachinery has the Go module major version at v2, so tags will be v2.x.y.

  • kcp-dev/code-generator has the Go module major version at v3, so tags will be v3.x.y. 


What does that mean for contributors?


For example, we’ll consider contributing to the kcp-dev/client-go project.


Prior to this change, you would make your changes directly in kcp-dev/client-go and open a PR.


After this change, you would make your changes in kcp-dev/kcp, in the “staging/src/github.com/kcp-dev/client-go” directory, and open a PR in the kcp repository. Your commits will be automatically synchronized to the appropriate published repository, in this case kcp-dev/client-go.


All PRs in the published repositories will be automatically rejected and closed. If you have any open PR in those repositories prior to this change, you’ll have to manually create a new PR in the kcp repository instead.


How will this synchronization work?


The synchronization is planned to happen every 4 hours for now, but the synchronization period might be adjusted as needed. The synchronization will be done using the fork of Kubernetes’ publishing-bot project [5].


If you have any questions about this change, please do not hesitate to reach out to us. You can reply to this email or reach out via our official communication channels [6].


[1]: https://github.com/kcp-dev/kcp

[2]: https://github.com/kcp-dev/apimachinery

[3]: https://github.com/kcp-dev/client-go

[4]: https://github.com/kcp-dev/code-generator

[5]: https://github.com/kcp-dev/publishing-bot

[6]: https://docs.kcp.io/kcp/main/#getting-in-touch
Reply all
Reply to author
Forward
0 new messages