IonPath is a unified communication protocol and contract language designed for modern distributed applications. It combines a compact binary message format (based on CBOR) with a strongly typed DSL for defining interfaces and data contracts.
IonPath enables seamless code generation, efficient serialization, and clear separation of protocol boundaries — supporting both C# and TypeScript out of the box.
Caution
Currently not suitable for use in a production environment, API and language have not yet been stabilized.
IonPath consists of two parts:
- Ion Contract Language (.ion) — A compact DSL for defining types, messages, RPC methods, and event schemas
- IonPath Protocol — A binary, CBOR-based messaging layer for exchanging typed data across systems
- Declarative contract (
.ion) for defining types, services, messages - Code generation for C# and TypeScript — usable in both backend and frontend
- Compact CBOR encoding — fast, binary, schema-based
- Streaming & RPC ready — defines request/response/event shapes
- Designed for low-latency systems — suitable for WebSocket, QUIC, or custom transports
- Strong static typing & contract lockfiles — lockfiles pin contract versions across services/CI, guarantee consistency, and prevent accidental breaking changes
- Backward-compatible evolution — strict compatibility checks; the protocol safely ignores unknown fields when a consumer uses an older contract version
| ion | C# | TypeScript |
|---|---|---|
| void | void | void |
| bool | bool | boolean |
| i1 | sbyte | number |
| i2 | short | number |
| i4 | int | number |
| i8 | long | bigint |
| i16 | Int128 | bigint |
| u1 | byte | number |
| u2 | ushort | number |
| u4 | uint | number |
| u8 | ulong | bigint |
| u16 | UInt128 | bigint |
| f2 | Half | number |
| f4 | float | number |
| f8 | double | number |
| bigint | BigInteger | bigint |
| guid | Guid | string as Guid |
| string | string | string |
| datetime | DateTime | Date |
| dateonly | DateOnly | DateOnly |
| timeonly | TimeOnly | TimeOnly |
| duration | TimeSpan | Duration |
| uri | Uri | string as Uri |
| Maybe | Maybe | Maybe |
| Array | T[] | T[] |
| 📜 Language | Status | 🛠 Code Generation | Status | 🌐 Transports & Platforms | Status |
|---|---|---|---|---|---|
| Core DSL Grammar | ✅ | C# \ Server | ✅ | HTTP Transport | ✅ |
| Services | ✅ | C# \ Client | ✅ | QUIC Transport | 🔻 |
| POCO | ✅ | TypeScript \ Client | ✅ | NATS | 🔻 |
| IonPath Protocol | ✅ | TypeScript \ Server | 🔻 | WebSocket Streaming | 🔻 |
| Unions | ✅ | Rust \ Client | 🔻 | SteamNetworking | 🔻 |
| Unary Calls | ✅ | Rust \ Server | 🔻 | Unity Platform | 🔻 |
| Streaming Calls | ✅ | Go \ Client | 🔻 | Orleans Platform | 🔻 |
| Streaming Hubs | 🔻 | Go \ Server | 🔻 | ||
| Json Serialization | 🔻 | ||||
| MsgPack Serialization | 🔻 | ||||
| CBOR Serialization | ✅ |
Legend: 🚧 – in progress, ✅ – implemented, 🔻 – planned
