Upgrade notes for Shiny 1.12.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

Bug fixes and minor improvements

Breaking changes