Skip to content

Commit 0d8c5bc

Browse files
lxsaahCopilot
andcommitted
docs: Update README "Help wanted"
Co-authored-by: Copilot <copilot@github.com>
1 parent f147904 commit 0d8c5bc

1 file changed

Lines changed: 43 additions & 32 deletions

File tree

README.md

Lines changed: 43 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
</a>
2323
</p>
2424

25-
AimDB turns data contracts into the architecture. Define your schemas once and deploy them unchanged across microcontrollers, edge gateways, Kubernetes and the browser.
25+
AimDB turns data contracts into the architecture. Define your schemas once and deploy them unchanged across microcontrollers, edge gateways, Kubernetes and the browser, with explicit, typed migrations when the contract evolves.
26+
27+
AimDB is not a storage engine. It's a typed data plane where the Rust type *is* the wire format.
2628

2729
[![AimDB Live Demo](assets/demo.gif)](https://aimdb.dev)
2830

@@ -32,12 +34,11 @@ AimDB turns data contracts into the architecture. Define your schemas once and d
3234

3335
## Why AimDB exists
3436

35-
AimDB makes **the Rust type the contract**defined once, compiled unchanged from a `no_std` microcontroller to a Kubernetes pod. No separate schema files. No code generators. No translation layer between firmware and cloud. The code is law.
37+
Distributed systems spend most of their complexity budget translating between layers. IDLs, codegen, serialization, schema registries and glue services. AimDB removes that layer by making **the Rust type the contract**: defined once, compiled unchanged from a `no_std` microcontroller to the browser.
3638

37-
- **One type, every tier** — the same struct compiles for bare-metal firmware and a cloud service, with no conversion layer between them.
38-
- **No glue code between layers** — the buffer type on a record defines how it moves. No manual queue wiring.
39-
- **Observability built-in** — implement the `Observable` trait and every record emits metrics automatically. No separate instrumentation layer.
40-
- **Connectors derive from the type** — declare a connector on the key, not as a separate process.
39+
- **One type, every tier.** The same struct compiles for firmware and cloud. No conversion layer between them.
40+
- **The buffer defines how data moves.** No manual queue wiring, no separate transport config.
41+
- **No untyped boundaries.** Capabilities, like streaming, migration, observability and connectors, are unlocked by traits.
4142

4243
[The Next Era of Software Architecture Is Data-First](https://aimdb.dev/blog/data-driven-design)
4344

@@ -49,7 +50,8 @@ AimDB makes **the Rust type the contract** — defined once, compiled unchanged
4950

5051
```bash
5152
cargo new my-aimdb-app && cd my-aimdb-app
52-
cargo add aimdb-core aimdb-tokio-adapter tokio --features tokio/full
53+
cargo add aimdb-core aimdb-tokio-adapter
54+
cargo add tokio --features full
5355
```
5456

5557
Drop this into `src/main.rs`:
@@ -91,7 +93,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
9193
}
9294
```
9395

94-
`cargo run` — three temperature readings stream through a typed pipeline. The same code compiles for Embassy on a Cortex-M4 or WASM in the browser by swapping the runtime adapter — nothing else changes.
96+
`cargo run` — three temperature readings stream through a typed pipeline. The same code compiles for Embassy on a Cortex-M4 or WASM in the browser by swapping the runtime adapter.
9597

9698
### Run a real weather mesh in less than 30 min
9799

@@ -109,46 +111,55 @@ docker compose up
109111

110112
## What you get
111113

112-
- **One async API across MCU, edge, cloud and browser.** Tokio, Embassy, WASM — same code, different runtime adapter. → [How the runtime abstraction works](https://aimdb.dev/blog/building-aimdb-one-async-api)
113-
- **Typed Rust structs are the schema.** No IDL, no codegen step, no schema registry.
114-
- **Three buffer primitives** that cover most data-movement patterns:
114+
**Three buffer primitives** that cover most data-movement patterns:
115115

116116
| Buffer | Semantics | Use cases |
117117
| --- | --- | --- |
118118
| **SPMC Ring** | Bounded stream with independent consumers | Sensor telemetry, event logs |
119119
| **SingleLatest** | Only the current value matters | Feature flags, config, UI state |
120120
| [**Mailbox**](https://github.com/aimdb-dev/aimdb/tree/main/examples/hello-mailbox) | Latest instruction wins | Device commands, actuation, RPC |
121121

122-
- **Capabilities are unlocked by traits.** Implement `Streamable` to cross WASM/WebSocket/CLI boundaries, `Migratable` for typed schema evolution, `Observable` for monitoring, `Linkable` for wire-format connectors. Without the trait, the type system says no.
123-
- **Connectors that ship today:** MQTT, KNX, WebSocket. Writing your own is one trait impl.
122+
**Four capability traits** — opt-in, type-checked:
123+
124+
| Trait | What it unlocks |
125+
| --- | --- |
126+
| [`Streamable`](https://aimdb.dev/blog/streamable-crossing-boundaries) | Crossing WASM / WebSocket / CLI boundaries |
127+
| [`Migratable`](https://aimdb.dev/blog/schema-migration-without-ceremony) | Typed schema evolution across deployed fleets |
128+
| `Observable` | Automatic per-record metrics |
129+
| [`Linkable`](https://aimdb.dev/blog/connectors-where-aimdb-meets-the-real-world) | Wire-format connectors |
130+
131+
**One async API across runtimes.** Tokio, Embassy, WASM — swap the runtime adapter, keep the code. → [How the runtime abstraction works](https://aimdb.dev/blog/building-aimdb-one-async-api)
132+
133+
**Connectors that ship today:** MQTT, KNX, WebSocket. Writing your own is one trait impl.
124134

125135
→ Deep dives: [data contracts](https://aimdb.dev/blog/data-contracts-deep-dive) · [source/tap/transform](https://aimdb.dev/blog/source-tap-transform) · [schema migration](https://aimdb.dev/blog/schema-migration-without-ceremony) · [reactive pipelines](https://aimdb.dev/blog/reactive-pipelines)
126136

127137
---
128138

129-
### Platform-Agnostic by Design
139+
### How the dataflow fits together
130140

131-
The same contract works across all runtimes without modification:
141+
A record is written by a `Source`, lands in a typed `Buffer`, and fans out to in-process subscribers (`Tap`) and wire-format bridges (`Link` → connector):
132142

133143
```
134-
┌───────────────────────────────────────────────────────────────────────────────┐
135-
│ Temperature Contract │
136-
├───────────────────┬───────────────────┬───────────────────┬───────────────────┤
137-
│ MCU (Embassy) │ Edge (Tokio) │ Cloud (Tokio) │ Browser (WASM) │
138-
│ no_std + alloc │ std │ Kubernetes │ wasm32 │
139-
│ Cortex-M4 │ Linux / RPi │ Full featured │ Single-threaded │
140-
└───────────────────┴───────────────────┴───────────────────┴───────────────────┘
144+
Producer Consumers
145+
──────── ─────────
146+
147+
┌──────────────┐ ───► Tap (in-process subscriber)
148+
Source ───► │ Buffer │
149+
(typed) │ SPMC / SL / │ ───► Tap (another subscriber)
150+
│ Mailbox │
151+
└──────────────┘ ───► Link ──► MQTT / KNX / WebSocket
141152
```
142153

143-
The Rust type system enforces correctness at compile time. The dataflow engine's buffer semantics enforce flow guarantees at runtime. Connectors wire everything to your infrastructure without an integration layer.
154+
The Rust type system enforces correctness at compile time, buffer semantics enforce flow guarantees at runtime and connectors wire to your infrastructure without an integration layer. The same code compiles for MCU, edge, cloud or browser — see [Platform Support](#platform-support) below.
144155

145156
---
146157

147158
## Ask your AI about your running system
148159

149160
AimDB ships an MCP server. Point any MCP-compatible client at a running instance and query it in natural language.
150161

151-
[![AimDB MCP demo](assets/copilot-communication.gif)](assets/copilot-communication.gif)
162+
<img src="assets/copilot-communication.gif" alt="AimDB MCP demo" width="600">
152163

153164
Try it against the live demo — no install required. Add this to your workspace:
154165

@@ -182,13 +193,13 @@ See the [MCP server docs](tools/aimdb-mcp/) for Claude Desktop and other editors
182193

183194
### Connectors
184195

185-
| Protocol | Crate | Status | Runtimes |
186-
|----------|-------|--------|----------|
187-
| **MQTT** | `aimdb-mqtt-connector` | ✅ Ready | std, no_std |
188-
| **KNX** | `aimdb-knx-connector` | ✅ Ready | std, no_std |
189-
| **WebSocket** | `aimdb-websocket-connector` | ✅ Ready | std, wasm |
190-
| **Kafka** | | 📋 Planned | std |
191-
| **Modbus** | | 📋 Planned | std, no_std |
196+
| Protocol | Status | Runtimes |
197+
|----------|--------|----------|
198+
| **MQTT** `aimdb-mqtt-connector` | ✅ Ready | std, no_std |
199+
| **KNX** `aimdb-knx-connector` | ✅ Ready | std, no_std |
200+
| **WebSocket** `aimdb-websocket-connector` | ✅ Ready | std, wasm |
201+
| **Kafka** | 📋 Planned | std |
202+
| **Modbus** | 📋 Planned | std, no_std |
192203

193204
---
194205

@@ -239,7 +250,7 @@ See the [contributing guide](CONTRIBUTING.md) for build, test and style requirem
239250
---
240251

241252
<p align="center">
242-
<strong>Define once. Deploy anywhere.</strong>
253+
<strong>Distributed by design. Data-driven by default.</strong>
243254
<br><br>
244255
<a href="https://aimdb.dev/docs/getting-started">Get started</a> · <a href="https://aimdb.dev">Live demo</a> · <a href="https://github.com/aimdb-dev/aimdb/discussions">Join the discussion</a>
245256
</p>

0 commit comments

Comments
 (0)