Dashsurfers
July 16, 2026 ยท View on GitHub
An endless-runner showcase for flutter_scene. Dash sprints down an infinite country road that curves over a false horizon, switching lanes, jumping, and rolling past obstacles, riding shipping-container ramps, and chaining coin streaks.
Everything renders through flutter_scene on Flutter GPU: PBR road and container materials, a procedural sky, GPU-authored grass with wind, custom .fmat materials throughout, and a Rapier-physics crash ragdoll.
Requirements
- Flutter master channel. flutter_scene uses Flutter GPU features that are only available on master:
flutter channel master && flutter upgrade - flutter_scene at master, checked out as a sibling (see layout below). The app depends on it by path.
- macOS is the primary target (the app runs where Flutter GPU/Impeller runs).
Directory layout
The pubspec's path dependencies expect the flutter_scene checkout two levels up:
<workspace>/
flutter_scene/ # github.com/bdero/flutter_scene, master branch
content/
dashsurfers/ # this repo
Set it up with:
mkdir workspace && cd workspace
git clone https://github.com/bdero/flutter_scene.git
mkdir content && git clone https://github.com/bdero/dashsurfers.git content/dashsurfers
Run
cd content/dashsurfers
flutter run -d macos --enable-flutter-gpu --enable-impeller
The first run compiles the .fmat material bundle through the build hook. If materials ever look stale after changing a .fmat or the flutter_scene path, reset the caches:
rm -rf .dart_tool build
Controls
| Input | Action |
|---|---|
| A/D or arrow keys, controller stick/dpad | Switch lanes |
| W/Up/Space, controller up or south button | Jump (jump during a roll cancels it) |
| S/Down, controller down or east button | Roll (mid-air slams into the roll) |
| Enter/Space, controller menu | Start / restart |
| R | Restart after a crash |
| T | Back to the title screen |
| F | Toggle the FPS counter |
| Backtick | Debug fly-cam (WASD + drag) |
| Gear icon | Live settings panel (persisted; Reset restores defaults) |
Tests
flutter test
The road and spawner tests are pure Dart (no GPU) and verify the scroll ring recycling and obstacle density math.