The 3D & AR SDK that AI gets right on the first try
SceneView is designed so any AI coding assistant can produce correct 3D & AR code on the first try — for Jetpack Compose, SwiftUI, the Web, and beyond. It opens glTF/GLB, 3MF, STL, OBJ and PLY on Android and USDZ on Apple, and shows them at real size in AR.
Get started in seconds
Pick your platform, paste one line, and you are running 3D.
// build.gradle.kts
dependencies {
// 3D only
implementation("io.github.sceneview:sceneview:4.37.0")
// 3D + AR
implementation("io.github.sceneview:arsceneview:4.37.0")
}
// Swift Package Manager
// Add in Xcode: File → Add Package Dependencies
"https://github.com/sceneview/sceneview"
// Version: 4.37.0
import SceneViewSwift
// One line in your HTML:
<script src="https://cdn.jsdelivr.net/npm/sceneview-web@4/sceneview-web.js"></script>
// Then use the API:
SceneView.modelViewer("canvas", "model.glb")
# pubspec.yaml (coming soon on pub.dev)
dependencies:
sceneview_flutter:
git:
url: https://github.com/sceneview/sceneview
path: flutter
// package.json
"dependencies": {
"react-native-sceneview": "github:sceneview/sceneview#react-native"
}
// Then run:
npm install
npx pod-install // iOS only
// Compose Desktop: wireframe placeholder only
// (no 3D renderer yet — Filament JVM pending)
git clone https://github.com/sceneview/sceneview
cd sceneview/samples/desktop-demo
./gradlew run
Built for AI assistants
One MCP server, and your assistant stops guessing at the SceneView API. It compile-checks the Kotlin or Swift it just wrote, looks up the exact node API instead of inventing one, and starts you from a sample that already builds — plus AR setup, gestures, and troubleshooting when you get stuck. The repository ships as a ChatGPT and Codex plugin too, so the same API contract travels wherever you work.
Using SceneView MCP to generate your app…
// MainActivity.kt
ARScene(
planeRenderer = true,
onTapAR = { hitResult ->
AnchorNode(hitResult) {
ModelNode("shoe.glb")
}
}
)
✓ Compiles on first try. Tap the floor to place the shoe.
Reading SceneView hotspot & gesture docs via MCP…
✓ Hotspot added. Preview updated in Android emulator.
Use SceneView with your AI coding assistant
One MCP server, every assistant. Pick yours, copy one line, and it can read the full SceneView API reference, the samples and the best practices before it writes a line of 3D code.
npx -y sceneview-mcp
https://mcp.sceneview.dev/mcp
Config shapes differ across the ecosystem, the command and its arguments never do. The common one is mcpServers; VS Code uses servers with "type": "stdio", Codex a [mcp_servers.*] TOML table, Copilot CLI "type": "local", and Kilo Code a mcp key in kilo.jsonc where command is an array and the environment block is called environment. When in doubt, paste the command above into whatever field your client offers.
claude mcp add sceneview -- npx -y sceneview-mcp
.mcp.json{ "mcpServers": { "sceneview": {
"type": "stdio",
"command": "npx", "args": ["-y", "sceneview-mcp"]
} } }
Reference: code.claude.com/docs/en/mcp
~/.cline/mcp.json{ "mcpServers": { "sceneview": {
"command": "npx", "args": ["-y", "sceneview-mcp"],
"disabled": false, "autoApprove": []
} } }
Reference: docs.cline.bot/mcp/configuring-mcp-servers
codex mcp add sceneview -- npx -y sceneview-mcp
~/.codex/config.toml — same config for the CLI, the IDE extension and the app[mcp_servers.sceneview]
command = "npx"
args = ["-y", "sceneview-mcp"]
Reference: learn.chatgpt.com/docs/extend/mcp
.cursor/mcp.json (project) or ~/.cursor/mcp.json (global){ "mcpServers": { "sceneview": {
"command": "npx", "args": ["-y", "sceneview-mcp"]
} } }
Cursor also accepts an install link: open in Cursor (requires Cursor installed). Reference: cursor.com/docs/mcp/install-links
{ "mcpServers": { "sceneview": {
"httpUrl": "https://mcp.sceneview.dev/mcp",
"enabled": true
} } }
Gemini in Android Studio accepts httpUrl only — the local npx -y sceneview-mcp stdio command cannot be registered here, so this entry points at the hosted server instead. If you would rather run it locally inside the same IDE, use Junie: put the Any MCP client snippet in .junie/mcp/mcp.json. Reference: developer.android.com/studio/gemini/add-mcp-server
.vscode/mcp.json — note the servers key, not mcpServers{ "servers": { "sceneview": {
"type": "stdio",
"command": "npx", "args": ["-y", "sceneview-mcp"]
} } }
copilot mcp add sceneview -- npx -y sceneview-mcp
Writing the CLI's file by hand takes a third shape: ~/.copilot/mcp-config.json uses mcpServers like most clients, but each server needs "type": "local" instead of "stdio". VS Code also accepts an install link: open in VS Code (requires VS Code installed). References: code.visualstudio.com/docs/agents/reference/mcp-configuration and docs.github.com — add MCP servers to Copilot CLI
{ "mcpServers": { "sceneview": {
"command": "npx", "args": ["-y", "sceneview-mcp"]
} } }
Works for AI Assistant and Junie, in IntelliJ IDEA, Android Studio and the other JetBrains IDEs. Junie also reads the same JSON straight from a file — .junie/mcp/mcp.json for one project, ~/.junie/mcp/mcp.json for every project. Reference: jetbrains.com/help/ai-assistant/mcp.html
# at your project root
AGENTS.md
CLAUDE.md
Apple recommends putting your project guidance in these files, and the agents running inside Xcode read them. Xcode 26.3 itself exposes its own tools to external agents rather than hosting this server: turn it on under Settings → Intelligence → Model Context Protocol, then run your CLI alongside Xcode with both servers — claude mcp add --transport stdio xcode -- xcrun mcpbridge or codex mcp add xcode -- xcrun mcpbridge — plus SceneView from the Claude Code or Codex tab. Reference: developer.apple.com — external agents.
https://sceneview.github.io/llms.txt
It is the whole SDK — API surface, samples and best practices — in one file any assistant can read. The repository also ships AGENTS.md, CLAUDE.md, .github/copilot-instructions.md and .cursorrules, so whichever rules file your tool reads, it finds the same guidance. Full docs: SceneView documentation.
Also works with Antigravity, Continue, Devin Desktop, Goose, Kilo Code, Kiro, OpenCode, OpenHands, Qwen Code, Windsurf, Zed — and any MCP-compatible client.
Write once, render everywhere
Native performance with a unified API philosophy.
Scene(
modifier = Modifier.fillMaxSize(),
nodes = listOf(
ModelNode(
model = "models/drone.glb",
autoAnimate = true,
scale = 0.5f
)
),
environment = Environment(
hdr = "skybox.hdr"
)
)
SceneView {
Model(named: "drone")
.rotation(x: .pi/4)
.scale(0.5)
.onTap {
print("Drone selected")
}
}
.environment(named: "outdoor")
.edgesIgnoringSafeArea(.all)
// One line in your HTML:
<script src="sceneview.js"></script>
// Render a 3D model:
SceneView.modelViewer("canvas", "model.glb", {
backgroundColor: [0.05, 0.05, 0.08, 1],
lightIntensity: 150000,
fov: 35
})
// Ask your AI assistant, with SceneView MCP:
"Build me an AR app that lets users
place 3D furniture in their room"
// It generates correct, working SceneView
// code on the first try.
// Setup, in any MCP client:
npx -y sceneview-mcp
Every platform, native performance
Android
Jetpack Compose + Filament + ARCore
Filament (Vulkan/OpenGL) AlphaiOS
SwiftUI + RealityKit + ARKit
RealityKit (Metal) AlphamacOS
SwiftUI + RealityKit
RealityKit (Metal) AlphavisionOS
SwiftUI + RealityKit Spatial
RealityKit (Metal) StableWeb
Kotlin/JS + Filament.js WASM
Filament (WebGL2) AlphaAndroid TV
Compose TV + D-pad controls
Filament (Vulkan) Not yetDesktop
Compose Desktop · wireframe placeholder
No 3D renderer yet (Filament JVM pending)Android XR
Jetpack XR SceneCore
Compose XRFlutter
PlatformView bridge
Native (Android + iOS) AlphaReact Native
Fabric bridge
Native (Android + iOS)What you can build
48+ node types, full ARCore + ARKit coverage, physics, post-processing, and Compose UI inside a 3D scene.
46+ Node Types
Models, primitives (cube, sphere, cone, torus, capsule), curves, shapes, text, video, billboard sprites, lights, reflection probes, dynamic sky, fog, physics, and more — every one a Composable / SwiftUI view.
Compose UI in 3D
ViewNode renders any @Composable as a textured plane in world space. Buttons, lists, animations — all interactive, all reactive. The same trick exists in SwiftUI on iOS.
AR Geospatial
Streetscape city mesh, terrain anchors, rooftop anchors, Cloud Anchors for cross-device persistence. Build navigation, geofenced experiences, and scavenger hunts at planet scale.
Augmented Faces & Images
Face mesh overlay (front camera) with custom materials. Image tracking for posters, business cards, museum exhibits — with runtime image database building.
AR Record & Replay
Capture an outdoor ARCore session once with ARRecorder, replay it 1:1 at the desk via ARSceneView(playbackDataset = file). Debug AR scenes without a phone in your hand.
Physics & Gestures
Rigid-body physics (gravity, collisions, impulses), ray vs box/sphere collision, drag-rotate-scale-elevate gestures — all opt-in per node via isEditable.
PBR Lighting & Post-FX
Image-based lighting from .hdr / .ktx, dynamic time-of-day sky, atmospheric fog, reflection probes, plus bloom, depth of field, SSAO, vignette, color grading, and tone mapping.
WebXR — AR & VR
Same engine on the web. SceneView.startAR(canvas) for phone passthrough AR with hit-test, anchors, light estimation. startVR(canvas) for headset VR with controllers and reference spaces.
AI-First MCP Server
validate_code compile-checks what your assistant wrote, get_node_reference resolves the exact node API, get_setup and get_ar_setup wire up the project, and list_samples starts you from code that builds. 38 compilable samples + full llms.txt reference.
Opens the .3mf AI makes
Ask a chat assistant for a 3D print and it hands back a .3mf — a file nothing else on Android views in 3D, let alone in AR. SceneView reads it with no new API: the payload is detected by its ZIP magic and converted to GLB in memory, scaled from millimetres to metres and rotated upright, so a 60 mm print is life-size on a real table. The Android demo registers for the type, so a shared file opens straight from the chooser.
How SceneView compares
The lightweight alternative to heavy game engines for 3D in native apps.
| SceneView | Unity | Filament (direct) | Three.js | Babylon.js | RealityKit SDK | |
|---|---|---|---|---|---|---|
| Setup time | 2 min (1 dep) | 30+ min | 15 min (C++ build) | 5 min (npm) | 5 min (npm) | 10 min (Xcode) |
| Binary overhead | ~3 MB | ~30 MB+ | ~2 MB | ~600 KB (JS) | ~800 KB (JS) | Built-in |
| Compose / SwiftUI | Native (first-class) | None | None (imperative C++) | N/A (web only) | N/A (web only) | SwiftUI native |
| Platforms | 9 (mobile + web + XR) | 20+ (game focus) | Android, web, desktop | Web only | Web only | Apple only |
| Learning curve | Low (Compose/SwiftUI) | High (C#, ECS) | High (C++/JNI) | Medium (JS) | Medium (JS) | Medium (Swift) |
| AI code gen | MCP server | No MCP | No MCP | No MCP | No MCP | No MCP |
| Renderer | Filament + RealityKit | Custom (proprietary) | Filament | WebGL/WebGPU | WebGL/WebGPU | Metal |
Filament is SceneView's rendering engine on Android and Web. SceneView adds the declarative API, scene graph, AR integration, and cross-platform abstractions on top.
Developer tools
Debug, inspect, and replay your 3D and AR scenes in real time.
AR Debug — Rerun.io
Stream ARCore and ARKit frame data to the Rerun viewer. Inspect camera poses, tracked planes, point clouds, and anchors — then scrub the timeline to replay any moment. Hit Save & Share in the demo to attach a fully-replayable session to a bug report.
AR Record & Replay
Capture an outdoor ARCore session once with rememberARRecorder(). Replay it 1:1 at the desk via ARSceneView(playbackDataset = file). Iterate on AR demos without leaving your chair.
Image Stabilization (EIS)
One-line opt-in to ARCore Electronic Image Stabilization for shake-free AR previews on supported devices. ARSceneView(imageStabilizationMode = EIS).
Cloud Anchors
Persistent AR experiences across devices, sessions, and OSes. CloudAnchorNode.host(ttlDays = N) and .resolve(id). Build multi-user AR by passing a string.
Anonymous telemetry
Usage analytics for MCP tool calls. No PII — just tool names, versions, and timestamps. Fully opt-out via SCENEVIEW_TELEMETRY=off.
Render tests
Pixel-perfect golden-image regression suite. Filament render goldens plus Compose snapshot tests catch UI and rendering drift on every PR.
Community & Metrics
Real numbers from a growing open-source ecosystem.
Try SceneView
Interactive demos, sample apps, and documentation.
3D Playground
Write code, see it render live. Orbit, zoom, switch models.
Android Demo
Material 3 Expressive, 52 demos (18 non-AR + 34 AR)
iOS Demo
SwiftUI 3-tab app, 3D + AR samples
Web Demo
Filament.js WASM + WebXR in the browser
Procedural Geometry
Runtime shapes, buildings, and scenes
Get involved
SceneView is open source and community-driven.
Star on GitHub
Show your support and help others discover SceneView.
forumJoin Discord
Chat with developers, get help, share your projects.
favoriteDonate
Support development on Open Collective, or GitHub Sponsors.
group_addContribute
Fix bugs, add features, improve docs. All contributions welcome.
Start building in 5 minutes
added 12 packages from 8 contributors and audited 42 packages in 1.2s
Success! Ready to use SceneView in your project.