A conversational interface to NexusFIX's architecture, message dictionaries, venue profiles, and benchmark suite. 182 expert-answered questions indexed and grounded in the live codebase. And a live thread when the canned answer isn't enough.
Hi, I'm the NexusFIX expert, grounded in the public source, benchmark CSVs, and the 182 curated answers indexed on this page.
Pick a thread from the right, or ask me anything below. If the answer isn't in the source, I'll say so.
How does NexusFIX achieve zero heap allocations?
Three substitutions, all on the hot path:
1. std::span<const char> views into the original buffer replace std::string copies. The span is 16 bytes on the stack. No heap, no copy, no destructor.
2. A pre-indexed array replaces std::map for field lookup. Field access becomes a single mov indexed by FIX tag number.
3. std::pmr::monotonic_buffer_resource provides arena allocation for anything that does need a slot. The arena is pre-sized and reused per session.
The result is 0 malloc calls on the hot path, verified via a custom allocator that instruments every alloc/free and fails the test if either fires.
The eight questions that come up in nearly every conversation. Click any to expand. Or pop it back into the live thread above.
QuickFIX was designed in the early 2000s around C++98/03 idioms: virtual dispatch, heap allocation per message, string-based field storage. These patterns are fundamentally incompatible with sub-microsecond latency.
We started from first principles using C++23 capabilities that didn't exist when QuickFIX was designed. Std::span, std::expected, std::pmr, concepts, and consteval. And asked: what would a FIX engine look like if you weren't carrying twenty years of allocator decisions?
Quantitative trading firms and infrastructure teams that need deterministic, sub-microsecond FIX message processing.
Specifically: firms running co-located strategies, teams building custom trading gateways, and C++ engineers studying modern performance techniques on a real, public codebase.
std::span
The result: zero malloc calls on the hot path, verified via a custom allocator instrumentation harness that runs on every CI build.
std::expected for error handling (no exceptions on hot path), std::span for zero-copy data views, concepts for compile-time interface validation, consteval for compile-time computation, and [[likely]]/[[unlikely]] branch hints.
Every one of these would have required a custom hand-rolled implementation in QuickFIX's era.
AVX2 instructions load 32 bytes at a time and use vectorized comparison to find SOH (\x01) delimiters in parallel. This is ~13× faster than byte-by-byte scanning.
The technique is inspired by simdjson but adapted for FIX protocol semantics. Namely, the tag=value=SOH structure means we can locate every field boundary in a single vectorized pass and then build the offset table.
FIX 4.4 has full support and is the most common in production. FIX 5.0 + FIXT 1.1 also has full support with only 2% overhead vs 4.4.
The structural index is version-agnostic. Field scanning works identically across FIX versions. Custom dialect overlays handle venue-specific tags at session bind time.
NexusFIX is in active development and has not yet been deployed in production trading environments. Benchmarks are from controlled environments with CPU pinning and cache warming.
Production hardening. Soak testing, failure-mode coverage, certifying against specific venue gateways. Is a separate engineering effort. If you're considering it for prod, talk to us first.
Fix8 (C++11) uses object pools and zero-copy techniques, and is one of the more sophisticated open FIX engines.
NexusFIX differs by leveraging C++23 standard-library features (PMR, std::span, std::expected) instead of custom implementations. Fewer moving parts to audit. And by adding SIMD-accelerated parsing, which Fix8 doesn't have.
Ask it in the live thread above. Or open an issue on GitHub. Every question that gets a sourced, useful answer makes it into the indexed set on the next release.