Do reactive searches recalculate across all active user sessions?

I have a question about how reactive searches work in Bubble.

Suppose I have an application with 50 users connected simultaneously. Each user has a Repeating Group whose data source is a Search for with constraints that limit the results to the records that user can see.

For example:

Search for Orders

  • Constraint: Derivante = Current User
  • Constraint: Status = Pending

Now suppose an administrator creates or modifies an Order.

Does Bubble re-evaluate the reactive searches in all active sessions, even if the change does not belong to the user of those sessions?

For example:

  • User A modifies an Order.
  • There are 49 other users connected.
  • Each user has a reactive Search for Orders on their page.
  • Each search has constraints limiting the results to that user’s own orders.

Does Bubble still re-evaluate all 49 reactive searches?

And, if so:

  1. Does each of these re-evaluations generate WU consumption?
  2. Are Search for constraints applied server-side before the search is performed?
  3. Can Privacy Rules prevent Bubble from re-evaluating a search when the modified record does not belong to that user?
  4. Is there a way to make a reactive search update only when a change can actually affect that user’s results?
  5. Can the number of simultaneously connected users significantly multiply WU consumption when they have reactive searches on the same data type?

I am trying to understand an increase in WU consumption in an application where multiple users have the same page open simultaneously, and changes made by one user seem to trigger activity in the other users’ sessions.

Can someone confirm exactly how Bubble handles this internally?

Search operators set as Data sources will listen for changes to their results. So all clients will react to updates to the Search.

All data sources set to a scalar datatype are also reactive.

Only if the results would be different

If you have a search for Invoices where User = current user then an update to the Invoices table that adds a new user won’t refresh that user’s search, but a record that does match that constraint will.

I believe it’s managed by a reversed search (see ‘percolator’ if you want to read more about how it works)

So the client subscribes to the query, and Bubble’s websocket notifier will notify when the result set changes


Thanks George. I made a test based on your explanation and recorded it in the attached video.

I opened the same app in two sessions:

  • Left: a Derivante user, with a Repeating Group showing Orders filtered by Derivante = Current User.

  • Right: an Administrator.

I then edited an Order from the Administrator session that does not belong to the Derivante in the left session.

After the update, I can see an additional network request in the Derivante session.

What I found is that the additional request appears to be an mget, not an msearch.

Before the Administrator updates the Order, the Network tab shows 22 / 77 requests. After the update, it becomes 23 / 78 requests.

The video shows the test and the Network activity.

So my questions are:

  1. Is this mget part of the reactive query/percolator mechanism you described?

  2. Does this mget mean that Bubble is re-evaluating or updating the reactive query, even though the modified Order does not match the Derivante’s constraints?

  3. Does this mget generate WU consumption?

  4. If it does consume WU, is there a way to prevent this request when the modified record cannot affect the user’s result set?

I want to make sure I understand what I’m seeing in the Network tab before I change the architecture of my application.

Thanks again for explaining how the percolator and WebSocket notifier work.

Thanks for the clarification. This is exactly what I’m trying to understand.

In my application, I have multiple users with a Repeating Group whose Data source is a Search, for example:

Search for Orders
Constraint: Derivante = Current User

I tested this with two sessions:

  • Session A: Derivante user, with the Orders table open.

  • Session B: Administrator.

The Administrator modified an Order that does not belong to the Derivante in Session A.

Even though the modified Order cannot be part of the Derivante’s search results, I can see an additional network request (mget) in Session A immediately after the Administrator updates the Order. I recorded the test in a video.

This raises a few questions for me:

When you say “all clients will react to updates to the Search”, does that mean that every client that has that Search as a Data source will perform some reactive work when the underlying data type is modified, even if the changed record does not match that client’s constraints?

Or does Bubble’s percolator determine which clients’ result sets are actually affected, as George explained?

And, most importantly for me:

Does this reactive activity consume WU on every connected client, even when the result set of that client’s Search does not actually change?

I’m asking because I have many Derivante users who may leave the Orders page open for several hours without interacting with the application. If every update to the Orders data type causes reactive work in those sessions, this could have a significant impact on WU consumption.

Also, regarding your second point: if a Data source is a scalar datatype and is reactive, does the same principle apply to things like Current User's field, Parent group's thing, or other single-value data sources?

I’m trying to understand exactly what is happening under the hood before deciding whether I should replace some reactive Data sources with Custom States and refresh them manually.

i think it only pushes to sessions that can see that data under privacy rules, but yeah with 50 people on a live search it still gets messy. for dashboards we’ve stopped relying on reactive searches and just refresh a custom state / api call when something actually changes.