Releases: sceneview/sceneview
v4.0.1
Full Changelog: v4.0.0...v4.0.1
v4.0.0
What's Changed
Other Changes
- fix(quality-gate): support pre-release versions + rename residual ARScene refs by @ThomasGorisse in #813
- fix(gateway): hub-mcp KV handoff + docs stdio + landing tool count by @ThomasGorisse in #816
- feat(telemetry): Cloudflare Worker for anonymous usage analytics by @ThomasGorisse in #815
- fix(render-tests): share Engine per class to fix SwiftShader CI + AR exposure API by @ThomasGorisse in #814
- fix(sceneview): propagate animated values back to Node transforms (#388) by @ThomasGorisse in #817
Full Changelog: v4.0.0-rc.1...v4.0.0
v4.0.0-rc.1 — Rerun.io integration
Release candidate for v4.0.0. The full SceneView ↔ Rerun.io integration plus the v4 gateway-proxied lite mode from 4.0.0-beta.1 ship together. Maven Central / Swift Package Manager artifacts are intentionally NOT built from this tag — promote to stable by tagging v4.0.0.
🧭 New: Rerun.io integration (5 phases)
The SceneView SDK now streams AR session data (camera pose, planes, point clouds, anchors, hit results) to a Rerun viewer for scrub-and-inspect debugging. A single Python sidecar (samples/android-demo/tools/rerun-bridge.py) handles both Android and iOS clients — same JSON-lines wire format, same archetype dispatch.
Phase 1 — rerun-3d-mcp@1.0.0 (npm, live)
A new MCP server that helps Claude generate SceneView ↔ Rerun integration code:
setup_rerun_project— Android / iOS / Web / Python project scaffoldinggenerate_ar_logger— Kotlin or Swift AR streaming helpergenerate_python_sidecar— TCP → rerun-sdk bridgeembed_web_viewer— HTML + module-script embed snippetsexplain_concept— rrd / timelines / entities / archetypes / transforms
npx rerun-3d-mcpPhase 2 — Playground "AR Debug (Rerun)" example
New sample in the playground that embeds the official Rerun Web Viewer next to the SceneView canvas with per-platform code tabs (Android, iOS, Web, Flutter, React Native, Desktop, Claude).
Phase 3 — Android arsceneview.ar.rerun.RerunBridge
val bridge = rememberRerunBridge(
host = "127.0.0.1",
port = 9876,
rateHz = 10,
enabled = BuildConfig.DEBUG
)
ARSceneView(
onSessionUpdated = { session, frame -> bridge.logFrame(session, frame) }
)- Non-blocking
log*methods on a dedicatedDispatchers.IOscope Channel.CONFLATEDdrop-on-backpressure — never blocks the render thread- Rate-limited (default 10 Hz, configurable)
- Runtime
setEnabled(false)kill switch for release builds - Zero new Gradle dependencies
Tests: 16 new unit tests (12 golden-JSON + 4 socket integration with a mock ServerSocket).
Phase 4 — android-demo "AR Debug (Rerun)" tile
New Samples tab entry with overlay showing live event counter + connection status + setup instructions. Ships samples/android-demo/tools/rerun-bridge.py for the dev machine.
Phase 5 — iOS SceneViewSwift.RerunBridge + new ARSceneView.onFrame hook
@StateObject private var bridge = RerunBridge(
host: "192.168.1.42", // your Mac's LAN IP
port: 9876,
rateHz: 10
)
var body: some View {
ARSceneView()
.onFrame { frame, _ in bridge.logFrame(frame) }
.onAppear { bridge.connect() }
.onDisappear { bridge.disconnect() }
}Network.frameworkNWConnectionon a dedicated utility queue@Published eventCountfor SwiftUI overlay bindings- Same JSON-lines wire format, byte-identical to the Kotlin bridge
- New iOS demo
RerunDebugDemoinsamples/ios-demo
Cross-platform parity: 24 golden-string tests (12 per platform) with character-identical expected output. Any drift blows up on one or both sides at test time.
🎛 From v4.0.0-beta.1 — lite proxy routing
The sceneview-mcp client now routes Pro tools to the hosted gateway at sceneview-mcp.mcp-tools-lab.workers.dev/mcp:
- Free tools execute locally (unchanged from 3.6.x)
- Pro tools forward through the gateway with Bearer
$SCENEVIEW_API_KEY - No API key → friendly upsell stub pointing at
/pricing HOSTEDvsLITEmode detected at startup (stderr banner, silent viaSCENEVIEW_MCP_QUIET=1)
🪢 hub-gateway scaffold
New Cloudflare Worker at hub-gateway/ that multiplexes 11 non-sceneview MCP libraries (35 tools) behind a single endpoint, with auth middleware and KV-backed sliding-window rate limiting ported from the primary gateway.
📦 Installation
// Android — NOT on Maven Central yet, build from source
// implementation("io.github.sceneview:sceneview:4.0.0-rc.1")
// implementation("io.github.sceneview:arsceneview:4.0.0-rc.1")// iOS — NOT on SPM registry yet, pin to the tag manually
.package(url: "https://github.com/sceneview/SceneViewSwift.git", exact: "4.0.0-rc.1")# MCP — LIVE on npm
npx sceneview-mcp@next # v4.0.0-rc.1 (this release)
npx sceneview-mcp@latest # v3.6.4 (current stable, unchanged)
npx sceneview-mcp@beta # v4.0.0-beta.1 (previous RC)
npx rerun-3d-mcp # v1.0.0 (new, LIVE)⚠️ RC status — what's NOT automated
- Maven Central publish (Android
sceneview:4.0.0-rc.1) — not built from this tag - Swift Package Manager — consumers need to pin to the tag manually
- App Store / Play Store — the demo apps shipped via normal store auto-deploy on the main push
Promote to stable by creating a v4.0.0 annotated tag. Only strict-semver tags v[0-9]+.[0-9]+.[0-9]+ trigger the full release workflow.
🧪 Validation
./gradlew :arsceneview:compileDebugKotlin :arsceneview:testDebugUnitTest— ✓ 16/16 new Rerun tests./gradlew :samples:android-demo:assembleDebug— ✓swift build --package-path SceneViewSwift— ✓swift test --package-path SceneViewSwift --filter Rerun*— ✓ 12/12xcodebuild -project samples/ios-demo/SceneViewDemo.xcodeproj -scheme SceneViewDemo -destination 'generic/platform=iOS Simulator'— ✓cd mcp/packages/rerun && npm test— ✓ 73/73
🤖 Generated with Claude Code
v3.6.2 — Cross-Platform Parity + Render Testing
What's Changed
Dependencies
- chore(ci): bump gradle/actions from 5 to 6 by @dependabot[bot] in #781
- chore(ci): bump actions/setup-node from 4 to 6 by @dependabot[bot] in #783
- chore(ci): bump actions/stale from 9 to 10 by @dependabot[bot] in #784
- chore(deps): bump org.jetbrains.dokka from 2.1.0 to 2.2.0 by @dependabot[bot] in #787
- chore(deps): bump androidx.compose.material3:material3 from 1.5.0-alpha15 to 1.5.0-alpha16 by @dependabot[bot] in #786
- chore(deps): bump dev.romainguy:kotlin-math from 1.6.0 to 1.8.0 by @dependabot[bot] in #788
Other Changes
- Fix AugmentedFaceNode crash on zero-size mesh buffers and stale face updates by @LaoNastasy in #789
- Release v3.6.2 by @ThomasGorisse in #791
New Contributors
- @LaoNastasy made their first contribution in #789
Full Changelog: v3.6.1...v3.6.2
What's Changed
Dependencies
- chore(ci): bump gradle/actions from 5 to 6 by @dependabot[bot] in #781
- chore(ci): bump actions/setup-node from 4 to 6 by @dependabot[bot] in #783
- chore(ci): bump actions/stale from 9 to 10 by @dependabot[bot] in #784
- chore(deps): bump org.jetbrains.dokka from 2.1.0 to 2.2.0 by @dependabot[bot] in #787
- chore(deps): bump androidx.compose.material3:material3 from 1.5.0-alpha15 to 1.5.0-alpha16 by @dependabot[bot] in #786
- chore(deps): bump dev.romainguy:kotlin-math from 1.6.0 to 1.8.0 by @dependabot[bot] in #788
Other Changes
- Fix AugmentedFaceNode crash on zero-size mesh buffers and stale face updates by @LaoNastasy in #789
- Release v3.6.2 by @ThomasGorisse in #791
New Contributors
- @LaoNastasy made their first contribution in #789
Full Changelog: v3.6.1...v3.6.2
What's Changed
Dependencies
- chore(ci): bump gradle/actions from 5 to 6 by @dependabot[bot] in #781
- chore(ci): bump actions/setup-node from 4 to 6 by @dependabot[bot] in #783
- chore(ci): bump actions/stale from 9 to 10 by @dependabot[bot] in #784
- chore(deps): bump org.jetbrains.dokka from 2.1.0 to 2.2.0 by @dependabot[bot] in #787
- chore(deps): bump androidx.compose.material3:material3 from 1.5.0-alpha15 to 1.5.0-alpha16 by @dependabot[bot] in #786
- chore(deps): bump dev.romainguy:kotlin-math from 1.6.0 to 1.8.0 by @dependabot[bot] in #788
Other Changes
- Fix AugmentedFaceNode crash on zero-size mesh buffers and stale face updates by @LaoNastasy in #789
- Release v3.6.2 by @ThomasGorisse in #791
New Contributors
- @LaoNastasy made their first contribution in #789
Full Changelog: v3.6.1...v3.6.2
What's Changed
Dependencies
- chore(ci): bump gradle/actions from 5 to 6 by @dependabot[bot] in #781
- chore(ci): bump actions/setup-node from 4 to 6 by @dependabot[bot] in #783
- chore(ci): bump actions/stale from 9 to 10 by @dependabot[bot] in #784
- chore(deps): bump org.jetbrains.dokka from 2.1.0 to 2.2.0 by @dependabot[bot] in #787
- chore(deps): bump androidx.compose.material3:material3 from 1.5.0-alpha15 to 1.5.0-alpha16 by @dependabot[bot] in #786
- chore(deps): bump dev.romainguy:kotlin-math from 1.6.0 to 1.8.0 by @dependabot[bot] in #788
Other Changes
- Fix AugmentedFaceNode crash on zero-size mesh buffers and stale face updates by @LaoNastasy in #789
- Release v3.6.2 by @ThomasGorisse in #791
New Contributors
- @LaoNastasy made their first contribution in #789
Full Changelog: v3.6.1...v3.6.2
What's Changed
Dependencies
- chore(ci): bump gradle/actions from 5 to 6 by @dependabot[bot] in #781
- chore(ci): bump actions/setup-node from 4 to 6 by @dependabot[bot] in #783
- chore(ci): bump actions/stale from 9 to 10 by @dependabot[bot] in #784
- chore(deps): bump org.jetbrains.dokka from 2.1.0 to 2.2.0 by @dependabot[bot] in #787
- chore(deps): bump androidx.compose.material3:material3 from 1.5.0-alpha15 to 1.5.0-alpha16 by @dependabot[bot] in #786
- chore(deps): bump dev.romainguy:kotlin-math from 1.6.0 to 1.8.0 by @dependabot[bot] in #788
Other Changes
- Fix AugmentedFaceNode crash on zero-size mesh buffers and stale face updates by @LaoNastasy in #789
- Release v3.6.2 by @ThomasGorisse in #791
New Contributors
- @LaoNastasy made their first contribution in #789
Full Changelog: v3.6.1...v3.6.2
v3.6.1 — Architecture Refactoring + Quality Improvements
What's New in v3.6.1
Architecture
- Extract
SceneRenderer— shared render loop betweenSceneViewandARSceneView - Decompose
Nodegod class intoNodeGestureDelegate,NodeAnimationDelegate,NodeState - Extract
ARPermissionHandlerinterface (testable without Activity) - Fix
ModelLoader.releaseSourceData()memory leak - Clean legacy Java collision code
Quality
- 3,200+ tests across all platforms (Android JVM, KMP, Swift, MCP)
- +175 JVM unit tests for sceneview module
- +15 JVM unit tests for arsceneview module
- +63 KMP tests for sceneview-core
- +18 Swift tests for SceneViewSwift (ShapeNode)
- Fix 8 MCP test regressions
- Add pre-push quality gate script
- Full stability audit: all platforms PASS
Demo Apps
- Rebrand to "3D & AR Explorer" (iOS + Android)
- iOS: Add model gallery, favorites, share, categorized browsing
- Android: Material 3 Expressive rewrite, 4 tabs, 40 models
- Fix Play Store build (duplicate assets in asset pack)
- Fix App Store build (private init access level)
- Fix AR camera tone mapper (
rememberView→rememberARView)
Website
- Redesign 8 sections on homepage
- Rewrite Showcase page from scratch
- Playground: 7 platform tabs, camera manipulator, Open in Claude
- Playground: geometry primitives preview, AR placeholders
- Fix Docs 404 (redirect page)
- Auto-deploy GitHub Pages workflow
Cross-Platform
- iOS: Add
ShapeNode(23/24 Android parity) - iOS: Fix
GeometryMaterial.custom(),ViewNodeplatform guard - Web: Fix
SCENEVIEW_VERSION(1.3.0 → 3.6.0) - TV: Fix missing assets (would crash at runtime)
- MCP: Align version 3.5.5 → 3.6.0
- Flutter + React Native: Prepare for publication
- CI: Web builds now blocking, Gradle verification added
Install
```kotlin
// Android 3D
implementation("io.github.sceneview:sceneview:3.6.1")
// Android AR
implementation("io.github.sceneview:arsceneview:3.6.1")
```
```swift
// iOS / macOS / visionOS (Swift Package Manager)
.package(url: "https://github.com/sceneview/SceneViewSwift", from: "3.6.1")
```
Full changelog: CHANGELOG.md
What's Changed
Dependencies
- chore(deps): bump androidx.test:runner from 1.6.2 to 1.7.0 by @dependabot[bot] in #770
- chore(deps): bump media3 from 1.9.2 to 1.10.0 by @dependabot[bot] in #769
- chore(deps): bump androidx.tv:tv-foundation from 1.0.0-alpha11 to 1.0.0-beta01 by @dependabot[bot] in #772
- chore(deps): bump androidx.compose:compose-bom from 2025.06.00 to 2025.12.01 by @dependabot[bot] in #771
- chore(deps): bump kotlin from 2.1.21 to 2.3.20 by @dependabot[bot] in #768
Other Changes
- Ignore pointless files by @hannesa2 in #776
- Verify gradle action by @hannesa2 in #778
- Fix build for Android sample by @hannesa2 in #775
- Build all in every pull request by @hannesa2 in #777
Full Changelog: v3.6.0...v3.6.1
v3.6.0 — API Simplification
API Simplification Release
SceneView 3.6.0 simplifies the API surface so AI assistants and developers can write correct code on the first try.
Android (Jetpack Compose)
SecondaryCamera—CameraNodecomposable renamed for clarity (old name still works via@Deprecated)- Uniform transforms — all geometry nodes (
CubeNode,SphereNode,CylinderNode,PlaneNode,LineNode,PathNode) now acceptposition,rotation,scale LightNodeparams —intensity,direction,positionas direct parameters instead of dualapply/nodeApplylambdasVideoNode(videoPath:)— convenience overload that handlesMediaPlayerlifecycle automaticallyShapeNodeandPhysicsNode— new composables directly in theScene { }DSL
Apple (SwiftUI + RealityKit)
- Declarative
SceneViewwith@NodeBuilder— matches Android'sScene { }pattern - Per-entity gestures — fluent API:
entity.onTap { }.onDrag { }.onScale { }.onRotate { } NodeGestureauto-cleanup — weak entity references with automatic stale handler purging
Infrastructure
- Play Asset Delivery — demo app assets moved to install-time asset pack (fixes 200MB limit)
- GitHub Actions — bumped to latest versions (checkout v6, cache v5, upload-artifact v7, etc.)
Migration
All deprecated APIs use @Deprecated(replaceWith = ...) — the Kotlin compiler auto-suggests fixes via IDE quick actions. See the Migration Guide.
Install
// Android
implementation("io.github.sceneview:sceneview:3.6.0")
implementation("io.github.sceneview:arsceneview:3.6.0")// Apple (SPM)
.package(url: "https://github.com/sceneview/sceneview-swift.git", from: "3.6.0")Full Changelog: v3.5.2...v3.6.0
v3.5.2
Full Changelog: v3.5.1...v3.5.2
v3.5.1 — macOS support, environment picker, MCP 3.5.3
Highlights
- Native macOS support in SceneViewSwift + demo app (App Store submission pending review)
- Environment picker — 6 HDR presets (Studio, Outdoor, Sunset, Night, Warm, Autumn) in iOS demo
- MCP 3.5.3 published to npm with correct dependency references (1204 tests)
- CI/CD extended with macOS App Store deploy job
Apple platforms
- macOS compilation support across all SceneViewSwift source files
- macOS app icons at proper sizes (16px to 1024px)
- Swift 6 strict concurrency fix (
@MainActoron HapticManager) - iOS + macOS both submitted to App Store (pending review)
MCP Server
- All dependency references updated from 3.4.7 to 3.5.1
- Published as
sceneview-mcp@3.5.3on npm - 42 test files, 1204 tests passing
Documentation
- ViewNode, SceneSnapshot, SceneEnvironment.allPresets added to llms.txt
- Rebuilt docs site with zero stale version references
- CDN versions updated in README and website
CI/CD
- Extended
app-store.ymlwith parallel iOS + macOS deploy jobs - Fixed TestFlight deploy failure (Swift 6 concurrency)
- All 4 CI workflows green
Install
Android:
implementation("io.github.sceneview:sceneview:3.5.1")
implementation("io.github.sceneview:arsceneview:3.5.1")Apple (iOS/macOS/visionOS):
.package(url: "https://github.com/sceneview/sceneview-swift.git", from: "3.5.1")MCP:
{ "mcpServers": { "sceneview": { "command": "npx", "args": ["-y", "sceneview-mcp"] } } }v3.5.0
SceneView v3.5.0
3D Assets CDN
Large 3D model assets hosted on GitHub Releases for URL-based loading.
These assets are used by the SceneView demo apps and can be loaded at runtime via:
- Android:
rememberModelInstance(modelLoader, "https://github.com/sceneview/sceneview/releases/download/assets-v1/model.glb") - iOS:
ModelNode.load(from: URL(string: "https://github.com/sceneview/sceneview/releases/download/assets-v1/model.usdz")!)
Models
| Model | GLB | USDZ | License |
|---|---|---|---|
| Earthquake California | 39MB | 24MB | CC-BY-4.0 |
| Nike Air Jordan | 30MB | - | CC-BY-4.0 |
| Porsche 911 Turbo | 21MB | - | CC-BY-4.0 |