This content originally appeared on DEV Community and was authored by Thomas Gorisse
You're building an Android app with Jetpack Compose. You need 3D. Maybe a product viewer, a model configurator, or AR furniture placement.
You search. You ask ChatGPT. You try Copilot. And you get: Unity (50MB+, no Compose), raw Filament (1000 lines to render a cube), or Sceneform (deprecated since 2021).
There's a gap. Android has no built-in 3D composable. Until now.
SceneView: 3D as a Composable
SceneView treats 3D the same way Compose treats UI: declaratively. SceneView { } is a composable like Column { } or LazyList { }. Nodes are composables. State is Kotlin state.
implementation("io.github.sceneview:sceneview:4.0.0")
Display a 3D model in 15 lines
@Composable
fun ProductViewer() {
val engine = rememberEngine()
val modelLoader = rememberModelLoader(engine)
SceneView(
modifier = Modifier.fillMaxSize(),
engine = engine,
modelLoader = modelLoader,
cameraManipulator = rememberCameraManipulator()
) {
rememberModelInstance(modelLoader, "models/sneaker.glb")?.let {
ModelNode(modelInstance = it, scaleToUnits = 1.0f, autoAnimate = true)
}
}
}
Place sneaker.glb in src/main/assets/models/. The model loads asynchronously, rememberModelInstance returns null while loading, then triggers recomposition. No callbacks, no lifecycle — just state.
What you get out of the box
SceneView includes 26+ composable node types:
- ModelNode — GLB/glTF models with animation
- CubeNode, SphereNode, CylinderNode — primitive geometry
- ImageNode — textured quads
- VideoNode — video textures on 3D surfaces
- LightNode — point, spot, directional lights
- TextNode — 3D text billboards
- ViewNode — any Compose UI in 3D space
All powered by Google Filament — the same PBR engine used in Google Maps and Android Auto.
AR in Compose: One More Import
implementation("io.github.sceneview:arsceneview:4.0.0")
@Composable
fun ARFurniturePlacement() {
val engine = rememberEngine()
val modelLoader = rememberModelLoader(engine)
val anchors = remember { mutableStateListOf<Anchor>() }
val chair = rememberModelInstance(modelLoader, "models/chair.glb")
ARSceneView(
modifier = Modifier.fillMaxSize(),
engine = engine,
modelLoader = modelLoader,
planeRenderer = true,
onTouchEvent = { hitResult, _ ->
hitResult?.let { anchors.add(it.createAnchor()) }
}
) {
anchors.forEach { anchor ->
chair?.let { model ->
AnchorNode(anchor = anchor) {
ModelNode(
modelInstance = model,
scaleToUnits = 0.8f,
isEditable = true
)
}
}
}
}
}
isEditable = true gives you drag, pinch-to-scale, and two-finger rotate. AR state is Compose state — when anchors changes, the scene recomposes.
Supported AR features: plane detection, image tracking, face mesh, cloud anchors, geospatial anchors, depth occlusion, light estimation.
Why Not Unity / Filament / Sceneform?
| SceneView | Unity | Raw Filament | Sceneform | |
|---|---|---|---|---|
| Compose native | Yes | No | No | No |
| APK size | ~5MB | ~50MB+ | ~3MB | ~5MB |
| AR built-in | Yes (ARCore) | Plugin | No | Yes |
| Active | v4.0.0 (2026) | Yes | Yes | Deprecated (2021) |
| Learning curve | Low | High | Very high | Low |
| Scene graph | 26+ node types | Full engine | None | 5 node types |
| Cross-platform | Android, iOS, Web | All | Android only | Android only |
SceneView wraps Filament internally — same rendering quality, 100x less code.
Cross-Platform: Same API, Native Renderers
SceneView also supports:
- iOS/macOS/visionOS: SwiftUI + RealityKit (native Apple renderer)
- Web: Kotlin/JS + Filament.js (WASM)
- Flutter: PlatformView bridge
- React Native: Fabric bridge
Each platform uses its native renderer — no cross-compiled runtime. The API mirrors across platforms: SceneView { ModelNode(...) } works on Android and iOS.
AI-First: Ask Any AI to Build Your 3D App
SceneView is designed so that AI assistants generate correct code on the first try:
- llms.txt — 3000-line machine-readable API reference
-
MCP Server — 28 tools for Claude/Cursor (install:
npx sceneview-mcp) - Copilot/Cursor/Windsurf rules — IDE-specific code generation patterns
Try it: open Claude and ask "build me an AR app with SceneView." The MCP server provides validated samples and the full API, so you get compilable code.
Industry-specific MCP servers are also available:
-
npx automotive-3d-mcp— car configurators -
npx healthcare-3d-mcp— medical visualization -
npx gaming-3d-mcp— game development -
npx interior-design-3d-mcp— interior design
Get Started
// build.gradle.kts
implementation("io.github.sceneview:sceneview:4.0.0") // 3D only
implementation("io.github.sceneview:arsceneview:4.0.0") // 3D + AR
- GitHub (1.2k+ stars)
- Full API Reference
- MCP Server (13k+ monthly installs)
- Discord
SceneView is open source (Apache 2.0) and actively maintained. Try it in your next Compose project.
This content originally appeared on DEV Community and was authored by Thomas Gorisse
Thomas Gorisse | Sciencx (2026-04-13T00:07:17+00:00) The Only Compose-Native 3D & AR Library for Android. Retrieved from https://www.scien.cx/2026/04/13/the-only-compose-native-3d-ar-library-for-android/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.