I took a look at the latest components, @georgecollier , really interesting approach.
I know a few Bubble users who already put code inside HTML elements for different use cases, sometimes even for pretty large parts of a page. Iâve done that myself too, not only for CSS styling, but for complete components.
So I think sharing these as ready-made components is a pretty interesting idea.
To me, the main difference of these HTML-based components compared with plugins is basically where the code lives and who is responsible for maintain and update it, also styling and autobind.
So, these are some of my thoughts aboutâŚ
UPDATES
With BP components (HTML-based), the code is copied into the given app. That means you can grab an initial version from the original Unicorn UI lib, then open it, change it, extend it and adapt it to something the original component was never designed to do.
With plugins, the internal code stays inside the plugin. You work with the properties, actions, events and states that the plugin exposes. You have less freedom to change it beyond what the plugin allows you to do, but you also donât have to maintain them yourself.
Updates are also a bit different. A plugin developer can fix something or release a new feature once and publish a new version that can be reflected to all users. The trade-off is that you become dependent on the plugin author for maintenance and future fixes. So the reputation of the author, the pluginâs history, and the level of support behind it become important.
This is especially relevant with free plugins, where ongoing maintenance and support can sometimes be limited simply because the author has less incentive or time to keep investing in them.
And then⌠with a BP component that lives inside the app, you have your own copy, which is great for customization, but different apps can end up with slightly different versions over time. Specially because you can modify the original version to accommodate your needs, and these changes can be done manually, if you know the basics about code (with a risk to break something silently or lose styles consistency between componentes in the same family) or using AI, that I supposed would be more practical in these days. Or maybe even using Bubbleâs AI agent⌠or your own agent if you trained one to do this (I did it for some of my apps and it is working well).
Also, I believe that if you use BP components with multiple apps, and if at some point the original one receives a fix/update that you also want that in your app, or if you did some update by yourself and want that in all those other apps already using it, you will need to replicate the changes (specially if they are critical) to all those apps. In this case, I think, to no be so much time consuming, you will also need to use AI and be confident that the results will be stable and not introduced small differences between apps.
STYLING
Another practical difference is styling. If a plugin is built properly around Bubbleâs native style system, you can have multiple predefined styles for the same component and switch between them very quickly across the app.
For example, you could have two or three versions of the same dropdown, input or toggle already defined as Bubble styles and reuse them anywhere without changing the component itself.
With an HTML-based component, you can achieve the same result, but you would normally need either separate versions of the component or additional parameters to control those visual variations.
So plugins can fit (if made in a correct way) quite naturally into Bubbleâs existing global styling workflow (with some exceptions), while HTML-based components usually need to recreate that layer themselves.
But yeah, the vast majority of plugins donât do this the way, like @boston85719 pointed above.
There are some input plugins where the author didnât even select the âInput elementâ type, which already limits the plugin in many ways.
DYNAMIC DATA SOURCE
Another difference is data flexibility.
Reusable elements are still limited by the datatype they are built around, maybe Bubble will change this in the future, what would be really useful. Because, right now, if a component expects a specific Thing, datatype or option set, reusing the exact same component with a completely different data structure can require extra parameters, duplicated versions or some additional abstraction.
Plugins can be a bit more flexible here because they can expose more generic inputs and states without being tied as closely to a specific reusable element datatype.
So for components that need to work with many different kinds of dynamic data, plugins can sometimes provide a cleaner interface.
LIMITATIONS
One thing I do agree with is that Bubbleâs native components still have a lot of limitations, and some common components simply donât even exist natively.
Plugins can fill those gaps, but if you rely on many different plugin authors, you can eventually end up with some visual and technical debt. Different components may follow different UI patterns, expose different features, use different naming conventions, and behave differently even when they solve similar problems.
Thatâs actually one of the reasons Iâve always preferred building many of my own components around the same design system. I also use my own React component library as a reference, so I try to keep the same patterns, behavior and visual language across everything I build.
From that perspective, I can definitely see the appeal of having a large component library where everything follows a more consistent approach.
So I donât really see one as replacing the other. I think it depends much more on the type of user, the project, and how much control you actually want over the component.
Some developers will prefer having access to the implementation and being able to change anything they want. Others will prefer a more contained component where the internal code is maintained for them.
So⌠I think, in the end, they solve similar problems in different ways.
BP HTML-based components are AI-editable, giving you more control over the implementation.
Plugins are mostly AI-configurable (if well documented), giving you less control due the abstraction layer, but less responsibility for maintaining them too.
Well⌠you know, these are just some of my thoughts at the moment⌠So let me know your perspective about these points, and correct me if I am wrong in some wayâŚ
Anyway, great contribution, man.
Also, one question, are these components handling with autobind in some way?