# What changed in panel

> 98 changes in panel 1 from its official release notes, upgrade guides and advisories: 18 breaking, 5 deprecations, 3 security, 28 new APIs and options. Each one cited. Sources checked 2026-10-30. HTML: https://unstale.sh/pypi/panel/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## panel 1

### Breaking changes

- Bokeh 3.10 is now the minimum supported version. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- The dependency has been dropped as Panel adds native ASGI server implementations. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- The dependency has been dropped as Panel adds native ASGI server implementations. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- The migration codemod renames size to icon_size and flags calls that size the icon through width or height for review. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- The long-deprecated callback handler has been removed. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Panel adds native ASGI server implementations for FastAPI and Django, replacing the bokeh-fastapi and bokeh-django dependencies. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Removes the option because converted Pyodide apps no longer install or patch pyodide-http. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Requires panel-material-ui 0.16.6 or later. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- For served apps, a DataFrame widget or hv.Table that first appears after page load requires pn.extension('bokeh-tables'). (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Raises ValueError when asked to sync a constant parameter such as value_throttled instead of silently ignoring the URL value. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Drops support for Python 3.10 and 3.11 and adds support for Python 3.15. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- With the page template, target routes content into Page areas main, sidebar, header and contextbar; an unknown target now raises ValueError. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Provides session information through a built-in endpoint on every server implementation instead of the param REST provider. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- No longer loads the bokeh-tables bundle; that bundle is loaded only for DataTable or DataCube rendering, in notebooks, or when explicitly requested. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- The migration codemod renames size to icon_size and flags calls that size the icon through width or height for review. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Unsupported `Perspective` objects now raise a clear type error. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)
- Tabulator value events now report the value from before the edit. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)
- Unauthenticated WebSocket connections now receive a clean 403 response. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)

### Security

- Environment variable for restricting admin dashboard access to specified users. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Secures only the admin endpoint behind a login page. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Restricts the admin dashboard to specified users of basic authentication or an OAuth provider. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)

### Deprecations

- Deprecated and scheduled for removal in Panel 2.0; it is not supported on ASGI servers. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- The module is deprecated and scheduled for removal in Panel 2.0; use --plugins to add custom endpoints instead. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Deprecated and scheduled for removal in Panel 2.0; use --plugins to add custom endpoints instead. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Deprecated in favor of Tabulator and scheduled for removal in Panel 2.0; Param now maps param.DataFrame parameters to Tabulator. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Kept as a deprecated alias of /session_info. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)

### New APIs and options

- Adds a configuration helper for setting a value only when it is unset. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Adds a Material implementation that retains the classic API. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Lets designs substitute the components Panel generates in Param, interact and HoloViews widgets. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Lets designs substitute the widgets Panel generates in Param, interact and HoloViews widgets. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Exposes a palette helper through panel.ui.theme. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- 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. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Exposes a palette helper through panel.ui.theme. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Adds a Material implementation that retains the classic API. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Environment variable for setting the admin dashboard password. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Previews migration changes without writing them. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Previews migration changes without writing them. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Environment variable for configuring branding of server pages. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Environment variable for configuring the Pyodide CDN used by converted apps. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Sets branding configuration for server pages. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Adds native server choices tornado (the default), fastapi and asgi; routes, route parameters, static directories and OAuth work across servers. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Adds a design-resolution helper. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- 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. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Exposes the generate_palette and linear_gradient palette helpers. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- approximate=False hashes all of a large DataFrame or array rather than sampling 100,000 rows. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Adds branding options for server index, login, logout and error pages, using the theme, logo, favicon and title options of pn.ui.Page. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Configures the CDN from which converted apps load Pyodide, supporting air-gapped environments. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Accepts template="page", resolving to pn.ui.Page. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Accepts template="page", resolving to pn.ui.Page. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Always generates Material UI widgets regardless of the active design; pn.pane.HoloViews continues to generate widgets for the active design. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Adds a paneling API that always generates Material UI widgets regardless of the active design. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Always generates Material UI widgets regardless of the active design; pn.Param continues to generate widgets for the active design. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Adds a Material implementation that retains the classic API. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Tabulator columns can now be moved. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)

### Performance

- Streaming sends HTML splices rather than re-sending the tail, making rendering cost per token roughly constant. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Rendering no longer has layout work that scales quadratically with the number of components. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Streaming updates are coalesced, re-rendering only the trailing Markdown block for roughly constant rendering cost per token. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Rendering eliminates quadratic layout work and React subtree remounts on re-render. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)

### Behavior and default changes

- 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. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Accepts string values such as 'material-ui'. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- The pane can render DataFrame-like objects supported by Narwhals, including polars, pyarrow, modin and cuDF. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- 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. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Tabulator now uses its native input editor for this editor. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Tabulator now uses its native input editor for this editor. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- The Bokeh document page now sends `Cache-Control: no-store`. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)
- Additional `oauth_extra_params` are forwarded to the OAuth authorization endpoint. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)
- Versioned stylesheets are inlined on the notebook update path. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)

### Tooling

- Adds a codemod to rewrite classic imports and compatible API patterns to pn.ui, reporting unsafe rewrites. The panel[migrate] extra installs it. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)

### Fixes and other changes

- Prevents busy-state echoes and cross-thread leaks, and makes cleanup robust to state resets, missing event loops and failed submits. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Only loads resources from the endpoint when Panel's server extension launched the kernel, avoiding 404s in other notebook frontends. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Yields to the event loop when it overruns its period and preserves count and timeout budgets across a period change. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Fixes hashing collisions for reordered rows, dtype differences, same-named closures and differently typed scalars; value-type arguments are hashed by value. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Detects raw image formats from file signatures, preventing JPEG, GIF and WebP bytes from being encoded as PNG with incorrect dimensions. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Works the same across the native server implementations. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Adds support for Python 3.15. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- Edit events include edited and old values, fixing stale on_edit callback values and remote-pagination edits that could corrupt a sibling row. (1.10.0) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.10.0)
- ESM component child views are no longer created concurrently. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)
- ESM component robustness is improved. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)
- The Fast theme `Progress` indicator height is fixed. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)
- The slider title font color is visible in Fast theme light mode. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)
- `Feed` no longer renders all objects at once. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)
- Held events are drained once the connection is established. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)
- The loading spinner is aligned with `panel-material-ui`. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)
- Repeated `Location` sync mappings are handled correctly. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)
- Markup panes are revealed when their stylesheets fail to load or are replaced. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)
- The previous button now sets the correct stage in the graph. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)
- The `ready` parameter and next button stay in sync after using the previous button. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)
- Explicitly set sizing options are now respected. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)
- Tabulator page size handling is fixed. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)
- `row_content` works in `panel-material-ui` dynamic `Tabs`. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)
- The `starts` and `ends` header filters now work correctly. (1.9.4) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.4)
- Fixes a regression when cleaning up documents in dev mode. (1.9.3) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.3)
- ESM components check only rendered children for readiness. (1.9.3) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.3)
- The hold context manager works in threaded mode. (1.9.3) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.3)
- The OAuth expiry value is cast to a number. (1.9.3) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.3)
- The pyodide pyrender function no longer uses globals() as context, avoiding potential disruption during execution. (1.9.3) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.3)
- Property changes no longer boomerang on ReactiveESM components. (1.9.3) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.3)
- Dangling write tasks are cleaned up when a session is destroyed. (1.9.3) — [release notes](https://github.com/holoviz/panel/releases/tag/v1.9.3)
