Repository navigation
Release 0.15.0: plotly.js 3.x work, remove kaleido/EPS, dependency security bumps - #442
Open
jqnatividad wants to merge 7 commits into
Open
jqnatividad wants to merge 7 commits into
jqnatividad wants to merge 7 commits into
Conversation
Both were deprecated in 0.13.0 with removal announced for 0.15.0. - Drop the plotly_kaleido crate from the workspace, the `kaleido` and `kaleido_download` features, and the kaleido-gated Plot methods. - Drop `ImageFormat::EPS` from plotly_static and the `#![allow(deprecated)]` that was waiting on 0.15.0. - Remove the kaleido example, its CI matrix entries, the publish_plotly_kaleido workflow and the release publish step; run the semver check against `static_export_chromedriver` instead. - Remove kaleido/EPS sections from README and the book, and point the install snippets at 0.15. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- plotly_static: remove the `zip` build-dependency, which build.rs never used; bump `dirs` 6 -> 7. - plotly_derive: bump `darling` 0.23 -> 0.24 together with `syn` 2 -> 3, since darling 0.24 is built on syn 3. No macro code changes needed. - examples: bump reqwest 0.11 -> 0.13, env_logger 0.10 -> 0.11, itertools 0.12 -> 0.15, ndarray 0.15 -> 0.17 and rand/rand_chacha 0.8/0.3 -> 0.10, adapting to `RngExt::random` and dropping the deprecated `into_raw_vec`. zip 8.x is still pulled in transitively by webdriver-downloader 0.17 (`zip ^8`) until ik1ne/webdriver-downloader#67 is released. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- plotly 0.14.1 -> 0.15.0, plotly_derive 0.14.1 -> 0.15.0 - plotly_static 0.1.0 -> 0.2.0 (EPS removal is breaking; also carries the plotly.js 3.7.0 bundle) - Promote [Unreleased] to [0.15.0] in the CHANGELOG, add Removed and Security sections, and drop duplicated Funnel/Waterfall entries. Last release on plotly.js 3.x; plotly.js 4.x follows in 0.16.0 (plotly#437). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A pinned `release-type: minor` is applied verbatim, without the 0.y.z promotion, so the intentional removals in 0.15.0 (kaleido features and methods, `ImageFormat::EPS`) would fail as major-level changes. Inferring from the version bump treats 0.14.1 -> 0.15.0 as major, while unchanged versions during development still default to a minor-level check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The trace loop used `0..=num_steps`, creating 52 traces (frequencies 0.0-5.1) while each slider step's visibility mask has 51 entries, so step 0 also showed the stray 5.1 curve. Use `0..num_steps` to match. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The current nightly rustfmt re-wraps comments under the repo's `wrap_comments` setting, which fails the Rustfmt CI job. Formatting only; no code changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Address clippy::missing_panics_doc, missing_errors_doc, doc_markdown, non_std_lazy_statics and cargo::redundant_homepage: - Add `# Errors` / `# Panics` sections to public fallible APIs, including the wasm-only bindings and callbacks. - Backtick identifiers in docs and fix unbalanced backticks; add clippy.toml whitelisting WebDriver, MapLibre, GeoJSON, MathJax and ModeBar as product names. - Switch theme statics to std::sync::LazyLock and drop once_cell. - Remove `homepage` fields duplicating `repository`. Also fix Plot::add_frames adding every frame twice when the plot had no frames yet, with a regression test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
jqnatividad
added a commit
to dathere/qsv
that referenced
this pull request
Oct 17, 2026
) * deps: use plotly.rs 0.15.0 release branch (plotly/plotly.rs#442); regenerate viz gallery Point the plotly [patch] at the 0.15.0 release-prep PR head (dathere/plotly@a21da1f) and bump the plotly requirement to 0.15 so the patch applies. This pulls in plotly_derive 0.15.0 and plotly_static 0.2.0, and drops darling 0.23 and lzma-rust2 (via plotly's removed zip build-dependency). qsv does not use the removed Kaleido backend or ImageFormat::EPS. The embedded plotly.js bundle is unchanged (3.7.0). Regenerated the viz gallery with gen_gallery.py: gallery.html is byte-identical; 14 smart dashboards pick up the 25.0.0 compile stamp, and two map pages (smart_us_choropleth, smart_world_events) get richer hover place names from the 25.0.0 geocode index. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs(changelog): note plotly.rs 0.15.0 (#4836) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Release prep for plotly.rs 0.15.0, the last release on plotly.js 3.x. Per the discussion in #437, the plotly.js 4.x upgrade will be the basis for 0.16.0.
0.15.0 ships everything currently under
[Unreleased](plotly.js 3.0.1 → 3.7.0, the new trace types and the 3.7 attribute backfill), plus:ImageFormat::EPS, as announced for 0.15.0 in the 0.13.0 deprecation notices.zipbuild-dependency and bumpsdarling/syn,dirsand the examples' dependencies.plotly0.15.0,plotly_derive0.15.0,plotly_static0.2.0 (breaking: EPS removed; also carries the plotly.js 3.7.0 bundle).plotly0.15.0 depends onplotly_static = "0.2", andrelease.ymldoes not publishplotly_static(it goes throughpublish_plotly_static.yml). Publish in this order:plotly_static0.2.0plotly_derive0.15.0plotly0.15.0Changes
Kaleido / EPS removal (
03a5dc4)plotly_kaleidofrom the workspace; removed thekaleidoandkaleido_downloadfeatures and the kaleido-gatedPlot::{write_image, to_base64, to_svg}implementations.ImageFormat::EPSand the#![allow(deprecated)]inplotly_staticthat was waiting on 0.15.0.0.15, and the README WASM snippet's CDN link now points at plotly.js 3.7.0.Dependencies (
f1d5d06)plotly_static: removed thezipbuild-dependency (build.rsnever used it);dirs6 → 7.plotly_derive:darling0.23 → 0.24 together withsyn2 → 3 (darling 0.24 is built on syn 3). No macro code changes needed.reqwest0.13,env_logger0.11,itertools0.15,ndarray0.17,rand/rand_chacha0.10, with small API adaptations (RngExt::random, dropping the deprecatedinto_raw_vec).Example fix (
48b387b): thecustom_controlssinusoidal slider built 52 traces (0..=num_steps) for 51 slider steps, so step 0 also showed a stray 5.1-frequency curve. It now builds 51.Lints and an
add_framesfix (a21da1f)Fixes
Plot::add_frames, which added every frame twice when the plot had no frames yet. Adds a regression test.Theme statics in
plotly::layout::themes(DEFAULT,PLOTLY_WHITE, …) are nowstd::sync::LazyLock<Template>instead ofonce_cell::sync::Lazy<Template>, and theonce_celldependency is dropped. This changes the type of public items. It only affects code that callsLazy::forceon them, and it lands in a release that is already breaking. It needs Rust 1.80+; no MSRV is declared.Addresses clippy's pedantic
missing_errors_doc,missing_panics_docanddoc_markdown, pluscargo::redundant_homepage:# Errors/# Panicssections to public fallible APIs, including the wasm-only bindings and callbacks;homepagefields that duplicatedrepository.A new
clippy.tomltreats WebDriver, MapLibre, GeoJSON, MathJax and ModeBar as product names rather than identifiers. CI doesn't enforce pedantic lints; this is cleanup.Release (
5d68616): version bumps and the CHANGELOG[0.15.0]section. Also removes the Funnel/Waterfall changelog entries that duplicated the #432 entry.CI changes (please review)
build.yml: removed the kaleido entries from the matrices, lint steps and test excludes; the semver job now checksstatic_export_chromedriverinstead ofkaleido.build.yml(16b30fb): dropped the pinnedrelease-type: minorfrom the semver job. An explicit release type is applied verbatim, without the 0.y.z → major promotion, so the intentional removals would fail as major changes. Inferring from the version treats 0.14.1 → 0.15.0 as major, and during normal development (version unchanged) it still defaults to a minor-level check.publish_plotly_kaleido.ymland theplotly_kaleidopublish step inrelease.yml. The already-publishedplotly_kaleidocrate on crates.io is unaffected.Known issue: transitive
zip8.xcargo auditstill reports RUSTSEC-2026-0367/0368/0369 forzip8.6.0. After this PR,zipcomes only fromwebdriver-downloader0.17 (zip ^8), a build-time dependency ofplotly_staticthat fetches chromedriver/geckodriver.ZipArchive::extract()(symlinks and permissions).webdriver-downloaderdoesn't callextract(); it reads the driver entry withby_name+io::copy.webdriver-downloader.[patch.crates-io]wasn't used because it doesn't reach downstream users of the published crate.The other advisories
cargo auditreports against older lockfiles (rustls, quinn-proto, h2, crossbeam-epoch) are semver-compatible and resolve with a freshcargo update.Cargo.lockisn't tracked, so this PR doesn't change them.For the maintainer
#432also appears under the already-released[0.14.1] - Fixed("mdBook table of contents ordering"). That may be the wrong PR number; I left it unchanged.ea7c2bfis a formatting-only commit. Nightly rustfmt 2026-10-16 re-wraps comments underwrap_comments, which was failing the Rustfmt job on about 10 files (it would fail onmaintoo). It contains no code changes.RUSTDOCFLAGS="-D warnings" cargo doc --features allstill fails on pre-existing issues that this PR leaves unchanged:ExporterSyncExt/ExporterAsyncExt) inplot.rs, which date back to fd36405;unclosed HTML tag <n>errors.Test plan
cargo clippy --features all --all-targets -- -D warnings(no longer needs-A deprecated)cargo clippy -p plotly_static --features geckodriver,webdriver_download -- -D warningscargo clippy --package plotly --target wasm32-unknown-unknown -- -D warningscargo test -p plotly --features all --lib: 379 pass. The 8 browser-dependent export tests couldn't run locally (chromedriver 153 vs Chrome 155); CI installs a matched pair.cargo test -p plotly --features all --doc(38 pass),cargo test -p plotly_static --doc --features chromedriver(20 pass)cd examples && cargo clippy --workspace -- -D warningscargo clippy --workspace --all-targets --features all -- -A clippy::all -W clippy::missing_panics_doc -W clippy::missing_errors_doc -W clippy::non_std_lazy_statics -W clippy::doc_markdown(also withstatic_export_geckodriverand--target wasm32-unknown-unknown): cleantyposcargo audit: only the transitivezip8.6.0 advisories described above remaincargo-semver-checks(my local version can't read this toolchain's rustdoc format; relying on the CI job)🤖 Generated with Claude Code