pypi / panel
panel
What changed in panel 1, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-30.
18 breaking3 security5 deprecations28 new APIs and options4 performance9 behavior and defaults1 tooling30 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli initpanel 198 changes
Breaking changes 18
Bokeh 3.10 is now the minimum supported version.
The dependency has been dropped as Panel adds native ASGI server implementations.
The dependency has been dropped as Panel adds native ASGI server implementations.
The migration codemod renames size to icon_size and flags calls that size the icon through width or height for review.
The long-deprecated callback handler has been removed.
Panel adds native ASGI server implementations for FastAPI and Django, replacing the bokeh-fastapi and bokeh-django dependencies.
Removes the option because converted Pyodide apps no longer install or patch pyodide-http.
Requires panel-material-ui 0.16.6 or later.
For served apps, a DataFrame widget or hv.Table that first appears after page load requires pn.extension('bokeh-tables').
Raises ValueError when asked to sync a constant parameter such as value_throttled instead of silently ignoring the URL value.
Drops support for Python 3.10 and 3.11 and adds support for Python 3.15.
With the page template, target routes content into Page areas main, sidebar, header and contextbar; an unknown target now raises ValueError.
Provides session information through a built-in endpoint on every server implementation instead of the param REST provider.
No longer loads the bokeh-tables bundle; that bundle is loaded only for DataTable or DataCube rendering, in notebooks, or when explicitly requested.
The migration codemod renames size to icon_size and flags calls that size the icon through width or height for review.
Unsupported
Perspectiveobjects now raise a clear type error.Tabulator value events now report the value from before the edit.
Unauthenticated WebSocket connections now receive a clean 403 response.
Security 3
Environment variable for restricting admin dashboard access to specified users.
Secures only the admin endpoint behind a login page.
Restricts the admin dashboard to specified users of basic authentication or an OAuth provider.
Deprecations 5
Deprecated and scheduled for removal in Panel 2.0; it is not supported on ASGI servers.
The module is deprecated and scheduled for removal in Panel 2.0; use --plugins to add custom endpoints instead.
Deprecated and scheduled for removal in Panel 2.0; use --plugins to add custom endpoints instead.
Deprecated in favor of Tabulator and scheduled for removal in Panel 2.0; Param now maps param.DataFrame parameters to Tabulator.
Kept as a deprecated alias of /session_info.
New APIs and options 28
Adds a configuration helper for setting a value only when it is unset.
Adds a Material implementation that retains the classic API.
Lets designs substitute the components Panel generates in Param, interact and HoloViews widgets.
Lets designs substitute the widgets Panel generates in Param, interact and HoloViews widgets.
Exposes a palette helper through panel.ui.theme.
Adds an endpoint for plain-kernel notebooks to load Panel and component resources without a public CDN, with a visible-warning CDN fallback if unreachable.
Exposes a palette helper through panel.ui.theme.
Adds a Material implementation that retains the classic API.
Environment variable for setting the admin dashboard password.
Previews migration changes without writing them.
Previews migration changes without writing them.
Environment variable for configuring branding of server pages.
Environment variable for configuring the Pyodide CDN used by converted apps.
Sets branding configuration for server pages.
Adds native server choices tornado (the default), fastapi and asgi; routes, route parameters, static directories and OAuth work across servers.
Adds a design-resolution helper.
Adds a lazy namespace combining Material components and classic components without Material equivalents. Using it selects MaterialUIDesign for the current session unless a design was explicitly chosen.
Exposes the generate_palette and linear_gradient palette helpers.
approximate=False hashes all of a large DataFrame or array rather than sampling 100,000 rows.
Adds branding options for server index, login, logout and error pages, using the theme, logo, favicon and title options of pn.ui.Page.
Configures the CDN from which converted apps load Pyodide, supporting air-gapped environments.
Accepts template="page", resolving to pn.ui.Page.
Accepts template="page", resolving to pn.ui.Page.
Always generates Material UI widgets regardless of the active design; pn.pane.HoloViews continues to generate widgets for the active design.
Adds a paneling API that always generates Material UI widgets regardless of the active design.
Always generates Material UI widgets regardless of the active design; pn.Param continues to generate widgets for the active design.
Adds a Material implementation that retains the classic API.
Tabulator columns can now be moved.
Performance 4
Streaming sends HTML splices rather than re-sending the tail, making rendering cost per token roughly constant.
Rendering no longer has layout work that scales quadratically with the number of components.
Streaming updates are coalesced, re-rendering only the trailing Markdown block for roughly constant rendering cost per token.
Rendering eliminates quadratic layout work and React subtree remounts on re-render.
Behavior and default changes 9
Component resources load on demand at first render, including components created in callbacks after page load; pn.extension declarations are now preloading and bundling hints.
Accepts string values such as 'material-ui'.
The pane can render DataFrame-like objects supported by Narwhals, including polars, pyarrow, modin and cuDF.
Selected per session when an app uses panel.ui, preserving the design of classic apps in the same process; implicit design and theme resolve at render time.
Tabulator now uses its native input editor for this editor.
Tabulator now uses its native input editor for this editor.
The Bokeh document page now sends
Cache-Control: no-store.Additional
oauth_extra_paramsare forwarded to the OAuth authorization endpoint.Versioned stylesheets are inlined on the notebook update path.
Tooling 1
Adds a codemod to rewrite classic imports and compatible API patterns to pn.ui, reporting unsafe rewrites. The panel[migrate] extra installs it.
Fixes and other changes 30
Prevents busy-state echoes and cross-thread leaks, and makes cleanup robust to state resets, missing event loops and failed submits.
Only loads resources from the endpoint when Panel's server extension launched the kernel, avoiding 404s in other notebook frontends.
Yields to the event loop when it overruns its period and preserves count and timeout budgets across a period change.
Fixes hashing collisions for reordered rows, dtype differences, same-named closures and differently typed scalars; value-type arguments are hashed by value.
Detects raw image formats from file signatures, preventing JPEG, GIF and WebP bytes from being encoded as PNG with incorrect dimensions.
Works the same across the native server implementations.
Adds support for Python 3.15.
Edit events include edited and old values, fixing stale on_edit callback values and remote-pagination edits that could corrupt a sibling row.
ESM component child views are no longer created concurrently.
ESM component robustness is improved.
The Fast theme
Progressindicator height is fixed.The slider title font color is visible in Fast theme light mode.
Feedno longer renders all objects at once.Held events are drained once the connection is established.
The loading spinner is aligned with
panel-material-ui.Repeated
Locationsync mappings are handled correctly.Markup panes are revealed when their stylesheets fail to load or are replaced.
The previous button now sets the correct stage in the graph.
The
readyparameter and next button stay in sync after using the previous button.Explicitly set sizing options are now respected.
Tabulator page size handling is fixed.
row_contentworks inpanel-material-uidynamicTabs.The
startsandendsheader filters now work correctly.Fixes a regression when cleaning up documents in dev mode.
ESM components check only rendered children for readiness.
The hold context manager works in threaded mode.
The OAuth expiry value is cast to a number.
The pyodide pyrender function no longer uses globals() as context, avoiding potential disruption during execution.
Property changes no longer boomerang on ReactiveESM components.
Dangling write tasks are cleaned up when a session is destroyed.