Skip to content

SceneView

3D & AR for every platform — native Android, native iOS, React Native, Flutter, and beyond.

Android Native iOS Native v4.1 XR Headsets React Native Flutter TV · Auto · Desktop

Start building Try the demo View on GitHub

SceneView runs on Android phones, tablets, iOS, XR headsets, automotive, TV, React Native, and Flutter

26+ built-in nodes 60fps on mid-range devices 6 platforms supported Apache 2.0 open source

See what you can build

SceneView powers production apps in e-commerce, automotive, healthcare, and more. Same composable API — from a 5" phone to a 65" TV to XR headsets.

3D product viewer with AR try-on
Made with SceneView

E-commerce

3D product viewers with 360° rotation and AR try-on. Drop a Scene {} where you'd use an Image().

AR navigation like Google Maps Live View
Made with SceneView

AR navigation

Augmented reality walking directions, indoor wayfinding, street-level AR overlays — built with ARScene {}.

Automotive HUD with 3D navigation
Made with SceneView

Automotive HUD

Heads-up displays, 3D navigation arrows, speed overlays on Android Automotive. Multiple Scene {} on one screen.

XR spatial computing showroom
Made with SceneView

XR spatial computing

Floating 3D models with Compose UI panels in spatial space. XRScene {} + ViewNode for cards, buttons, pickers.

Medical training app with interactive 3D anatomy

Healthcare & education

Interactive 3D anatomy models, molecular structures, and mechanical assemblies. Students control everything with standard Compose UI — sliders, buttons, toggles.

Real estate AR furniture placement

Real estate

Walk through 3D floor plans, preview renovations in AR, compare lighting conditions. PortalNode lets users peek through doors into furnished rooms.

3D mobile game with physics and level editor

Gaming & entertainment

Build 3D mobile games without a game engine. PhysicsNode for collisions, dynamic lighting, Compose UI overlays for HUD — all at 60fps on mid-range devices.

Interactive 3D globe and solar system for education

Education & STEM

Interactive globes, solar system explorers, chemistry lab simulations. Students control 3D models with standard Compose sliders, buttons, and quiz overlays via ViewNode.


How it works

Write a Scene { } the same way you write a Column { }. Nodes are composables. State drives the scene. Lifecycle is automatic.

3 steps: Write Compose, Add 3D Nodes, Ship everywhere
Scene tree: Scene contains ModelNode, LightNode, AnchorNode — same pattern as Column/Row
@Composable
fun ProductViewer() {
    val engine = rememberEngine()
    val modelLoader = rememberModelLoader(engine)
    val shoe = rememberModelInstance(modelLoader, "models/shoe.glb")

    Scene(
        modifier = Modifier.fillMaxWidth().height(300.dp),
        engine = engine,
        cameraManipulator = rememberCameraManipulator()
    ) {
        shoe?.let {
            ModelNode(modelInstance = it, scaleToUnits = 1.0f, autoAnimate = true)
        }
        LightNode(type = LightManager.Type.SUN, apply = { intensity(100_000.0f) })
    }
}

Ten lines. Your users can rotate, zoom, and inspect a product in 3D — inside your existing Compose layout.

@Composable
fun FurniturePlacement() {
    var anchor by remember { mutableStateOf<Anchor?>(null) }
    val engine = rememberEngine()
    val modelLoader = rememberModelLoader(engine)
    val sofa = rememberModelInstance(modelLoader, "models/sofa.glb")

    ARScene(
        modifier = Modifier.fillMaxSize(),
        engine = engine,
        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 { a ->
            AnchorNode(anchor = a) {
                sofa?.let {
                    ModelNode(modelInstance = it, scaleToUnits = 0.5f, isEditable = true)
                }
            }
        }
    }
}

Tap to place. Pinch to scale. Two-finger rotate. All built in.

@Composable
fun SpatialShowroom() {
    XRScene(modifier = Modifier.fillMaxSize()) {
        ModelNode(
            modelInstance = furniture,
            position = Position(0f, 0f, -2f)
        )
        ViewNode(position = Position(0.5f, 1.5f, -1.5f)) {
            Card {
                Text("Tap to customize")
                ColorPicker(onColorSelected = { /* update material */ })
            }
        }
    }
}

Same composable API — now in spatial computing headsets.

struct ProductViewer: View {
    var body: some View {
        SceneView {
            ModelNode("models/shoe.usdz", scaleToUnits: 1.0)
                .playAllAnimations()
            LightNode(.directional)
        }
        .cameraControls(.orbit)
    }
}

Same mental model — SwiftUI + RealityKit under the hood. Share your scene graph via Kotlin Multiplatform.

v4.0 multi-platform roadmap


Ask AI, get a 3D scene

The most AI-friendly 3D library. Ships with an MCP server and llms.txt API reference — so Claude, Cursor, and Copilot always have the current API.

💬 You describe it → AI writes the code → SceneView renders it
"Add a 3D product viewer to my shopping app. Users should rotate the sneaker model and tap a button to see it in AR in their room."
@Composable
fun ProductDetail(modelPath: String) {
    var showAR by remember { mutableStateOf(false) }
    val engine = rememberEngine()
    val modelLoader = rememberModelLoader(engine)
    val model = rememberModelInstance(modelLoader, modelPath)

    if (showAR) {
        ARScene(modifier = Modifier.fillMaxSize(), engine = engine, planeRenderer = true,
            onSessionUpdated = { _, frame -> /* anchor placement */ }
        ) { /* AR content */ }
    } else {
        Scene(modifier = Modifier.fillMaxWidth().height(350.dp), engine = engine,
            cameraManipulator = rememberCameraManipulator()
        ) {
            model?.let { ModelNode(modelInstance = it, scaleToUnits = 1.0f) }
        }
    }
    Button(onClick = { showAR = !showAR }) { Text(if (showAR) "Back to 3D" else "View in AR") }
}

MCP server included llms.txt API reference Works with Claude · Cursor · Copilot

AI-assisted development


Install

dependencies {
    implementation("io.github.sceneview:sceneview:3.2.0")
}
dependencies {
    implementation("io.github.sceneview:arsceneview:3.2.0")
}
dependencies {
    implementation("io.github.sceneview:sceneview-xr:4.0.0")
}

That's it

No XML layouts. No fragments. No OpenGL boilerplate. Just add the dependency and start composing.


What you get

26+ composable node types — visual overview

8 node types: ModelNode, LightNode, CubeNode, AnchorNode, VideoNode, TextNode, PathNode, ViewNode
  • 3D Models


    ModelNode loads glTF/GLB with animations, gestures, and automatic scaling. Geometry primitives — CubeNode, SphereNode, CylinderNode, PlaneNode — need no asset files.

    Model loading guide

  • Lighting & Atmosphere


    LightNode (sun, point, spot, directional), DynamicSkyNode (time-of-day), FogNode, ReflectionProbeNode. All driven by Compose state.

    Lighting recipes

  • Media & UI in 3D


    ImageNode, VideoNode (with chromakey), and ViewNode — render any Composable directly inside 3D space. Text, buttons, cards — floating in your scene.

    ViewNode recipes

  • Physics


    PhysicsNode — rigid body simulation with gravity, collision, and tap-to-throw. Interactive 3D worlds without a game engine.

    Physics guide

  • Drawing & Text


    LineNode, PathNode for 3D polylines and animated paths. TextNode, BillboardNode for camera-facing labels.

    Lines & text guide

  • AR & spatial


    AnchorNode, AugmentedImageNode, AugmentedFaceNode, CloudAnchorNode, StreetscapeGeometryNode. Plane detection, geospatial, environmental HDR.

    AR codelab

  • Production rendering — Filament


    Built on Google Filament — PBR, HDR environment lighting, bloom, depth-of-field, SSAO. 60fps on mid-range devices.

    Performance guide

Full feature showcase


See it in action

📱 Android Phone Shipping today

Real app screenshots

Feature previews

📋 Android Tablet Shipping today
🚗 Android Automotive Shipping today
🥽 XR Headsets v4.0 :octicons-arrow-right-24:

Same composable API — XRScene { } for spatial computing. Floating Compose UI via ViewNode.

🍎 iOS v4.1 :octicons-arrow-right-24:

Kotlin Multiplatform + Filament Metal backend. Share your scene graph across Android and iOS.

🖥️ TV · Desktop v4.0 :octicons-arrow-right-24:

Compose Multiplatform opens the door to Android TV, Desktop JVM, and every screen Kotlin reaches.


Get started

  • 3D with Compose


    Build your first 3D scene with a rotating glTF model, HDR lighting, and orbit camera gestures.

    ~25 minutes

    Start the codelab

  • AR with Compose


    Place 3D objects in the real world using ARCore plane detection and anchor tracking.

    ~20 minutes

    Start the codelab


Samples

15 working sample apps ship with the repository:

Sample What it demonstrates
model-viewer 3D model, HDR environment, orbit camera, animation playback
ar-model-viewer Tap-to-place, plane detection, pinch/rotate gestures
camera-manipulator Orbit / pan / zoom camera with gesture hints
dynamic-sky Time-of-day sun, turbidity, fog controls
physics-demo Tap-to-throw balls, collision, gravity
post-processing Bloom, depth-of-field, SSAO, fog toggles
ar-augmented-image Real-world image detection + overlay
ar-cloud-anchor Persistent cross-device anchors
ar-point-cloud ARCore feature point visualisation
autopilot-demo Autonomous driving HUD
gltf-camera Cameras imported from a glTF file
line-path Animated sine/Lissajous curves with PathNode
text-labels Camera-facing 3D text labels (TextNode)
reflection-probe Zone-based IBL overrides + material picker
sceneview-demo Full showcase: Explore, Showcase, Gallery tabs

Switching from another library?

  • Coming from Sceneform?


    Sceneform was archived by Google in 2021. SceneView is the successor — modern Compose API, active development, full ARCore support.

    Migration guide

  • Evaluating options?


    Side-by-side comparison with Sceneform, Unity, raw ARCore, Rajawali, and other alternatives.

    Comparison


## Start building in 5 minutes One Gradle line. No XML. No OpenGL. Just Compose. [:octicons-arrow-right-24: Start building now](quickstart.md){ .md-button .md-button--primary } [:octicons-comment-discussion-24: Join Discord](https://discord.gg/UbNDDBTNqb){ .md-button } [:octicons-mark-github-24: Star on GitHub](https://github.com/SceneView/sceneview-android){ .md-button }