What's new — v0.18.1 → v0.41.0
This docs site tracks upstream Verve v0.41.0, catching up from the prior v0.18.1 baseline. That's 23 releases — five feature clusters. This page is a readable tour, grouped by cluster, not a raw changelog dump; the full release-by-release detail is in upstream CHANGELOG.md. For a scannable capability × version × demo grid, see the GL feature matrix.
GL primitives: points, fat lines, decals (v0.19.0–v0.21.0)
Three non-triangle-mesh primitives landed back to back, each a three.js-parity target rendered through the same binary command stream as everything else in verve.gl — WebGPU when available, WebGL2 fallback, byte-identical shaders.
- v0.19.0 — Points & sprites (billboards). Camera-facing textured quads: the shared path for three.js
PointsMaterial(particle clouds) andSpriteMaterial(single sprites), withsizeAttenuationand soft-round-point flags. Demo: points & sprites · Reference: gl-points. - v0.20.0 — Fat lines.
Line2/LineSegments2parity: instanced screen-space quad segments with width and world/screen-units controls, not the 1pxLineBasicMaterialGL primitive. Demo: fat lines · Reference: gl-lines. - v0.21.0 — Decals. Forward
DecalGeometryparity: a decal basis is projected onto a target surface's normal at a placement point, with live re-projection on move/resize. Demo: decals · Reference: gl-decals.
Camera & clipping: orthographic, clip planes, wireframe (v0.22.0–v0.24.0)
- v0.22.0 — Orthographic projection.
OrthographicCameraparity — parallel projection with no foreshortening, selected per scene via.projection(.{ .mode = .orthographic, .ortho_height = … }). - v0.23.0 — Clipping planes. Up to 4 world-space half-spaces (
GlSceneBuilder.clipPlanes) clip the rendered scene to their intersection, on both backends. v0.23.1 followed up with an ortho-aware cascaded shadow map fit — CSM slices are now rectangular slabs (not perspective wedges) under orthographic projection, closing the last deferral from v0.22.0. Demo: orthographic projection · clip planes · orthographic + CSM · Reference: gl-ortho · gl-clip. - v0.24.0 — Wireframe mode. A standalone
variant_wireframeshader renders a mesh's triangle edges as thin native lines — a pure-replace of the shaded surface,material.wireframeparity. Demo: wireframe mode · Reference: gl-wireframe.
Instancing edges: normals, multi-submesh, culling, shadows (v0.25.0–v0.28.0)
A four-slice cluster closing out GPU-instancing gaps against three.js parity, each slice building on the last:
- v0.25.0 — Non-uniform-scale instance normals. Instanced meshes now light correctly under per-instance non-uniform scale (inverse-transpose of the per-instance upper-3×3 model matrix, not raw
mat3(model)). - v0.26.0 — Multi-submesh instancing. Instanced meshes render all submeshes with per-submesh materials and textures, not just submesh 0.
- v0.27.0 — Per-instance frustum culling. Each instance's world-space AABB is tested against the camera frustum every frame; off-screen instances are skipped before the draw, with a live drawn/culled HUD.
- v0.28.0 — Instanced shadows. Instanced geometry both casts and receives 2D/directional (including CSM) shadows — the cluster finale.
Demo: GPU instancing (shared card for all four slices) · multi-submesh · frustum culling · instanced shadows · Reference: gl-instancing.
Materials & compressed textures (v0.29.0–v0.37.0)
- v0.29.0–v0.31.0 — Custom shader materials.
verve.gl.Materialsplices custom GLSL/WGSL into the PBR über-shader at comptime: four fragment hooks, two vertex hooks, a custom UBO, custom textures, and a live uniform setter — baked as a frozen shader variant like every other PBR permutation. Demo: custom shader materials · Reference: gl-material. - v0.32.0–v0.34.0 — KTX2/BC7 compressed textures. Build-time BC7 mode-6 encoding (pure-Zig, zero-dep) ships as a
.ktx2sibling next to every externalized material texture; the runtime then detects browser BC7 support and uploads compressed blocks directly to the GPU, with a host-transparent PNG fallback for non-BC7 hardware. - v0.35.0–v0.37.0 — S3TC (BC1/BC3) compressed textures. The same build → asset → runtime three-slice shape, this time for BC1 (opaque) / BC3 (alpha) — the compressed format GPUs without BC7/BPTC (e.g. older Intel integrated graphics) can still consume. Format selection is now BC7 → S3TC → PNG, picked by GPU capability, host-transparent.
Demo: compressed textures (forces the BC3/alpha-cutout path; see the custom-shader-materials demo above for the BC1/opaque path in the same asset pipeline) · Reference: gl-compressed-textures.
Visualization: multi-instance interactive graphs (v0.38.0–v0.41.0)
verve.viz's interactive node-link graph — force/tree/radial/DAG layouts, zoom/pan/drag, live SSE streaming — moved from a single-instance-per-page island to fully independent multi-instance state across both its SVG and canvas2d render paths:
- v0.38.0 — the SVG-rendered
VizGraphInteractiveisland goes multi-instance: N independent graphs (position, view, selection, collapse, force sim, live streaming) can share one page. Demo: multi-instance graphs. - v0.39.0 — multi-parent-aware subtree collapse: collapsing one root no longer hides a node still reachable from a different, non-collapsed root.
- v0.40.0 — routed-edge live re-route: curved/orthogonal
<path>edges (GraphOpts.edge_routing) re-route live while a node is dragged, closing the multi-instance interactivity cluster. - v0.41.0 — the canvas2d render path (
VizGraphCanvas, the batched-draw path for large graphs) gets the same multi-instance treatment as the SVG path. Demo: two canvas graphs.
Reference: verve.viz · Guide: Visualization.
Versions above are release tags from the upstream verve CHANGELOG.md (v0.19.0–v0.41.0). For anything shipped before v0.19.0, see the GL feature matrix, which tracks the full capability grid back to v0.5.0.