QuickFIX/J vs QuickFIX/n vs QuickFIX C++: Which One to Use
Written and maintained by ZagTrader. Last reviewed . How this page is sourced and checked
QuickFIX comes in three open source engines that share one design: QuickFIX C++, the original; QuickFIX/J for Java; and QuickFIX/n for .NET. They read the same style of settings file and the same XML data dictionaries, and they behave alike on the wire. The choice is mostly about your language, but the details differ in ways that matter when you configure a session or read its logs.
The short answer
- Your application is Java, Kotlin or Scala: QuickFIX/J.
- Your application is C# or another .NET language: QuickFIX/n.
- Your application is C++, or you need its database stores: QuickFIX C++.
- The counterparty does not care. A QuickFIX/J initiator talks to a QuickFIX C++ acceptor as it would to any other FIX engine.
Side by side
| QuickFIX/J | QuickFIX/n | QuickFIX C++ | |
|---|---|---|---|
| Language | Java | C# (.NET) | C++ |
| How you get it | Maven: quickfixj-core plus one quickfixj-messages-fixNN artefact per FIX version | NuGet: QuickFIXn.Core plus one message package per version, such as QuickFIXn.FIX44 | Build from source |
| Releases | See the QuickFIX/J releases page under Sources | See the QuickFIX/n release notes under Sources | See the QuickFIX C++ releases page under Sources |
| Version notes | QuickFIX/J 3.0.0 was released in March 2026, followed by 2.3.3 in July 2026 and 3.0.2 in August 2026 | QuickFIX/n 1.13 moved to .NET 8; 1.14.1 added .NET 10 and was the last release for .NET 8 | QuickFIX C++ 1.16.0 was released in May 2026 |
| Runtime notes | Message classes are separate artefacts in 3.x; FIX 5.0 and later also need quickfixj-messages-fixt11 | Runs on .NET; the release notes name the supported .NET versions | Optional MySQL, PostgreSQL and ODBC stores and logs; SSL through its SSL initiator and acceptor classes |
| Schedule options | StartTime/EndTime with an optional zone after the time, TimeZone, Weekdays | TimeZone or UseLocalTime, Weekdays | UseLocalTime; no Weekdays setting |
| TLS settings | SocketUseSSL, SocketKeyStore, SocketTrustStore | SSLEnable, SSLServerName, SSLCertificate | SSLProtocol, ClientCertificateFile, CertificationAuthoritiesFile |
| Licence | The QuickFIX Software License 1.0 | The QuickFIX Software License 1.0 | The QuickFIX Software License 1.0 |
All three use the same licence, a BSD-style licence that asks for an acknowledgement of quickfixengine.org in your documentation and restricts the use of the QuickFIX name. Read it before you ship a product that includes one of the engines.
Differences you will meet in practice
- Settings that exist in one engine only. QuickFIX/J has LogonTag, Weekdays with locale-dependent day names, ValidateUnorderedGroupFields and the 3.x setting FirstFieldInGroupIsDelimiter. QuickFIX/n and QuickFIX C++ have ValidateLengthAndChecksum and UseLocalTime. A settings file copied between engines starts, but some lines do nothing. See the settings reference, which marks the engines for each setting.
- Spelling. QuickFIX/J writes
TimeStampPrecision; QuickFIX/n and QuickFIX C++ writeTimestampPrecision. QuickFIX/n has refused the oldMillisecondsInTimeStampsetting since at least 1.12; useTimestampPrecision=Milliseconds. - Unhandled message types. When your code does not handle a message type, QuickFIX/J and QuickFIX C++ answer with a Business Message Reject carrying 380=3 (Unsupported Message Type). The QuickFIX/n source sends 380=2 (Unknown message type) in the same case.
- Store files. QuickFIX/J keeps sender and target sequence numbers in two files (
.senderseqnums,.targetseqnums), each with a two-byte length before the digits. QuickFIX/n and QuickFIX C++ keep both in one text file (.seqnums). See sequence numbers and the file store. - Log file names. QuickFIX/J writes
FIX.4.4-SENDER-TARGET.messages.logand.event.log; QuickFIX/n and QuickFIX C++ write.messages.current.logand.event.current.log. The parser reads all of them.
QuickFIX/J 2.x or 3.x
QuickFIX/J 3.0.0 came out in March 2026, after the 2.3 line. Points to check when you move from 2.3 to 3.0:
- The message classes for each FIX version are separate artefacts that
quickfixj-coredoes not pull in at runtime. Addquickfixj-messages-fix44(or the version you use), andquickfixj-messages-fixt11for FIX 5.0 and later, orquickfixj-messages-all. - In 3.0,
SessionStateListenermethods receive theSessionID, so listeners need a small code change. - Logging moved to SLF4J 2. Check your logging binding.
- New settings: AllowUnknownEnumValues, FirstFieldInGroupIsDelimiter, SocketConnectTimeout, AllowPosDup and SSL server name options (UseSNI, SNIHostName). None of them exist in the 2.3 line (checked in 2.3.2).
Questions
- Is QuickFIX/J a port of QuickFIX C++?
- It is a Java implementation of the same design, and its settings and dictionaries follow the C++ engine closely. The code base is separate.
- Can a QuickFIX/n session talk to a QuickFIX/J session?
- Yes. FIX is the contract between them. What has to match is the FIX version, the CompIDs, the heartbeat interval and the reset rules, not the engine.
- Which QuickFIX version should a new Java project start on?
- The newest major version, unless a library you depend on still needs the previous one. Check the QuickFIX/J release notes for which lines are maintained. Remember to add the message artefacts for the FIX versions you use.
The FIX side of the problem
What the error means on any FIX engine, with example messages you can open in the parser:
Reference
Sources
- QuickFIX/J README: runtime artefacts per FIX version
- QuickFIX/J 3.0.0 release notes
- QuickFIX/J releases on GitHub
- QuickFIX/J source: Session.java (setting names, defaults, logout and reject texts)
- QuickFIX/n release notes
- QuickFIX/n source: Session.cs (reject handling, sequence texts)
- QuickFIX/n source: SessionFactory.cs (required settings, dictionaries)
- QuickFIX C++ documentation: Configuration
- QuickFIX C++ source: SessionSettings.h (setting names)
- QuickFIX C++ source: Session.cpp (reject handling, sequence texts)
- QuickFIX C++ releases on GitHub
- QuickFIX/J licence (The QuickFIX Software License 1.0)
- QuickFIX/n licence (The QuickFIX Software License 1.0)
- QuickFIX C++ licence (The QuickFIX Software License 1.0)
Setting names, defaults and message texts were checked against the projects' source code and documentation on the review date shown at the top of the page. Behaviour can change between releases; check the version you run. This guide is independent and not affiliated with the QuickFIX projects.
See also
More QuickFIX guides
- QuickFIX Session Settings Explained: Configuration Reference
- QuickFIX with FIX 5.0 SP2: FIXT.1.1, Transport and Application Dictionaries
- Custom Fields and a Custom Data Dictionary in QuickFIX
- Repeating Groups in QuickFIX: Reading, Writing and Validation Errors
- QuickFIX Session Schedules: Daily vs Weekly Sessions, Time Zones and Sunday to Thursday Markets
- QuickFIX "Tag not defined for this message type": Causes and Fixes
- QuickFIX "Conditionally Required Field Missing": Why Your Handler Caused It
- QuickFIX "Incorrect data format for value": Field Types and Fixes
- QuickFIX "MsgSeqNum too low": Reset Sequence Numbers Safely and Fix the File Store
- QuickFIX Logon Problems: Session Not Found, CompID Mismatch and Rejected Logons
- QuickFIX SSL and TLS: Setup per Engine and Handshake Failures
- QuickFIX onMessage Not Called: Message Cracking Problems
- Reading and Analyzing QuickFIX Logs: messages.log and event.log