Hi Everyone,
This is my first time posting here.
I have a question relating to a behavioral change I’ve noticed in the monday.listen function, which I was using in an app I am developing for concurrency management.
Objective
Use monday.listen to facilitate concurrency management in an Item View feature. This would enable multiple users to edit the same item without a "last write wins" condition.
Previous Success
In early September 2025, I successfully configured a listener in my app that would retrieve updates to the item and perform a reconciliation process.
I validated this by performing a "two-tab" test:
-
Open the same item and load the app in two separate browser tabs (Tab A and Tab B).
-
Submit a change to the item in Tab A.
-
Receive the
change_column_valueevent in Tab B, display a notification, and reconcile the data.
This is the code pattern that was working:
const handleEvents = (res) => {
// Note: My real code checked the event type, but the
// key point is that I *was* receiving the event cross-tab.
if (res.data.type === 'change_column_values' && res.data.itemIds.includes(itemId)) {
monday.api(`query { items (ids: [${itemId}]) { name column_values { id type text value } } }`)
.then(itemRes => {
if (itemRes.data.items[0]) {
reconcileData(itemRes.data.items[0]);
}
});
}
};
const eventsListener = monday.listen("events", handleEvents);
Current Troubleshooting
Because this listener logic was embedded in a much larger app, I created a second, simple app with the explicit goal of validating the monday.listen function. Its only function is to log all events to the browser’s console.
Here is the complete validation app's code:
import React, { useEffect } from 'react';
import mondaySdk from "monday-sdk-js";
const monday = mondaySdk();
monday.setApiVersion("2024-10");
function App() {
useEffect(() => {
// 1. Define our single event callback
const eventCallback = res => {
console.log("EVENT RECEIVED:", res);
};
// 2. Listen for "events"
console.log("Subscribing to 'events'...");
monday.listen("events", eventCallback);
}, []); // Empty dependency array, runs only once
// Render nothing. We are only watching the console.
return null;
}
export default App;
Results
I used this new validation app to perform my tests again:
-
Two-Tab Test: I opened the Item View (with the app) in Tab A. In Tab B, I modified the same item.
-
Creating a new item (works):
new_itemevent is logged in Tab A's console. -
Changing a column value (fails):
change_column_valueevent is NOT logged in Tab A's console.
-
-
Same-Tab Test: I opened the Item View (with the app) and its console. Then, in the same tab, I clicked on the board behind the panel and edited the item.
-
Changing a column value (works):
change_column_valueevent IS logged in the app's console.
-
This suggests that since I last tested this, change_column_value events are no longer broadcast across tabs, while new_item events still are. I checked the changelogs but didn't see a note on this.
My Questions
-
Has anyone else run into this?
-
Is this a conscious, permanent change to optimize performance (i.e., to reduce "chatty" events)?
-
If so, is there any way to restore or opt-in to cross-tab broadcasting for
change_column_value?
Any recommendations or insights into this would be greatly appreciated. Hopefully, I provided enough detail!