Build your first
Glint world.
Glint is a Flutter-first 3D engine built on Flutter GPU. Start with one rendered model, then add only the systems your product or game needs.
Install the engine
Add the core package first. Optional packages appear later in this guide and can be omitted completely.
flutter pub add glint_enginedependencies:
glint_engine: ^0.2.0Glint 0.2 targets Dart 3.12.1 and Flutter 3.44.1 or newer on iOS, macOS, and physical Android devices.
Enable Flutter GPU once
Glint renders through Flutter GPU and Impeller. Put the flags in the host app manifests so IDE runs, tests with fallbacks, and release builds all agree.
iOS
<key>FLTEnableFlutterGPU</key>
<true/>macOS
<key>FLTEnableImpeller</key>
<true/>
<key>FLTEnableFlutterGPU</key>
<true/>Android
<application ...>
<meta-data
android:name="io.flutter.embedding.android.EnableFlutterGPU"
android:value="true" />
</application>For a temporary local run, use flutter run --enable-impeller --enable-flutter-gpu. The platform guide explains device limits and fallbacks.
Render one model
Declare the GLB in your Flutter assets, then place a Scene3D anywhere a normal widget can go.
flutter:
assets:
- assets/models/product.glb
- assets/environments/studio.hdrimport 'package:flutter/material.dart';
import 'package:glint_engine/glint_engine.dart';
class Showroom extends StatelessWidget {
const Showroom({super.key});
@override
Widget build(BuildContext context) {
return Stack(children: [
Scene3D(
children: const [
Node3D(
name: 'product',
model: Model.asset('assets/models/product.glb'),
),
],
lights: const [
EnvironmentLight(asset: 'assets/environments/studio.hdr'),
DirectionalLight(),
],
autoRotate: true,
gpuFallback: const Center(child: Text('3D unavailable')),
),
const ProductControls(),
]);
}
}Choose the right runtime
Scene3DDeclarative Flutter pages, product viewers, configurators, orbit controls, picking, and anchored widgets.
GlintGameViewTicker-driven games and simulations that return cameras, instances, particles, and animated poses every frame.
GlintPhysicsWorldA renderer-independent fixed-step simulation contract. Use it with or without a Glint viewport.
Use Scene3D when Flutter state describes the scene. Use GlintGameView when a simulation produces the scene every frame.
Learn one system at a time
Each guide starts with the smallest working setup, then adds production behavior, limits, and troubleshooting.
Rendering & scenes
Choose Scene3D or GlintGameView, compose cameras and lights, and place Flutter UI around the viewport.
Open guide →Assets & textures
Load GLB safely, decode KTX2/Basis textures, and understand compressed-distribution limits in Flutter GPU.
Open guide →Animation & skinning
Play glTF clips, crossfade, layer bones, extract root motion, render skins, and blend ragdolls.
Open guide →Physics & gameplay
Build rigid-body worlds, characters, vehicles, triggers, constraints, contacts, and rollback-safe systems.
Open guide →Particles & audio
Create pooled effects, collide particles with physics, and mix positional SoLoud audio.
Open guide →Custom shader graphs
Author typed JSON graphs, compile them offline with Impeller, and use them on static or skinned models.
Open guide →Package map
glint_engineCore renderer, assets, animation, particles, audio contract, physics contract, gameplay helpers, replay, and diagnostics.
glint_box3dOptional native 3D rigid-body backend for the portable physics contract.
glint_basisOptional official Basis Universal transcoder for Basis/KTX2 payloads.
glint_soloudOptional SoLoud/miniaudio implementation of the portable audio contract.