- Removed deprecated
Packaging
enum andpackaging
field that's no longer supported by the API - Renamed
VersionUpgradePolicy::Upgrade
toUpgradeToV2
in preparation for a future DBN version 3
- Created separate namespaces for each DBN version to create a consistent way to refer to record types from a particular DBN version regardless of whether the record changed between versions
- Added new IntelligentCross venues
ASPN
,ASMT
, andASPI
- Deprecated
Packaging
enum andpackaging
field onBatchJob
. These will be removed in a future version. All files from a batch job can be downloaded with theBatchDownload
method on the historical client
- Added new
None
Action
variant that will be gradually rolled out to historical and liveGLBX.MDP3
data
- Added new
Cmbp1Msg
- Added new consolidated publisher values for
XNAS.BASIC
andDBEQ.MAX
- Changed the layout of
CbboMsg
to better matchBboMsg
- Renamed
Schema::Cbbo
toSchema::Cmbp1
- Deprecated
Packing::Tar
and renamed it toTarDeprecated
. This variant will be removed in a future version when it is no longer supported by the API
- Added
Intraday
variant toDatasetCondition
in preparation for intraday data being available from the historical API - Renamed
example
directory toexamples
- Renamed
test
directory totests
- Added new publisher values for
XCIS.BBOTRADES
andXNYS.BBOTRADES
- Removed previously deprecated
DatasetCondition::Bad
variant
- Added new publisher value for
DBEQ.SUMMARY
- Renamed
SType::Nasdaq
variant toSType::NasdaqSymbol
- Renamed
SType::Cms
variant toSType::CmsSymbol
- Added missing
ToString
andFromString
branches forSType::NasdaqSymbol
andSType::CmsSymbol
- Removed
has_header_v
variable template that broke C++11 compatibility
- Improved installation with
CMake
: license is now installed, transitive dependencies are configured when importing package
This release adds support for encoding DBN within the C++ client.
It also improves historical symbology support with the new TsSymbolMap
class that
handles mapping historical records to a text symbol. To support this class, several types
for date fields were changed from strings or ints to date::year_month_day
.
- Added
TsSymbolMap
to support historical symbology where mappings change between days - Added
DbnEncoder
class for encoding DBN data - Added blocking API similar to
LiveBlocking
toDbnFileStore
with newGetMetadata
andNextRecord
methods - Added
BboMsg
record struct for futurebbo-1m
andbbo-1s
schemas - Added
PitSymbol
map constructor fromMetadata
and adate::year_month_day
- Added
Metadata::CreateSymbolMap
andMetadata::CreateSymbolMapForDate
methods for creating symbology maps from historical metadata - Added blocking API similar to
LiveBlocking
toDbnFileStore
- Added
SymbologyResolution::CreateSymbolMap
method for creating a symbology map from a symbology resolution response - Added
InFileStream
andOutFileStream
helper classes for reading and writing binary output respectively
- Added new dependency on Howard Hinnant's date library
- Added
ILogReceiver*
parameter to allDbnDecoder
constructors and oneDbnFileStore
constructor - Removed type
StrMappingInterval
.MappingInterval
is now also used inSymbologyResolution
. - Changed
Bbo1sMsg
andBbo1mMsg
to be aliases forBboMsg
- Changed type of
start_date
andend_date
inMappingInterval
todate::year_month_day
- Added
stype_in
andstype_out
fields toSymbologyResolution
to support creating aTsSymbolMap
- Added
Upgrade()
method toMetadata
to update the metadata fields according to aVersionUpgradePolicy
- Added new publisher values for
XNAS.BASIC
andXNAS.NLS
- Fixed issue where
Metadata
wasn't upgraded when passingVersionUpgradePolicy::Upgrade
- Added configurable
heartbeat_interval
parameter for live clients that determines the timeout before heartbeatSystemMsg
records will be sent. It can be configured via theSetHeartbeatInterval
method of theLiveBuilder
- Added
SetAddress
method toLiveBuilder
for configuring a custom gateway address without using the constructor directly - Added new
UncrossingPrice
StatType
variant - Added new publisher values for
XNAS.BASIC
- Added
SetDataset(Dataset)
overload toLiveBuilder
- Added new off-market publisher values for
IFEU.IMPACT
andNDEX.IMPACT
- Added
heartbeat_interval
parameter to theLive
constructors - Removed
start_date
andend_date
fields fromDatasetRange
struct in favor ofstart
andend
- Removed live
Subscribe
method overloads withuse_snapshot
parameter in favor of separateSubscribeWithSnapshot
method
- Fixed overloading of live
Subscribe
methods - Fixed live subscribing with default-constructed
UnixNanos
- Fixed descriptions for
FINN
andFINY
publishers
- Added live
Subscribe
function overload withuse_snapshot
parameter - Added
GetIf
method toRecord
that allowsif
chaining for handling multiple record types - Added record type checking to
Record::Get
method to catch programming errors and prevent reading invalid data
- Added missing symbol chunking for live
Subscribe
overloads withconst std::string&
start
parameter
- Changed
FlagSet
to be more class-like:- Added predicate methods and setters for each bit flag
- Improved string formatting
- Removed bitwise operators. Bitwise operations can be performed by first casting to a
std::uint8_t
or calling theRaw()
method
- Changed format of
display_factor
andprice_ratio
to a fixed-precision decimal forInstrumentDefMsg
andInstrumentDefMsgV1
to match existing values and DBN crate - Changed format of
unit_of_measure_qty
to a fixed-precision decimal forInstrumentDefMsgV1
to matchInstrumentDefMsg
- Added support for Conan-installed zstd (credit: @Hailios)
- Added missing copying of
ts_event
when upgrading structs from DBNv1 to DBNv2 - Fixed setting of compiler warnings and warnings that had accumulated
- Added
StatusMsg
record, andStatusAction
,StatusReason
,TradingEvent
, andTriState
enums - Added
CbboMsg
record and correspondingConsolidatedBidAskPair
structure - Added new enum values for
Schema
andRType
corresponding to new schemascbbo
,cbbo-1s
,cbbo-1m
,tcbbo
,bbo-1s
,bbo-1m
- Added
Volatility
andDelta
StatType
variants - Added
Undefined
andTimeProRata
MatchAlgorithm
variants - Changed format of
unit_of_measure_qty
to a fixed-precision decimal - Added logic to skip
find_package
call ifnlohmann_json
andhttplib
targets already exist (credit: @akovachev) - Added specific instructions for installing dependencies on Ubuntu and macOS (credit: @camrongodbout)
- Renamed publishers from deprecated datasets to their respective sources (
XNAS.NLS
andXNYS.TRADES
respectively)
- Deprecated dataset values
FINN.NLS
andFINY.TRADES
- Fixed out-of-order initialization in
DbnDecoder
(credit: @Hailios) - Renamed
MatchAlgorithm::EurodollarOptions
toMatchAlgorithm::EurodollarFutures
- Added new publisher values for consolidated DBEQ.MAX
- Added constructor to
WithTsOut
that updateslength
to the correct value to account for the extra 8 bytes - Upgrade default cpp-httplib version to 0.14.3 (last to still support OpenSSL 1.1)
- Upgrade default nlohmann_json version to 3.11.3
- Changed default
upgrade_policy
toUpgrade
so by default the primary record types can always be used - Renamed
dummy
field inImbalanceMsg
andStatMsg
toreserved
- Fixed handling of
ts_out
when decoding DBNv1 and upgrading to version 2 - Fixed missing logic to upgrade
ErrorMsgV1
andSystemMsgV1
when decoding DBN withVersionUpgradePolicy::Upgrade
- Added missing
StatType::Vwap
variant used in the ICE datasets - Added missing
ToString
andoperator<<
handling forStatType::ClosePrice
andStatType::NetChange
- Fixed potential for invalid reads when decoding C strings in
DbnDecoder
- Increased size of
SystemMsg
andErrorMsg
to provide better messages from Live gateway- Increased length of
err
andmsg
fields for more detailed messages - Added
is_last
field toErrorMsg
to indicate the last error in a chain - Added
code
field toSystemMsg
andErrorMsg
, although currently unused - Added new
is_last
parameter toErrorMsg::new
- Decoding these is backwards-compatible and records with longer messages won't be sent during the DBN version 2 migration period
- Renamed previous records to
ErrorMsgV1
andSystemMsgV1
- Increased length of
- Added
PitSymbolMap
helper for keeping track of symbology mappings in Live - Added new publisher value for OPRA MIAX Sapphire
- Fixed misaligned read undefined behavior when decoding records
This release adds support for DBN v2.
DBN v2 delivers improvements to the Metadata
header symbology, new stype_in
and stype_out
fields for SymbolMappingMsg
, and extends the symbol field length for SymbolMappingMsg
and
InstrumentDefMsg
. The entire change notes are available here.
Users who wish to convert DBN v1 files to v2 can use the dbn-cli
tool available in the databento-dbn crate.
On a future date, the Databento live and historical APIs will stop serving DBN v1.
This release is fully compatible with both DBN v1 and v2, and so should be seamless for most users.
- Added support for DBN encoding version 2 (DBNv2), affecting
SymbolMappingMsg
,InstrumentDefMsg
, andMetadata
- Version 1 structs can be converted to version 2 structs with the
ToV2()
method
- Version 1 structs can be converted to version 2 structs with the
- Added
symbol_cstr_len
field toMetadata
to indicate the length of fixed symbol strings - Added
stype_in
andstype_out
fields toSymbolMappingMsg
to provide more context with live symbology updates - Added
IndexTs
methods to every record type which returns the primary timestamp - Added
VersionUpgradePolicy
enum to allow specifying how to handle decoding records from prior DBN versions - Added
InstrumentDefMsgV2
andSymbolMappingMsgV2
type aliases - Added
kDbnVersion
constant for current DBN version - Added
kSymbolCstrLen
,kSymbolCstrLenV1
, andkSymbolCstrLenV2
constants for the length of fixed-length symbol strings in different DBN versions - Added new publisher values in preparation for IFEU.IMPACT and NDEX.IMPACT datasets
- Added new publisher values for consolidated DBEQ.BASIC and DBEQ.PLUS
- Added
kMaxRecordLen
constant for the length of the largest record type - Added ability to convert
FlagSet
to underlying representation
- The old
InstrumentDefMsg
is nowInstrumentDefMsgV1
incompat.hpp
- The old
SymbolMappingMsg
is nowSymbolMappingMsgV1
incompat.hpp
- Converted the following enums to enum classes to allow safely adding new variants:
SecurityUpdateAction
andSType
- Renamed
dummy
toreserved
inInstrumentDefMsg
- Removed
reserved2
,reserved3
,reserved4
, andreserved5
fromInstrumentDefMsg
- Moved position of
strike_price
withinInstrumentDefMsg
- Removed deprecated
SecurityUpdateAction::Invalid
variant
- Added new publisher values in preparation for DBEQ.PLUS
- Added
ToIso8601
forUnixNanos
for converting to human-readable ISO8601 datetime string - Added
kUndefTimestamp
andkUndefStatQuantity
constants - Added flag
kTob
for top-of-book messages
- Added
pretty_px
option forBatchSubmitJob
, which formats prices to the correct scale using the fixed-precision scalar 1e-9 (available for CSV and JSON text encodings) - Added
pretty_ts
option forBatchSubmitJob
, which formats timestamps as ISO 8601 strings (available for CSV and JSON text encodings) - Added
map_symbols
option toBatchSubmitJob
, which appends the raw symbol to every record (available for CSV and JSON text encodings) reducing the need to look at thesymbology.json
file - Added
split_symbols
option forBatchSubmitJob
, which will split files by raw symbol - Added
encoding
option toBatchSubmitJob
to allow requesting non-DBN encoded data through the client - Added
map_symbols
,pretty_px
, andpretty_ts
toBatchJob
response - Added
ARCX.PILLAR.ARCX
publisher - Added
ClosePrice
andNetChange
StatType
s used in theOPRA.PILLAR
dataset
- Remove
default_value
parameter fromHistorical::SymbologyResolve
- Fixed typo in
BATY.PITCH.BATY
publisher
- Added the
Publisher
,Venue
, andDataset
enums - Added
Publisher
getters toRecord
andRecordHeader
to convert thepublisher_id
to its enum
- Added
raw_instrument_id
to definition schema - Added
operator==
andoperator!=
implementations forDatasetConditionDetail
andDatasetRange
- Changed
MetadataListPublishers
to return avector<PublisherDetail>
MetadataListFields
:- Changed return type to
vector<FieldDetail>
- Made
encoding
andschema
parameters required - Removed
dataset
parameter
- Changed return type to
MetadataListUnitPrices
:- Changed return type to
vector<UnitPricesForMode>
- Made
dataset
parameter required - Removed
mode
andschema
parameters
- Changed return type to
- Fixed installation of
nlohmann_json
when using bundled version - Added missing
operator!=
implementations forMetadata
,MappingInterval
, andSymbolMapping
- Added preliminary support for Windows
- Added
LiveThreaded::BlockForStop
to make it easier to wait for one or more records before closing the session - Changed
TimeseriesGetRange
to request a Zstd-compressed result for more efficient data transfer - Switched
BatchSubmitJob
to use form data to avoid query param length limit - Switched
SymbologyResolve
to use POST request with form data to avoid query param length limit
- Changed size-related fields and
limit
parameters to usestd::uint64_t
for consistency across architectures
- Removed usage of non-portable
__PRETTY_FUNCTION__
- Added constants for dataset codes for Databento Equity Basic and OPRA Pillar
- Added
const char*
getters to records for fixed-lengthchar
arrays - Added
RType
getter toRecord
- Added batching for live subscriptions to avoid hitting max message length
- Fixed bug in Zstd decompression
- Fixed
Historical::BatchDownload
truncating file before writing each chunk
- Added
Reconnect
methods toLiveBlocking
andLiveThreaded
- Added optional
exception_callback
argument toLiveThreaded::Start
to improve error handling options - Added batch download support data files (
condition.json
andsymbology.json
) - Added support for logging warnings from Historical API
- Relaxed 10 minute minimum request time range restriction
- Changed
use_ts_out
default tofalse
- Fixed missing definition for
operator==
forImbalanceMsg
- Changed
end
andend_date
to optional to support new forward-fill behaviour
- Renamed
booklevel
MBP field tolevels
for brevity and consistent naming - Removed
open_interest_qty
andcleared_volume
fields from definition schema that were always unset
- Added initial support for live data with
LiveBlocking
andLiveThreaded
clients - Added support for statistics schema
- Added
SystemMsg
andErrorMsg
records for use in live data - Added
strike_price
,strike_price_currency
, andinstrument_class
toInstrumentDefMsg
- Added
FixedPx
helper class for formatting fixed prices - Added configurable log receiver
ILogReceiver
- Added
instrument_class
,strike_price
, andstrike_price_currency
to definition schema - Added additional
condition
variants forDatasetConditionDetail
(degraded, pending, missing) - Added additional member
last_modified_date
toDatasetConditionDetail
- Added
has_mixed_schema
,has_mixed_stype_in
, andts_out
toMetadata
to support live data - Added optional
compression
parameter toBatchSubmitJob
- Removed
related
andrelated_security_id
fromInstrumentDefMsg
- Renamed
BatchJob.cost
tocost_usd
and value now expressed as US dollars - Renamed
SType::ProductId
toSType::InstrumentId
andSType::Native
toSType::RawSymbol
- Renamed
RecordHeader::product_id
toinstrument_id
- Renamed
InstrumentDefMsg::symbol
toraw_symbol
- Renamed
SymbolMapping::native_symbol
toraw_symbol
- Changed
expiration
andaction
type toUnixNanos
- Changed some fields to enums in
InstrumentDefMsg
- Deprecated
SType::Smart
to split intoSType::Parent
andSType::Continuous
- Fixed parsing of
BatchSubmitJob
response - Fixed invalid read in
DbnDecoder
- Fixed memory leak in
TryCreateDir
- Removed usage of unreliable
std::ifstream::readsome
- Fixed Zstd decoding of files with multiple frames
- Added support for imbalance schema
- Added support for decoding
ts_out
field - Added flags
kSnapshot
andkMaybeBadBook
- Removed
record_count
fromMetadata
- Changed
Historical::BatchDownload
to return the paths of the downloaded files
- Added
Historical::MetadataGetDatasetRange
- Changed
MetadataGetDatasetCondition
to returnvector<DatasetConditionDetail>
- Removed
MetadataListCompressions
(redundant with docs) - Removed
MetadataListEncodings
(redundant with docs) - Removed optional
start
andend
params fromMetadataListSchemas
(redundant) - Renamed
FileBento
toDbnFileStore
- Added live gateway resolution
- Added
SymbolMappingMsg
andErrorMsg
records - Added
Action
andSide
enums - Added
available_start_date
andavailable_end_date
toDatasetConditionInfo
- Made
start_date
andend_date
optional forHistorical::MetadataGetDatasetCondition
- Improved API for
flags
record fields - Added
PKGBUILD
to demonstrate installation - Disabled unit testing by default
- Removed
is_full_universe
andis_example
fields fromBatchJob
- Refactored rtypes
- Introduced separate rtypes for each OHLCV schema
- Renamed DBZ to DBN
- Renamed
DbzParser
toDbnDecoder
- Renamed
- Renamed
TimeseriesStream
toTimeseriesGetRange
- Changed
kAllSymbols
representation
- Fixed usage of as a system library
- Added support for definition schema
- Added option for CMake to download gtest
- Updated
Flag
enum
- Standardized getter method names to pascal case
- Renamed
is_full_book
tois_full_universe
- Renamed
TickMsg
toMboMsg
- Changed
flags
fields to unsigned
- Fixed cancellation in
Historical::TimeseriesStream
- Fixed race condition in
Historical::TimeseriesStream
exception handling - Fixed gtest linker error on macOS
- Added
Historical::MetadataGetDatasetCondition
- Improved Zstd CMake integration
- Fixed requesting all symbols for a dataset
- Initial release with support for historical data