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
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") // Xcode: File, Add Package Dependencies
https://github.com/sceneview/sceneview.git
// Version: 4.66.0<script src="https://cdn.jsdelivr.net/gh/sceneview/sceneview@v4.66.0/website-static/js/filament /filament.js" ></script>
<script src="https://cdn.jsdelivr.net/gh/sceneview/sceneview@v4.66.0/website-static/js /sceneview.js" ></script>$ flutter pub add flutter_sceneview$ npm install @sceneview-sdk/react-native
$ npx pod-installimplementation("io.github.sceneview:sceneview-compose:4.66.0") SceneView.create(canvas, { transparent: true })playAnimation(0, true)iblUrl, iblIntensityPick 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,
autoAnimate = true,
)
}
}
}Drag 1.0f sideways, or focus it and use the arrow keys.
// iOS, macOS and visionOS, SwiftUI
struct ModelScreen: View {
@State private var model: ModelNode?
var body: some View {
SceneView { root in
if let model { root.addChild(model.entity) }
}
.contentID(model != nil)
.environment(.studio)
.cameraControls(.orbit)
.task { model = try? await ModelNode.load("armchair.usdz") }
}
}<!-- Web, Filament on WebAssembly -->
<canvas id="viewer"></canvas>
<script src="…/filament.js"></script>
<script src="…/sceneview.js"></script>
<script>
SceneView.modelViewer("viewer", "models/armchair.glb")
</script>// Flutter, Android and iOS
final controller = SceneViewController();
SceneView(
controller: controller,
onViewCreated: () => controller.loadModel(
const ModelNode(modelPath: 'models/armchair.glb'),
),
)// React Native, Android and iOS
<SceneView
style={{ flex: 1 }}
modelNodes={[{ src: 'models/armchair.glb', position: [0, 0, -2] }]}
cameraControlMode="orbit"
/>Plane detection, anchors, depth occlusion and real-world scale: ARCore on Android, ARKit on iOS, written as composables and views.
Open the AR demoThe Cosmos demo generates a spiral galaxy in real time. No mesh file to ship.
Apple samplesglTF, 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 guideViewNode renders real Compose content on a node: labels, cards and controls placed in 3D space.
Open the ViewNode demoTry every demo on your phone: Google Play App Store Web demo
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.
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.
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.
Native renderers underneath: Filament on Android, desktop and the web, RealityKit on Apple.
Compose Multiplatform: one SceneViewer for Android, iOS and desktop, a viewer subset without AR. Feature matrix per platform
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-mcpAny MCP client: run the server with npx
$ npx -y sceneview-mcpClaude Code: run in a terminal
$ claude mcp add sceneview -- npx -y sceneview-mcpGitHub Copilot in VS Code: .vscode/mcp.json
{"servers":{"sceneview":{"type":"stdio","command":"npx","args":["-y","sceneview-mcp"] }}}OpenAI Codex: run in a terminal
$ codex mcp add sceneview -- npx -y sceneview-mcpCursor: .cursor/mcp.json
{"mcpServers":{"sceneview":{"command":"npx","args":["-y","sceneview-mcp"] }}}Gemini CLI and Code Assist: ~/.gemini/settings.json
{"mcpServers":{"sceneview":{"command":"npx","args":["-y","sceneview-mcp"] }}}JetBrains AI Assistant: Settings, Tools, AI Assistant, Model Context Protocol
{"mcpServers":{"sceneview":{"command":"npx","args":["-y","sceneview-mcp"] }}}OpenCode: opencode.json
{"mcp":{"sceneview":{"type":"local","command":["npx","-y","sceneview-mcp"], "enabled":true }}}Google Antigravity: mcp_config.json
{"mcpServers":{"sceneview":{"command":"npx","args":["-y","sceneview-mcp"] }}}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.
| SceneView | Unity | Filament, direct | Three.js | RealityKit | |
|---|---|---|---|---|---|
| Declarative UI | Compose, SwiftUI | No, editor and C# | No, imperative | No, imperative | SwiftUI |
| Setup | One Gradle or SwiftPM dependency | Separate engine, embedded as a library | Engine, materials and loaders wired by hand | One npm package | Part of the Apple SDKs |
| Platforms | Android stable; Apple, web, desktop, Flutter, React Native alpha | Most platforms | Android, Apple, desktop, web | Web | Apple only |
| AR | ARCore, ARKit | AR Foundation | Bring your own | WebXR | ARKit |
| Renderer | Filament, RealityKit | Unity | Filament | WebGL, WebGPU | RealityKit |
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.
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.
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.
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.
Apache 2.0. The sample 3D models keep their own licenses, listed on the credits page.
Each platform has a quickstart of about ten lines, and the playground edits a live scene in the browser.