An open-source, offline-first game collection for Android and iOS: one lightweight host, one catalog, and short local-first sessions. The production bundle currently includes Block Blast, 2048, and Fruit Merge; contributors can build and propose additional games as independent Gradle modules, which ship only after review and allowlisting.
The README shows the Georgian phone gallery. See Store and release operations for screenshot generation, store-listing drafts, signing, artifacts, and release CI.
- 🧩 A growing catalog of puzzle games: Block Blast, 2048, and Fruit Merge
- 🎨 Polished, adaptive Material 3 UI across the host and its games
- 📱 Single codebase for Android & iOS via Compose Multiplatform
- 💾 Persistent settings and best-score tracking
- 🎉 Confetti effects on big clears
- 🎵 Bundled and procedural game audio
- 📴 Fully offline — no account required
- 🛠️ Open source — build and propose the next game
- ⭐ Shared in-app review policy
- 📊 Firebase Analytics & Crashlytics
- 🧱 Compile-time MiniApp plugin framework with a uniform catalog and host frame
- 🔌 Contributor games discovered locally and shipped only through reviewable allowlisting
The catalog is intentionally compact: cards show the game icon, title and Play
action. Full descriptions remain in each MiniAppManifest for metadata,
accessibility and future detail surfaces, but are not repeated in the launcher.
- Kotlin Multiplatform 2.4.20 — shared business logic
- Compose Multiplatform 1.12.0 — declarative Android and iOS UI
- Material 3 1.10.0-alpha05 + Material 3 Adaptive 1.3.0-rc01 — design system and responsive layouts
- Decompose 3.5.0 + Essenty 2.6.0 — navigation and lifecycle
- MVIKotlin 4.4.0 — predictable state management
- Metro DI 1.4.3 — compile-time dependency injection
- Kotlinx Coroutines 1.11.0, Serialization JSON 1.11.0, and Datetime 0.8.0
- Multiplatform Settings 1.3.0 — cross-platform persistence
- Firebase GitLive 3.0.0-alpha02 — Analytics and Crashlytics
- Google Mobile Ads 25.4.0 + User Messaging Platform 4.0.0
- Haze 1.7.3, ConfettiKit 0.9.0, and AboutLibraries 15.2.0
- Turbine 1.2.1, Robolectric 4.17, and Compose UI testing
- Baseline Profiles — Android startup performance
- Store screenshot editor — Next.js 15.0.3, Playwright 1.62.1, and
html-to-image, built from ParthJadhav/app-store-screenshots
BlockBlast/
├── androidApp/ # Android entry point (Activity, manifest, ads, Firebase)
├── iosApp/ # iOS entry point (SwiftUI host)
├── composeApp/ # Shared host UI, MiniApp frame and platform composition
├── core/
│ ├── common/ # Shared utilities
│ ├── domain/ # Reusable domain contracts
│ ├── data/ # Settings and shared repositories
│ └── telemetry/ # Analytics and crash facade
├── feature/
│ ├── catalog/ # Registry-backed MiniApp catalog
│ ├── root/ # Catalog/running navigation and host lifecycle
│ ├── review/ # App review policy
│ └── settings/ # Host settings
├── game/
│ ├── blockblast/ # Allowlisted Block Blast MiniApp
│ ├── twentyfortyeight/ # Allowlisted 2048 MiniApp
│ └── fruitmerge/ # Allowlisted Fruit Merge MiniApp
├── miniapp/
│ ├── api/ # Stable Compose-free contracts
│ ├── compose/ # Plugin, manifest, session and frame contracts
│ ├── metro/ # Registry and retained child-graph foundation
│ ├── storage/ # Namespaced persistence and safe all-game-data reset
│ ├── audio/ # Portable procedural Music/SFX API and runtime
│ ├── audio-presets/ # Original reusable instruments, soundscapes and SFX
│ ├── bundle/ # Production allowlisted plugins
│ ├── testkit/ # Contributor contract fixtures
│ └── samples/ # Discovered but unshipped examples
├── build-logic/ # MiniApp discovery, scaffold and convention plugins
└── fastlane/ # Store metadata, screenshots, release automation and operations docs
- JDK 17+
- Android Studio Ladybug or later
- Xcode 15+ (iOS, macOS only)
- Your own Firebase project — see below
This repo does not ship Firebase config files. Create your own Firebase project and drop in:
androidApp/google-services.jsoniosApp/iosApp/GoogleService-Info.plist
./gradlew :androidApp:assembleDebug
./gradlew :androidApp:installDebugOpen iosApp/iosApp.xcodeproj in Xcode and run.
./gradlew testSee Contributing a MiniApp for the end-to-end
workflow: scaffold, boundaries, verification, and review. Generated modules
stay discoverable but unshipped — only a maintainer edits the root miniApps
allowlist after review.
./gradlew createMiniApp -PminiAppId=game.snake -PminiAppName=Snake
./gradlew :game:snake:verifyMiniAppAdd -PminiAppProfile=game to the first command for the game-oriented
scaffold (immutable state, typed actions, pure engine seam, focused tests).
AI agents also follow the AI contributor protocol;
agent-level architecture rules live in AGENTS.md.
Contributions are welcome. See Contributing a MiniApp — new games ship only after review and allowlisting.
Funfolio is looking for sponsors who want to help fund independent development. Direct financial support is welcome, as are AI API credits/tokens, CI capacity, test devices, localization, and design support. Sponsorship does not grant control over the production MiniApp allowlist or project direction.
For sponsorship or in-kind support, contact [email protected].
- ton: UQCi1XMdZP2fBfTK-O6rsAX3fXEm5iBpjO1D6FDekdUDQnaw
- btc: bc1qv2m03vg23227yfnlu0c0jx2ps5yg8v8kvy748s
- eth: 0xdF196759E996Fe684c33416282F30d6B9A0b325e
- usdt(erc20): 0xdF196759E996Fe684c33416282F30d6B9A0b325e
- bnb: 0xdF196759E996Fe684c33416282F30d6B9A0b325e
- usdt(trc20): TYrBMc4yN4k8im2Qq2G17hv9VdmcYFngpT
This project is open source and available under the MIT License.







