Releases: Alparse/databento-dotnet
v4.0.0-beta - Breaking Change: 64-bit RawInstrumentId
🚨 Breaking Change
InstrumentDefMessage.RawInstrumentId changed from uint to ulong to support venues with 64-bit instrument IDs.
Why?
European venues like Eurex (XEUR.EOBI) use 64-bit IDs that exceed uint.MaxValue.
Example: Eurex spread ID 0x010002B100000060 = 72,060,553,270,394,976 > 4,294,967,295
Quick Fix (30 seconds)
// OLD
uint rawId = instrumentDef.RawInstrumentId;
// NEW
ulong rawId = instrumentDef.RawInstrumentId;Most users unaffected: Code using var continues to work unchanged.
See MIGRATION_GUIDE_v4.md for details.
✨ What's New
3 New Examples
- IntradayReplay2.Example - LiveClient streaming with replay mode
- Get_Most_Recent_Market_Open.Example - Market open time calculation
- List_Available_Schemas.Example - Schema discovery via MetadataListSchemas
Improvements
- InstrumentDefinitionDecoder.Example → Renamed to "OHLCV Bar Decoder" (properly demonstrates OHLCV-1S schema)
- TestsScratchpad.Internal → Fixed stream lifetime management
- Documentation → Improved LiveClient vs LiveBlockingClient distinction
- API_REFERENCE.md → Added 5 complete working examples (487 lines)
📦 Installation
dotnet add package Databento.Client --version 4.0.0-beta📋 Full Changelog
Changed (BREAKING):
- InstrumentDefMessage.RawInstrumentId:
uint→ulong
Added:
- 3 new example projects
- Complete working examples in API_REFERENCE.md
Fixed:
- InstrumentDefinitionDecoder.Example renamed and rewritten
- TestsScratchpad.Internal stream lifetime management
- Documentation improvements
📚 Resources
v3.0.29-beta - Symbology Parameter Support
What's New
Added symbology parameter support to historical data queries, enabling filtering by instrument type using parent symbology.
Features
- ✨ New
GetRangeAsyncoverloads withstypeInandstypeOutparameters - ✨ New
GetRangeToFileAsyncoverloads with symbology parameters - ✨ Parent symbology support (e.g.,
ES.FUTfor all E-mini S&P 500 futures,QQQ.OPTfor all QQQ options) - ✨ Full-stack implementation from C++ wrapper through C API to C# interface
Examples
- 📚 Added
FuturesFilter.Exampledemonstrating parent symbology usage - 📚 Added
ParentSymbolValidatorfor input validation with typo correction - 📚 Added
GetParentSymbolshelper for discovering available parent symbols - 📚 Comprehensive documentation and README
Technical Details
- Non-breaking change: Added as new method overloads
- Proper exception handling via channel propagation
- Supports dataset-specific symbology combinations (GLBX.MDP3, OPRA.PILLAR)
Usage Example
```csharp
await foreach (var record in client.GetRangeAsync(
dataset: "GLBX.MDP3",
schema: Schema.Trades,
symbols: new[] { "ES.FUT" },
startTime: startTime,
endTime: endTime,
stypeIn: SType.Parent,
stypeOut: SType.InstrumentId))
{
// All records are from ES futures only
}
```
See filter.md for quick reference and examples/FuturesFilter.Example/ for complete example.
Documentation: https://databento.com/docs/standards-and-conventions/symbology
v3.0.26-beta - Quality Improvements & Clean Production Build
🎯 Quality Improvements Release
This release adds industry-standard NuGet quality indicators and ensures clean production DLL without debug logging.
✨ What's New
NuGet Quality Indicators:
- ✅ Source Link: Debug directly into library source code from GitHub
- ✅ Deterministic Builds: Reproducible builds for security verification
- ✅ Symbol Packages: Enhanced debugging with .snupkg symbol packages
- ✅ Compiler Flags: Embedded build metadata for transparency
Critical Fixes:
- ✅ Clean Production DLL: Replaced debug DLL (784K) with production version (789K)
- ✅ No Debug Logging: Removed all
[C++ DEBUG]messages from native library - ✅ Verified Examples: All 33 example projects tested and passing
📦 Package Information
Main Package: Databento.Client.3.0.26-beta
Symbols Package: Databento.Client.3.0.26-beta.snupkg (auto-downloaded by debuggers)
🔧 Installation
dotnet add package Databento.Client --version 3.0.26-betaOr add to your .csproj:
<ItemGroup>
<PackageReference Include="Databento.Client" Version="3.0.26-beta" />
</ItemGroup>📊 Impact
- Zero functional changes - Metadata and quality improvements only
- 100% backward compatible - No API changes from v3.0.24-beta
- Enhanced debugging - Step into library code while debugging
- Improved trust - Reproducible builds, deterministic output
- Better discoverability - Quality badges on NuGet.org
🎁 For Developers
When debugging code that uses this library, your IDE can now:
- Automatically download source files from GitHub
- Set breakpoints in library code
- Step through the actual implementation
- Inspect variables in library context
No configuration needed - it just works! ✨
📚 Previous Fixes (Still Included)
All fixes from v3.0.24-beta and earlier:
- ✅ Fixed AccessViolationException in Historical and Batch APIs
- ✅ Bundled VC++ runtime DLLs (no manual installation needed)
- ✅ Enhanced error handling and logging
🧪 Testing
- All 33 example projects build successfully
- Clean DLL verified (789KB, no debug messages)
- Comprehensive example test report generated
- Zero regressions detected
Full Changelog: v3.0.24-beta...v3.0.26-beta
v3.0.24-beta - Critical Bug Fix Release
Critical Bug Fix
RESOLVED: AccessViolationException crash in Historical and Batch APIs when server returns warning headers.
What's Fixed
- ✅ Historical API with future dates now works (was crashing)
- ✅ Batch API error handling now safe (was at risk)
- ✅ All 33 examples passing (up from 32/33)
- ✅ Server warnings now visible on stderr
Changes
- Created StderrLogReceiver for safe logging across all client types
- Updated all 4 native wrappers (Historical, Batch, LiveBlocking, LiveThreaded)
- Enhanced diagnostic logging with DEBUG-level visibility
- Log format changed: stdout → stderr,
INFO:→[Databento INFO]
Compatibility
- ✅ Zero API changes - fully backward compatible
- ✅ No breaking changes
⚠️ ~10% of users may need to update log redirection scripts (see migration guide)
Installation
dotnet add package Databento.Client --version 3.0.24-beta --prereleaseTesting
- 33/33 examples passing (100% success rate)
- Zero functionality regressions
- Zero performance regressions
Documentation
- See CHANGELOG.md for full details
- See RELEASE_NOTES_v3.0.24-beta.md for comprehensive release notes
- See LOG_FORMAT_VERIFICATION.md for migration guide
Closes #1
NuGet: https://www.nuget.org/packages/Databento.Client/3.0.24-beta
Commit: aa93f93
v3.0.23-beta - Fixed DllNotFoundException
🎉 Fixed: DllNotFoundException on systems without Visual C++ Runtime
What's Fixed
Issue #2 - Missing C++ Runtime Dependencies
Users no longer need to manually install Visual C++ Redistributable. The NuGet package now includes all required runtime DLLs.
Changes
- ✅ Bundled VC++ runtime DLLs in NuGet package:
- MSVCP140.dll (C++ Standard Library)
- VCRUNTIME140.dll (C++ Runtime Core)
- VCRUNTIME140_1.dll (C++ Runtime Extended)
- ✅ Updated README with Prerequisites section
- ✅ Package works immediately on clean Windows installations
- ✅ Added .NET 9 compatibility notes
Breaking Changes
None - fully backward compatible.
Installation
```bash
dotnet add package Databento.Client --version 3.0.23-beta --prerelease
```
Or via Package Manager:
```powershell
Install-Package Databento.Client -Version 3.0.23-beta -Prerelease
```
Compatibility
- ✅ .NET 8.0
- ✅ .NET 9.0 (tested and confirmed)
- ✅ Windows 10 1809+ / Windows 11
- ✅ Linux (glibc 2.31+)
- ✅ macOS 11.0+
Package Size
- Added: ~730 KB (3 runtime DLLs)
- Total package: ~13 MB
Testing
Verified on:
- ✅ Fresh Windows installation without VC++ redistributable
- ✅ .NET 8.0 projects
- ✅ .NET 9.0 projects
Closes #2
v3.0.21-beta - Repository URL Fixes
📚 Repository URL & Badge Fixes
This release fixes the GitHub Release badge and repository URLs to point to the correct public repository (databento-dotnet).
Changes
Fixed Repository References
- GitHub Release badge now points to
Alparse/databento-dotnet(public repo) - Package RepositoryUrl metadata updated to
databento-dotnet(public repo) - Package ProjectUrl metadata updated to
databento-dotnet(public repo)
Why This Matters
- Badges on NuGet.org now show correct release version
- Package metadata links users to the correct public repository
- Consistent branding across all platforms
No Code Changes
This release contains zero code changes from v3.0.20-beta. Only repository URL references updated.
📦 Installation
dotnet add package Databento.Client --prerelease🔗 Links
- NuGet Package: https://www.nuget.org/packages/Databento.Client/
- Previous Release: v3.0.20-beta
- Repository: https://github.com/Alparse/databento-dotnet
v3.0.20-beta - README Documentation Update
📚 Documentation Update Release
This is a documentation-only release to update the README.md file embedded in the NuGet package. No code changes.
Changes
Updated Installation Instructions
- Changed installation commands to use
--prereleaseflag for automatic latest version - Users no longer need to specify exact version numbers
- NuGet.org package page now shows correct installation instructions
Before (v3.0.19-beta):
dotnet add package Databento.Client --version 3.0.18-betaAfter (v3.0.20-beta):
dotnet add package Databento.Client --prereleaseBenefits
✅ Always Get Latest - Users automatically get the latest prerelease version
✅ Simpler Commands - No need to look up version numbers
✅ Best Practices - Follows standard .NET package installation patterns
✅ Reduced Maintenance - Documentation stays current automatically
No Code Changes
This release contains zero code changes from v3.0.19-beta. The only difference is the updated README.md file that appears on the NuGet.org package page.
All features and fixes from v3.0.19-beta are included:
- ✅ Disposal crash fix (SEHException handling)
- ✅ StreamAsync Requirements documentation
- ✅ Resource Management documentation
- ✅ Production-ready for scalable services
📦 Installation
dotnet add package Databento.Client --prereleasev3.0.19-beta - Disposal Crash Fix + Enhanced Documentation
🔧 Critical Fixes
LiveClient Disposal Crash Fixed
- Fixed: Process crash (
0xc0000409 STATUS_STACK_BUFFER_OVERRUN) duringDisposeAsync() - Solution: Added SEHException handling to prevent native layer crashes from terminating the process
- Impact: Safe for production use in scalable, multi-tenant services
- Location:
src/Databento.Client/Live/LiveClient.cs:829-841
📚 Documentation Enhancements
New API_REFERENCE.md Sections
StreamAsync Requirements (Critical for all users)
- Explains why
StreamAsync()must be actively consumed to receive data - Shows correct vs incorrect usage patterns
- Addresses the most common mistake: calling
StartAsync()alone with no stream consumption - Demonstrates proper integration with
BlockUntilStoppedAsync()
Resource Management (Essential for scalable services)
- Documents
IAsyncDisposablepattern and cleanup behavior - Provides production-ready patterns:
- Single long-lived client (recommended for most cases)
- Per-user client pattern (multi-tenant services)
- Explains memory footprint (~1-2 MB per client)
- Confirms both patterns are safe after the disposal fix
Updated Examples
- README.md inline examples now include proper
StreamAsync()pattern - NUGET_QUICK_START.md updated with correct usage
- All 11+ example projects updated and tested
🔍 Technical Details
Root Cause Analysis
- Race condition in databento-cpp's
dbento_live_destroy()function - Native resources freed while callbacks still executing
- Detailed analysis available in
devnotes/disposal_crash_analysis.md
Workaround Implementation
try
{
_handle?.Dispose();
}
catch (SEHException ex)
{
_logger?.LogWarning(ex, "Native handle disposal failed...");
// Managed resources cleaned up successfully
}📦 Installation
dotnet add package Databento.Client --prerelease🚀 Production Readiness
This release is safe for production use in:
- ✅ Long-running services with single LiveClient instance
- ✅ Multi-tenant services creating/disposing multiple clients
- ✅ High-scale concurrent operations (tested with 100+ clients)
- ✅ Services requiring graceful disposal and cleanup
v3.0.18-beta - Critical Packaging Fix + Symbol Mapping Documentation
🐛 Critical Bug Fix: NETSDK1022 Error
Fixed: Package now works with .NET SDK 8.0+ ASP.NET Core projects
Problem
- Package failed to build in ASP.NET Core, Blazor, and MAUI projects on .NET SDK 8.0+
- Error:
NETSDK1022: Duplicate 'Content' items were included - Users were forced to use workarounds to install the package
Solution
- Changed native DLL item type from
<Content>to<None>in package targets file - Aligns with .NET ecosystem standards (SkiaSharp, SQLitePCLRaw, etc.)
- Zero functional changes - all native libraries still copy correctly
Impact
- ✅ Works with .NET 6, 7, 8, 9
- ✅ Works with all project types: Console, Web, Blazor, MAUI, Worker Services
- ✅ No workarounds needed - installs and builds cleanly
- ✅ Backward compatible
📚 Major Documentation Addition: Symbol Mapping
Added: Comprehensive documentation for resolving InstrumentId → Ticker Symbols
What's New
- README.md: New Symbol Mapping section with complete examples
- API_REFERENCE.md: Section 6 with ~300 lines of technical documentation
- XML Documentation: IntelliSense warnings prevent common mistakes
- Working Example:
LiveSymbolResolution.Exampleproject demonstrates best practices
Problem Solved
Users previously spent 3-4 hours debugging symbol resolution because:
- No documentation on
SymbolMappingMessageusage - Common mistake: Using
STypeInSymbolinstead ofSTypeOutSymbol - This caused all trades to show "ALL_SYMBOLS" instead of actual ticker symbols
Documentation Highlights
⚠️ Critical warnings about STypeIn vs STypeOut property usage- 📊 Performance analysis: ~20-50ns per lookup (negligible overhead)
- 💡 Troubleshooting guide: Solutions for 3 common issues
- 🎯 Multiple approaches: Manual ConcurrentDictionary (recommended)
- ✅ Tested examples: All code validated with real market data
📦 Installation
dotnet add package Databento.Client --version 3.0.18-betaOr use the --prerelease flag:
dotnet add package Databento.Client --prerelease🔗 Links
- Package: https://www.nuget.org/packages/Databento.Client/3.0.18-beta
- Documentation: See README.md and API_REFERENCE.md
- Symbol Mapping Example:
examples/LiveSymbolResolution.Example/
⚠️ Breaking Changes
None. This release is fully backward compatible.
📝 Full Changelog
Fixed
- NETSDK1022 build error in .NET SDK 8.0+ ASP.NET Core projects by changing native DLL item type from Content to None
Added
- Comprehensive symbol mapping documentation (~670 lines)
- README.md Symbol Mapping section
- API_REFERENCE.md Section 6: Symbol Mapping
- Enhanced XML documentation for SymbolMappingMessage class
- Critical warnings about STypeIn vs STypeOut properties
- New example project:
LiveSymbolResolution.Example- Demonstrates manual ConcurrentDictionary approach
- Includes performance measurement
- Shows correct usage of STypeOutSymbol
- Repository organization: Added devnotes/ folder for private development notes
Changed
- Updated installation instructions to reference v3.0.18-beta
- Removed premature PitSymbolMap/TsSymbolMap claims from documentation
- Marked PitSymbolMap/TsSymbolMap as internal-only in API coverage report
🧪 Testing
- ✅ Validated on .NET 9 ASP.NET Core Web
- ✅ Symbol mapping tested with live EQUS.MINI market data
- ✅ All native DLLs copy correctly to output directory
- ✅ Zero regressions - all existing functionality preserved
📊 Release Metrics
- Documentation added: ~670 lines
- Files changed: 10
- Issues fixed: 7 (1 critical packaging bug + 6 documentation gaps)
- Test coverage: Manual testing on .NET 9, symbol resolution validated with real API
Previous Release: v3.0.17-beta
This Release: v3.0.18-beta
Next Planned: Address remaining medium-priority issues from code review