A phoenix in flight, its long tail feathers in orange and blue, rendered by SceneView Web.

Phoenix Bird by NORBERTO-3D, CC BY 4.0

Declarative 3D and AR for Compose, SwiftUI and the web

SceneView renders 3D models and AR scenes inside Jetpack Compose, SwiftUI and web apps. Scenes are declared in code, like the rest of the UI.

implementation("io.github.sceneview:sceneview:4.66.0")
Android quickstart
  1. A transparent canvas on the pageSceneView.create(canvas, { transparent: true })
  2. The model's own animationplayAnimation(0, true)
  3. Image-based lightingiblUrl, iblIntensity

The code and the scene it renders

Pick a model: the string in the code and the scene beside it change together. In the Compose tab, drag the value of scaleToUnits and watch the model follow.

// Android, Jetpack Compose
@Composable
fun ModelScreen() {
    SceneView(modifier = Modifier.fillMaxSize()) {
        rememberModelInstance(modelLoader, "models/armchair.glb")
            ?.let { instance ->
                ModelNode(
                    modelInstance = instance,
                    scaleToUnits = 1.0f,

                )
            }
    }
}

Drag 1.0f sideways, or focus it and use the arrow keys.

Stable on Android Compose quickstart
A tan leather armchair, rendered by SceneView.

Rivet Aiden armchair, Amazon Berkeley Objects, CC BY 4.0

What you can build

AR placement at real size

Plane detection, anchors, depth occlusion and real-world scale: ARCore on Android, ARKit on iOS, written as composables and views.

Open the AR demo

The 3D formats you already use

glTF, GLB, USDZ, STL, OBJ, PLY and 3MF. glTF and GLB render on Filament, USDZ on RealityKit; STL, OBJ, PLY and 3MF are converted on load.

Formats guide

Compose UI inside the 3D scene

ViewNode renders real Compose content on a node: labels, cards and controls placed in 3D space.

Open the ViewNode demo

Try every demo on your phone: Google Play App Store Web demo

Funding and commercial support

SceneView is free and built in the open by its contributors. Donations and paid support pay for the fixes, the Filament upgrades and the releases that apps depend on.

Donations

Once or monthly, from a person or a company. Open Source Collective, the fiscal host, issues the invoice and the receipt, and a donor is listed nowhere unless they ask.

Commercial support

  • Incident: $600One reproducible problem. Within 3 business days: a minimal reproduction, the cause, and a workaround or a costed fix.
  • 2.3 LTS: $1,800 for 90 daysOne identified integration. Answers within 2 business days and up to 1 day of work a month; more work is quoted. The $600 of an Incident already bought is deducted.

Contracted and invoiced through Open Source Collective, the fiscal host; the money goes to the collective’s budget. Payment comes before any work. Every version stays under Apache 2.0.

Platform support

Native renderers underneath: Filament on Android, desktop and the web, RealityKit on Apple.

  • AndroidJetpack Compose, Filament, ARCoreStable
  • AppleiOS, macOS and visionOS in one SwiftUI package on RealityKit. AR on iOS. USDZ, no glTFAlpha
  • WebFilament WASM, WebGL2, glTFAlpha
  • DesktopCompose Desktop, Filament, JDK 21+Alpha
  • Android TVSame artifact as Android, D-pad inputAlpha
  • FlutterPlatform view over the native SDKsAlpha
  • React NativeFabric view over the native SDKsAlpha
  • Android XRJetpack XR SceneCorePlanned

Compose Multiplatform: one SceneViewer for Android, iOS and desktop, a viewer subset without AR. Feature matrix per platform

MCP server for AI coding assistants

SceneView ships an MCP server and an llms.txt, so any assistant that speaks MCP reads the real API instead of guessing it.

Any MCP client: run the server with npx

$ npx -y sceneview-mcp

Adoption

SceneView has more than 1,300 stars on GitHub, and over 500 public repositories declare it as a dependency.

Repository count from GitHub code search, owners sceneview and ThomasGorisse excluded, checked on October 28, 2026. Star count from the GitHub repository page.

How SceneView compares

Compare SceneView with
SceneView compared with Unity, Filament used directly, Three.js and RealityKit
SceneViewUnityFilament, directThree.jsRealityKit
Declarative UICompose, SwiftUINo, editor and C#No, imperativeNo, imperativeSwiftUI
SetupOne Gradle or SwiftPM dependencySeparate engine, embedded as a libraryEngine, materials and loaders wired by handOne npm packagePart of the Apple SDKs
PlatformsAndroid stable; Apple, web, desktop, Flutter, React Native alphaMost platformsAndroid, Apple, desktop, webWebApple only
ARARCore, ARKitAR FoundationBring your ownWebXRARKit
RendererFilament, RealityKitUnityFilamentWebGL, WebGPURealityKit
Is SceneView the successor of Sceneform?

Yes. When Google archived Sceneform, the community kept it going as com.gorisse.thomas.sceneform, and SceneView grew out of that line with a Compose-first API on Filament. The migration guide covers the move from Sceneform.

How is SceneView different from Unity or a game engine?

SceneView is a UI library, not an engine you embed. A 3D scene is a composable or a SwiftUI view inside your existing app, with the same state, navigation and build. A game engine fits full games and editor-driven content; SceneView fits product viewers, AR placement and 3D inside an app’s own UI.

Which 3D formats does SceneView support?

glTF and GLB, rendered by Filament on Android, desktop and the web. USDZ, rendered by RealityKit on Apple platforms. STL, OBJ, PLY and 3MF files are converted on load.

Can AI coding assistants use SceneView?

Yes. SceneView publishes an MCP server (sceneview-mcp) and an llms.txt file, so any assistant that supports the Model Context Protocol can read the current API instead of guessing it. The docs give the setup for each client.

What is SceneView’s license?

Apache 2.0. The sample 3D models keep their own licenses, listed on the credits page.

Getting started

Each platform has a quickstart of about ten lines, and the playground edits a live scene in the browser.