-
-
Apple Watch: the same 3D scene on a 46 mm screen
-
Catch the dew: stay watered or wither
-
Mind the shears: they snip your streak
-
Hold, release, hop: one touch is the whole game
-
One game, every screen: iPhone, iPad, Mac, Apple TV, Apple Watch
-
Meet Chiman, the grass-head hero (iPhone)
-
iPad
-
Apple TV, Siri Remote
-
App icon, 1024 x 1024
-
Raw iPhone capture, 1179 x 2556, no device frame
What it is
Chiman is a grass-head toy — a little burlap-and-clay figure with a crown of grass — hopping across floating terracotta pots. Hold to charge, release on the mark, land on the next pot. Dew drops refill his water; shears snip it away; standing still dries him out, and his grass shows it: the blades grow when he is watered and droop to straw when he is not. There is no meter in the corner. The character is the health bar.
Land a streak and he blooms: flowers open in his hair and points multiply. The sky moves through zones as a run goes on, from dusk garden to the wild.
It is one Flutter codebase rendering real-time 3D with flutter_scene (physically based clay, instanced grass and flowers, image-based lighting) on five Apple platforms, all live on the App Store: iPhone, iPad, Mac, Apple TV (Siri Remote) and Apple Watch. Scores go to a Game Center leaderboard. The game works offline, and the listing is localized into 15 storefront languages.
How RevenueCat is used
- RevenueCat Ads: the one rewarded video is served by AdMob and every event — loaded, displayed, opened, revenue, failed — is reported through
Purchases.adTracker, so ad revenue and purchase revenue land in the same RevenueCat project. - Purchases: the Golden Can is a non-consumable sold through RevenueCat offerings (
default→$rc_lifetime), unlocking thegolden_canentitlement. Restore Purchases is always in the menu.
Inspiration
A grass-head is the plant you give a child: a stocking full of soil and seed with a face drawn on. It only lives if someone remembers to water it. That is the whole game — a creature whose health is visible in his hair, and one input to keep him going.
How we built it
- Flutter + flutter_scene for the 3D scene on every platform, with the same scene graph budgeted per device: fewer grass blades and flowers on the watch, more on the Mac.
- Photogrammetry models flattened toward matte terracotta (roughness pushed up, normal maps calmed, one warm tint) so four models read as one clay set. The UI uses the same palette; no system blue anywhere.
- Instancing for grass, flowers, dew and clay-crumb puffs: one draw per kind.
- flutter-tvos / flutter-watchos community ports for Apple TV and Apple Watch.
- RevenueCat for the Golden Can and for ad tracking; AdMob serves the single rewarded video; Game Center for the leaderboard.
Challenges
- A 300 MB watch. watchOS kills the app around 300 MB, so the whole scene, textures and audio had to fit under that with the same look as the phone.
- App Review's Apple TV HD crashed on the first instanced draw. We traced it into Impeller's Metal backend: the base-instance draw selectors need an A9 GPU and the Apple TV HD is an A8. We patched the flutter-tvos engine, added a build check so no future port drops the fix, and it was merged upstream — every app built with flutter-tvos 1.10.4 or later gets it.
- Ads without a tracking prompt. Requests are non-personalized, Google's consent form is shown only where the law asks and only on the first fall, and the watch, TV and Mac builds contain no ad SDK at all.
Monetization
The game's fiction is water, so the monetization is water. After a fall the game-over card offers "WATER HIM · VIDEO": one rewarded video, once per run, that revives Chiman with his score intact. The Golden Can ($1.99, one-time) gives the same revive without the video — convenience, never power — so paying and free players play the same game. No banners, no interstitials, nothing plays unasked.
What's next
Apple TV and Mac updates with the same Golden Can and leaderboard, and a second zone with new hazards.
Log in or sign up for Devpost to join the conversation.