# ruviz v0.4.1

Released: 2026-04-07

## Highlights

- Heatmaps can now map directly into physical coordinate extents, making it easier to align raster-style plots with real-world axes while still supporting reversed display ranges.
- Log and SymLog heatmaps are more robust: `<= 0` and non-finite values are treated as masked cutouts for log autoranging, and `HeatmapConfig::symlog_auto_linthresh(true)` can derive a useful linear threshold automatically.
- Log colorbars regained superscript decade labels, visible logarithmic subticks, and safer layout spacing so labels stay centered and do not clip against the right canvas edge.
- The pixel-aligned heatmap and filled-contour path now preserves alpha compositing and subpixel coverage, avoiding the translucent-fill and thin-cell regressions caught during review.

## Version Alignment

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

- `ruviz` `0.4.1`
- `ruviz-web` `0.4.1`
- `ruviz-gpui` `0.4.1`
- npm `ruviz` `0.4.1`
- PyPI `ruviz` `0.4.1`

## Plotting Notes

- `HeatmapConfig` now supports `extent(...)`, `cell_borders(...)`, `colorbar_log_subticks(...)`, and `symlog_auto_linthresh(...)` for denser control over raster-style heatmaps.
- Heatmap rendering, export, and interactive hit testing now agree on masked log-scale cells, so visually empty cutouts do not behave like selectable values.
- Heatmap and filled-contour tiling keep seam-resistant opaque rendering, but now fall back to the normal composited path when a tile is translucent or too thin to survive pixel snapping.
- The new `examples/montecarlo_heatmap.rs` example and refreshed gallery assets document the absorbed-energy style log-heatmap workflow end to end.

## Packaging And Docs

- Updated the workspace package versions, package READMEs, and guide snippets to `0.4.1`.
- Added versioned release notes for `v0.4.1` and promoted the new release as the latest release note target from the README and quickstart.

## Quality And Validation

This release builds on the green CI for PR [#52](https://github.com/Ameyanagi/ruviz/pull/52) and was locally rechecked after the `0.4.1` version bump with:

- `cargo check -q`

## References

- Changelog: [`CHANGELOG.md`](../../CHANGELOG.md)
- Previous release notes: [`v0.4.0`](./v0.4.0.md)
- Heatmap extent and log rendering PR: [#52](https://github.com/Ameyanagi/ruviz/pull/52)
