You could use reactiveFileReader to have all sessions instantly react when the csv file changes. See the "cross-session reactive file reader" example here:
https://shiny.rstudio.com/reference/shiny/latest/reactiveFileReader.html
If you ONLY want the csv file changes to be detected for new sessions, you could do the same thing, but wrap each read of the reactiveFileReader in isolate() (perhaps write a function for this), e.g.:
fileData <- local({
rfr <- reactiveFileReader(1000, NULL, 'data.csv', read.csv)
function() { isolate(rfr()) }
})
Then in your reactive expressions and outputs, call `fileData()`. (This construction with using local() is a little weird, but the nice thing about it is it makes the rfr object "private", assuming that's desirable in your case.)