ChxisB/orblit

Orbis Engine - a Dart-first 3D game engine: Flutter for game logic and UI, a C++ ECS core, and Filament for PBR rendering.

Dart

3

532 commits

updated Sep 20, 2026

See the code

See what people are saying (1)

SourceMessageScoreDate

An open-source Dart 3D engine on the same stack (Flutter, a C++ ECS, Filament) (r/SideProject)

Some of you will remember Fluorite, the Flutter game engine Toyota Connected announced at FOSDEM on 1 February: Dart for game code, a C++ ECS underneath, Filament doing the rendering. That talk convinced me the architecture was right, and I didn't want to wait and see whether the code would appear.…

1

Sep 20, 2026

README

Orblit

A 3D game engine you write in Dart

Game logic and interface in Flutter. An archetype entity-component core in C++. Google’s Filament doing the rendering. The viewport is a widget, so the menu over it is an ordinary Column.

Pre-alpha

Website · Docs · Install · Gallery · Examples · Showcases · Discord

The Amazon Lumberyard Bistro at night, a hundred point lights standing where the artist put the lamps, drawn by Orblit

A hundred thousand instanced objects animating at once

A robot running and jumping hurdles in the runner example, played by its own autopilot

At a glance

  • Rendering. Filament's physically based materials and a tone mapper that behaves like a camera. Image-based lighting from HDR or EXR, directional, point and spot lights, cascaded shadows, and irradiance fields for bounced light sampled through a volume. A post stack with bloom, volumetric light, motion blur, occlusion, decals and selection outlines. Gaussian splats, instancing and populations.
  • Simulation. An archetype entity-component store written in C++ behind a C ABI, with a transform hierarchy. Component data reaches Dart as views over the store's own memory rather than as copies, so reading a column is not a translation step and writing to one writes to the store.
  • The scene is a widget. OrblitView sits in the same widget tree as everything else, takes part in the same layout, and is composited by the same compositor. On Apple platforms the renderer draws into an IOSurface-backed buffer Flutter adopts as it is — no readback, no copy through the CPU. A panel can overlap the viewport, and the inventory screen has a widget test.
  • Games. Steering behaviours and behaviour trees, armatures with poses and bone constraints, camera shots that describe what to frame and blend between, collision, sampled time so the simulation does not care what the frame rate is, multiplayer that replicates component columns, and TypeScript scripting on QuickJS as a peer of Dart over the same core.
  • 2D. Sprites in layers, atlas packing, parallax and tile maps, in the same scene as the 3D.
  • Tooling. A desktop editor, a gallery app that shows every technique one at a time beside the lines that do it, a build-time asset pipeline that cooks KTX2 texture sets per device, and a Claude Code skill so an assistant writes real API instead of guessing.
  • Formats. glTF, with FBX and OBJ converted on the way in. An .oscene scene document with migrations and diffs, KTX2 compressed textures, HDR and EXR environments, and .ply, .spz and .osplat splat captures.
  • Platforms. macOS, iOS, Android and the web draw today. Linux draws, though not yet on a real GPU. Windows builds on every change and nothing has drawn on it yet — platform support is fussy about the difference on purpose.

Showcases

Every one of these is a page in the gallery app, running on a real machine. The showcases page carries the lines that do it, lifted from each example's own source.

ShowcaseWhat it is
BlocksA landscape of sixty thousand cubes you can walk around and dig into, generated and sent once.
RunnerA runner you can play — dodge, jump, slide and pick up coins — with an autopilot that plays it well enough to prove the game is fair.
Bistro exteriorSomebody else's street, lit by this engine. A hundred lights at night.
Bistro interiorThe room, and the one place the absence of bounced light shows.

To open the gallery on one:

ORBLIT_EXAMPLE='runner' flutter run -d macos

Running the examples covers getting there from a clean checkout.

Getting started

The packages are not on pub.dev yet, so they resolve from git:

dependencies:
  flutter:
    sdk: flutter

  # Vectors and matrices. Orblit takes and returns these types rather than
  # defining its own, so it is a direct dependency of yours too.
  vector_math: ^2.1.4

  orblit_filament:
    git:
      url: https://github.com/ChxisB/orblit.git
      path: packages/orblit_filament

The renderer's native side needs one setup step per platform, which downloads Google's Filament SDK and compiles the materials. Installing has what each machine needs and which machine can build for what; your first scene is the shortest path to a frame.

./tool/check.sh    # analyze and test everything that needs no window

What is in here

PackageWhat it is
orblit_coreArchetype entity-component store in C++ behind a C ABI, with a transform hierarchy. Component data reaches Dart as views, not copies.
orblit_codegenTurns annotated component classes into registration and a manifest other front ends read without compiling this package.
orblit_filamentFilament rendering composited by Flutter's texture registry.

Those are the three the rest is built on. The other eighteen — geometry, rigging, agents, cameras, lighting, sprites, scene files, UI, weather and the rest — are listed in the package reference.

The rest of Orblit

RepositoryWhat it is
orblit-netMultiplayer. Replicates component columns, with ownership rules and interpolation.
orblit-scriptTypeScript scripting on QuickJS, as a peer of Dart over the same core.
orblit-examplesWorked examples of what the engine does, and how.

Design notes live outside these repositories, as Claude artifacts, so a checkout carries what it needs to build and run and nothing else.

Pre-alpha. Nothing here is stable.

With an AI assistant

The documentation at orblitengine.com is also served as Markdown for language models, starting from llms.txt. For Claude Code, this repository is a plugin marketplace holding one skill, skills/orblit, which carries the engine's model and its traps, and has the assistant check names against the source before it writes them. In Claude Code:

/plugin marketplace add ChxisB/orblit
/plugin install orblit@orblit

Working with AI assistants has the rest.

Come and break it

It is early enough that what you try first is likely to be the thing nobody has tried yet. Both of those are useful. The Discord is where that conversation happens, and CONTRIBUTING has what to run before a pull request.

Licence

MPL-2.0, © 2026 Chris Beckett — the Mozilla Public License, and open source. Fork it, change it, and ship games made with it, commercial ones included: your game is your own and the licence does not reach into it. What it asks is that changes to Orblit's own files ship under the same licence, with source available to whoever you hand the result to, so engine work stays in the open.

Builds link Filament, which carries its own Apache 2.0 licence, and a prebuilt Filament.xcframework is committed here — so a full copy of that licence travels with it. See LICENSE and NOTICE.

Contributors

ChxisB

532 commits

ChxisB/orblit

Orbis Engine - a Dart-first 3D game engine: Flutter for game logic and UI, a C++ ECS core, and Filament for PBR rendering.

Dart

3

532 commits

updated Sep 20, 2026

See the code

See what people are saying (1)

SourceMessageScoreDate

An open-source Dart 3D engine on the same stack (Flutter, a C++ ECS, Filament) (r/SideProject)

Some of you will remember Fluorite, the Flutter game engine Toyota Connected announced at FOSDEM on 1 February: Dart for game code, a C++ ECS underneath, Filament doing the rendering. That talk convinced me the architecture was right, and I didn't want to wait and see whether the code would appear.…

1

Sep 20, 2026

README

Orblit

A 3D game engine you write in Dart

Game logic and interface in Flutter. An archetype entity-component core in C++. Google’s Filament doing the rendering. The viewport is a widget, so the menu over it is an ordinary Column.

Pre-alpha

Website · Docs · Install · Gallery · Examples · Showcases · Discord

The Amazon Lumberyard Bistro at night, a hundred point lights standing where the artist put the lamps, drawn by Orblit

A hundred thousand instanced objects animating at once

A robot running and jumping hurdles in the runner example, played by its own autopilot

At a glance

  • Rendering. Filament's physically based materials and a tone mapper that behaves like a camera. Image-based lighting from HDR or EXR, directional, point and spot lights, cascaded shadows, and irradiance fields for bounced light sampled through a volume. A post stack with bloom, volumetric light, motion blur, occlusion, decals and selection outlines. Gaussian splats, instancing and populations.
  • Simulation. An archetype entity-component store written in C++ behind a C ABI, with a transform hierarchy. Component data reaches Dart as views over the store's own memory rather than as copies, so reading a column is not a translation step and writing to one writes to the store.
  • The scene is a widget. OrblitView sits in the same widget tree as everything else, takes part in the same layout, and is composited by the same compositor. On Apple platforms the renderer draws into an IOSurface-backed buffer Flutter adopts as it is — no readback, no copy through the CPU. A panel can overlap the viewport, and the inventory screen has a widget test.
  • Games. Steering behaviours and behaviour trees, armatures with poses and bone constraints, camera shots that describe what to frame and blend between, collision, sampled time so the simulation does not care what the frame rate is, multiplayer that replicates component columns, and TypeScript scripting on QuickJS as a peer of Dart over the same core.
  • 2D. Sprites in layers, atlas packing, parallax and tile maps, in the same scene as the 3D.
  • Tooling. A desktop editor, a gallery app that shows every technique one at a time beside the lines that do it, a build-time asset pipeline that cooks KTX2 texture sets per device, and a Claude Code skill so an assistant writes real API instead of guessing.
  • Formats. glTF, with FBX and OBJ converted on the way in. An .oscene scene document with migrations and diffs, KTX2 compressed textures, HDR and EXR environments, and .ply, .spz and .osplat splat captures.
  • Platforms. macOS, iOS, Android and the web draw today. Linux draws, though not yet on a real GPU. Windows builds on every change and nothing has drawn on it yet — platform support is fussy about the difference on purpose.

Showcases

Every one of these is a page in the gallery app, running on a real machine. The showcases page carries the lines that do it, lifted from each example's own source.

ShowcaseWhat it is
BlocksA landscape of sixty thousand cubes you can walk around and dig into, generated and sent once.
RunnerA runner you can play — dodge, jump, slide and pick up coins — with an autopilot that plays it well enough to prove the game is fair.
Bistro exteriorSomebody else's street, lit by this engine. A hundred lights at night.
Bistro interiorThe room, and the one place the absence of bounced light shows.

To open the gallery on one:

ORBLIT_EXAMPLE='runner' flutter run -d macos

Running the examples covers getting there from a clean checkout.

Getting started

The packages are not on pub.dev yet, so they resolve from git:

dependencies:
  flutter:
    sdk: flutter

  # Vectors and matrices. Orblit takes and returns these types rather than
  # defining its own, so it is a direct dependency of yours too.
  vector_math: ^2.1.4

  orblit_filament:
    git:
      url: https://github.com/ChxisB/orblit.git
      path: packages/orblit_filament

The renderer's native side needs one setup step per platform, which downloads Google's Filament SDK and compiles the materials. Installing has what each machine needs and which machine can build for what; your first scene is the shortest path to a frame.

./tool/check.sh    # analyze and test everything that needs no window

What is in here

PackageWhat it is
orblit_coreArchetype entity-component store in C++ behind a C ABI, with a transform hierarchy. Component data reaches Dart as views, not copies.
orblit_codegenTurns annotated component classes into registration and a manifest other front ends read without compiling this package.
orblit_filamentFilament rendering composited by Flutter's texture registry.

Those are the three the rest is built on. The other eighteen — geometry, rigging, agents, cameras, lighting, sprites, scene files, UI, weather and the rest — are listed in the package reference.

The rest of Orblit

RepositoryWhat it is
orblit-netMultiplayer. Replicates component columns, with ownership rules and interpolation.
orblit-scriptTypeScript scripting on QuickJS, as a peer of Dart over the same core.
orblit-examplesWorked examples of what the engine does, and how.

Design notes live outside these repositories, as Claude artifacts, so a checkout carries what it needs to build and run and nothing else.

Pre-alpha. Nothing here is stable.

With an AI assistant

The documentation at orblitengine.com is also served as Markdown for language models, starting from llms.txt. For Claude Code, this repository is a plugin marketplace holding one skill, skills/orblit, which carries the engine's model and its traps, and has the assistant check names against the source before it writes them. In Claude Code:

/plugin marketplace add ChxisB/orblit
/plugin install orblit@orblit

Working with AI assistants has the rest.

Come and break it

It is early enough that what you try first is likely to be the thing nobody has tried yet. Both of those are useful. The Discord is where that conversation happens, and CONTRIBUTING has what to run before a pull request.

Licence

MPL-2.0, © 2026 Chris Beckett — the Mozilla Public License, and open source. Fork it, change it, and ship games made with it, commercial ones included: your game is your own and the licence does not reach into it. What it asks is that changes to Orblit's own files ship under the same licence, with source available to whoever you hand the result to, so engine work stays in the open.

Builds link Filament, which carries its own Apache 2.0 licence, and a prebuilt Filament.xcframework is committed here — so a full copy of that licence travels with it. See LICENSE and NOTICE.

Contributors

ChxisB

532 commits

Languages

Dart

41.3%

C

31.8%

C++

20.8%

Shell

2.3%