Fixed! I was using the callback function to change the output of the dashboard based on a dropdown menu selection. If the callback function is returning a graph, then the graph is constantly being destroyed and redrawn. For static graphs this isn’t noticeable, but for 3dsctterplots with zoom and a turntable, constantly re-drawing the graph can cause these tools to stall. I got around this by instead hiding different panels of the UI by returning the style instead of the whole graph, and returning the go.Figure object as a dictionary. when the dataset needs to change. It would be nice though to have multiple outputs for one input with the callback function so the code could be less redundant.