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) and SpriteMaterial (single sprites), with sizeAttenuation and soft-round-point flags. Demo: points & sprites · Reference: gl-points.
  • v0.20.0 — Fat lines. Line2 / LineSegments2 parity: instanced screen-space quad segments with width and world/screen-units controls, not the 1px LineBasicMaterial GL primitive. Demo: fat lines · Reference: gl-lines.
  • v0.21.0 — Decals. Forward DecalGeometry parity: 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. OrthographicCamera parity — 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_wireframe shader renders a mesh's triangle edges as thin native lines — a pure-replace of the shaded surface, material.wireframe parity. 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:

  1. 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)).
  2. v0.26.0 — Multi-submesh instancing. Instanced meshes render all submeshes with per-submesh materials and textures, not just submesh 0.
  3. 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.
  4. 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.Material splices 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 .ktx2 sibling 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 VizGraphInteractive island 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.0v0.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.