Inspiration

I wanted the sort of shared-screen chaos I remembered from Micro Machines, with my family around the TV and the characters from my Don’t Go To Bed game. Phones and tablets were already in the house, so they became the steering wheels.

Testing with my boys shaped the game. A control scheme that worked for me was not necessarily easy for them: they tipped their iPads, changed grip and rotated the screen. That led to simpler readiness, gentler steering and clearer instructions.

What it does

Tiny Racers is a top-down party racer running locally on Fire TV’s Vega OS. Players scan the TV’s QR code, choose a character and steer using their phone or tablet browser.

There are five tracks: Dining Table, Garden, Bedroom, Snowdrift and Mud Mayhem. They include table edges, protected hairpins, shortcuts, slippery turns and ramps. Nine characters are selectable. Races support up to eight entrants using bots; the hosted relay currently admits up to four human controllers.

Players can draft behind rivals, jump onto each other and collect six powerups, including a wooden mallet, an extending boxing glove, oil and a grabber. Items work automatically by default. The camera pulls back as the pack spreads out, then players who fall behind are eliminated. There is also a Last One Standing mode, optional stronger bumper collisions, 1–3 laps and final points standings.

Bots have selectable characters, varied racing lines, passing behaviour and occasional steering mistakes. Phone controls offer calibration, adjustable sensitivity and shared pause. The interface supports eight languages.

How we built it

The Fire TV revision is packaged as a Vega OS application using Amazon’s Vega SDK, React Native Vega and its WebView component. The race is bundled with the app and runs on the Vega device. It is not streamed from the Mac or an Android emulator.

The Android TV and Vega versions share Java simulation and artwork code. TeaVM compiles that code for Vega, with a Canvas 2D adapter for the original renderer. React Native handles the application lifecycle and native WebSocket connection. Bundled music and effects use HTMLAudio on Vega.

The browser controller uses JavaScript motion input and QR pairing. Cloudflare Workers and Durable Objects host the HTTPS controller and relay encrypted input messages to the TV. The TV remains authoritative over movement, collisions, items and scoring. The code is public under MIT, with separate terms for artwork, branding and audio.

Challenges we ran into

Browser motion controls took repeated family testing. Screen rotation was particularly troublesome, so the controller now makes rotation lock prominent. A simple Ready flow calibrates the wheel, and the new gentle steering default gives children more room to turn without oversteering.

The original Android TV emulator demonstration did not establish Fire TV platform support clearly enough. We added a separate Vega application and tested it in Amazon’s official Vega Virtual Device. The revised package and demonstration show that implementation explicitly.

The port also exposed build-tool problems with spaces in paths, the distinction between compiling and packaging a React Native app, and restrictions on loading local audio through XHR. Those workarounds and suggested improvements are in the friction log.

The current relay makes setup straightforward, but continuous input consumes its free hosting allowance. Direct connections are planned; they are not part of this release.

Accomplishments that we’re proud of

My family can join a shared TV game from their own devices without installing a controller app. Their testing has directly improved the controls and setup.

The game now runs in the official Vega simulator as well as the separate Android TV implementation. Both use shared race logic, and automated checks cover complete races, tracks, weapons, drafting, reconnection and bot behaviour. The latest checks also compare JVM and Vega simulation snapshots.

The five tracks have different handling and obstacles, rather than just different backgrounds. The bot line-up means one person can still have a full race.

What we learned

The difficult part of a phone controller is not sending one steering value. It is handling permissions, grip changes, rotation, reconnects and calibration without making the player think about any of them.

Separating the game rules from the platform helped when adding Vega. Sharing code reduced duplication, but we still had to test rendering, audio, lifecycle and input on the actual target simulator.

What’s next for Don’t Go To Bed: Tiny Racers

Test on physical Fire TV hardware, improve direct phone-to-TV networking to reduce relay traffic, and continue family playtesting. A standalone controller/game app is also planned. The current judging build uses the hosted relay and does not claim those future connection modes.

Built With

Share this project:

Updates

Submission history