Releases: Alparse/databento-dotnet
Release list
v5.3.6
Fixed
BatchSubmitJobAsyncignoredsplitDuration— the C#SplitDurationenum (None, Day, Week, Month) was passed to databento-cpp by raw integer, but databento-cpp orders its enum Day, Week, Month, Year, None. Every value landed one step off:Monthwas submitted asyear,Weekasmonth,Dayasweek, andNoneasday. The native wrapper now maps the value explicitly in both directions, soBatchJob.SplitDurationreturned from submit and list calls is also decoded correctly. (Issue #37)- Unsupported batch options now fail clearly —
Compression.Gzip,Delivery.S3, andDelivery.Diskhave no databento-cpp counterpart and were sent to the server as"Unknown".BatchSubmitJobAsyncnow throwsDbentoExceptionnaming the unsupported value.
Added
SplitDuration.Year— yearly splitting for batch jobs, matching databento-cpp v0.58.0.
Install: dotnet add package Databento.Client --version 5.3.6
v5.3.5
Fixed
- ConsolidatedBidAskPair.AskPublisher always 0 — deserialization read from reserved padding at byte offset 26 instead of the actual
ask_pbfield at offset 28 per the DBN spec. Affects all record types carrying consolidated levels: Cmbp1 (rtype 177), Cbbo (rtypes 192/193), and Tcbbo (rtype 194). (Issue #36)
Install: dotnet add package Databento.Client --version 5.3.5
v5.3.4
What's Changed
Added
stype_inandlimitparameters for metadata APIs —GetCostAsync,GetRecordCountAsync,GetBillableSizeAsync, andGetBillingInfoAsyncnow acceptSType stypeInandulong limitparameters, enabling queries withContinuous,Parent,Smart, and other symbol types (Issue #35)
Changed
- Native wrapper updated —
dbento_metadata_get_cost,dbento_metadata_get_record_count,dbento_metadata_get_billable_size, anddbento_metadata_get_billing_infonow passstype_inandlimitthrough to databento-cpp's full overloads
Notes
- Non-breaking: existing overloads without
stypeIncontinue to work identically (defaultSType.RawSymbol) - Matches databento-cpp's full
MetadataGetCost(dataset, range, symbols, schema, stype_in, limit)overload
Full Changelog: v5.3.3...v5.3.4
v5.3.3
What's Changed
Fixed
- NOMINMAX guards on native wrappers — prevents
<windows.h>min/max macro conflicts that could cause compilation failures (Issue #24)
Changed
- Thread safety documentation — added class-level and method-level thread safety remarks to
ILiveClientandILiveBlockingClientdocumenting the databento-cpp calling convention: complete all Subscribe calls before StartAsync, await each call sequentially - README thread safety callout — added thread safety guidance between LiveClient and LiveBlockingClient API reference sections
- Coding agent guide — added pitfall #6 documenting concurrent Subscribe call risks with correct/incorrect code examples
Full Changelog: v5.3.2...v5.3.3
v5.3.2
What's Changed
Fixed
- Pin databento-cpp to v0.58.0 — prevents builds from pulling broken intermediate states from main branch (#24)
- Fix FormUrlEncodedContent disposal in retry loops — content was created outside the retry lambda, causing ObjectDisposedException on retry attempts in Reference API methods (PR #28)
- Fix XML doc comments — escape S&P as S&P, qualify BatchSubmitJobAsync cref (PR #25)
- Fix CA1826 — replace FirstOrDefault() with direct indexer in FileDataSource (PR #27)
Changed
- Deprecate caching API — WithMemoryCache(), WithDiskCache(), and related types marked [Obsolete] with guidance to use WithFileSource() (Issue #29)
- PlaybackController implements IDisposable — disposes internal SemaphoreSlim; called automatically during data source disposal (Issue #29)
- StreamAsync XML documentation — detailed docs explaining live mode vs backtest mode behavior (Issue #30)
- Add ConfigureAwait(false) across Reference API methods (PR #28)
- Remove CA1805 default initializations across 10 files (PR #26)
- Remove dead _apiKey field from LiveClient and ReferenceClient (PR #31)
Testing
- 427 tests passing across 13 test suites
- Verified against both project references and NuGet package
v5.3.0
Breaking Change
SchemaDateRange.Start and .End changed from string to DateTimeOffset (Issue #21)
DatasetRange already used DateTimeOffset for its Start/End properties, but SchemaDateRange (used in DatasetRange.RangeBySchema) was using raw strings. This inconsistency meant consumers had to manually parse dates to do comparisons or arithmetic.
What changed
SchemaDateRange.Start:string→DateTimeOffsetSchemaDateRange.End:string→DateTimeOffset- Added
SchemaDateRange.Durationcomputed property (matchesDatasetRange.Duration)
How to fix if affected
If your code assigned SchemaDateRange.Start or .End to a string variable:
// Before (v5.2.x)
string start = schemaRange.Start;
// After (v5.3.0)
string start = schemaRange.Start.ToString("o"); // ISO 8601
// Or better — just use DateTimeOffset directly
DateTimeOffset start = schemaRange.Start;Other changes
[JsonIgnore]added toDurationon bothDatasetRangeandSchemaDateRangeto prevent serialization leakage- Cleaned up .sln file: removed 23 gitignored project references that showed as absent for public repo clones (Issue #19 follow-up)
v5.2.3
Fixes & Features
Issue #18: Fix native DLL loading failures (debug builds)
- Root cause:
libcrypto-3-x64.dll,libssl-3-x64.dll,zstd.dll,legacy.dllwere debug builds requiringVCRUNTIME140D.dll/ucrtbased.dll(only available with Visual Studio) - All native DLLs rebuilt as Release configuration
- Removed unused
zlib1.dll - Improved
NativeLibraryLoaderdiagnostics with debug-build detection
Issue #19: Fix build-native.ps1 vcpkg/FetchContent conflict
- Added
vcpkg.jsonmanifest so CMake FetchContent properly installs OpenSSL/zstd via vcpkg - Build script now requires vcpkg and validates no debug dependencies in shipped DLLs
Issue #20: Add stype_in to Live API subscribe methods
- New overloads for
SubscribeAsync,SubscribeWithReplayAsync,SubscribeWithSnapshotAsyncon bothILiveClientandILiveBlockingClient - Enables continuous symbols (e.g.,
"MNQ.v.0"withSType.Continuous) - Fully backward compatible — existing overloads default to
SType.RawSymbol
Install
dotnet add package Databento.Client --version 5.2.3v5.2.2
Fix DllNotFoundException for native libraries (Issue #17)
Changes
- Rewrite
.targetsfile — Use explicit<Copy>tasks instead of fragile<None>+CopyToOutputDirectoryfor reliable native DLL deployment from NuGet packages - Add
buildTransitivesupport — Transitive package consumers now also get native DLLs copied to output - Improved diagnostics —
NativeLibraryLoadernow throwsDllNotFoundExceptionwith detailed search path info, OS/arch, and dependency status instead of silently failing
Install
dotnet add package Databento.Client --version 5.2.2v5.2.0
What's New
New Feature: keepZip option for BatchDownloadAsync (Issue #15)
Added a new overload to BatchDownloadAsync that creates a zip archive of downloaded files:
// Download and create a zip archive
var paths = await client.BatchDownloadAsync(outputDir, jobId, keepZip: true);
var zipPath = paths[0]; // Returns path to {jobId}.zipBehavior:
- Downloads all files from the batch job
- Creates a local
{jobId}.ziparchive containing all files - Deletes the extracted files after zipping
- Returns the path to the zip file
Non-Breaking Change
This release uses default interface implementation (C# 8+), so existing code that implements IHistoricalClient will continue to work without modification.
Documentation
- Updated API_REFERENCE.md with new method signature and examples
- Updated API_Classification.md with method details
- Added
BatchDownloadKeepZip.Exampledemonstrating the feature
Full Changelog: v5.1.4...v5.2.0