Release 0.7.9#


This release has bug fixes and improvements.

JSON Bridge#

It is now possible to communicate with the gateways using JSON/WS from any language.

There are some minor constraints, e.g. a restriction to associate a client session with a single account. Otherwise the interface is almost identical to the C++ interface.

More details can be found here


The JSON protocol has been optimised for efficient parsing. Although it works, it may not necessarily be the ideal protocol for correct communication between client and bridge. It is therefore possible that the protocol may change slightly over the next few releases.


Although not yet required, the infrastructure is now in place to enforce license terms.

You can find more information here


The previous implementation of cache::MarketByPrice required ReferenceData to understand how to convert between the external (floating point) and internal (integer) representations.

Furthermore, GatewaySettings was required to communicate max-depth when an exchange only communicates a view of the top N price levels.

Everything is now communicated directly to the client via MarketByPriceUpdate and there is therefore no longer a need to pass GatewaySettings and ReferenceData to cache::MarketByPrice.

These changes were prompted by #114 and implemented by #119 and #123.

The risk of clients maintaining incorrect order books should now be drastically reduced.


If you’re currently using client::DepthBuilder, please change your code to use cache::MarketByPrice instead.


This change has already been implemented in roq-samples. (You can find the commit here.)


The API now includes more functionality for object caching. In particular, there is now a new class to manage objects (for a single source). Please refer to the roq::cache namespace for more details.


This caching framework is being used by the JSON bridge and it is the intention to later also transition the FIX bridge to this framework as well. The interfaces should not be considered stable until this transition has taken place.


Milestone on GitHub.


  • Infrastructure to support enforced gateway license terms (Server) (#5).

  • Add end-to-end metrics for sending_time - origin_create_time (FIX Bridge) (#135).

  • JSON/WS bridge (JSON Bridge) (#128).

  • Compute and publish request round-trip latency metrics (Server) (#131).

  • New OrderAck.round_trip_latency field (API) (#130).

  • Order types other than LIMIT may be rejected by the FIX connection (FTX) (#124).

  • Option to pass exchange timestamp to sending time (tag 52) (FIX Bridge) (#125).

  • More metrics to align dashboard monitoring with gateways (Client) (#122).

  • Disconnect stream if market-data latency exceeds threshold (FTX) (#120).

  • Monitor market data latency (#117).

  • Preliminary support for upcoming WS jsonrpc protocol (BitMEX) (#112).


  • Disconnected market data stream will trigger clients to be logged out (FIX Bridge) (#132).

  • MarketByPriceUpdate now include max-depth (API) (#123).

  • MarketByPriceUpdate and MarketByOrderUpdate now include checksum (API) (#74).

  • Change default max symbols per WebSocket to reduce latency (FTX) (#121).

  • MarketByPriceUpdate and MarketByOrderUpdate now include price/quantity decimals (API) (#119).

  • Log FIX messages at standard verbosity levels (FIX Bridge) (#116).

  • MbP needs heuristics to determine tick_size when no reference data (Core) (#114).

  • Choice prices are possible (Deribit) (#115).


  • Dump has wrong CSV column names for OrderAck (Tools) (#137).

  • TradeSummary does not work with MarketDataRequest (FIX Bridge) (#136).

  • Incorrect hashing for mutliple signatures within 1ms (Deribit) (#133).

  • Client sockets did not use TCP_NODELAY (FIX Bridge) (#127).

  • MDFull/MDInc did not populate md_entry_date/md_entry_time (FIX Bridge) (#126).

  • MarketByPrice snapshot should send full refresh (FIX Bridge) (#113).