sceneview

mcp
SUMMARY

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

README.md

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.

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

CI
License
GitHub Stars
GitHub Release
Discord
Sponsors
Open Collective


Quick look

// Android — Jetpack Compose
Scene(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/[email protected]/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.5.2")     // 3D
    implementation("io.github.sceneview:arsceneview:3.5.2")   // AR (includes 3D)
}

iOS / macOS / visionOS (Swift Package Manager):

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

Web (sceneview.js — one line):

<script src="https://cdn.jsdelivr.net/npm/[email protected]/sceneview.js"></script>

Web (Kotlin/JS):

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

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

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

Scene(
    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

ARScene is Scene with ARCore. The camera follows real-world tracking.

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

ARScene(
    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.5.2)


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/[email protected]/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 22 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 Android ./gradlew :samples:android-demo:assembleDebug
samples/android-tv-demo Android TV ./gradlew :samples:android-tv-demo:assembleDebug
samples/ios-demo iOS Open in Xcode
samples/web-demo Web ./gradlew :samples:web-demo:jsBrowserRun
samples/desktop-demo Desktop ./gradlew :samples:desktop-demo:run
samples/flutter-demo Flutter cd samples/flutter-demo && flutter run
samples/react-native-demo React Native See README

Links

Support

SceneView is free and open source. Sponsors help keep it maintained across 9 platforms.

Platform Link
:heart: GitHub Sponsors (0% fees) Sponsor on GitHub
:blue_heart: Open Collective (transparent) opencollective.com/sceneview
:rocket: Polar (fund features) polar.sh/sceneview

See SPONSORS.md for tiers and current sponsors.

Reviews (0)

No results found