Implementation ownership
The language boundary is a deployment decision.
Native reference engine
Direct native ownership of the session, transport and storage path.
View benchmarks →Independent JVM engine
Session and codec behavior implemented in Java without the C++ runtime.
View benchmarks →Java API over C++
Provider-neutral Java-facing APIs backed by the native engine.
View benchmarks →Independent C# engine
Managed session and codec implementation without a native provider.
View benchmarks →C# API over hftnet/C++
A managed application boundary over the native provider and state machine.
View benchmarks →Independent Rust engine
Session, recovery, validation, storage and transport implemented in Rust.
View benchmarks →Generated coverage snapshot
Tracked capabilities remain surface-specific.
API totals are generated from source symbols. Session behavior is maintained as a separate protocol ledger. A native-backed provider can inherit protocol behavior from the C++ engine even when the shim contains no duplicate resend or gap-fill implementation.
| Flavor | Ownership | Tracked API | Session behavior |
|---|---|---|---|
| C++ | Native reference | 78/79 · 1 absent · 11 n/a | 27/27 |
| Java Pure | Independent Java | 88/90 · 2 absent | 27/27 |
| Java/JNI | Java API over C++ | 88/89 · 1 absent · 1 n/a | 27/27 · 13 engine-owned |
| .NET Pure | Independent C# | 87/87 · 3 n/a | 27/27 |
| .NET Native | C# API over hftnet/C++ | 86/87 · 1 absent · 3 n/a | 27/27 · 13 engine-owned |
| Rust Pure | Independent Rust | 79/79 · 11 n/a | 27/27 |
Snapshot derived from the committed generated binding matrix on 28 September 2026. Denominators differ because some provider-specific capabilities are deliberately not applicable.
Shared behavior
What the parity ledger actually tracks.
All six flavors expose typed support for 17 common application and reject message families and the 27 tracked session behaviors. The session ledger covers lifecycle and failure-path behavior such as Logon, heartbeat, sequence gaps, resend, gap fill, reject handling, reconnect and durable state—not just message encoding.
Independent engines can diverge in implementation and performance. Native-backed providers intentionally reuse the C++ state machine. The public matrix records those differences instead of collapsing them behind one language label.
Selection guide
Choose by operational ownership, not syntax alone.
- Choose C++ when the application owns the native path and vendor SDK integration directly.
- Choose Java Pure, .NET Pure or Rust Pure when a standalone runtime-native engine is the architectural requirement.
- Choose Java/JNI or .NET Native when the managed application should reuse the C++ engine and its native transport integrations.
- Benchmark the exact flavor, transport, message path and deployment hardware you will operate.