11# NautilusTrader 1.229.0 Beta
22
3- Released on TBD (UTC).
3+ Released on 25th June 2026 (UTC).
44
5- This release includes many breaking changes across the user-facing Rust v2 APIs.
5+ This release includes many breaking changes across the user-facing Python and Rust v2 APIs.
66
77### Enhancements
8- - Added cache order index crash-recovery restore for Redis and Postgres adapters (Rust)
98- Added ` Cache::try_currency ` with ` CurrencyLookupError ` for typed missing-currency lookups (Rust)
109- Added ` Cache::try_instrument ` with ` InstrumentLookupError ` for typed missing-instrument lookups (Rust)
1110- Added ` Cache::try_order ` with ` OrderLookupError ` for typed missing-order lookups (Rust)
12- - Added external publish forwarding for Rust message bus publishers
11+ - Added negative price support for ` Commodity ` instruments in risk checks (#2330 ), thanks for reporting @fabz1
12+ - Added cache order index crash-recovery restore for Redis and Postgres adapters (Rust)
1313- Added capability-aware ` analyze-pool(s) ` /` sync-dex ` validation that fails before sync for unsupported DEXes
14- - Added capability-aware blockchain CLI help listing the discoverable and snapshot-capable DEXes per chain, derived from the registered parsers
15- - Added Postgres cache position event-log persistence and restart recovery (Rust)
1614- Added ` ProbabilityPriceFeeModel ` and configurable sandbox fee models (#4262 ), thanks @graceyangfan
17- - Added PyO3 cache purge APIs (#4249 ), thanks @graceyangfan
18- - Added PyO3 instrument ` tick_scheme ` fields with Arrow persistence
19- - Added Redis cache adapter order, position, and order-index write persistence (Rust)
20- - Added ` RedisCacheConfig ` , ` PostgresCacheConfig ` , and ` RedisMessageBusConfig ` for Rust factories
2115- Added SEC1 EC private key support to socket TLS configuration (Rust)
22- - Added SBE and Cap'n Proto encodings for Rust-native message bus publishers
23- - Added SBE and Cap'n Proto support for ` OptionGreeks `
2416- Added ` order_position_index ` Postgres table for the order-position index; run ` make init-db ` to migrate
25- - Added negative price support for ` Commodity ` instruments in risk checks (#2330 ), thanks for reporting @fabz1
2617- Added ` add_native_exec_algorithm ` and ` ExecutionAlgorithmConfig ` bindings to the Python v2 backtest engine
27- - Added Python v2 ` Strategy.order_factory ` accessor and validating ` OrderFactory ` bindings
2818- Added ` Order::to_order_status_report ` conversion in Rust
2919- Added ` with_msgbus_publisher ` for Rust live-node and kernel builders
3020- Added benchmark-relative portfolio stats (#4251 ), thanks @mahimn01
21+ - Added SBE and Cap'n Proto encodings for Rust-native message bus publishers
22+ - Added SBE and Cap'n Proto support for ` OptionGreeks `
23+ - Added Postgres cache position event-log persistence and restart recovery (Rust)
24+ - Added Redis cache adapter order, position, and order-index write persistence (Rust)
25+ - Added ` RedisCacheConfig ` , ` PostgresCacheConfig ` , and ` RedisMessageBusConfig ` for Rust factories
26+ - Added Python v2 ` Strategy.order_factory ` accessor and validating ` OrderFactory ` bindings
27+ - Added PyO3 cache purge APIs (#4249 ), thanks @graceyangfan
28+ - Added PyO3 instrument ` tick_scheme ` fields with Arrow persistence
3129- Added Binance Futures ` bnfcr_currency ` config for Credits Trading Mode
3230- Added Binance Futures funding-rate history support in Rust
3331- Added Binance Futures ` MIN_NOTIONAL ` parsing for ` min_notional ` (#4280 ), thanks @filipmacek
3432- Added Binance Futures ticker data support in Rust
3533- Added Binance order-list submission in Rust
36- - Added Binance market-data WebSocket forward-compatibility test fixtures with CM-UM integration ` st ` and ` ps ` fields (Python and Rust)
34+ - Added Binance market-data WebSocket fixtures for CM-UM ` st ` and ` ps ` fields (Python and Rust)
3735- Added ` BitmexInstrumentState::Unknown ` to tolerate unrecognized venue states without bootstrap failure
3836- Added BitMEX legacy futures, spreads, and reference basket instrument parsing
37+ - Added Blockchain CLI help for discoverable and snapshot-capable DEXes per chain
3938- Added Databento ` venue_dataset_map ` to override the default venue-to-dataset mappings
4039- Added Hyperliquid builder attribution opt-out
4140- Added Hyperliquid historical trade requests
@@ -54,30 +53,30 @@ This release includes many breaking changes across the user-facing Rust v2 APIs.
5453- Changed backtest config builders to validate on ` build() ` and return ` ConfigResult ` (Rust)
5554- Changed ` BacktestDataConfig ` to require an ` instrument_id ` , ` instrument_ids ` , or ` bar_types ` target
5655- Changed example strategy and actor configs to use bon ` builder() ` instead of ` new() ` /` with_* ` (Rust)
57- - Changed plug-in loader to reject build mismatches by default; opt out with ` set_allow_build_mismatch ` (Rust)
58- - Changed ` CacheDatabaseAdapter::load_index_order_position ` to return position IDs instead of positions (Rust)
59- - Changed default message bus/cache encoding to JSON; set ` encoding="msgpack" ` for MessagePack
60- - Changed ` Currency::from_str ` and ` Currency::is_* ` to return ` CurrencyLookupError ` instead of ` anyhow::Error ` (Rust)
61- - Changed Parquet catalog write APIs to take borrowed slices instead of owned ` Vec ` (Rust) (#4296 ), thanks @sunlei
62- - Changed ` PoolProfiler.price_sqrt_ratio_x96 ` to return ` int ` instead of ` str `
56+ - Changed Rust actor ` self.clock() ` to return ` ClockApi ` ; call methods directly instead of borrowing
57+ - Changed Rust actor/strategy core access; use macros or native traits instead of ` Deref `
6358- Changed PyO3 ` DataActor ` /` Strategy ` historical request ` start ` /` end ` to require UTC datetimes
6459- Changed Python ` NautilusDataType ` enum order to put ` OptionGreeks ` before ` InstrumentStatus `
65- - Changed Redis cache account/order/position storage to event logs; clear old typed state (Rust)
6660- Changed cache database and message bus backing construction to use factory-owned config structs (Rust)
67- - Changed Rust actor ` self.clock() ` to return ` ClockApi ` ; call methods directly instead of borrowing
68- - Changed Rust actor/strategy core access; use macros or native traits instead of ` Deref `
69- - Changed ` SerializationEncoding ` repr order to ` Json=0 ` , ` MsgPack=1 ` , ` Capnp=2 ` , ` Sbe=3 `
70- - Changed ` InstrumentId ` and ` OptionSeriesId ` string constructors to return typed invalid-value errors instead of ` anyhow::Error ` (Rust)
71- - Changed ` OrderAny::from_events ` to return ` OrderReplayError ` instead of ` anyhow::Error ` (Rust)
72- - Changed ` OrderList::validate ` to return ` OrderListValidationError ` instead of ` anyhow::Error ` (Rust)
61+ - Changed ` CacheDatabaseAdapter::load_index_order_position ` to return position IDs instead of positions (Rust)
62+ - Changed default message bus/cache encoding to JSON; set ` encoding="msgpack" ` for MessagePack
63+ - Changed Redis cache account/order/position storage to event logs; clear old typed state (Rust)
7364- Changed Rust message bus subscriber-count and presence queries to return invalid-topic errors instead of panicking
65+ - Changed ` SerializationEncoding ` repr order to ` Json=0 ` , ` MsgPack=1 ` , ` Capnp=2 ` , ` Sbe=3 `
7466- Changed Cap'n Proto ` DataAny ` ordinals to put ` OptionGreeks ` before instrument schemas
7567- Changed SBE ` DataAny ` variants and template IDs to put ` OptionGreeks ` before instrument schemas
68+ - Changed ` Currency::from_str ` and ` Currency::is_* ` to return ` CurrencyLookupError ` instead of ` anyhow::Error ` (Rust)
69+ - Changed ` InstrumentId ` and ` OptionSeriesId ` string constructors to return typed errors (Rust)
70+ - Changed ` OrderAny::from_events ` to return ` OrderReplayError ` instead of ` anyhow::Error ` (Rust)
71+ - Changed ` OrderList::validate ` to return ` OrderListValidationError ` instead of ` anyhow::Error ` (Rust)
7672- Changed ` SyntheticInstrument ` fallible methods to return ` SyntheticInstrumentError ` instead of ` anyhow::Error ` (Rust)
7773- Changed tick scheme constructors and parsing to return ` TickSchemeError ` instead of ` anyhow::Error ` (Rust)
74+ - Changed Parquet catalog write APIs to take borrowed slices instead of owned ` Vec ` (Rust) (#4296 ), thanks @sunlei
7875- Changed WebSocket and socket ` reconnect_timeout_ms ` to bound only connection establishment (Rust)
79- - Changed Binance Spot SBE WebSocket API schema version from 3:3 to 3:4, aligning with REST API and generated codecs (Rust)
80- - Changed Bybit ` BybitHttpClient::submit_order ` to take a trailing native TP/SL params argument; the PyO3 binding defaults it to ` None ` (Rust)
76+ - Changed plug-in loader to reject build mismatches by default; opt out with ` set_allow_build_mismatch ` (Rust)
77+ - Changed Binance Spot SBE WebSocket API schema to version 3:4, matching generated codecs (Rust)
78+ - Changed Blockchain ` PoolProfiler.price_sqrt_ratio_x96 ` to return ` int ` instead of ` str `
79+ - Changed Bybit ` BybitHttpClient::submit_order ` to take trailing native TP/SL params; PyO3 defaults to ` None `
8180- Removed ` CacheConfig.database ` and ` MessageBusConfig.backing ` ; pass adapters separately
8281- Removed common ` DatabaseConfig ` and ` MessageBusBackingConfig ` ; use Redis/Postgres configs
8382- Renamed message bus database terminology to backing in Rust message bus APIs
@@ -144,26 +143,28 @@ This release includes many breaking changes across the user-facing Rust v2 APIs.
144143- Fixed WebSocket and socket writer failure paths overwriting a concurrent disconnect with a reconnect (Rust)
145144- Fixed WebSocket auth and connection-state waiters missing wakeups from unregistered ` Notify ` futures (Rust)
146145- Fixed WebSocket idle timeout starvation under control-frame floods faster than the check interval (Rust)
146+ - Fixed Docker image build missing the ` patches ` directory needed by ` pyo3-stub-gen `
147+ - Fixed nightly CI publish and Windows Harden-Runner checks
147148- Fixed Architect AX to deny invalid submits locally and defer ambiguous command failures to reconciliation
148149- Fixed Binance Futures empty algo order IDs
149150- Fixed Binance Futures hedge reduce-only orders in Rust
150151- Fixed Binance Futures leverage initialization aborting execution client connect (#4289 ), thanks @YeeTsai
151152- Fixed Binance Futures node panic on ` BNFCR ` Credits Trading Mode balances
152153- Fixed Binance Spot expired order handling
153154- Fixed Binance Spot/Futures WebSocket connection pool race (#4244 ), thanks @filipmacek
154- - Fixed Binance HTTP client not detecting non-JSON responses with success status codes, causing unhandled ` DecodeError ` during reconciliation on demo/testnet environments
155+ - Fixed Binance HTTP client handling of non-JSON success responses during demo/testnet reconciliation
155156- Fixed BitMEX instrument bootstrap aborting on any row deserialize failure (#4283 ), thanks for reporting @seungpyoson
156157- Fixed Blockchain snapshot bootstrap checks
157158- Fixed Blockchain pool-event replay to require durable timestamps before checkpoints
158159- Fixed Blockchain pool sync aborting on swaps with an unrepresentable spot price
159160- Fixed Blockchain pool profiler logging self-correcting tick and liquidity mismatches at error severity (now warn)
160161- Fixed Blockchain snapshot validation rejecting fee-protocol-only mismatches
161- - Fixed Bybit demo native TP/SL and option params being denied instead of routed through the create-order endpoint (Rust and Python)
162+ - Fixed Bybit demo native TP/SL and option params routing through the create-order endpoint (Rust and Python)
162163- Fixed Deribit chart bar volume for inverse perpetuals (#4245 ), thanks @filipmacek
163164- Fixed dYdX Indexer WebSocket dropping subscriptions beyond the 32-per-channel cap (#4290 ), thanks @filipmacek
164165- Fixed dYdX to share one REST rate-limit bucket across data and execution clients (#4265 ), thanks @filipmacek
165166- Fixed dYdX to deny unsupported submits locally and emit rejections only for definitive CheckTx refusals
166- - Fixed Hyperliquid bracket trigger -child statuses and atomic market fills orphaning orders at submission (#4160 ), thanks @sonnymai
167+ - Fixed Hyperliquid bracket-child statuses and atomic fills orphaning orders (#4160 ), thanks @sonnymai
167168- Fixed Hyperliquid cancel-replace fill stranding on a dropped ` ACCEPTED ` (#4270 ), thanks for reporting @AlphaTraderK
168169- Fixed Hyperliquid order status queries surfacing a stale cancel closing a live order mid-modify (Rust)
169170- Fixed Interactive Brokers reconnect startup handling (#4210 ), thanks @faysou
@@ -193,8 +194,6 @@ This release includes many breaking changes across the user-facing Rust v2 APIs.
193194- Added Cargo publish dry-run and nightly publish plan checks
194195- Added a Docker check that Python references match the base image tag and ` requires-python `
195196- Added turmoil coverage for WebSocket heartbeats, server-initiated pings, and server close frames (Rust)
196- - Fixed Docker image build missing the ` patches ` directory needed by ` pyo3-stub-gen `
197- - Fixed nightly CI publish and Windows Harden-Runner checks
198197- Improved instrument validation to reject non-positive multiplier and lot size (Rust)
199198- Improved ` FixedTickScheme ` validation to reject non-finite tick sizes (Rust)
200199- Improved release verifier retries and manual-publish recovery checks
@@ -205,15 +204,17 @@ This release includes many breaking changes across the user-facing Rust v2 APIs.
205204- Improved event-store marker writer and capture diagnostics with logged fail-stop errors (Rust)
206205- Improved Postgres order-client index restore to pick the latest client ID per order (Rust)
207206- Improved OTO contingency position ID recovery to persist re-indexed assignments (Rust)
207+ - Improved backtest expiration timers and ` TestClock ` advancement performance (#4307 ), thanks @faysou
208208- Improved sandbox expired-instrument retention to prune after open positions settle (#4293 ), thanks @graceyangfan
209209- Improved Polymarket data client module structure (#4260 ), thanks @graceyangfan
210210- Improved Polymarket execution lookup retention for expired instruments (#4287 ), thanks @graceyangfan
211211- Improved Polymarket execution module structure (#4271 ), thanks @graceyangfan
212212- Improved Polymarket resolution module structure (#4269 ), thanks @graceyangfan
213- - Standardized Polymarket adapter to emit order events for own orders and reports for external orders only (Rust)
214213- Optimized ` Cache ` query filtering to scale with open orders and positions (#4242 ), thanks for reporting @magnified103
215- - Standardized Betfair adapter to emit order events for own orders and reports for external orders only (Rust)
214+ - Refined common clock reference-counted clone calls ( # 4302 ), thanks @ learnerLj
216215- Standardized Rust ` OrderDenied ` reason codes
216+ - Standardized Betfair adapter to emit order events for own orders and reports for external orders only (Rust)
217+ - Standardized Polymarket adapter to emit order events for own orders and reports for external orders only (Rust)
217218- Upgraded Interactive Brokers Rust adapter to ` ibapi ` 3.0.1 (#4209 ), thanks @faysou
218219- Upgraded ` pandas ` to v3.0 and widened the supported range to ` <4.0.0 `
219220- Upgraded ` capnp ` and ` capnpc ` crates to v0.26.0
@@ -222,16 +223,14 @@ This release includes many breaking changes across the user-facing Rust v2 APIs.
222223
223224### Documentation Updates
224225- Added developer-guide rate-limiting policy distinguishing data and execution paths
226+ - Added Binance COIN-M/USD-M architecture docs for stream, REST, rate-limit, and position-mode changes
225227- Updated plugins concept guide for panic recovery, build pinning, and UTF-8 validation semantics
226228- Updated event sourcing guide for capture dedup, recovery resilience, and snapshot-anchor verification
227229- Updated message bus docs for publisher forwarding, payload encoding, and JSON defaults
228230- Updated message bus docs for backing terminology and inbound subscriber shape
229231- Updated cache and message bus docs for technology-owned config factories
230232- Updated commodity instrument and execution concept guides for negative price support
231233- Updated OKX integration docs with EEA endpoint override guidance (#4250 ), thanks for reporting @msnatm-code
232- - Added Binance COIN-M / USD-M architecture integration section covering WebSocket stream changes, REST API changes, rate-limit pool sharing, and dualSidePosition unification
233-
234- ### Deprecations
235234
236235---
237236
0 commit comments