-
Notifications
You must be signed in to change notification settings - Fork 5.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
RFC: Stop accepting new plugins to the backstage/backstage repository #20266
Comments
Thanks for starting the discussion on this topic @Rugvip As a plugin author I'm torn by this as being able to contribute plugins has helped me contribute more and become more involved in the overall Community (this might be a risk as well) but I do think it is the right path forward. The number of PRs used to sit about 60-70 and now is regularly around 100-110, part of this is due to growth which is great but part of it is due to the number of plugins in the I've also been thinking about the idea of providing the Community a way to "spin up" a repo with everything you need to build and support open source plugins - release pipelines, changesets, etc. - all in one command so that you can hit the ground rolling. This would be a pretty awesome feature and would lower some of the barriers for Orgs hosting plugins themselves. For this to work well I do think we need clear guidance as to what would make sense to be part of the
This feels a bit unclear, and is really opinion based, having some guidelines published would help with this aspect. Finally I think we need to make Plugin Discovery easier - the Plugin Directory is nice but it's also getting large, hard to find things and doesn't really help showcase the capabilities of plugins very well. |
Have you considered as alternative allowing a monorepo for all those other plugins? For instance, the current
This last repository then may eventually become many repos in other orgs, at that point does not matter much, the ownership of the core team is low on this one. |
As we do not use Azure, to me Azure Devops is 100% not core. I would never use it. |
@jcarres-mdsol based on your previous suggestion to have 3 repos - framework, core, and plugins - that makes sense to me but it also highlights the point I was trying to make around the need for clear guidance. |
Note also the comment regarding a community plugins repo in the Alternatives section above. |
Just wanted to share some recent issues that are worth considering:
These seem to strengthen the Alternative proposal of having a "community plugins" repo. |
Hi, this looks like an important topic, I can imagine the huge workload... In fact these last months every time I turned around a few weeks a lot of new plugins appeared in the marketplace! Based on the little experience I've had maintaining a Backstage instance, the best part is being able to update automatically with the cli and tools you provide and enjoy an easily and constantly updated developer portal. The only problems we have had are due to external plugins (we only use plugins that are on the list or that you mention in the documentation). All the proposals look like good candidates but is there any way to ensure compatibility of the plugins regardless of the Backstage version? Also I guess that in case most of plugins became external we will lose the possibility to update plugins with backstage-cli right? |
In my experience backstage core has done a good job having deprecation periods for changes that would break plugins. |
I totally agree with you on that, I was just having some thoughts about what @Rugvip mentioned here |
Totally understandable situation to be in, and I wholeheartedly agree that plugins outside of core components should really live outside, either in a separate repo from backstage or from the plugin maintainer. TLDR: New CLI/Documentation steps for plugin devs specific for contributions would be great. I also think both core and community plugins should be moved out of core into separate repo's, and that community plugins be allowed to live in a repo still under backstage, so it can reuse many of the points below. A few notes as someone who is and wants to continue to develop plugins for the purpose of contribution, but is not part of the core maintainer group, many points which @awanlin already mentioned, mostly about what I feel will be missed now that plugins would be developed outside the main repo:
|
I've started my train-of-thought with a clear "yes, that helps the machine move". Now I'm thinking: Yes, we have a people problem. I'm concerned that creating dozens of people problems isn't making the ecosystem better. From a contributor perspective, we "contribute to backstage" right now. An external plugin is an obligation to check for deprecations at least every other release. That moves plugins from a contribution to an obligation. I'm also concerned that many plugins will struggle to find a community in their own right. So we'd often get a people problem for each plugin, to do triage, maintenance, development, reviews, and succession of ownership. From an adopter perspective, I stopped using 3rd party plugins a year ago. I moved over to "steal and own". Back then, I was frequently blocked from updating backstage by the lack of a release on the 3rd party side. I don't know if that's better today. Also, I'm one of those weird folks that cares about their supply chain. Having various versions of the same code bothers me, and they're mostly aligned inside the backstage repo. And easy to fix in a monorepo, compared to a multi-repo setup. PS: I've been in a couple of different places on my train of thought, and some might be interesting technically, but not relevant to this comment. |
I can definitely try and see both sides of the fence, but obviously can't sit in the maintainers shoes. I share much of @Pike's experience and sentiment. We also don't use many 3rd party plugins at all for similar reasons and/or challenges upgrading Backstage core, etc. I think this also comes down to an indirectly related aspect to this. Sure having a lot of plugins is nice. We use x and backstage has a plugin for x. That said, the quality and usefulness of plugins varies drastically. Just having a check mark that says oh yeah Backstage has a plugin for x doesn't cut it. As early adopters we tried this and the kitchen sink approach didn't really benefit anyone. Instead we are much more selective of what plugins we adopt and if they actually solve a business problem. So, from that perspective more is not necessarily better and quality and maintenance of specific plugins is more important. This brings the question, how does this RFC impact this? The other thing I've often been pondering, is even within the same monorepo there are cases where concepts are duplicated when they could be generalized and re-used. This is at the best of times a hard problem to solve as probjects get bigger. However, splitting things up will likely make consolidating and generalizing concepts a bit more challenging. At the very least potentially discouraging collaboration to contribute some cross cutting things back to core. I haven't been as active in the community in the last few months, but I have been following things. The ideas around project areas, etc. seems sound, etc. but I can't comment on how well that has worked. I've also been following OpenTelemetry a bit and albeit the project being much larger, they also have these concepts and have quite a few |
I think the cross-pollination of ideas/components and the creation of generalizations is a huge pro of a monorepo. I think one more reason to have a |
Awesome feedback on this RFC, thank you all 😁 🎉 Starting off with a couple of individual replies:
Very much this. There's a lot of discussions around this topic here. There's both the discoverability angle, but also curation and other tools to help make sound decisions for which plugins to install and use.
Yes, and to be clear we still are. The proposal in this RFC would be more of a short-term adjustment to help alleviate capacity issues, but we are still considering many paths forward. That said we are still leaning towards the proposal in this RFC of moving plugins out of the main repo in some form, but the discussion here is valuable feedback that will help us find a good path.
Backwards compatibility in the core is a very high priority for us, the compatibility with older versions of For the second point: absolutely not! not in the long term anyway 😁 We want to evolve the To provide a bit more context on the "smoother cross-repo development", that's be in a world where we have plugin
That's an interesting idea and of course hard to scale, but I do think it would be nice to have in some form. Perhaps a more general plugin review request issue type in this repo or similar.
Yep the problem right now is that those obligations instead fall on the core maintainers, which isn't scaleable. As discussed there are more solutions to that other than moving all plugins to separate repos. No decisions are made yet and we're still figuring out the way forward.
I would say this is quite problematic but also expected for some cases. I think it's alright for some cases, but shouldn't be the default approach to adopting external plugins. It's certainly a good method for building internal plugins though.
I agree and it's one of the reasons we went with the
Might've looked in that direction once or twice 😁 Been speaking to some of them at KubeCon too about their governance structure. OpenTelemetry has the contrib repos with quite a lot of activity, and also a lot of separate repos for SDKs and other components.
It is, but I don't think it's the only way to do it. I've actually found that the varying quality of plugins is a bit of a trap in To finish I have a more general question on the topic of using external plugins that I'd love some feedback on in order to help us move forward and improve the ecosystem: What pain-points do you experience when using plugins that do not belong to
|
I appreciate the detailed responses and insights! 😁 I wanted to highlight a current pain point that @ahhhndre briefly mentioned earlier. Starting from Backstage version 1.18.0, there have been changes in the Azure DevOps integration syntax, particularly for those using Personal Access Tokens (PAT). This transition has affected our usage, and I'd like to outline the differences: Before 1.18.0 integrations:
azure:
- host: dev.azure.com
token: ${AZURE_DEVOPS_TOKEN} With 1.18.0 integrations:
azure:
- host: dev.azure.com
credentials:
- personalAccessToken: ${AZURE_DEVOPS_TOKEN} We rely on two scaffolder plugins that are not under the @backstage/* namespace: These plugins are affected by this change as they still use the old syntax in their code. Here's an excerpt of the code snippet from one of these plugins: if (!integrationConfig.config.token && !ctx.input.token) {
throw new InputError(`No token provided for Azure Integration ${host}`);
}
const token = ctx.input.token ?? integrationConfig.config.token!; I've attempted to use both syntaxes concurrently, but it hasn't yielded the desired results. Previously, I could easily update Backstage every week when a new release was shipped. However, with these template changes, updating Backstage now leads to broken configurations. I've been in communication with the maintainers of these plugins, and my initial suggestion was to migrate them to use the @backstage/* namespace. However, after becoming aware of this RFC (Thanks @ahhhndre ❤️), I'm now waiting to see what options we have moving forward. That's the current situation, and I hope this information is helpful in making any decisions. 😁 P.S. After wrapping up with the Azure DevOps plugins and a few other tasks, I'd be happy to contribute to the improvement of the version:bump. Currently, I'm working on a Node/Bun CLI project, so any learnings would be greatly appreciated! |
@antoniobergas I think this is a pretty good example of how most of the time, this is a technical issue, in particular a lack of abstraction. The proper solution to this is to use an injected It's only a technical problem in the sense that it needs to be designed and built though. There's also the angle of identifying, encouraging and making it easy to build these abstractions. That in the end is related to @andrewthauer's point above where a monorepo(s) can really help out in the identification and creation of solutions to these kind of common problems. For this and other reasons we are considering a path forward with a repo structure that includes repo(s) oriented towards these kind of integrations. |
Another datapoint backstage/mkdocs-techdocs-core#145 I think it is significant that someone has these questions on a repo in this very github org. |
The idea of a Community Repository is great! To align with the RFC's goal of reducing core maintainer workload, the question remains what a sustainable model for maintaining the Community Repository could look like. Can the SIGs and project areas play a central role in maintaining the repository, are there individuals from the community who would be keen to help out? An alternative to a single community repository could be a "Contribution" Organization for Backstage in GitHub. Examples for this approach are coming from Nuxt and Crossplane, which are using it for their plugin-like ecosystem. |
Just adding my two cents here, as also mentioned to @benjdlambert offline at KubeCon today, I think having a community plugins repo within the Backstage org makes the most sense here. That way the open source project would at least have the ability to assign new ownership to plugins that have been abandoned by their original maintainers. That would be really hard to do if all community created plugins would live under various different orgs or users. |
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
@Rugvip, is this genuinely stale and you have the feedback you need? |
@awanlin yep let's close this. Our goal is to move forward with a community plugins repo, thank you all for your feedback! 🙏 🎉 |
🔖 Need
Starting out the Backstage project we thought it was important to have a large number of plugins available in the main repository. Both in order to help us make more informed decisions when building out the core framework and features, and also to help keep the project healthy and active with a lot of communication centered in one place.
The project has now grown (a lot! 🎉🙏), and we have plenty of plugins to keep the project active and help guide the evolution of the framework. A little bit too many in fact. We've had previous calls for contributions like #8294, but with the core maintainers being the owners of any plugin without a Project Area or Plugin Maintainer, it remains to be a significant workload for the core maintainers team. We want to reduce this workload, both to free up time for improving the project in other ways, but also to make sure that broadly used plugins receive the care that they deserve.
🎉 Proposal
We will stop accepting new plugins to the
backstage/backstage
repository. Exceptions are made for existing project areas that want to expand their set of plugins, as well as new library packages for existing plugins.We recognize that there is some work involved in setting up a repository to publish plugins from. We will provide a GitHub template repo with a base setup to help out. Plugins will not be able to use the
@backstage
namespace on NPM. They should instead use the@<org>/backstage-plugin-*
orbackstage-plugin-*
naming pattern. Plugin authors can keep adding their plugins to https://backstage.io/plugins to make them easier to discover.This is a step towards ensuring that the Backstage has a growing and healthy ecosystem of plugins, and we will keep working towards this in other ways. If you are a plugin maintainer that would like to help out by moving your plugin out of the
backstage/backstage
repo, please let us know and we can help get that sorted. There will be more to come on this in the future, so this is just an early opportunity for those alright with a slightly rockier road as we figure things out.〽️ Alternatives
We have many times discussed whether we should have a "community plugins" or "plugins contrib" repository in the Backstage GitHub organization. In the end we feel that it would encounter the same issues as what we're seeing in the main repository right now, so it is something we'd like to avoid. The Backstage Open Source project is from the very beginning built towards enabling an open and distributed ecosystem of plugins, with limited need for centralized control.
❌ Risks
There are some benefits to be had to have all plugins in one repository when it comes to keeping plugins up to date, as you can make broader changes more easily. At the same time it also adds friction since you end up in situations where you are forced to make upgrades early. The Backstage framework is in many ways designed to allow for plugins to not always be on the latest and greatest version of the core APIs. It is fine for plugins to lag behind and only do upgrades when necessary or to access new features. This means that while broad upgrades can be slightly more effective, more narrow ones can often be skipped altogether. There is of course also the fact that we are looking to distribute this workload, it is the reason for this RFC.
Another risk is that we simply do not have enough plugins in the main repository to properly test new features that we are building in the core framework. This is not a problem we have right now, but in the future we may need further investment into tooling that allows for smoother cross-repo development.
👀 Have you spent some time to check if this RFC has been raised before?
🏢 Have you read the Code of Conduct?
The text was updated successfully, but these errors were encountered: