Skip to content

Version 4.5.0 - #4101

Merged
T4rk1n merged 43 commits into
masterfrom
master-4.5.0
Oct 29, 2026
Merged

T4rk1n merged 43 commits into
masterfrom
master-4.5.0

Conversation

@T4rk1n

@T4rk1n T4rk1n commented Oct 29, 2026

Copy link
Copy Markdown
Contributor

Merge dev (4.5.0, #4100) into master with the rebuilt component and renderer artifacts.

dajiaohuang and others added 30 commits September 25, 2026 11:56
…llbacks

When a background callback with no outputs raises an exception, the error
handler is called. If the error handler returns None, the code was
incorrectly setting output_value = NoUpdate(), which then triggered an
InvalidCallbackReturnValue exception at the output validation step.

This change adds the same output_spec check that exists in the non-background
callback path (line 866) to the background callback path (line 635), ensuring
that NoUpdate() is only set when there are actual outputs to update.

Fixes #3628
- The cancelled-job branch in _handle_rest_background_callback now sets
  NoUpdate() only when output_spec is truthy (callbacks with outputs),
  matching the error-handler guard added earlier. Without outputs,
  output_value stays None so _prepare_response does not raise
  InvalidCallbackReturnValue.
- Replace the heavily-mocked test_mcpbg012 with two integration-style
  tests that register a real no-output background callback via
  @app.callback and exercise both the completed and cancelled paths
  through the actual MCP tasks/result endpoint.
- Add CHANGELOG entry for #3628 / #4012.
…llback-error-handler

# Conflicts:
#	CHANGELOG.md
dcc.Location reports window.location.pathname, which the browser
percent-encodes. The pages router matched that raw value, so path
variables reached layout() and title() still encoded ("hello%20world")
and pages whose path has spaces or non-ASCII characters fell through to
the 404 page. The server-side meta tags already use the decoded
request.path, so the two disagreed.

Decode the pathname before stripping the prefix and matching it. Also
let a path variable hold a decoded newline: fnmatch already accepts one,
but the regex that extracts the variables did not.

Fixes #2360

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…k-error-handler

fix: handle None return from error handler in no-output background callbacks
Decode the pages router pathname before matching it
Test WebSocket callbacks before the first HTTP request
Dash() no longer starts shared storage or the multiplexed streaming
downlink unless shared_storage= or DASH_SHARED_STORAGE is set. Streaming
callbacks still work on a per-callback connection without it.

msgspec moves from install requirements to the new dash[shared_storage]
extra (persistent LocalSharedStorage modes) and to dash[diskcache] and
dash[redis]. Without it, in-memory LocalSharedStorage falls back to JSON
on its socket transport.
T4rk1n added 13 commits October 28, 2026 11:41
Make shared storage opt-in, move msgspec to extras
An app with a streaming callback that runs over HTTP and no shared
storage now fails at server setup with StreamCallbackError, instead of
falling back to one connection per stream: that fallback works locally
but breaks once deployed. Streaming callbacks over WebSocket on a backend
that supports it (FastAPI, Quart) do not need shared storage.
Require shared storage for HTTP streaming callbacks
@sonarqubecloud

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown
Contributor

Dash performance benchmarks

⚠️ regressions to review

scenario metric p90 (ms) median growth baseline p90 note
⚠️ initial_render_small render_ms 95.5 66.9 1.29x 104.0 1.3x baseline (norm)
✅ callback_chain chain_ms 366.6 345.2 1.04x 499.1
✅ callback_chain graph_ms 1.7 1.7 1.0x 2.4
✅ callback_fanout fanout_ms 60.6 55.3 0.92x 92.5
✅ deep_nesting render_ms 44.2 41.2 1.17x 56.8
✅ full_children_replace replace_ms 4067.3 1258.5 21.95x 4697.1
✅ initial_render_large render_ms 457.1 383.2 1.48x 694.4
✅ patch_append_nested append_ms 138.3 90.4 2.65x 192.3
✅ patch_append_toplevel append_ms 121.8 97.1 2.3x 140.2
✅ patch_scalar_update_large update_ms 174.6 133.4 0.88x 202.9
✅ wildcard_all_resolve wildcard_ms 208.2 184.5 0.9x 313.6
✅ wildcard_all_resolve graph_ms 0.7 0.7 1.0x 1.3

growth = late-third / early-third per-op time; ~1 is flat, a large value means the per-op cost scales with accumulated state.

machine scale vs baseline: 0.70x - divided out of the baseline ratios so they compare like for like (the absolute warn/fail ceilings are left un-scaled); calibrated on initial_render_small.

@T4rk1n
T4rk1n merged commit 9b04a1d into master Oct 29, 2026
111 of 114 checks passed
@T4rk1n
T4rk1n deleted the master-4.5.0 branch October 29, 2026 20:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants