I’ve just triggered a new build. I couldn’t recreate the issue you faced? But I did update my example. One thing I was forgetting to do was send a cabbageIsReadyToLoad message on startup. Some housekeeping tasks weren’t running because of this. I also added some code to show how to update a plain old html slider from Csound. Oh and how to also best handle parameter changes, values, JSON data etc.
const handleMessage = async (event) => {
console.log("Message received:", event.data);
let obj = event.data;
let slider;
if (obj.command === "parameterChange") {
// For parameterChange messages, find slider by paramIdx
slider = obj.paramIdx === 0 ? document.getElementById('slider1') : document.getElementById('slider2');
} else {
// For other messages, find slider by id
slider = document.getElementById(obj.id);
}
if (slider) {
switch (obj.command) {
case "parameterChange":
console.log(`Parameter change for ${obj.paramIdx}:`, obj);
slider.value = obj.value;
break;
case "widgetUpdate":
if (obj.value !== undefined) {
console.log(`Updating ${obj.id} to value:`, obj.value);
slider.value = obj.value;
}
else if (obj.widgetJson !== undefined) {
let widgetObj = JSON.parse(obj.widgetJson);
let bounds = widgetObj.bounds;
if (bounds) {
slider.style.position = 'absolute';
slider.style.top = bounds.top + 'px';
}
// Set value if the UI has just been reopened
if (widgetObj.value !== undefined) {
slider.value = widgetObj.value;
}
}
break;
default:
break;
}
}
};
Automation is working, updating parameters from the UI is working, and updating the frontend from Csound is also working. 
Let me know if you continue to have issues with larger ranges.
Update Custom UIs.zip (2.7 KB)