Note: This application is currently under active development and is considered a Minimum Viable Product (MVP). It is not yet ready for production use.
Labyrinth is a cross-platform mobile application built with Flutter that revolutionizes collaborative storytelling. It allows users to read, branch, and contribute to continuously evolving stories in a multiverse-style reading experience.
- Discover Feed: Explore trending, new, and highly-rated story branches.
- Reading Canvas: An immersive, distraction-free reading experience. No UI chrome, usernames, or timestamps while reading—the text is the interface.
- Creator Studio: Contribute to the story! Features a strict 250-word limit per branch, live word-count tracking, and automated draft saving.
- Multiverse Map: Visualize the complex, branching structure of a story and navigate between alternate timelines.
- Offline Support: Smart read-ahead caching and offline draft saving powered by Hive.
- Deep Linking: Every story node and crossroad has a unique
labyrinth://deep link for easy sharing. - Material 3 Design: Fully adaptive UI supporting system dark mode and Android 12+ dynamic wallpaper colors.
- Framework: Flutter & Dart
- State Management: Riverpod (
flutter_riverpod) - Routing: GoRouter (Shell routing & deep-link configuration)
- Local Storage: Hive (NoSQL database for caching & drafts)
- Networking: REST API Integration (via
http/ custom API Service) - Theming: Material 3 & Dynamic Colors
Because this project relies heavily on code generation for routing, state management, and data models, you must run the build runner before launching the app.
- Clone the repository
- Install dependencies:
flutter pub get
- Run code generation:
dart run build_runner build -d
- Run the app:
flutter run
- The
.metadatafile in the root directory is automatically generated by Flutter. It should be committed to GitHub. It tracks project properties and is required for theflutter upgradecommand to properly update your Android and iOS build folders in the future. - Generated Dart files (
*.g.dart,*.freezed.dart) are strictly ignored. If you encounter missing file errors, simply run the build runner command listed above.