SkillAgentSearch skills...

Sceneview

3D & AR SDK for Android, iOS, Web, Desktop, TV, Flutter, React Native — Jetpack Compose, SwiftUI, Filament, RealityKit, WebXR

Install / Use

/learn @sceneview/Sceneview

README

SceneView

3D & AR for every platform.

Build 3D and AR experiences with the UI frameworks you already know. Same concepts, same simplicity — Android, iOS, Web, Desktop, TV, Flutter, React Native.

<!-- Platforms -->

Android 3D Android AR iOS / macOS / visionOS sceneview.js MCP Server Flutter React Native

<!-- Status -->

CI License GitHub Stars GitHub Release Discord Sponsors Open Collective


Quick look

// Android — Jetpack Compose
SceneView(modifier = Modifier.fillMaxSize()) {
    rememberModelInstance(modelLoader, "models/helmet.glb")?.let {
        ModelNode(modelInstance = it, scaleToUnits = 1.0f, autoAnimate = true)
    }
}
// iOS — SwiftUI
SceneView(environment: .studio) {
    ModelNode(named: "helmet.usdz")
        .scaleToUnits(1.0)
}
<!-- Web — one script tag -->
<script src="https://cdn.jsdelivr.net/npm/sceneview-web@3.6.0/sceneview.js"></script>
<script> SceneView.modelViewer("canvas", "model.glb") </script>
# Claude — ask AI to build your 3D app
claude mcp add sceneview -- npx sceneview-mcp
# Then ask: "Build me an AR app with tap-to-place furniture"

No engine boilerplate. No lifecycle callbacks. The runtime handles everything.


Platforms

| Platform | Renderer | Framework | Status | |---|---|---|---| | Android | Filament | Jetpack Compose | Stable | | Android TV | Filament | Compose TV | Alpha | | iOS / macOS / visionOS | RealityKit | SwiftUI | Alpha | | Web | Filament.js (WASM) | Kotlin/JS + sceneview.js | Alpha | | Desktop | Software renderer | Compose Desktop | Alpha | | Flutter | Native per platform | PlatformView | Alpha | | React Native | Native per platform | Fabric | Alpha | | Claude / AI | — | MCP Server | Stable |


Install

Android (3D + AR):

dependencies {
    implementation("io.github.sceneview:sceneview:3.6.0")     // 3D
    implementation("io.github.sceneview:arsceneview:3.6.0")   // AR (includes 3D)
}

iOS / macOS / visionOS (Swift Package Manager):

https://github.com/sceneview/sceneview-swift.git  (from: 3.6.0)

Web (sceneview.js — one line):

<script src="https://cdn.jsdelivr.net/npm/sceneview-web@3.6.0/sceneview.js"></script>

Web (Kotlin/JS):

dependencies {
    implementation("io.github.sceneview:sceneview-web:3.6.0")
}

Claude Code / Claude Desktop:

claude mcp add sceneview -- npx sceneview-mcp
{ "mcpServers": { "sceneview": { "command": "npx", "args": ["-y", "sceneview-mcp"] } } }

Desktop / Flutter / React Native: see samples/


3D scene

SceneView is a Composable that renders a Filament 3D viewport. Nodes are composables inside it.

SceneView(
    modifier = Modifier.fillMaxSize(),
    engine = rememberEngine(),
    modelLoader = rememberModelLoader(engine),
    environment = rememberEnvironment(engine, "envs/studio.hdr"),
    cameraManipulator = rememberCameraManipulator()
) {
    // Model — async loaded, appears when ready
    rememberModelInstance(modelLoader, "models/helmet.glb")?.let {
        ModelNode(modelInstance = it, scaleToUnits = 1.0f, autoAnimate = true)
    }

    // Geometry — procedural shapes
    CubeNode(size = Size(0.2f))
    SphereNode(radius = 0.1f, position = Position(x = 0.5f))

    // Nesting — same as Column { Row { } }
    Node(position = Position(y = 1.0f)) {
        LightNode(apply = { type(LightManager.Type.POINT); intensity(50_000f) })
        CubeNode(size = Size(0.05f))
    }
}

Node types

| Node | What it does | |---|---| | ModelNode | glTF/GLB model with animations. isEditable = true for gestures. | | LightNode | Sun, directional, point, or spot light. apply is a named parameter. | | CubeNode / SphereNode / CylinderNode / PlaneNode | Procedural geometry | | ImageNode | Image on a plane | | ViewNode | Compose UI rendered as a 3D surface | | MeshNode | Custom GPU mesh | | Node | Group / pivot |


AR scene

ARSceneView is SceneView with ARCore. The camera follows real-world tracking.

var anchor by remember { mutableStateOf<Anchor?>(null) }

ARSceneView(
    modifier = Modifier.fillMaxSize(),
    planeRenderer = true,
    onSessionUpdated = { _, frame ->
        if (anchor == null) {
            anchor = frame.getUpdatedPlanes()
                .firstOrNull { it.type == Plane.Type.HORIZONTAL_UPWARD_FACING }
                ?.let { frame.createAnchorOrNull(it.centerPose) }
        }
    }
) {
    anchor?.let {
        AnchorNode(anchor = it) {
            ModelNode(modelInstance = helmet, scaleToUnits = 0.5f)
        }
    }
}

Plane detected → anchor set → Compose recomposes → model appears. Clear anchor → node removed. AR state is just Kotlin state.

AR node types

| Node | What it does | |---|---| | AnchorNode | Follows a real-world anchor | | AugmentedImageNode | Tracks a detected image | | AugmentedFaceNode | Face mesh overlay | | CloudAnchorNode | Persistent cross-device anchor | | StreetscapeGeometryNode | Geospatial streetscape mesh |


Apple (iOS / macOS / visionOS)

Native Swift Package built on RealityKit. 17 node types.

SceneView(environment: .studio) {
    ModelNode(named: "helmet.usdz").scaleToUnits(1.0)
    GeometryNode.cube(size: 0.1, color: .blue).position(x: 0.5)
    LightNode.directional(intensity: 1000)
}
.cameraControls(.orbit)

AR on iOS:

ARSceneView(planeDetection: .horizontal) { position, arView in
    GeometryNode.cube(size: 0.1, color: .blue)
        .position(position)
}

Install: https://github.com/sceneview/sceneview-swift.git (SPM, from 3.6.0)


SceneView Web (JavaScript)

The lightest way to add 3D to any website. One script tag, one function call. ~25 KB library powered by Filament.js WASM — the same engine behind Android SceneView.

<script src="https://cdn.jsdelivr.net/npm/sceneview-web@3.6.0/sceneview.js"></script>
<script> SceneView.modelViewer("canvas", "model.glb") </script>

API:

  • SceneView.modelViewer(canvasOrId, url, options?) — all-in-one viewer with orbit + auto-rotate
  • SceneView.create(canvasOrId, options?) — empty viewer, load model later
  • viewer.loadModel(url) — load/replace glTF/GLB model
  • viewer.setAutoRotate(enabled) — toggle rotation
  • viewer.dispose() — clean up resources

Install: npm install sceneview-web or CDN — Landing pagenpm


AI integration

SceneView is AI-first — designed so AI assistants generate correct, compilable 3D/AR code on the first try.

The official MCP server gives Claude, Cursor, Windsurf, and any MCP client 26 specialized tools, 33 compilable samples, a full API reference, and a code validator.

# Claude Code — one command
claude mcp add sceneview -- npx sceneview-mcp

# Claude Desktop — add to config
{ "mcpServers": { "sceneview": { "command": "npx", "args": ["-y", "sceneview-mcp"] } } }

# Works with any MCP client (Cursor, Windsurf, etc.)
npx sceneview-mcp

Listed on the MCP Registry. See the MCP README for full setup and tool reference.


Architecture

Each platform uses its native renderer. Shared logic lives in KMP.

sceneview-core (Kotlin Multiplatform)
├── math, collision, geometry, physics, animation
│
├── sceneview (Android)      → Filament + Jetpack Compose
├── arsceneview (Android)    → ARCore
├── SceneViewSwift (Apple)   → RealityKit + SwiftUI
├── sceneview-web (Web)      → Filament.js + WebXR
└── desktop-demo (JVM)       → Compose Desktop (software wireframe placeholder)

Samples

| Sample | Platform | Run | |---|---|---| | samples/android-demo |

View on GitHub
GitHub Stars1.1k
CategoryDevelopment
Updated8h ago
Forks206

Languages

Kotlin

Security Score

100/100

Audited on Mar 31, 2026

No findings