
Opinionated Architecture.
File-based Routing & Signals for Flutter.
Stop arguing over directory structures and state packages. Bloom brings Next.js-style file-system routing, signals reactivity, dependency injection, and automated code generation to Flutter.
File-System Routing
Next.js-style directory structure mapping directly to type-safe go_router definitions automatically on file save.
// lib/app/routes/products/[id].dart @RoutePage() class ProductPage extends BloomPage { @PathParam('id') final String productId; ProductPage({required this.productId}); @override Widget build(BuildContext context) { return Watch((_) => Text('Product ID: $productId')); } }
Thin Boot Sequence & Dependency Injection
Bloom handles environment initialization, DI container registration, and app lifecycle prior to `runApp()`.
Interactive Boot & DI Execution Pipeline
Click run to simulate Bloom’s sub-40ms boot sequence before Flutter mounts runApp().
Fine-Grained Reactivity with Signals
Say goodbye to verbose state containers. Signals track dependencies automatically, rebuilding only the exact widgets reading their value.
Live 60FPS Signals Reactivity Simulator
Click to update signal state and observe sub-millisecond targeted widget rebuilds.
Only the Watch() widget is rebuilt when count.value mutates. The parent Scaffold and Column remain completely untouched.
Declarative Data Fetching with Bloom Query
Manage server state, caching, refetching, and pagination out of the box with zero boilerplate.
Interactive Bloom Query & Cache Sandbox
Test automatic background refetching, focus revalidation, and optimistic mutations.
Zero-Boilerplate Routing Engine
Directory structure *is* your routing tree. Group routes, protect layouts with guards, and capture dynamic URL parameters seamlessly.
Interactive File-System Routing Visualizer
Click files in the directory tree to inspect automatically mapped go_router definitions.
// lib/app/routes/index.dart @RoutePage() class HomeView extends BloomView<HomeController> { @override Widget build(BuildContext context) => Scaffold(body: HomeHero()); }
Signals Reactive State
Fine-grained state updates with zero `setState` or verbose Bloc boilerplate. Rebuilds only the exact widgets reading the signal.
CLI Code Generation
Generates route tables, typed navigation extensions, and data models automatically on file save.
Nested Layouts
Persist sidebars, bottom navigation, and search bars across route changes without losing component state.