Tight tail. No surprises at p99.
Lock-free SPSC queues, branchless tag decoders, hot-path inlining. The slowest message looks like the fastest one. That's what venues actually grade you on.
A C++23 FIX protocol engine built for venues that don't forgive a missed heartbeat. Zero allocations on the hot path, sub-microsecond parsing, deterministic session state.
Predictable. All the way down.
Every number you'd reach for in a production runbook. Measured under load, on commodity hardware, against a deterministic replay.
Three architectural choices that compound. Each one is what makes the next one possible.
Lock-free SPSC queues, branchless tag decoders, hot-path inlining. The slowest message looks like the fastest one. That's what venues actually grade you on.
Static arenas, intrusive freelists, fixed-size message slots. The allocator never runs while orders are flowing. So the kernel never preempts you to reclaim a page.
Generated dictionaries per version, runtime-selectable per session. Custom dialect overlays for venue-specific fields. The wire format the venue runs is the wire format you send.
Pre-built session profiles for major equities, futures, FX and crypto venues. Heartbeats, sequence-reset semantics and resend-request quirks captured from real production traces.
A NewOrderSingle decode-and-route, side by side. Same message, same machine, very different cost.
void Application::onMessage(const FIX44::NewOrderSingle& msg, const SessionID& sid) { FIX::ClOrdID clOrdId; msg.get(clOrdId); // allocates FIX::Symbol symbol; msg.get(symbol); // allocates FIX::Side side; msg.get(side); FIX::OrderQty qty; msg.get(qty); // allocates Decimal FIX::Price price; msg.get(price); // allocates Decimal std::string key = symbol.getString(); // allocates std::string router_->route(key, clOrdId.getString(), qty, price); } // ~14 heap allocs / msg
void OrderHandler::on_message(MessageView m, SessionRef sid) noexcept { auto [cl_ord_id, symbol, side, qty, price] = m.decode<D::ClOrdID, D::Symbol, D::Side, D::OrderQty, D::Price>(); // in-place, span<const char> // fixed-arena order slot, no heap, no copies auto& slot = arena_.acquire(cl_ord_id); slot.init(symbol, side, qty, price, sid); router_.route(slot); // 0 heap allocs / msg }
QuickFIX has done two decades of heavy lifting for the industry. NexusFIX is what you reach for when those choices have become the bottleneck.
| QuickFIX | NexusFIX | |
|---|---|---|
| Hot-path allocations | ~14 heap allocs per message (std::string, Decimal) | 0 · static arenas, in-place decode |
| p99 parse latency | 1.2–1.8 µs depending on dialect | < 500 ns · branchless tag decode |
| Throughput / core | 60–90K msg/s sustained | 240K+ msg/s sustained |
| Tail behaviour under load | GC-free, but allocator churn = unpredictable spikes | No allocator on hot path. flat tail |
| Protocol versions | 4.2 / 4.4 / 5.0. Per-build XML data dictionary | 4.2 / 4.4 / 5.0 / FIXT + runtime dialect overlay |
| Language | C++03 / C++11 idioms, virtual dispatch | C++23, concepts + ranges, no virtual on hot path |
Wire bytes in. Routed order out. Three stages, all running in the same thread, all running without allocating.
The SOH-delimited stream is iterated in place. Each tag resolves to a typed view over the original buffer; numeric fields are parsed branchlessly, with the dialect overlay applied at session bind time.
Sequence numbers, heartbeat windows, gap-fill semantics, resend-request quirks. Handled by a generated state machine, one per venue profile. Every transition is logged to a memory-mapped journal.
A fixed-arena order slot is acquired, populated by reference, and handed to your application via a lock-free SPSC queue. The slot lives until the order's terminal state, then returns to the arena.
Two threads to pull on next. The architecture write-up, or the live conversational explainer.
How NexusFIX uses static arenas, lock-free SPSC queues, and generated state machines to keep the slowest message looking like the fastest one. With numbers.
Read the deep-dive →A conversational interface to the engine's docs, message dictionaries, venue profiles and benchmark suite. Trained on the production codebase, grounded in the actual headers.
Open the chatbot →NexusFIX ships as a single static library and a CLI session simulator. Bring a venue config and a handler, and you've got a deterministic FIX session running locally. Replayable from a journal, traceable to the byte.
NexusFIX is one of three engines we build. Same philosophy: open-source where possible, performance-first, no lock-in.
AI generation at scale + C++23 backtest speed + institutional-grade statistical composition. The 3-layer competitive moat that makes 1000+ signal quant trading accessible.
Learn more →C++23 backtesting engine with 138+ indicators and production-ready strategies. The replay layer underneath StratCraft, available standalone for your own research stack.
Learn more →