Changelog

All notable changes to tosijs-3d. This project is pre-1.0 (0.x), so minor versions may carry breaking peer-dependency changes — each is called out in a ⚠️ Breaking block in its version section below, with what a consumer must do.

0.7.1

Fixed

Added

0.7.0

Prereleases, and why the numbering looks backwards. 0.7.0-rc.1 was cut first, then work continued as -beta.1…beta.6. Semver sorts beta BELOW rc, so bun add tosijs-3d@next wrote ^0.7.0-beta.6 and RESOLVED BACKWARDS to the older rc.1 — silently, and bun update even reported the downgrade as an upgrade. Publishing 0.7.0 is what un-inverts the channel, since it sorts above every prerelease.

The rule taken from it: a prerelease channel never moves backwards — the successor to -rc.N is -rc.N+1, never a beta. If you pinned any ^0.7.0-beta.* or 0.7.0-rc.1, move to 0.7.0.

  • 0.7.0-beta.6 (2026-08-17) — carved landforms (the sdf-lattice page, the volcano cutaway, strata, 3D volcanic veins), portal math, and four manta-reported fixes: the explode+library crash that seized the scene (#24), mutual death eating the panel (#25), blasts blind to library destroyables (#28), and pitch authority becoming configurable and asymmetric (#26).
  • 0.7.0-beta.5 (2026-08-15) — MediumOptics + fogLayerFor (⚠️ experimental, not load-bearing: water publishes its optics but still computes its own fog layer). Otherwise identical to beta.4 — the rest is design notes.
  • 0.7.0-beta.4 (2026-08-15) — the medium primitive (space/air/water/ mercury, plane or sphere), medium-aware projectiles closing #13, and pause marked EXPERIMENTAL pending a headset.
  • 0.7.0-beta.3 (2026-08-15) — pause (backgrounding, start-paused, the VR entry gesture, a centred panel), the stick-sign contract test + kind, and four more manta reports: #17/#18 ambient spawn bias, #19 authored projectile meshes, #22 destroyable library models. Plus the HUD circle's portrait sizing and both panels' camera/viewport fixes.
  • 0.7.0-beta.2 (2026-08-15) — adds #13's missile-guide composition, the gear gadget for the glass gamepad, and the live fade. #14 investigated and NOT changed: the glass source measures correct on desktop from four independent angles, so no sign was flipped (see the issue).
  • 0.7.0-beta.1 (2026-08-14) — everything below, including the four manta-recon issues fixed that day: #9 (crashed aircraft eats input) and the b3d-death latching bug behind it, #10 (aircraftMapping ignored its config), #11 (probe and ambient watchdog measuring during load), #12 (the sky ignored the water you were under).

Aircraft that fly like aircraft, and the substrate for volumetric terrain. No peer-dependency changes, but this is a behaviour release: the throttle, the right stick and the on-screen gamepad all work differently, and one attribute was renamed. Read the ⚠️ Breaking block before upgrading a scene that was tuned around the old feel.

⚠️ Breaking

Added

Changed

Fixed

0.7.0-rc.1

Published to npm under the next tag on 2026-08-13, superseded by 0.7.0. Everything in 0.7.0 above applies, with two differences that matter if you installed it:

It was tagged before the pre-release review ran, deliberately, to get it into an adopter's hands sooner. The review found no blocker in the shipped behaviour; what it found were the two release-artifact gaps above.

0.6.2

Terrain gets volcanism and authored landforms, clouds get real shapes, and a systemic timing bug that made half the engine run in slow motion is fixed. Additive only — no API removals, no peer-dependency changes. (The full terrain-system upgrade lands as 0.7.0 once its remaining pieces are in.)

Added

Fixed

0.6.1

First consumer-reported fixes — both filed by manta-recon (tosijs-3d's first external adopter) with root-cause analyses read from the 0.6.0 dist. No API changes.

Fixed

0.6.0

Cut as rc.1 → rc.3 (each reviewed; rc consumers see the per-rc sections in git history), finalized after the nine-lens review's follow-up fixes landed.

The SVG UI surface release: a first-class, VR-ready UI substrate — container, overlay, widgets seam, table, keyboard — plus the interaction contracts that make the same surface work identically in the DOM, on a 3D plane, and under an XR controller ray. No peer-dependency changes.

Added

Changed

Fixed

Added (post-rc, from the review follow-ups)

Fixed (post-rc)

⚠️ Changed

0.5.2

⚠️ Breaking — peer dependency (tosijs ≥ 1.7.8)

Added

Changed

Fixed

0.5.1

⚠️ Breaking — renamed public methods (on*add*Listener / handle*)

No peer-dependency changes this release. The break is a method rename: tosijs's elementCreator treats any on<Event>-named member as addEventListener sugar and shadows a component method of the same name (it now fires a live warning, and it was a latent bug — the handler silently never ran). So the multi-listener subscribe methods and the lifecycle hooks moved off the on* prefix. The new names are also more honest: the subscribe methods push to a listener list (add/remove semantics), not a single-handler setter.

Old (0.5.0) New (0.5.1) On
onSceneAddition / offSceneAddition addSceneListener / removeSceneListener B3d (scene owner)
onOriginShift / offOriginShift addOriginListener / removeOriginListener B3d (scene owner)
onGainFocus / onLoseFocus handleGainFocus / handleLoseFocus B3dControllable
onButton handleButton TouchGamepadSource, B3dGamepad

What a consumer must do: if you wrote a custom scene child that called owner.onSceneAddition(cb) / owner.onOriginShift(cb), or subclassed B3dControllable and overrode onGainFocus/onLoseFocus, or a gamepad source with an onButton callback, rename to the new members. It's a pure rename — signatures are unchanged. Built-in components are all migrated; this only affects code you wrote against these surfaces.

Added

Changed

Fixed

0.5.0

⚠️ Breaking — peer dependencies

Added

Changed

Fixed