Speedy Bird is Flappy Bird with one change: every pipe you clear makes the game 1% faster. I built it to learn Lynx, ByteDance’s cross-platform UI framework, so the same ReactLynx code runs as a native Android app, a native iOS app, and in the browser. This manual explains how it is put together, with links to the source for every claim.
Start here
- Play it. The home page runs the game in your browser. It is the ReactLynx app itself, the same bundle code as the native apps, running in Lynx’s web runtime.
- Run it locally. Getting started installs the toolchain and starts the dev server, the website, and the native hosts.
- Read the engine. Game engine covers the rules, the main-thread frame loop, and the bridge to each host.
- Build a host. Native host apps builds the Android and iOS apps and runs their tests.
What is in the box
| Part | What it is | Where |
|---|---|---|
| Game | ReactLynx components, a pure rules engine, a main-thread frame loop | src/ |
| Android host | Kotlin app that loads the bundle and plays sound with SoundPool | android/ |
| iOS host | Swift app with a generated Xcode project and UI tests | ios/ |
| Web host | A <lynx-view> page that runs the real bundle in a browser |
web-host/ |
| Website and manual | This Astro site, with the Lynx build on the home page | docs/ |
Status
Android and iOS build in CI; Android is linted and its APK checked for the current bundle and every sound, and the iOS app runs UI tests on a simulator. iOS archives are unsigned, so the iOS app is not distributed through the App Store. The web build plays in any modern browser.