Hexagonal Architecture in Rust, driven by a Flutter™ app
Keep your rules in a Rust core that does no I/O. Put ports around it and adapters on them. Let a Flutter app drive it on macOS, iOS, Android, Linux and Windows. Then add voice to the system you already have: calls on LiveKit, a witness that records them and a voice AI that talks with the people on the call.
The source code is not yet published. This page describes what is being prepared and the working proof of concept it comes from.
Flutter and the related logo are trademarks of Google LLC. We are not endorsed by or affiliated with Google LLC.
One core, many adapters
The core holds the rules and nothing else: no network, no files, no clock of its own. Whatever it needs from the outside world it asks for through a port, which is a Rust trait. Adapters implement the ports: one talks to the network, one to storage, one to a ledger, one to a speech service. Swap an adapter and the rules stay as they are; test the core with fakes and no network at all.
The Flutter app is a driving adapter. Its screens call the Rust core through
flutter_rust_bridge and follow the streams the core sends back. A call works the other way round:
the core decides when to join, what to send and when to leave, while the LiveKit room that carries the audio
lives in the app, as an adapter the core drives through a port.
Voice, added to a system that already works
The proof of concept began as a working system with no calls at all. Voice went in through four seams and the blueprint walks through each of them, with the code that makes it:
- When a call is neededOne rule in the core decides which requests must be approved on a live call.
- The room’s lifeThe core opens a room for each call, gives each party a short-lived pass and closes the room when the call ends.
- What the voices followThe witness and the voice AI follow the system’s existing event feed, so they know when a call opens and when it closes.
- What the call provesEach approval names the call it was made on and the witness certifies who attended, so the record shows that both approvers were on the call.
Turn the calls off and the system is the one you started with.
What the blueprint will contain
A working system to copy from
The proof of concept made into a prototype that runs in full: a platform with its rules in a Rust core, the apps that drive it and the calls added to it.
No special hardware
Software keys, with no hardware security modules and no certificate servers to set up.
Reusable parts
Where code is genuinely reusable, Rust crates and Dart packages of its own. The first candidates are a LiveKit room for Rust programs and a voice pipeline: speech to text, a language model, text to speech and turn detection.
A guide to adding voice
The four seams, one at a time, each with the code that makes it.
Five platforms
The Flutter app on macOS, iOS, Android, Linux and Windows, calls included.
From a working proof of concept
hexagonal.rs is being prepared from CryptoDemo, a proof of concept of a bank’s shared digital-assets platform, specified by Jeff Lawson and built with Claude Code to his specification and rules in October and November 2026.
- Every server and the apps’ core is a Rust Hexagonal Architecture. Its three apps run on macOS, iOS, Android, Linux and Windows.
- Above a set amount, a transfer is approved on a live LiveKit call, encrypted end to end. Calls were run on a Mac, an iPad and an Android tablet.
- A witness on the call gives each approver a challenge, certifies their attendance and records the call.
- A voice AI reads each transfer back and listens for each approver’s spoken confirmation. Deepgram turns speech into words, Anthropic’s Claude reads what the words alone do not settle and Cartesia speaks. Over twenty turns it replied in a median of 972 ms from the end of an approver’s words.
Who it is for
- Developers of Flutter apps who want their rules in Rust, tested without a device.
- Rust developers who want one interface on five platforms.
- Teams adding calls or a voice AI to a system they already run.