Something I’ve been noticing as I work on optimization/refactoring problems in Bubble is how badly structured most of our apps are (even in simple problems) - and that’s why I agree with the certification program of our platform.
Today, I’m gonna talk about how to make a proper communication between reusable elements in Bubble, but first I’ll start with what is usually done out there.
![]()
The image above shows how the navigation is made across the app: a concatenation of multiple pairs of the type “key=value”. At first sight, it does not seem to be a bad practice at all. Some of the developers even justify with this: “The user just need to copy and paste for another user to enter the exact same page”. Is this really a win-win situation? Let’s evaluate.
Pros:
- Less page load
- Continuous navigation
- Less pages to manage
Seems good, right? But, if we use Reusable Elements, we also have the same pros. So what are the counters of the “key=value” navigation?
Counters:
1. Zero maintainability: As the app grows, managing hundreds of groups, conditionals and custom states may be very confuse, which increases the difficulty for new members to understand the structure while also increases the risk of conflict between conditionals/states, ultimately leading to unexpected behavior.
2. Limited scalability: First, there’s a hard limit of 10,000 combined total of elements, events and actions on a single page. Second, if the app reachs a very high level of usage, it’s unfeasible to keep everything on the same page.
3. Security risks: If the security logic depends only on “whether the tab is hidden or not” at the front-end level, a malicious user can manipulate states or URLs to display areas that he or she should not see. This might lead to the exploiter trying to access a restricted panels, manipulate parameters, ultimately leading to exposed sensitive information.
4. Hard debugging: With many elements and groups stacked on a single page, finding where the bug is easily becomes a “maze”. Each test or change can require many clicks, looking at the conditionals, states and workflows. This leads to an increased QA effort, as there is a huge “tree” of possibilities on the same page.
These are the type of counters that we do not find when utilizing communication between reusable elements. Look at the page of this SPA project I’m currently working on:
We can see in the page link that we do not have “key=value” navigation, even when opening a page of “details” of an Object of type “Property”. What we also can see is that we have 3 reusable elements communicating between each other on the index page (unfortunately, I can not show how good the user experience is, as it could be done just in a video). So how do I do that? It’s simple.
When I click on the table line of the property I want to see the details (Reusable Element 2 of the second image), I just trigger a custom event (because the same run javascript is used on another event). The custom event calls a function called “openpropertydetails”, that also sends the unique id of the current property - formatted as JSON-safe, because it automatically adds the quotation marks if I wanted to send this information via HTTP.
So, on the index page we listen to this event, like this:
And then the floating group containing the Reusable Element 3 of the second image will show up. It’s an indirect communication, but we can also do the same thing for a direct communication (which I can show on another post, but it’s quite literally the same thing if a Reusable Element A contains Reusable Element B).
We could also do the same thing for creating/updating an Object, like this:
The only difference is the use of “formatted as text” to send a null when creating an object.
This is my first post here. I’ve tried to make a brief presentation of my work while contributing for the community. I’m currently a Senior Software Developer in a Brazilian Software House, a certified Bubble developer since Feb/25, and a Developer of 3+ years of experience (I used to be a Java/Spring backend Engineer, but I’ve also worked with Angular when I was a FullStack High-Coder).
But how can I help you?
1. Bubble Architecture Audits: If you want to know if your app is built on robust, scalable foundations.
2. Complete End-to-End Development: We can work on MVP to production-ready solutions.
3. Performance & Security Optimization: Safeguard your data while speeding up load times.
4. Consulting & Team Training: Help your team create beautiful, secure, scalable and performatic apps with best practices and hands-on guidance.
I’m actively seeking international (US, EU, UK) remote opportunities. Book a 30-minute call with me here to discuss how I can help transform your Bubble project—or visit my portfolio for more details on my background and previous work. Let’s build something amazing together!



