ZagTrader

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/JQuickFIX/nQuickFIX C++
LanguageJavaC# (.NET)C++
How you get itMaven: quickfixj-core plus one quickfixj-messages-fixNN artefact per FIX versionNuGet: QuickFIXn.Core plus one message package per version, such as QuickFIXn.FIX44Build from source
ReleasesSee the QuickFIX/J releases page under SourcesSee the QuickFIX/n release notes under SourcesSee the QuickFIX C++ releases page under Sources
Version notesQuickFIX/J 3.0.0 was released in March 2026, followed by 2.3.3 in July 2026 and 3.0.2 in August 2026QuickFIX/n 1.13 moved to .NET 8; 1.14.1 added .NET 10 and was the last release for .NET 8QuickFIX C++ 1.16.0 was released in May 2026
Runtime notesMessage classes are separate artefacts in 3.x; FIX 5.0 and later also need quickfixj-messages-fixt11Runs on .NET; the release notes name the supported .NET versionsOptional MySQL, PostgreSQL and ODBC stores and logs; SSL through its SSL initiator and acceptor classes
Schedule optionsStartTime/EndTime with an optional zone after the time, TimeZone, WeekdaysTimeZone or UseLocalTime, WeekdaysUseLocalTime; no Weekdays setting
TLS settingsSocketUseSSL, SocketKeyStore, SocketTrustStoreSSLEnable, SSLServerName, SSLCertificateSSLProtocol, ClientCertificateFile, CertificationAuthoritiesFile
LicenceThe QuickFIX Software License 1.0The QuickFIX Software License 1.0The 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++ write TimestampPrecision. QuickFIX/n has refused the old MillisecondsInTimeStamp setting since at least 1.12; use TimestampPrecision=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.log and .event.log; QuickFIX/n and QuickFIX C++ write .messages.current.log and .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-core does not pull in at runtime. Add quickfixj-messages-fix44 (or the version you use), and quickfixj-messages-fixt11 for FIX 5.0 and later, or quickfixj-messages-all.
  • In 3.0, SessionStateListener methods receive the SessionID, 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

  1. QuickFIX/J README: runtime artefacts per FIX version
  2. QuickFIX/J 3.0.0 release notes
  3. QuickFIX/J releases on GitHub
  4. QuickFIX/J source: Session.java (setting names, defaults, logout and reject texts)
  5. QuickFIX/n release notes
  6. QuickFIX/n source: Session.cs (reject handling, sequence texts)
  7. QuickFIX/n source: SessionFactory.cs (required settings, dictionaries)
  8. QuickFIX C++ documentation: Configuration
  9. QuickFIX C++ source: SessionSettings.h (setting names)
  10. QuickFIX C++ source: Session.cpp (reject handling, sequence texts)
  11. QuickFIX C++ releases on GitHub
  12. QuickFIX/J licence (The QuickFIX Software License 1.0)
  13. QuickFIX/n licence (The QuickFIX Software License 1.0)
  14. 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