From 026514a79b90a4379603e6ae43ec1b2eef16787f Mon Sep 17 00:00:00 2001 From: philippe Date: Fri, 23 Oct 2026 09:27:38 -0400 Subject: [PATCH 1/3] version 4.5.0rc2 --- dash/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dash/version.py b/dash/version.py index 0bee7884c6..025e8a2c5c 100644 --- a/dash/version.py +++ b/dash/version.py @@ -1 +1 @@ -__version__ = "4.5.0rc1" +__version__ = "4.5.0rc2" From 5351c639112734a7a01a86ce845b475f006536e7 Mon Sep 17 00:00:00 2001 From: philippe Date: Fri, 23 Oct 2026 09:27:40 -0400 Subject: [PATCH 2/3] Bump npm package versions for 4.5.0rc2 rc1 published dcc/html 4.5.1, dash-table 7.5.1 and dash-renderer 3.5.1 to npm, so the packages move to the next patch for rc2. --- components/dash-core-components/package-lock.json | 4 ++-- components/dash-core-components/package.json | 2 +- components/dash-html-components/package-lock.json | 4 ++-- components/dash-html-components/package.json | 2 +- components/dash-table/package-lock.json | 4 ++-- components/dash-table/package.json | 2 +- dash/_dash_renderer.py | 4 ++-- dash/dash-renderer/package-lock.json | 4 ++-- dash/dash-renderer/package.json | 2 +- 9 files changed, 14 insertions(+), 14 deletions(-) diff --git a/components/dash-core-components/package-lock.json b/components/dash-core-components/package-lock.json index 7694840eb7..c4da37688e 100644 --- a/components/dash-core-components/package-lock.json +++ b/components/dash-core-components/package-lock.json @@ -1,12 +1,12 @@ { "name": "dash-core-components", - "version": "4.5.1", + "version": "4.5.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "dash-core-components", - "version": "4.5.1", + "version": "4.5.2", "license": "MIT", "dependencies": { "@fortawesome/fontawesome-svg-core": "1.2.36", diff --git a/components/dash-core-components/package.json b/components/dash-core-components/package.json index 3b1c929a3f..67011908dd 100644 --- a/components/dash-core-components/package.json +++ b/components/dash-core-components/package.json @@ -1,6 +1,6 @@ { "name": "dash-core-components", - "version": "4.5.1", + "version": "4.5.2", "description": "Core component suite for Dash", "repository": { "type": "git", diff --git a/components/dash-html-components/package-lock.json b/components/dash-html-components/package-lock.json index 67b6360b6f..acf014de05 100644 --- a/components/dash-html-components/package-lock.json +++ b/components/dash-html-components/package-lock.json @@ -1,12 +1,12 @@ { "name": "dash-html-components", - "version": "4.5.1", + "version": "4.5.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "dash-html-components", - "version": "4.5.1", + "version": "4.5.2", "license": "MIT", "dependencies": { "prop-types": "^15.8.1", diff --git a/components/dash-html-components/package.json b/components/dash-html-components/package.json index 485de51b27..c8a91b33f9 100644 --- a/components/dash-html-components/package.json +++ b/components/dash-html-components/package.json @@ -1,6 +1,6 @@ { "name": "dash-html-components", - "version": "4.5.1", + "version": "4.5.2", "description": "Vanilla HTML components for Dash", "main": "lib/index.js", "repository": { diff --git a/components/dash-table/package-lock.json b/components/dash-table/package-lock.json index 56f628c31a..0eb13e3678 100644 --- a/components/dash-table/package-lock.json +++ b/components/dash-table/package-lock.json @@ -1,12 +1,12 @@ { "name": "dash-table", - "version": "7.5.1", + "version": "7.5.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "dash-table", - "version": "7.5.1", + "version": "7.5.2", "license": "MIT", "devDependencies": { "@babel/cli": "^7.28.6", diff --git a/components/dash-table/package.json b/components/dash-table/package.json index f03bb77173..5552ef209a 100644 --- a/components/dash-table/package.json +++ b/components/dash-table/package.json @@ -1,6 +1,6 @@ { "name": "dash-table", - "version": "7.5.1", + "version": "7.5.2", "description": "Dash table", "repository": { "type": "git", diff --git a/dash/_dash_renderer.py b/dash/_dash_renderer.py index 53849fac0d..dbc8b78518 100644 --- a/dash/_dash_renderer.py +++ b/dash/_dash_renderer.py @@ -1,7 +1,7 @@ import os from typing import Any, List, Dict -__version__ = "3.5.1" +__version__ = "3.5.2" _available_react_versions = {"18.3.1", "18.2.0", "19.2.4"} _available_reactdom_versions = {"18.3.1", "18.2.0", "19.2.4"} @@ -85,7 +85,7 @@ def _set_react_version(v_react, v_reactdom=None): { "relative_package_path": "dash-renderer/build/dash_renderer.min.js", "dev_package_path": "dash-renderer/build/dash_renderer.dev.js", - "external_url": "https://unpkg.com/dash-renderer@3.5.1" + "external_url": "https://unpkg.com/dash-renderer@3.5.2" "/build/dash_renderer.min.js", "namespace": "dash", }, diff --git a/dash/dash-renderer/package-lock.json b/dash/dash-renderer/package-lock.json index db837bdf0c..dd04896cb7 100644 --- a/dash/dash-renderer/package-lock.json +++ b/dash/dash-renderer/package-lock.json @@ -1,12 +1,12 @@ { "name": "dash-renderer", - "version": "3.5.1", + "version": "3.5.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "dash-renderer", - "version": "3.5.1", + "version": "3.5.2", "license": "MIT", "dependencies": { "@babel/polyfill": "^7.12.1", diff --git a/dash/dash-renderer/package.json b/dash/dash-renderer/package.json index 3897a96ccf..e7875a6c10 100644 --- a/dash/dash-renderer/package.json +++ b/dash/dash-renderer/package.json @@ -1,6 +1,6 @@ { "name": "dash-renderer", - "version": "3.5.1", + "version": "3.5.2", "description": "render dash components in react", "main": "build/dash_renderer.min.js", "scripts": { From 759cff45f2a42e267ca932fa930fae4967deeeae Mon Sep 17 00:00:00 2001 From: philippe Date: Fri, 23 Oct 2026 09:27:41 -0400 Subject: [PATCH 3/3] Add missing CHANGELOG entry for #4052 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 61402396aa..ec744d19e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,7 @@ This project adheres to [Semantic Versioning](https://semver.org/). - [#4075](https://github.com/plotly/dash/pull/4075) `dcc.Location(refresh=True).href`, `html.Area.href` and `html.Base.href` now block `javascript:` URLs like `html.A`. - [#4075](https://github.com/plotly/dash/pull/4075) Pages `path_template` matching no longer errors or backtracks badly on paths with a newline. - [#4075](https://github.com/plotly/dash/pull/4075) Add `configure_mcp_server(cache_by=..., cache_maxsize=...)` so apps whose layout or callbacks depend on the user can keep the MCP server's cached tool descriptions and initial values per user (128 users by default, `None` for no limit). +- [#4052](https://github.com/plotly/dash/pull/4052) Fix callbacks of removed components still firing after a callback returns `None` for `children`: the renderer now clears their paths. Fixes [#4033](https://github.com/plotly/dash/issues/4033). - [#4027](https://github.com/plotly/dash/pull/4027) Support `async def` hook routes (`dash.hooks.route`) on all backends, stop hook routes from leaking the app context to the caller, and let hook routes and MCP read the request on the `fastapi` backend. - [#4053](https://github.com/plotly/dash/pull/4053) Fix callbacks being registered twice under a reloader (e.g. `uvicorn --reload`) when `Dash()` is given an explicit `name` or is built by an app factory called from the main module. Fixes [#3912](https://github.com/plotly/dash/issues/3912). - [#3980](https://github.com/plotly/dash/pull/3980) Fix the three `before_request` hooks (`Dash._setup_server` and the pages `router_sync` / `router_async`) publishing their "already done" guard flag before the setup work behind it had run. Under a multi-threaded WSGI worker such as `gunicorn -k gthread` (or under an ASGI worker for the async router), a second request arriving mid-setup could observe the flag already set, skip setup, then read `registered_paths` / `callback_map` / the pages router callback while they were still being registered - causing the first burst of component bundle requests after a restart to 500 with `Error loading dependency. "" is not a registered library`, or the pages router to hit `DuplicateCallback` when two workers raced past the guard. Each hook body now runs under a lock (`threading.Lock` for the two sync hooks, an `asyncio.Lock` bound to the running loop for the async router) and only publishes the flag after all work completes. Fixes [#3971](https://github.com/plotly/dash/issues/3971).