Skip to content

What Orblit is

Orblit is a 3D game engine you write in Dart. The game logic and the interface are Flutter, the entity-component core underneath is C++, and the rendering is Google’s Filament.

That combination isn’t arbitrary. Each part is there because the alternative was worse in a specific way, and it’s worth saying how.

Because a game is not only a viewport. It’s a viewport surrounded by menus, inventories, dialogue boxes, settings screens and a pause overlay. In most engines, all of that gets built with a second, worse UI toolkit: one that exists only inside that engine, has its own layout rules, and can’t be tested without launching the game.

In Orblit, the scene is a widget. It sits in the same tree as everything else, takes part in the same layout, and is composited by the same compositor. The inventory screen is a Column. It has a widget test.

This works because the renderer draws into a texture that Flutter’s compositor takes as it is. On Apple platforms that’s an IOSurface-backed pixel buffer, adopted with no readback and no copy through the CPU, and in a browser it’s a canvas. A platform view would have put the 3D content in a window of its own on top of everything, which is why engines that embed that way generally can’t let a panel overlap the viewport. Here it can.

Because walking ten thousand entities in Dart, one object at a time, is the thing that would have made this a toy.

The core is an archetype entity-component store: entities with the same set of components are stored together, so a system that wants every transform gets a contiguous run of them. Dart reaches it over a C ABI, and component data arrives as views over the store’s own memory, not as copies. Reading a column isn’t a translation step, and writing to one writes to the store.

You don’t have to touch any of this, and most games never will. It’s there so that the ones needing to walk a hundred thousand rows can.

Because writing a physically based renderer is a decade of work, and Google have already done it. Filament brings a real material model, image-based lighting, cascaded shadows, screen-space effects and a tone mapper that behaves like a camera rather than like a colour ramp.

Orblit wraps it in a scene description that is stated rather than mutated, and adds the parts a game needs that a renderer doesn’t provide: populations, level of detail, a render graph, weather, and a sky.

Anyone who already writes Flutter and wants 3D without taking on a second ecosystem, a second UI toolkit, a second build system and a second language.

It isn’t, today, for anyone shipping to consoles or to Windows, or who needs a marketplace of ready-made assets. Those are missing rather than promised.

Rendering Filament, composited by Flutter, on macOS, iOS, Android and the web
Simulation Archetype ECS in C++, reached from Dart as views
Geometry Parametric shapes and mesh editing operations
Rigging Armatures, poses, bone constraints
Interface One document, built into real Flutter widgets
Scene files A .oscene document format, with migrations and diffs
Models glTF, with FBX and OBJ converted on load. Clips, skins, variants
Textures Cooked KTX2 sets chosen per device, and lighting from HDR or EXR
Splats Gaussian splat captures from .ply, .spz and .osplat
2D Sprites in layers, atlas packing, sprite animation, parallax, tile maps
Agents Steering behaviours and behaviour trees
Cameras Shots that describe what to frame, and blend
Weather Conditions, transitions, cloud, the day’s cycle
Cutscenes Tracks of clips sampled at a playhead
Scripting C++ scripts, and TypeScript on QuickJS
Multiplayer Replicated component columns, with ownership
Editor A desktop application, in the same widgets

The package reference says which repository each of those lives in and what its public surface is.

Being clear about this is more useful than a roadmap.

  • Not every platform has been seen to draw. macOS is the reference. iOS draws on the simulator, Android on one handset, the web in Chrome, Linux only against software rasterisers, and Windows builds without ever having drawn a frame. Most of the newest asset work has been run on macOS, the iOS simulator, the Android emulator and Chrome, and nowhere else. Platform support has the detail. Everything that doesn’t draw runs anywhere Dart does, so you can test the simulation on CI. It does not mean you can ship a game to a phone today.
  • No asset store, and the asset pipeline is half built. glTF loads, FBX and OBJ are converted on the way in, and textures can be cooked. There’s no asset cache, no import settings, no material files, no loading over a network and no way to export a scene. FBX export isn’t planned at all.
  • Tile maps are read, not drawn. So are parallax layers in a scene file.
  • No physics solver of its own. There are shapes, raycasts and overlap tests. There is no rigid-body integrator in the engine.
  • Nothing is API-stable. Pre-alpha means the names in these pages can change between commits.