#15413·bokeh

Replace legacy embedding payloads with a versioned artifact and mount runtime

Author: bryevdvCreated Sep 3, 2026Updated Sep 3, 2026
Labelstag: component: bokehjspython

Bokeh has several overlapping embedding payloads and browser bootstrap paths. They are not independently versioned, resource selection is mixed with delivery, and callers do not receive one handle for readiness, errors, lookup, and cleanup. Equivalent output forms can therefore behave differently, and each host must understand Bokeh's internal document shapes.

For Bokeh 4.0, compile embedding inputs into one immutable, fingerprinted artifact shared by Python and BokehJS. The same artifact should support page, fragment, JSON, external, and notebook MIME output. It should declare its resource requirements while the host chooses CDN, inline, offline, static, or CSP-aware delivery. Standalone and server content should mount through the same BokehMount lifecycle, with deterministic loading and structured errors.

Useful public functions such as file_html() and components() can remain as thin compiler facades. Legacy render-item, JSON-item, autoload, and private document-staging machinery should be removed for 4.0. Related issues include #10152, #10261, and #13115.