Skip to content

Releases: Ameyanagi/ruviz

v0.4.19

03 Jun 11:56
ab153f2

Choose a tag to compare

ruviz v0.4.19

Released: 2026-06-03

Highlights

  • GPUI interactive plots now scale typography, ticks, borders, and series styling with the requested output dimensions while preserving the configured figure size model.
  • ruviz-gpui keeps FixedPixels render targets exact and applies aspect fitting only to Fill, so fixed-resolution embedding remains predictable.
  • Prepared-frame DPI fitting now round-trips fitted output dimensions to the actual render canvas, including narrow panes, difficult aspect ratios, and low-resolution interactive targets.

Version Alignment

This release keeps the published workspace packages aligned on one version:

  • ruviz 0.4.19
  • ruviz-web 0.4.19
  • ruviz-gpui 0.4.19
  • npm ruviz 0.4.19
  • PyPI ruviz 0.4.19

Fixes And Maintenance

  • Fixed GPUI interactive rendering so output dimensions drive render DPI instead of only host/device scale.
  • Fixed the Fill/FixedPixels sizing split to avoid silent fixed-size aspect fitting.
  • Fixed fitted canvas rounding so layer dimensions, overlays, and base images stay aligned.
  • Added coverage for exact-size interactive renders, fitted output dimensions, subminimum interactive DPI, and style metric proportionality.
  • Tightened the incremental marker parity test tolerance and documented the retained-layer antialiasing allowance.

Quality And Validation

This release builds on green CI for PR #75, plus targeted local checks during release prep:

  • cargo test -p ruviz --lib
  • cargo test -p ruviz-gpui sizing --lib
  • cargo test -p ruviz-gpui
  • cargo test -p ruviz
  • clean-worktree WebKit checks for the WASM demo export path

References

v0.4.18

24 May 07:40

Choose a tag to compare

ruviz v0.4.18

Released: 2026-05-24

Highlights

  • Heatmap and contour colorbars now scale consistently when rendering at higher DPI or through max_resolution.
  • Colorbar tick labels, rotated labels, width, margin, and border stroke now use the same logical sizing model as the rest of the plot.
  • Existing plots keep their data rendering unchanged; this release focuses on colorbar layout and stroke fidelity.

Version Alignment

This release keeps the published workspace packages aligned on one version:

  • ruviz 0.4.18
  • ruviz-web 0.4.18
  • ruviz-gpui 0.4.18
  • npm ruviz 0.4.18
  • PyPI ruviz 0.4.18

Fixes And Maintenance

  • Fixed colorbar label and tick-label sizing so typography is converted from points to render pixels before measurement and drawing.
  • Fixed colorbar width and margin scaling so the colorbar does not look undersized beside high-DPI heatmaps.
  • Fixed colorbar border stroke scaling so the outline remains visually consistent with other plot strokes.
  • Added focused regression coverage for colorbar layout scaling, text extent scaling, and border stroke scaling.

Quality And Validation

This release builds on green CI for PR #74 plus targeted local checks during release prep:

  • cargo check --all-targets
  • cargo test -p ruviz colorbar -- --test-threads=1
  • cargo fmt --all -- --check
  • git diff --check

References

v0.4.17

23 May 23:03

Choose a tag to compare

ruviz v0.4.17

Released: 2026-05-24

Highlights

  • Large line and scatter rendering paths are faster while preserving the reference-quality public PNG/SVG output contract.
  • Benchmark comparison tooling now catches incomplete candidate payloads and reports output-target differences explicitly.
  • New high-level plot APIs and render paths cover area, stem, boxen, step, and quiver use cases more consistently.
  • Backend resolution now keeps explicit user choices predictable while avoiding DataShader placement errors on non-linear axes.

Version Alignment

This release keeps the published workspace packages aligned on one version:

  • ruviz 0.4.17
  • ruviz-web 0.4.17
  • ruviz-gpui 0.4.17
  • npm ruviz 0.4.17
  • PyPI ruviz 0.4.17

Fixes And Maintenance

  • Fixed area and stem rendering so filled geometry and stems are visible in public outputs and their bounds include baselines.
  • Fixed horizontal boxen bounds, SVG boxen drawing, empty boxen input errors, and boxen SVG color handling.
  • Fixed quiver validation, bounds, styling, DPI-scaled SVG strokes, PNG/SVG axis-scale mapping, and diagnostic preservation.
  • Fixed annotation rendering on log and symlog PNG axes.
  • Fixed explicit DataShader behavior so it does not silently misplace scatter density images on non-linear axes.
  • Fixed benchmark comparison scripts to fail on missing candidate rows and compare outputTarget explicitly.

Quality And Validation

This release builds on green CI for PR #73 and the post-merge main CI run, plus targeted local checks during release prep:

  • cargo check --all-targets
  • cargo test --test nonbreaking_plot_api_test -- --test-threads=1
  • python3 -m py_compile benchmarks/plotting/compare.py
  • git diff --check

References

v0.4.16

04 May 05:28

Choose a tag to compare

ruviz v0.4.16

Released: 2026-05-04

Highlights

  • Documentation examples now match the current Rust, Python, npm, and crate APIs across the root README, package READMEs, and guides.
  • scripts/check_docs.py validates Markdown links, fenced code block metadata, and explicitly checked Rust, TypeScript, and Python snippets across all tracked Markdown files.
  • Root README Rust examples are now complete main.rs programs when they use ?, so copy-pasted examples compile as shown.
  • Documentation validation now runs in both the pre-commit hook and the GitHub Actions docs workflow.

Version Alignment

This release keeps the published workspace packages aligned on one version:

  • ruviz 0.4.16
  • ruviz-web 0.4.16
  • ruviz-gpui 0.4.16
  • npm ruviz 0.4.16
  • PyPI ruviz 0.4.16

Fixes And Maintenance

  • Fixed README examples that had drifted from the current package APIs and entrypoints.
  • Fixed stale optional-result examples that used ? on API calls that no longer return Result.
  • Hardened Rust documentation checks so checked snippets using ? must be complete fallible main examples, and Markdown fn main() blocks cannot use ? while returning ().
  • Covered all tracked Markdown files with docs validation, including crate READMEs, top-level docs, test docs, benchmark reports, Python docs, and web docs.
  • Made TypeScript snippet checks independent of generated wasm bindings so docs checks can run before web artifacts are built.

Quality And Validation

This release builds on green CI for PR #72, plus targeted local checks during release prep:

  • uv run python scripts/check_docs.py (147 tracked Markdown files)
  • cargo test --doc
  • git diff --check

References

v0.4.13

27 Apr 15:25

Choose a tag to compare

ruviz v0.4.13

Released: 2026-04-27

Highlights

  • Public PNG rendering now has a bounded process-wide marker sprite cache, improving repeated large scatter and line-marker renders while keeping cold and warm PNG output byte-identical.
  • Log-scaled axes now flow through the public PNG, SVG, and parallel render paths with scale-aware coordinate projection, minor ticks, grid handling, and legend rendering.
  • Legend sizing now scales from render DPI for text, frame borders, corner radii, and shadow offsets instead of using fixed pixel assumptions.
  • Typst-valid symbol labels render through the public legend paths without adding LaTeX support.

Version Alignment

This release keeps the published workspace packages aligned on one version:

  • ruviz 0.4.13
  • ruviz-web 0.4.13
  • ruviz-gpui 0.4.13
  • npm ruviz 0.4.13
  • PyPI ruviz 0.4.13

Fixes And Maintenance

  • Fixed parallel-render legend output so public PNG rendering includes enabled legends consistently.
  • Fixed box plot quartile and whisker projection in the parallel renderer so y-values use the y-axis scale.
  • Fixed degenerate scaled coordinate ranges in the parallel projection path.
  • Fixed the notebook widget session sizing race that could create 1x1 WebKit canvases before the notebook wrapper was attached.
  • Replaced full marker sprite cache clears with single-entry eviction and held the global cache lock across sprite creation to avoid duplicate same-key work.
  • Moved shared legend DPI scaling onto Legend so Skia and SVG renderers cannot drift.

Quality And Validation

This release builds on green CI for PRs #70 and #71, plus targeted local checks during release prep:

  • cargo test --lib legend
  • cargo test --lib marker_sprite
  • cargo fmt --check
  • git diff --check
  • bun run check:web
  • RUVIZ_WEB_PREVIEW_PORT=4174 bun run test:e2e --project=webkit

References

v0.4.12

12 Apr 00:31

Choose a tag to compare

ruviz v0.4.12

Released: 2026-04-12

Highlights

  • Restored a fully aligned workflow-driven release after the partial 0.4.11 publish, which had only reached npm before the Python widget bundle stage failed.
  • Fixed the canonical Python widget release build by committing the matching workspace Cargo.lock update required by the --locked wasm build path.
  • Improved npm package verifier failure logs so CI now prints the failing command, exit code, stdout, and stderr when tarball verification breaks.

Version Alignment

This release keeps the published workspace packages aligned on one version:

  • ruviz 0.4.12
  • ruviz-web 0.4.12
  • ruviz-gpui 0.4.12
  • npm ruviz 0.4.12
  • PyPI ruviz 0.4.12

Recovery Notes

  • 0.4.11 fixed the npm tarball contents and reached npm, but the overall release workflow failed before GitHub Release and Python publication completed.
  • 0.4.12 carries the same npm packaging fix forward and restores the normal synchronized release path for Rust crates, npm, PyPI, and GitHub Release artifacts.

Quality And Validation

This release was locally validated after the 0.4.12 version bump with:

  • cargo check -q
  • bun run check:web
  • bun run --cwd packages/ruviz-web verify:pack
  • cd python && uv run cargo test
  • cd python && uv run python -m pytest

References

v0.4.10

10 Apr 03:24

Choose a tag to compare

ruviz v0.4.10

Released: 2026-04-10

Highlights

  • Public static raster outputs now follow the same reference renderer across render(), PNG export/save, and render_to_renderer(), keeping those surfaces visually aligned.
  • The static raster backend picked up parity-safe CPU hot-path work for dense scatter, line, and heatmap rendering without changing the public output contract.
  • Repeated uncached prepared renders in Rust and Python now reuse prepared raster geometry instead of rebuilding the full screen-space plan every time.

Version Alignment

This release keeps the published workspace packages aligned on one version:

  • ruviz 0.4.10
  • ruviz-web 0.4.10
  • ruviz-gpui 0.4.10
  • npm ruviz 0.4.10
  • PyPI ruviz 0.4.10

Rendering Consistency

  • Public raster entrypoints now share one reference rendering policy, so render(), PNG export/save, and render_to_renderer() stay in lock-step instead of depending on different backend choices.
  • Added exact-parity diagnostics and regression coverage around the shared raster pipeline, including public-path consistency checks and internal parity guards.
  • Tightened the branch’s optimized parity candidate path so it no longer uses the parallel renderer when that path would violate the reference-output tolerance.

Raster Backend Improvements

  • Added parity-safe static raster hot-path optimizations for dense line, scatter, and heatmap workloads.
  • Dense filled-marker scatter rendering now uses scanline blitters for Circle, Square, Triangle, and TriangleDown markers, reducing CPU time while preserving the existing visual output.
  • Prepared renders now cache raster geometry for repeated uncached image generation, reducing setup overhead for repeated Rust and Python export calls.

Quality And Validation

This release was locally validated after the 0.4.10 version bump with:

  • cargo check -q
  • bun run check:web
  • cd python && uv run cargo test
  • cd python && uv run python -m pytest

References

v0.4.9

09 Apr 10:36

Choose a tag to compare

ruviz v0.4.9

Released: 2026-04-09

Highlights

  • Fixed the Python large-dataset PNG blackout that could turn dense scatter renders into an opaque dark canvas when automatic DataShader rendering kicked in.
  • Large scatter subplots now use the same auto-DataShader composition path as normal plot renders, so dense subplot figures keep working instead of falling back to the slower non-datashaded path.
  • Regression coverage now checks large-dataset behavior across Rust, Python, notebook widget, and interactive surfaces for the main plot families.

Version Alignment

This release keeps the published workspace packages aligned on one version:

  • ruviz 0.4.9
  • ruviz-web 0.4.9
  • ruviz-gpui 0.4.9
  • npm ruviz 0.4.9
  • PyPI ruviz 0.4.9

Large-Dataset Rendering Fixes

  • Python render_png() now goes through the unified plot PNG render path for large auto-DataShader scatter plots.
  • DataShader output now keeps empty bins transparent and maps rows into screen space correctly before the renderer composites the density image.
  • Large histograms are excluded from the scatter-oriented auto-DataShader path, so they stay on the normal renderer.
  • External-renderer flows used by subplots now apply the same auto-DataShader selection as the main render/save paths.

Coverage Expansion

  • Added large-dataset raster sanity checks for line, scatter, histogram, bar, boxplot, violin, KDE, ECDF, heatmap, contour, error-bars, error-bars-xy, and polar-line plots.
  • Added representative notebook widget coverage for large snapshots so dense browser-backed widget renders do not regress into blank or blacked-out canvases.
  • Added regression coverage for large interactive/session renders and DataShader transparency/y-axis behavior.

Quality And Validation

This release was locally validated after the 0.4.9 version bump with:

  • cargo check -q
  • bun run check:web
  • cd python && uv run cargo test
  • cd python && uv run python -m pytest

The large-dataset regression paths were also re-run locally with:

  • cargo test -p ruviz --no-default-features --features pdf,svg test_large_ -- --nocapture
  • cd python && uv run python -m pytest tests/test_api.py -k 'large_plot'
  • bun run --cwd demo/web test:e2e --grep "python widget bundle renders representative large snapshots without blacking out"

References

v0.4.8

09 Apr 01:39

Choose a tag to compare

ruviz v0.4.8

Released: 2026-04-09

Highlights

  • Notebook widgets now stay visually transparent even when VS Code Jupyter injects a white background into the outer widget wrapper.
  • The fix applies at the notebook-host layer, so the widget keeps its existing PNG-matching sizing, manual resize handle, and right-click export menu behavior.
  • Browser regression coverage now simulates notebook-like white wrapper shells so this host-level behavior stays stable across Chromium, Firefox, and WebKit.

Version Alignment

This release keeps the published workspace packages aligned on one version:

  • ruviz 0.4.8
  • ruviz-web 0.4.8
  • ruviz-gpui 0.4.8
  • npm ruviz 0.4.8
  • PyPI ruviz 0.4.8

Notebook Widget Fix

  • The notebook widget now injects a late transparent surface override so VS Code Jupyter host wrappers cannot leave a large white box around the plot.
  • The widget host and immediate notebook-shell ancestors are patched to stay content-sized instead of stretching across the full output area.
  • Figure rendering, exported PNG/SVG output, default 640x480 sizing, and manual widget resizing are unchanged.

Quality And Validation

This release was locally validated after the 0.4.8 version bump with:

  • cargo check -q
  • bun run check:web
  • cd python && uv run cargo test
  • cd python && uv run python -m pytest

The widget-focused browser regression coverage was also re-run locally with:

  • bun run --cwd demo/web test:e2e --grep "python widget bundle renders when loaded|python widget bundle uses the default PNG size when sizePx is omitted|python widget bundle can be resized by dragging the resize handle|python widget bundle uses a right-click export menu|python widget bundle handles a single-point"

References

v0.4.7

09 Apr 00:16

Choose a tag to compare

ruviz v0.4.7

Released: 2026-04-09

Highlights

  • Notebook widgets no longer force a full-width white host box in Jupyter and VS Code outputs when the rendered plot is smaller than the cell.
  • The outer widget area now shrink-wraps to the displayed plot width while keeping the figure background and PNG/SVG export behavior unchanged.
  • Browser regression coverage now checks roomy, constrained, and resized widget hosts so this layout stays stable across Chromium, Firefox, and WebKit.

Version Alignment

This release keeps the published workspace packages aligned on one version:

  • ruviz 0.4.7
  • ruviz-web 0.4.7
  • ruviz-gpui 0.4.7
  • npm ruviz 0.4.7
  • PyPI ruviz 0.4.7

Notebook Widget Fix

  • The notebook widget host now uses a transparent, content-sized layout instead of occupying the full output width.
  • plot.widget() still respects the existing on-screen sizing rules from size_px(...) and the default 640x480 PNG-sized fallback.
  • Resize-handle behavior, the right-click export menu, and the plotted figure background are unchanged in this patch.

Quality And Validation

This release was locally validated after the 0.4.7 version bump with:

  • cargo check -q
  • bun run check:web
  • cd python && uv run cargo test
  • cd python && uv run python -m pytest

The widget-focused browser regression coverage was also re-run locally with:

  • bun run --cwd demo/web test:e2e --grep "python widget bundle renders when loaded|python widget bundle uses the default PNG size|python widget bundle can be resized by dragging the resize handle|python widget bundle uses a right-click export menu|python widget bundle handles a single-point"

References