Upgrade notes for Shiny 1.10.0

New features and improvements

  • When busy indicators are enabled (i.e., useBusyIndicators() is in the UI), Shiny now:

    • Shows the pulse indicator when dynamic UI elements are recalculating and no other spinners are visible in the app. (#4137)
    • Makes the pulse indicator slightly smaller by default and improves its appearance to better blend with any background. (#4122)
  • Improve collection of deep stack traces (stack traces that are tracked across steps in an async promise chain) with coro async generators such as elmer chat streams. Previously, Shiny treated each iteration of an async generator as a distinct deep stack, leading to pathologically long stack traces; now, Shiny only keeps/prints unique deep stack trace, discarding duplicates. (#4156)

  • Added an example to the ExtendedTask documentation. (@daattali #4087)

Bug fixes

  • Fixed a bug in conditionalPanel() that would cause the panel to repeatedly show/hide itself when the provided condition was not boolean. (@kamilzyla, #4127)

  • Fixed a bug with sliderInput() when used as a range slider that made it impossible to change the slider value when both handles were at the maximum value. (#4131)

  • dateInput() and dateRangeInput() no longer send immediate updates to the server when the user is typing a date input. Instead, it waits until the user presses Enter or clicks out of the field to send the update, avoiding spurious and incorrect date values. Note that an update is still sent immediately when the field is cleared. (#3664)

  • Fixed a bug in onBookmark() hook that caused elements to not be excluded from URL bookmarking. (#3762)

  • Fixed a bug with stack trace capturing that caused reactives with very long async promise chains (hundreds/thousands of steps) to become extremely slow. Chains this long are unlikely to be written by hand, but coro async generators and elmer async streaming were easily creating problematically long chains. (#4155)

  • Duplicate input and output IDs – e.g. using "debug" for two inputs or two outputs – or shared IDs – e.g. using "debug" as the inputId for an input and an output – now result in a console warning message, but not an error. When devmode() is enabled, an informative message is shown in the Shiny Client Console. We recommend all Shiny devs enable devmode() when developing Shiny apps locally. (#4101)

  • Updating the choices of a selectizeInput() via updateSelectizeInput() with server = TRUE no longer retains the selected choice as a deselected option if the current value is not part of the new choices. (@dvg-p4 #4142)

  • Fixed a bug where stack traces from observeEvent() were being stripped of stack frames too aggressively. (#4163)