# flutter_rust_bridge Hello Spike Chanora proof-of-concept. **Not product code.** | Field | Value | |---|---| | PoC name | `flutter_rust_bridge_hello` (dir kept underscored for Dart-package naming) | | PoC plan | [`docs/architecture/proof-of-concept-plan.md`](../../docs/architecture/proof-of-concept-plan.md) §2 | | Purpose | Prove the command / result / event DTO boundary between Flutter and Rust | | Exit criterion | "Flutter can call Rust and receive event stream data" | > **Naming note.** The PoC plan lists this spike as > `flutter-rust-bridge-hello`. Dart pubspec package names require > underscores, so the on-disk directory is `flutter_rust_bridge_hello`. > This is a naming convention, not a scope change. ## What it does | API | Direction | Demonstrates | |---|---|---| | `greet(name)` | Dart → Rust → Dart (sync) | Typed `GreetResult` DTO + typed `GreetError` (Result-style fallible command) | | `counterStream(count, intervalMs)` | Rust → Dart (async stream) | Typed `CounterTick` event stream with ordered delivery and clean close | The `lib/main.dart` demo wires both into a Material 3 surface (button + text field + live tick list). This UI is illustrative only — the Chanora Design System belongs to the product Flutter app, not this PoC. ## Layout ```text flutter_rust_bridge_hello/ rust/ # Rust crate (cdylib + staticlib) src/ lib.rs # crate root; declares api + frb_generated api/ mod.rs simple.rs # public API (greet, counter_stream, DTOs) frb_generated.rs # autogenerated; do not edit Cargo.toml lib/ main.dart # demo UI src/rust/ # autogenerated Dart bindings; do not edit test/ poc_verification_test.dart # headless verification (flutter test) integration_test/ simple_test.dart # same checks, runs under integration_test driver flutter_rust_bridge.yaml pubspec.yaml linux/ android/ ios/ macos/ windows/ web/ rust_builder/ # cargokit build hook (generated) ``` ## Reproduce Requires Flutter stable (developed against 3.41.9 / Dart 3.11.5), `flutter_rust_bridge_codegen` 2.12.0, Rust stable (developed against 1.95). Linux desktop toolchain (clang, cmake, ninja, GTK3) for the build path proven here. Network access required for first build (cargo + pub). ```bash # Generate bindings whenever rust/src/api/*.rs changes flutter_rust_bridge_codegen generate # Build for Linux desktop (also builds the cdylib via cargokit) flutter build linux --debug # Headless verification — exercises the same API the demo UI uses. LD_LIBRARY_PATH="$PWD/build/linux/x64/debug/bundle/lib:$LD_LIBRARY_PATH" \ flutter test test/poc_verification_test.dart # Interactive run (requires a display) flutter run -d linux ``` ## Scope boundaries - No TeamSpeak / `tsclientlib` integration (covered by `tsclientlib-connect-spike`). - No platform secure storage, SQLite, or audio (separate PoCs). - No real DTO catalogue, no error taxonomy, no event-key conventions — `chanora_bridge` will own those per SAD §7.2. - Only the Linux desktop target has been built and verified. Android, iOS, macOS, Windows are scaffolded by `flutter create` but unverified here. ## Verification log See `VERIFICATION.md` in this directory.