You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+43-32Lines changed: 43 additions & 32 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -22,7 +22,9 @@
22
22
</a>
23
23
</p>
24
24
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.
26
28
27
29
[](https://aimdb.dev)
28
30
@@ -32,12 +34,11 @@ AimDB turns data contracts into the architecture. Define your schemas once and d
32
34
33
35
## Why AimDB exists
34
36
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.
36
38
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.
41
42
42
43
→ [The Next Era of Software Architecture Is Data-First](https://aimdb.dev/blog/data-driven-design)
43
44
@@ -49,7 +50,8 @@ AimDB makes **the Rust type the contract** — defined once, compiled unchanged
49
50
50
51
```bash
51
52
cargo new my-aimdb-app &&cd my-aimdb-app
52
-
cargo add aimdb-core aimdb-tokio-adapter tokio --features tokio/full
`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.
95
97
96
98
### Run a real weather mesh in less than 30 min
97
99
@@ -109,46 +111,55 @@ docker compose up
109
111
110
112
## What you get
111
113
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:
-**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.
**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.
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):
└──────────────┘ ───► Link ──► MQTT / KNX / WebSocket
141
152
```
142
153
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.
144
155
145
156
---
146
157
147
158
## Ask your AI about your running system
148
159
149
160
AimDB ships an MCP server. Point any MCP-compatible client at a running instance and query it in natural language.
0 commit comments