Download Latest Version shiny 1.13.0 source code.tar.gz (2.9 MB)
Email in envelope

Get an email when there's a new version of Shiny

Home / v1.12.0
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2025-12-03 5.1 kB
shiny 1.12.0 source code.tar.gz 2025-12-03 2.9 MB
shiny 1.12.0 source code.zip 2025-12-03 3.3 MB
Totals: 3 Items   6.2 MB 0

OpenTelemetry support

  • Shiny now supports OpenTelemetry via {otel}. By default, if otel::is_tracing_enabled() returns TRUE, then {shiny} records all OpenTelemetry spans. See {otelsdk}'s Collecting Telemetry Data for more details on configuring OpenTelemetry. (#4269, [#4300])

  • Supported values for options(shiny.otel.collect) (or Sys.getenv("SHINY_OTEL_COLLECT")):

  • "none" - No Shiny OpenTelemetry tracing.
  • "session" - Adds session start/end spans.
  • "reactive_update" - Spans for any synchronous/asynchronous reactive update. (Includes "session" features).
  • "reactivity" - Spans for all reactive expressions. (Includes "reactive_update" features).
  • "all" [default] - All Shiny OpenTelemetry tracing. Currently equivalent to "reactivity".

  • OpenTelemetry spans are recorded for:

  • session_start: Wraps the calling of the server() function. Also contains HTTP request within the attributes.
  • session_end: Wraps the calling of the onSessionEnded() handlers.
  • reactive_update: Signals the start of when Shiny knows something is to be calculated. This span ends when there are no more reactive updates (promises or synchronous) to be calculated.
  • reactive, observe, output: Captures the calculation (including any async promise chains) of a reactive expression (reactive()), an observer (observe()), or an output render function (render*()).
  • reactive debounce, reactive throttle: Captures the calculation (including any async promise chains) of a debounce()d or throttle()d reactive expression.
  • reactiveFileReader, reactivePoll: Captures the calculation (including any async promise chains) of a reactiveFileReader() or reactivePoll().
  • ExtendedTask: Captures the calculation (including any async promise chains) of an ExtendedTask.

  • OpenTelemetry Logs are recorded for:

  • Set reactiveVal <name> - When a reactiveVal() is set
  • Set reactiveValues <name>$<key> - When a reactiveValues() element is set
  • Fatal or unhandled errors - When an error occurs that causes the session to end, or when an unhandled error occurs in a reactive context. Contains the error within the attributes. To unsanitize the error message being collected, set options(shiny.otel.sanitize.errors = FALSE).
  • Set ExtendedTask <name> <value> - When an ExtendedTask's respective reactive value (e.g., status, value, and error) is set.
  • <ExtendedTask name> add to queue - When an ExtendedTask is added to the task queue.

  • All OpenTelemetry logs and spans will contain a session.id attribute containing the active session ID.

New features

  • updateActionButton() and updateActionLink() now accept values other than shiny::icon() for the icon argument (e.g., fontawesome::fa(), bsicons::bs_icon(), etc). (#4249)

Bug fixes and minor improvements

  • Showcase mode now uses server-side markdown rendering with the {commonmark} package, providing support for GitHub Flavored Markdown features (tables, strikethrough, autolinks, task lists). While most existing README.md files should continue to work as expected, some minor rendering differences may occur due to the change in markdown processor. (#4202, [#4201])

  • debounce(), reactiveFileReader(), reactivePoll(), reactiveValues(), and throttle() now attempt to retrieve the assigned name for the default label if the srcref is available. If a value cannot easily be produced, a default label is used instead. (#4269, [#4300])

  • The default label for items described below will now attempt to retrieve the assigned name if the srcref is available. If a value can not easily be produced, a default label will be used instead. This should improve the OpenTelemetry span labels and the reactlog experience. (#4269, [#4300])

  • reactiveValues(), reactivePoll(), reactiveFileReader(), debounce(), throttle(), observe()
  • Combinations of bindEvent() and reactive() / observe()
  • Combination of bindCache() and reactive()

  • updateActionButton() and updateActionLink() now correctly render HTML content passed to the label argument. (#4249)

  • updateSelectizeInput() no longer creates multiple remove buttons when options = list(plugins="remove_button") is used. (#4275)

  • dateRangeInput()/updateDateRangeInput() now correctly considers the time zones of date-time objects (POSIXct) passed to the start, end, min and max arguments. (thanks @ismirsehregal, [#4318])

Breaking changes

  • The return value of actionButton() and actionLink() now wraps label and icon in an additional HTML container element. This allows updateActionButton() and updateActionLink() to distinguish between the label and icon when making updates, and allows spacing between label and icon to be more easily customized via CSS.
Source: README.md, updated 2025-12-03