Name | Modified | Size | Downloads / Week |
---|---|---|---|
Parent folder | |||
README.md | 2025-06-25 | 3.7 kB | |
shiny 1.11.0 source code.tar.gz | 2025-06-25 | 4.0 MB | |
shiny 1.11.0 source code.zip | 2025-06-25 | 4.4 MB | |
Totals: 3 Items | 8.4 MB | 0 |
Improvements
-
When auto-reload is enabled, Shiny now reloads the entire app when support files, like Shiny modules, additional script files, or web assets, change. To enable auto-reload, call
devmode(TRUE)
to enable Shiny's developer mode, or setoptions(shiny.autoreload = TRUE)
to specifically enable auto-reload. You can choose which files are watched for changes with theshiny.autoreload.pattern
option. (#4184) -
When busy indicators are enabled (i.e.,
useBusyIndicators()
), Shiny now:- Shows a spinner on recalculating htmlwidgets that have previously rendered an error (including
req()
andvalidate()
). (#4172) - Shows a spinner on
tableOutput()
. (#4172) - Places a minimum height on recalculating outputs so that the spinner is always visible. (#4172)
- Shows a spinner on recalculating htmlwidgets that have previously rendered an error (including
-
Shiny now uses
{cli}
instead of{crayon}
for rich log messages. (thanks @olivroy, [#4170]) -
renderPlot()
was updated to accommodate changes in ggplot2 v4.0.0. (#4226) -
When adding the new tab via
insertTab()
orbslib::nav_insert()
, the underlying JavaScript no longer renders content twice. (#4179)
New features
-
textInput()
,textAreaInput()
,numericInput()
andpasswordInput()
all gain anupdateOn
option.updateOn = "change"
is the default and previous behavior, where the input value updates immediately whenever the value changes. WithupdateOn = "blur"
, the input value will update only when the text input loses focus or when the user presses Enter (or Cmd/Ctrl + Enter fortextAreaInput()
). (#4183) -
textAreaInput()
gains aautoresize
option, which automatically resizes the text area to fit its content. (#4210) -
The family of
update*Input()
functions can now render HTML content passed to thelabel
argument (e.g.,updateInputText(label = tags$b("New label"))
). (#3996) -
ExtendedTask
now catches synchronous values and errors and returns them via$result()
. Previously, the extended task function was required to always return a promise. This change makes it easier to useExtendedTask
with a function that may return early or do some synchronous work before returning a promise. (#4225) -
The
callback
argument of Shiny.js'InputBinding.subscribe()
method gains support for a value of"event"
. This makes it possible for an input binding to use event priority when updating the value (i.e., send immediately and always resend, even if the value hasn't changed). (#4211)
Changes
-
Shiny no longer suspends input changes when any
<input type="submit">
or<button type="submit">
is on the page. Instead, it now only suspends when asubmitButton()
is present. If you have reason for creating a submit button from custom HTML, add a CSS class ofshiny-submit-button
to the button. (#4209) -
Shiny's JavaScript assets are now compiled to ES2021 instead of ES5. (#4066)
-
Upgraded jQuery from 3.6.0 to 3.7.1. (#3969)
-
Updated jQuery UI from 1.13.2 to 1.14.1. (#4175)
Bug fixes
-
The Shiny Client Console (enabled with
shiny::devmode()
) no longer displays duplicate warning or error message. (#4177) -
Synchronous errors that occur inside a
ExtendedTask
no longer stop the session. (#4225) -
Calling
removeModal()
immediately aftershowModal()
no longer fails to remove the modal (this would sometimes happen if the remove message was received while the modal was in the process of being revealed). (#4173) -
runExample("08_html")
now (correctly) requests to 'shiny.min.css', eliminating a network request failure. (#4220) -
shiny::shinyAppTemplate()
no longer errors without a call tolibrary(shiny)
. (#3870)