Changelog

Release notes and version history for BelowJS.

Latest Release:
npm install belowjs@1.7.2
Unreleased
Upcoming
TBD

Planned patch release focused on animation example dive-mode consistency.

Fixed

  • Fixed Animation example dive toggle now uses the stateful dive-mode API, making fog activation reliable when switching into dive mode
  • Fixed Pressing Z now keeps the animation example's custom dive-mode toggle UI in sync with the active dive mode state
1.7.2
Patch
February 15, 2026

Patch release restoring Quest pause-menu workflow for model and dive-mode UI controls.

Fixed

  • Fixed Model selector dropdown and dive mode toggle remain interactive after opening the Quest system menu, so model/mode changes can be made before returning to immersive view
1.7.1
Patch
February 15, 2026

Patch release focused on keyboard shortcut behavior while editing text fields.

Fixed

  • Fixed Keyboard screenshot shortcut (H) no longer triggers while typing in form fields (input, select, textarea, or contenteditable elements)
1.7.0
Minor
February 15, 2026

Cesium 3D Tiles loading support in BelowJS via the NASA-AMMOS 3DTilesRendererJS library, including Agisoft Metashape tiled-model workflows.

Added

  • New BelowJS support for Cesium 3D Tiles loading via the NASA-AMMOS 3DTilesRendererJS library, including tiled models exported from Agisoft Metashape
  • New tileset example configured with the Denton Holme and Macedon 2023 dataset
  • New examples/tileset/convert-3tz.sh conversion script for Agisoft Metashape .3tz exports, producing a web-hostable tileset folder with root tileset.json

Changed

  • Improved Examples docs describe six production-ready viewers

Fixed

  • Fixed ARCore lint warnings from unused catch variables
1.6.0
Minor
February 15, 2026

Comfort APIs, per-model measurability controls, and viewer resiliency improvements.

Added

  • New Programmatic comfort-mode APIs (work in and out of active VR sessions): setComfortMode(enabled), toggleComfortMode(), getComfortMode(), setVRComfortMode(enabled), toggleVRComfortMode(), isVRComfortModeEnabled()
  • New Per-model measurement availability via optional models[modelKey].measurable (defaults to true for backward compatibility)
  • New Non-measurable model UX for measurement panel: stays visible but disabled/unusable, blocks desktop/VR measurement input, and shows native tooltip text (This model is marked as not measurable)

Changed

  • Improved Comfort toggle styling tightened; active state keeps a clear green ring
  • Improved Comfort teleport visuals tuned: thinner arc, lower marker/floor intensity, and range adjusted to 1.5m-20m

Fixed

  • Fixed Prevent unintended switches to dive mode during immersive AR sessions (keyboard/controller toggles are ignored in AR, and AR session start enforces survey mode)
  • Fixed Graceful viewer recovery after tab focus/context interruptions: auto-retry model loading on refocus and recover from webglcontextlost/webglcontextrestored blank-screen states
  • Fixed Programmatic comfort-mode changes now sync immediately to the comfort glyph during active VR sessions
  • Fixed Double-click focus now behaves correctly with desktop measurement enabled: measurement mode owns double-click interaction and focus animation can be interrupted by user input
1.5.0
Minor
February 6, 2026

Fly mode controls, experimental stereoscopic viewing, and improved material rendering.

Added

  • New Fly mode controls with F key or Shift+~ to activate - port from animation example into core library
  • New Stereoscopic viewing mode (Experimental): side-by-side stereo rendering with configurable eye separation
  • New Stereo example with adjustable eye separation controls
  • New stereo() console command for enabling/disabling stereo mode and adjusting eye separation
  • New Z key to toggle between dive mode and studio mode
  • New H key to take screenshot
  • New Experimental 3D Tiles streaming loader for massive datasets
  • New tileset example (npm run dev:tileset) with NASA-AMMOS sample dataset default and URL override support

Changed

  • Improved Material conversion upgraded from MeshLambertMaterial to MeshStandardMaterial with shipwreck-appropriate PBR defaults (roughness 0.8, metalness 0.3)
  • Improved Studio lighting increased by 10% to compensate for improved material reflections
  • Improved Measurement display: distances ≤ 20 cm now shown in cm with 2 decimal places, smaller sphere markers for precision

Fixed

  • Fixed Raycasting accuracy in stereo viewing mode
  • Fixed VR button visibility management with fly mode controls
  • Fixed Support for deprecated KHR_materials_pbrSpecularGlossiness GLTF extension by converting to standard PBR materials
  • Fixed Support for logarithmicDepthBuffer renderer option (suppresses ConfigValidator warning)
1.4.1
Patch
December 26, 2025

Particle density control and animation example improvements.

  • New setDensity(multiplier) method on DiveParticles to dynamically adjust particle density (0-2x range)
  • Improved Animation example: demo model link, mobile UI polish
1.4.0
Minor
December 24, 2025

Animation example and experimental AR support.

Animation Example

New animation example for producing shipwreck visualisations in seconds (see guide). Designed to mirror our Blender workflow, this demonstrates advanced features built on top of the core viewer:

  • New Timeline-based keyframe animation with easing
  • New Orbit and flight mode navigation
  • New Controls for the custom dive lighting system
  • New Local save and load of keyframes and settings
  • New Video export as MP4s

AR Support (Experimental)

Passthrough AR viewing with natural-feeling hand tracking and the same studio lighting system:

  • New Hand tracking gestures: single-hand movement, two-hand rotate and scale with logarithmic scaling and inertia
  • New Quest 2/3 optimisation with automatic device detection
  • New setInteractionEnabled() method for shared spaces development

Note: AR support is experimental and being co-developed with a networked viewer.

Fixed

  • Fixed VR audio assets now copied losslessly in docs examples
1.3.0
Minor
November 9, 2025

Desktop Quest Link streaming support.

  • New Desktop Quest Link streaming support—load large scenes with the drag-and-drop viewer (examples/dragdrop).
1.2.0
Minor
September 10, 2025

Safari/iOS memory fixes and platform-specific loader tuning for the iOS 26 GPU crash.

  • Improved Draco and KTX2 worker pools are limited to a single thread on iOS to keep WebKit memory stable on iOS 26 devices.
  • Improved Shared KTX2 detection now scopes per platform so desktop browsers keep their parallelism.
  • Fixed Cached GLTF scenes, textures, and parser registries are released immediately after model swaps, preventing Safari desktop/iOS 26 crashes.
  • Fixed Abort listeners and converted materials are disposed right after loads so cancelled requests can’t leak GPU resources and trip the iOS 26 GPU watchdog.
1.1.0
Minor
September 3, 2025

New screenshot capture capability and example updates.

  • New Screenshot capture button in the viewer UI
  • New enableScreenshot config option on ModelViewer
  • New takeScreenshot() method to programmatically save a PNG
  • Improved Renderer now uses preserveDrawingBuffer to support screenshots
  • Improved Examples updated to include enableScreenshot: true and CDN references bumped to 1.1.0
1.0.0
Stable Release
August 27, 2025

🌊 First stable release of BelowJS! Production-ready underwater VR viewer with comprehensive documentation and full feature set.

Now Live in Production: BelowJS 1.0.0 is powering WreckSploration VR - the first production implementation featuring shipwreck exploration in virtual reality.

Release Highlights

  • Stable API: Production-ready with comprehensive documentation
  • WebXR Support: Full VR functionality optimized for Meta Quest 3
  • Measurement Tools: Desktop and VR measurement systems
  • Dive Mode: Underwater lighting and particle effects
  • Multiple Examples: Basic, drag-drop, and embeddable viewers

Technical Details

  • Built on Three.js with modern ES modules
  • Modular architecture with clean separation of concerns
  • Comprehensive documentation and examples
  • Production-ready with thorough testing
1.0.0-rc.4
Release Candidate
August 19, 2025

Documentation improvements, implementation showcases, and production readiness updates.

  • Fixed Info panel not showing properly by adding below-panel class
  • Improved Documentation structure and navigation
  • Added Comprehensive guides for development workflows
  • Added WreckSploration VR implementation showcase
1.0.0-rc.3
Release Candidate
August 14, 2025

Loading improvements and documentation enhancements.

  • Fixed Loading spinner percentage clamped to maximum 100%
  • Fixed Loading spinner display issues in light mode
  • Improved Example documentation clarity and structure
1.0.0-rc.2
Release Candidate
August 12, 2025

Key improvements to VR model switching and loading experience.

  • Fixed VR locomotion reset bug when switching models
  • New VR loading indicator for model changes
  • Improved Audio system robustness
  • New Complete static documentation site
1.0.0-rc.1
Release Candidate
August 2025

First release candidate for BelowJS 1.0! This version is production-ready and available on NPM.

  • New Complete underwater VR viewer with dive mode and lighting effects
  • New WebXR support for immersive VR experiences on compatible headsets
  • New Measurement tools for archaeological documentation
  • New Multi-model support with dropdown switching
  • New Customisable lighting and dive environment
  • New Touch and keyboard controls for accessibility
  • New Drag-and-drop model loading
  • New Embed viewer for iframe integration
  • New Complete documentation and examples
  • Improved Bundle size optimised to 419KB
  • Improved Performance for large photogrammetry models
  • Improved Mobile device compatibility

Breaking Changes: This is the first public release, so no breaking changes from previous versions.

Known Issues: None currently reported. Please file issues on GitHub.

Pre-Release Development
2024-2025

Extensive development and testing phase for underwater photogrammetry visualization:

  • Core Three.js integration and scene management
  • WebXR implementation for VR headset support
  • Maritime archaeology measurement tools development
  • Dive mode with realistic underwater lighting
  • Performance optimisation for large 3D models
  • Testing with real underwater photogrammetry models
  • Documentation and example creation