Added
- #3947 Make
plotly-clouda default install dependency of Dash instead of an optional extra, so theplotlyCLI and Dash's cloud integration work out of the box. Thedash[cloud]extra is kept for backward compatibility. - #3930 Add shared storage: a backend-agnostic cross-process state manager (key/value with optional TTL, plus ordered replayable pub/sub) on every app via
dash.ctx.shared_storage, started lazily and disabled withshared_storage=None. ShipsLocalSharedStorage(default, in-memory with optional disk persistence),DiskcacheSharedStorage, andRedisSharedStoragefor horizontally-scaled deployments; see.ai/ARCHITECTURE.md. - #3931 Add streaming callbacks: an
async defgenerator callback streams its yields to the browser as they are produced (dash.Patchyields apply incrementally). A browser's streams share one SharedWorker-hosted connection so they do not count against the per-host connection limit; closing a tab cancels its streams. - #3977 Add partial WebSocket prop reads with
get_prop(..., path=...). Closes #3975. - #3765 Add opt-in partial pattern matching for callback
Input,Output, andStateviapartial_pattern=True, so dictionary ID patterns can match component IDs with extra keys and combine withALL/MATCHwildcards. Fixes #3764. - #3646 Add experimental support for React 19 (default stays React 18.3.1); opt in with
REACT_VERSION=19.2.4ordash._dash_renderer._set_react_version("19.2.4"). Dash serves theumd-reactpackage with a compatibility shim so component libraries built against React <=18 keep working; see.ai/ARCHITECTURE.md. - #3925 Add optional callback request payload compression via
compress_payloadandcompress_thresholdcallback parameters (default threshold 5,000 bytes), sending gzip payloads that Dash decompresses on Flask, FastAPI, and Quart. Fixes #3924. - #3961 Added cursor position data (
xPixel,yPixel) todcc.GraphhoverDataandclickDatawhenhoveranywhereorclickanywhereis enabled in the figure. - #3960 Rewrite
dcc.Markdownanddcc.Linkas Typescript components - #3881 Added
dash.remount, a wrapper for a callback-returned component that forces the renderer to remount it (resetting its internal state) instead of reconciling in place: the explicit way to reset a stateful component from a callback without changing itsid.
Removed
- #3646 Remove React 16 support (
16.14.0is no longer an accepted value forREACT_VERSION/_set_react_version).
Changed
- #3986 Adjust
_run_before_hooksin thefastapibackend to honor a response returned by abefore_requestfunction, matching theflaskbackend's behavior.
Fixed
- #3944 Fix
dash.testingrunner backend detection for wrapped FastAPI/Quart servers so threaded Flask-only options are not passed to ASGI runners. - #3955 Unpin
seleniumin the testing requirements (was capped at<=4.2.0from 2022) and require>=4.11.0, so it can drive current stable Chrome via Selenium Manager and stop the widespread CI flakiness. - #3881 Speed up the renderer layout crawl (
crawlLayoutand its callers) by replacing curried-ramdapath/pathOrlookups with direct property access on the hot path: ~16% fasterPatch().append()into a large container, with no behavior change. - #3881 Fix pattern-matching (
MATCH/ALL/ALLSMALLER) callbacks getting quadratically slower as matching components grow; a new O(1) id->path index cuts anALLupdate over 400 components from ~580ms to ~140ms (~4x), with no app changes. - #3941 Fix the FastAPI and Quart backends opening a WebSocket connection on every page load even for apps with no WebSocket callbacks; the socket now opens only when actually needed. Fixes #3939.
- #3916 Fixed a regression where dragging multiple files into
dcc.Uploadwould upload only the first file whenmultiple=True - #3922 Fix
dcc.Input(type="number")stepper behavior when onlyminis set. - #3925 Use the proxied url as the Jupyter server url so
DASH_PROXYis honored by the external url and inline iframe in notebooks. - #3938 Fix
dcc.Patch()re-running the initial callbacks of components already on the page (including everyMATCH/ALLelement) and wiping their user-edited persisted values. Fixes #3681 and #3937 - #3960 Fix
dcc.Markdownnot rendering<dccLink />by using newer dependencies - #3846 Fix callback-returned children being unmounted and remounted on every update instead of reconciled in place, which reset component state and slowed large subtrees 3-4x (regression introduced in 4.2.0 by #3570); use
dash.remountto force a remount. - #3881 Fix components rendered as props (eg.
dcc.Dropdownoption labels,dcc.Tablabels) crashing or failing to update when the host subtree was replaced by a callback; out-of-treeExternalWrappercomponents now re-insert themselves and update in place. - #3929 Fix components that set their own initial state on mount (eg.
dash-bootstrap-componentsTabs) not applying it on first render, because descendant layout hashes were reset on the first fresh render (regression introduced in 4.2.0 by #3570). - #3948 Fix page getting progressively slower as callbacks append children