NautilusTrader 2.0.0rc4
Released on 2nd September 2026 (UTC).
Note
The OrderSide, PositionSide, ContingencyType, TrailingOffsetType, and TriggerType changes
are broad because their zero-valued NO_* variants came from constraints in the former Cython and
FFI design. With Cython removed, compatibility representations can remain at serialization and FFI
boundaries instead of shaping the Rust and Python domain enums, while preserving legacy formats and
the existing C API.
Enhancements
- Added error reporting for strategies left running after a backtest ends (#4803), thanks @folknor
- Added client order ID options to Python
GridMarketMakerConfig(#4822), thanks @mameikagou - Added custom Python fee model support to simulation configs (#4806), thanks for reporting @gtalknitin
- Added instrument-scoped order fill-voided event topics
- Added Rust model handles for custom backtest margin and latency implementations
- Added live socket state events and targeted reconnect controls across adapters
- Added warnings for open orders excluded by the reconciliation lookback window (#4847), thanks @folknor
- Added
Serializablesupport toOrderBookDeltas(#4889), thanks @abhijeetvichare76 - Added Lighter support for Robinhood Chain with deployment-specific venues and credentials
- Added OKX instrument cache reconciliation and WebSocket instrument updates
- Added Polymarket market descriptions to
instrument.info(#4840), thanks for reporting @mystic-io - Added Polymarket quote ticks from
best_bid_askmarket events - Added Polymarket RTDS crypto TWAP custom data (#4843), thanks @seungpyoson
- Added matching engine controls to sandbox execution configs (#4813), thanks @graceyangfan
Breaking Changes
- Removed
BitmexExecFactoryConfig; passBitmexExecutionClientConfigdirectly to the factory - Removed
DatabentoLiveClientConfig; passDatabentoDataClientConfigdirectly to the factory - Removed
DeriveExecFactoryConfig; passDeriveExecutionClientConfigdirectly to the factory - Removed
HyperliquidExecFactoryConfig; passHyperliquidExecutionClientConfigdirectly to the factory - Removed
trader_idfrom adapter execution client configs and factory construction - Removed backtest
settlement_pricesconfiguration and setters; useInstrumentCloseexpiry data - Removed low-level Python WebSocket clients and their dedicated request, error, and channel-control types from adapters
- Replaced Rust
HttpClient,WebSocketClient, andSocketClientconstructor overloads with builder APIs - Renamed
ImportableExecAlgorithmConfigtoImportableExecutionAlgorithmConfig - Renamed
LiveDataClientConfigtoDataClientConfig - Renamed
LiveExecClientConfigtoExecutionClientConfig - Renamed
LiveExecEngineConfigtoLiveExecutionEngineConfig - Renamed
ExecFactoryExtractortoExecutionFactoryExtractor - Renamed
SimExecFactoryExtractortoSimulatedExecutionFactoryExtractor - Renamed
*ExecClientConfigtypes to*ExecutionClientConfig - Renamed
BetfairDataConfigtoBetfairDataClientConfig - Renamed
BetfairExecConfigtoBetfairExecutionClientConfig - Changed Rust
OrderSidetoBUYorSELL; removedOrderSideSpecified; useOptionif needed - Changed Rust
PositionSidetoFLAT,LONG, orSHORT; removedPositionSideSpecified; useOptionif needed - Changed Rust
ContingencyType,TrailingOffsetType, andTriggerTypeto useOptionfor absence - Changed Rust backtest margin parameters to
MarginModelHandle - Changed Rust backtest latency parameters to
LatencyModelHandle - Changed contract expiry to use
InstrumentClose.close_pricefor futures, binary contracts, and option close legs - Changed omitted backtest leverage to 10x for margin and 1x for cash; set
default_leverage=1for prior behavior - Changed Rust
MarginModelimplementations to requireSend + Syncandname() - Changed
ExecutionManager::newto validate lookback bounds and returnConfigResult(#4809), thanks @folknor - Changed
Strategy.cancel_all_ordersto associated orders by default (#4470), thanks for reporting @zurpet - Changed
ExecutionClientFactory::createto receive the node'sTraderId - Changed
SimulatedExecutionClientFactory::createto receive the node'sTraderId - Changed adapter execution account configs to use
account_idinstead of factory arguments - Changed adapter execution factories to use no-argument constructors
- Changed Lighter client configs (Rust); complete struct literals must add
deploymentandvenueor use builders - Changed Polymarket Gamma models to expose resolution metadata (#4842), thanks @seungpyoson
- Changed Polymarket REST reconciliation to reject unbound or invalid reports (#4831), thanks @seungpyoson
Security
- Added fail-closed Cargo dependency cooldown checks and transactional repair for both lockfiles,
with portable GNU and BSD date handling - Fixed foreign-instrument fills corrupting cached position state (#4802), thanks @folknor
Fixes
- Fixed active-local order modifications bypassing their execution algorithm (#4793), thanks @folknor
- Fixed execution algorithms submitting spawned orders with live emulation triggers (#4881), thanks @folknor
- Fixed trigger-carrying order modifications bypassing the order emulator (#4848), thanks @folknor
- Fixed Efficiency Ratio windowing and invalid Python input handling (#4807), thanks for reporting @staffordjh
- Fixed indicator string representations reporting fields out of order (#4816), thanks @s1amese2003
- Fixed own order book audits removing active-local orders
- Fixed stale order slippage after fill-void corrections
- Fixed
StrategyConfig.manage_contingent_ordersfor open, non-active-local OTO, OCO, and OUO orders - Fixed native strategy timers bypassing managed time-event routing (#4888), thanks for reporting @silarin
- Fixed rate-limit requests consuming quota before all applicable limits were available
- Fixed reconnect-buffered socket messages stalling or being overtaken by newer messages
- Fixed Python factory re-entry through
LiveNodeBuildercausing process aborts - Fixed live order snapshots not being persisted to PostgreSQL
- Fixed live position snapshots not being persisted to PostgreSQL
- Fixed partial late fills reopening canceled orders
- Fixed cloned execution event emitters dropping events after sender initialization (#4874), thanks @folknor
- Fixed BacktestEngine delayed orders using unrelated instrument prices (#4891), thanks for reporting @mdou7
- Fixed
generate_missing_orders=Falsecreating synthetic orders and fills (#4739), thanks for reporting @hashtagdenis - Fixed Betfair
CancelAllOrdersside filters and large batch cancellation - Fixed Betfair order and fill reconciliation with more than 250 market IDs
- Fixed Betfair stream readiness, liveness, subscription replay, and reconnect reconciliation
- Fixed Betfair modify recovery after ambiguous REST outcomes and instruction failures
- Fixed Betfair terminal order identity across reconnects, late fills, void corrections, and replacements
- Fixed Binance Futures fill reconciliation treating history outside venue retention as complete
- Fixed Binance Futures hedge-mode position reconciliation across REST snapshots and partial WebSocket fills
- Fixed Binance Futures whole-position exits denied by placeholder bounds (#4746), thanks for reporting @hashtagdenis
- Fixed Binance Spot and Futures execution reconciliation when no data client is configured
- Fixed Bybit option batch limits and WebSocket batch amend payloads
- Fixed Bybit rate limiting causing expired requests, venue rejections, and inconsistent order state
- Fixed Bybit scoped SPOT position reports and wallet balance fan-out (#4844), thanks @folknor
- Fixed Bybit WebSocket order book depth validation (#4823), thanks @Centaur-pub
- Fixed Deribit lazy-load subscriptions racing instrument cache updates
- Fixed Derive
CancelAllOrdersto use cached orders without refreshing venue state - Fixed Hyperliquid execution disconnect cleanup
- Fixed Hyperliquid market order prices in order list submits
- Fixed Interactive Brokers adaptive limit orders parsed as market orders (#4830), thanks @mameikagou
- Fixed Interactive Brokers restored-order cancel callback routing (#4852), thanks @gapurov
- Fixed L2/L3 matching against deleted book touches (#4819), thanks @SoYuCry
- Fixed Lighter Plus and Premium quota metadata to match deployed account-tier limits
- Fixed Lighter Testnet orders by omitting mainnet-only integrator attribution (#4834), thanks @Buff2out
- Fixed OKX WebSocket submissions omitting
reduceOnly(#4827), thanks for reporting @silarin - Fixed OKX ambiguous submissions, subscription recovery, and triggered child reconciliation
- Fixed OKX conditional order identity, replay deduplication, and post-trigger cancellation
- Fixed Polymarket user WebSocket subscriptions to cover all account orders and trades
- Fixed Polymarket
CancelAllOrdershandling for empty caches and cross-strategy, instrument, and side scopes - Fixed Polymarket FAK no-match batch responses missing
OrderRejectedevents - Fixed Polymarket market WebSocket heartbeats before initial subscription (#4864), thanks for reporting @mystic-io
- Fixed Polymarket position pagination returning incomplete results at the offset limit (#4811), thanks @seungpyoson
- Fixed Polymarket stale tick refreshes and mixed price precision (#4896), thanks for reporting @mystic-io
- Fixed Tardis incremental L2 batches ending on exchange timestamps (#4872), thanks for reporting @szpony
Internal Improvements
- Added Python memory leak checks for backtest, live node, model, and persistence lifecycles
- Added strict Clippy audit tooling
- Allowed
DataActorimplementations without nativeComponentstate - Improved model type boundary regression coverage
- Improved nightly Clippy compatibility across Rust workspace checks
- Improved
OrderBookregression coverage - Improved Python
Positionlifecycle validation to raiseValueErrorfor invalid fills - Improved Architect AX and Bybit initial WebSocket retries and cancellation (#4867), thanks @folknor
- Improved Betfair stream lifecycle test synchronization (#4849), thanks @folknor
- Improved dYdX retry timeout test coverage (#4835), thanks @folknor
- Improved Lighter async task ownership across execution and WebSocket reconnects
- Improved Polymarket auto-load and data task ownership across reconnects
- Improved Polymarket reconciliation regression coverage (#4855), thanks @seungpyoson
- Refined model fixed-point validation and wallet scaling
- Refined
OrderBookvalidation, snapshots, quotes, and display paths - Refined Python actor setup across runtime paths
- Standardized Rust blocking locks on
parking_lot - Optimized
BacktestEngineprocessing when simulation modules and liquidation are disabled - Optimized
IdsGeneratortrade ID formatting - Optimized
MatchingEngineL1 pending order queue scans - Optimized
OrderMatchingEnginequeue tracking and liquidity consumption - Optimized
OrderBookL1 level reuse - Optimized risk, execution, and portfolio processing for accounts and positions with long histories
- Optimized Betfair subscription test teardown (#4837), thanks @folknor
- Optimized Hyperliquid startup reconciliation to skip inactive dexes (#4861), thanks for reporting @nah294
- Optimized Polymarket quote parsing across WebSocket inputs
- Upgraded Rust (MSRV) to 1.98.0
- Upgraded Miri to
nightly-2026-08-23 - Upgraded
cargo-hawkto v0.1.13 - Upgraded
shellcheck-pypre-commit hook to v0.11.0.1-1 - Upgraded
alloycrate to v2.4.1 - Upgraded
alloy-primitivescrate to v1.7.1 - Upgraded
arrowcrate to v59.2.0 - Upgraded
arrow-rowcrate to v59.2.0 - Upgraded
blake3crate to v1.8.7 - Upgraded
databentocrate to v0.60.0 - Upgraded
datafusioncrate to v55.0.0 - Upgraded
eithercrate to v1.18.0 - Upgraded
logcrate to v0.4.34 - Upgraded
parquetcrate to v59.2.0 - Upgraded
uuidcrate to v1.26.0 - Upgraded
maturinbuild backend and package (dev) to v1.15.0 - Upgraded
ruffpackage (dev) and pre-commit hook to v0.16.4 - Upgraded
simplejsonpackage (visualization) to v4.1.1 - Upgraded
typackage (dev) to v0.0.74 - Upgraded
uvicornpackage (dev) to v0.52.4
Documentation Updates
- Updated maintained examples and tutorials for current APIs and removed unsupported variants
- Documented behavioral model dispatch and native model extension boundaries
- Documented Lighter Testnet account and API key setup
- Documented OKX instrument cache reconciliation and WebSocket update behavior
- Documented Polymarket quote sources and order book feed interaction
- Documented Polymarket RTDS crypto TWAP delivery, reconnect, and conflict handling
- Fixed broken OMS configuration link (#4877), thanks for reporting @aarushkandukoori
Artifact checksums
SHA256 checksums are attached as SHA256SUMS, per-asset .sha256 files, and dist-manifest.json.
| Artifact | SHA256 |
|---|---|
| nautilus_trader-2.0.0rc4-cp312-cp312-macosx_11_0_arm64.whl | e3ce6445a6061882b24f300deac1f215559deb5e74607236436a307b2d2cd2fb |
| nautilus_trader-2.0.0rc4-cp312-cp312-manylinux_2_34_aarch64.whl | 8a9f83521d90a6e7a994d040780523aa5e6c3a02ee2e7f239787e96f6ed59d10 |
| nautilus_trader-2.0.0rc4-cp312-cp312-manylinux_2_34_x86_64.whl | 8d3591aa4d86c7133be2115b1037ffadafb36449214d9973d496bdc80e21ad93 |
| nautilus_trader-2.0.0rc4-cp312-cp312-win_amd64.whl | b3374312d359af1d5e48e486645d895146079076dd79e052943ce447e5922602 |
| nautilus_trader-2.0.0rc4-cp313-cp313-macosx_11_0_arm64.whl | d9a6a87baa5132d7b898b117e5e0ae5e00d7b3d96da6731091335ae6a76ea0cf |
| nautilus_trader-2.0.0rc4-cp313-cp313-manylinux_2_34_aarch64.whl | 5586de18c1626c77affce191319338f9064813cb8717a1f206c93cb6e9972bbb |
| nautilus_trader-2.0.0rc4-cp313-cp313-manylinux_2_34_x86_64.whl | 0c97c4385d55833fc3cce4934ca48a2a5fa0ea1d69d0a775b88c2bbf6fb79005 |
| nautilus_trader-2.0.0rc4-cp313-cp313-win_amd64.whl | 2abdf7bf6c65c4c4e55835288507998c8102cdf6b9636ae5bb3ab585bd7576c2 |
| nautilus_trader-2.0.0rc4-cp314-cp314-macosx_11_0_arm64.whl | f0768d57ffef9491787330fa1890528c9c377b753bcd7369a87fbefea773679e |
| nautilus_trader-2.0.0rc4-cp314-cp314-manylinux_2_34_aarch64.whl | ca778173a35a00294369dc905b0955dfe99455029695340e41ad690e72520969 |
| nautilus_trader-2.0.0rc4-cp314-cp314-manylinux_2_34_x86_64.whl | 4b6ea797edc8caadacc551356f07234e48b9a2c8d1ea57e5bde2dd3ecb35b106 |
| nautilus_trader-2.0.0rc4-cp314-cp314-win_amd64.whl | aa791350a57cc90aa5d17fa1623e5b4824c301c8d86bb56d74a16407159f0302 |
| nautilus_trader-2.0.0rc4.tar.gz | 090e325e4ee1e7b33b72f68e9a05f295ba10c3fafc4a8e6302e2af2e34cd8ba1 |
Verify provenance
After downloading an artifact, verify its GitHub artifact attestation:
gh attestation verify <artifact> \
--repo nautechsystems/nautilus_trader \
--cert-identity "https://github.com/nautechsystems/nautilus_trader/.github/workflows/build.yml@refs/heads/master" \
--cert-oidc-issuer https://token.actions.githubusercontent.com