hexagonal.rs
Open-source blueprint ยท in preparation

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.

The shape of each program A Rust core in a hexagon. On the left, a Flutter app whose screens drive the core through a bridge and whose LiveKit room the core drives through a port. On the right, adapters the core reaches through ports: network, storage, ledgers and speech services. Flutter app Screens drive the core LiveKit room driven by the core Rust core the rules no I/O bridge port Network QUIC to the servers Storage keys and state Ledgers where assets move Speech services words, language, voice ports
The same shape in every program: the apps’ core, the platform, the signing service, the witness and the voice AI each have a core, its ports and their adapters. The adapters on the right are examples from across the system.

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:

  1. When a call is neededOne rule in the core decides which requests must be approved on a live call.
  2. 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.
  3. 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.
  4. 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.
See the call and its videos

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.