NautilusTrader 2.0.0rc3
Released on 20th August 2026 (UTC).
Note
Some renames in this release, such as AggressorSide Buyer/Seller becoming Buy/Sell, restore
the most correct naming conventions. The Cython-era C API shared one enum namespace across types,
which ruled out these names; since the removal of Cython, that limitation no longer applies.
Enhancements
- Added dead-peer detection to every transport with a configured heartbeat, reconnecting when the peer stops sending
- Added TCP keepalive and Linux
TCP_USER_TIMEOUTto all outbound connections, detecting half-open sockets in ~1 min - Added HTTP
CONNECTproxy support to the Sockudo WebSocket backend - Added
WebSocketConfig.heartbeat_timeout_secsso every connect entry point can set a liveness window - Added a one‑second floor on flapping reconnect attempts, keeping clients under venue connection‑rate limits
- Added
WalletAccountfor native and token balances with local reservations - Added
PositionOpenedrealized PnL - Added
AccountStatevenue metadata - Added canonical Rust backtest results with normalized projections, content digests, and stable ordering
- Added full Rust config parity for the Python testkit
ExecTesterConfig - Added
Sumiterator support for owned and borrowedQuantityvalues (#4720), thanks @faysou - Added Python v2 Redis message bus backing for
LiveNode(#4630), thanks for reporting @davidgreyme - Added Python v2 cache database backing for
LiveNode(#4634), thanks for reporting @AlphaTraderK - Added Python v2
LiveNode.run_async(),LiveNodeHandle, andNodeStatefor caller-owned event loops - Added direct message bus backing installation through
RedisMessageBusConfig - Added
LiveNode.start()warning when external message bus ingress requiresrun() - Added trader start warning when
load_stateorsave_stateis enabled without a cache database backing - Added runtime external‑order claim registration and removal to Rust
LiveNode(#4620), thanks @folknor - Added
INFOlogs for socket and WebSocket connection loss and recovery (#4621), thanks @folknor - Added Rust and Python
SocketStateChangedevents for Binance Futures, Lighter, and Polymarket live clients - Added Coinbase heartbeat counter gap warnings, resetting after reconnect
- Added Deribit book summaries as requestable custom data (#4576), thanks @graceyangfan
- Added Derive fixed-window rate limits for global and per-instrument matching requests
- Added Hyperliquid socket-state reporting and
reconnect_socketon data and execution WebSockets - Added Hyperliquid user TWAP history and slice fills as opt‑in custom data (#4674), thanks @graceyangfan
- Added Interactive Brokers support for canonical 21‑character OPRA option IDs (#4774), thanks @xxxxxx-oss
- Added Lighter inbound liveness timeout and socket-state reporting on data and execution WebSockets
- Added Polymarket
compute_effective_deltasconfig option to emit net changes for book snapshots (defaultFalse) - Added Polymarket
series_idsinstrument provider scoping for Gamma market families (#4650), thanks @mystic-io - Added Polymarket instrument bootstrap from a
filtersmap or a registeredInstrumentFilterwithoutload_all - Added Polymarket backtest fee model with per-market taker fees and maker credits
Breaking Changes
- Removed legacy v1 Cython package and root build path; use the Rust + PyO3 package
- Removed
nautilus_trader.core.is_pycapsule; use normal Python type checks on model objects - Removed model
as_pycapsulemethods andOrderBookDeltas.from_pycapsule; pass typed model objects directly - Removed FFI features and static libraries outside
nautilus-coreandnautilus-model; use Rust or PyO3 APIs - Removed
cython-compat, Cython cbindgen configs, anddrop_cvec_pycapsule; use PyO3 APIs - Removed generic Python clients and support APIs from
nautilus_trader.network; use adapter APIs ornautilus-network - Removed
LiveNode.poll()and PythonLiveNode.start(); use hostedrun_with_mode(...)orrun_async() - Removed
nautilus_trader.data.OptionChainManager; usesubscribe_option_chainand handleOptionChainSlice - Removed
Cache.actor_ids(), which always returned an empty set; use RustTrader::actor_ids() - Removed
WebSocketClient::connect_with_heartbeat_timeout; setWebSocketConfig.heartbeat_timeout_secsinstead - Removed duck-typed object conversion from
BacktestEngine.add_data; pass model objects directly - Removed unused Rust
SocketClientandWebSocketClientconnection callbacks; use message or epoch handlers - Removed Rust
nautilus_execution::matching_engine::adapter::OrderEngineAdapter; useOrderMatchingEngine - Removed Rust
from_pyobjectconstructors fromnautilus_modeldata types; useBound::extractfor the target type - Removed Rust
nautilus_core::CleanDropand itsdropmodule; implementDropdirectly - Removed Databento
load_*_as_pycapsulemethods; use the correspondingload_*methods - Removed the trailing
heartbeat_timeoutparameter from the epoch-handler connect; set it on the config - Replaced Rust
nautilus_model::python::data::data_to_pycapsulewithdata_to_pyobject - Renamed
Portfolio.margins_inittoinstrument_initial_margins - Renamed
Portfolio.margins_mainttoinstrument_maintenance_margins - Renamed
Portfolio.is_flattois_net_flat - Renamed
Portfolio.is_completely_flattois_completely_net_flat - Renamed
AggressorSideBuyer/Sellervariants toBuy/SellandBUYER/SELLERmembers toBUY/SELL - Renamed Cap'n Proto
AggressorSidesymbols tobuy/sell, preserving ordinals - Renamed PostgreSQL
AGGRESSOR_SIDElabels toBUY/SELL; migrate withALTER TYPE ... RENAME VALUE - Changed Rust
OrderMatchingEngineimport tonautilus_execution::matching_engine::OrderMatchingEngine - Changed Rust
QueryResultandDataQueryResultto iterateResultitems carrying a newQueryError - Changed
DataQueryResultiteration to return Python object lists instead ofDataFFIcapsules - Changed adapter callbacks to receive typed model objects instead of
PyCapsuleobjects - Changed cache actor APIs to
ActorIdfromComponentId, coveringCacheDatabaseAdapteractor state methods - Changed Interactive Brokers historical tick responses and Tardis batch streams to provide typed model objects
- Changed portfolio statistic
calculate_from_positionsto requirePositionobjects instead of duck-typed ones - Changed
AggressorSidestring output fromBUYER/SELLERtoBUY/SELLfor display, serde, and SQL encoding - Changed
WebSocketConfig.heartbeattoheartbeat_interval_secsandheartbeat_msgtoheartbeat_payload - Changed
WebSocketConfig.reconnect_timeout_mstoconnect_timeout_ms, which also bounds the initial dial - Changed
SocketConfig.heartbeatfrom a tuple toOption<SocketHeartbeat>withinterval_secsandpayload - Changed
SocketConfig.idle_timeout_mstoheartbeat_timeout_secs, matching the inbound silence it always detected - Changed a configured heartbeat to imply dead-peer detection, defaulting
heartbeat_timeout_secsto three intervals - Changed the Sockudo backend to tunnel through a configured
proxy_urlinstead of silently falling back to Tungstenite - Changed WebSocket and socket clients to validate config on connect, so an invalid config now fails at startup
- Changed custom cache database adapters to require
index_order_clientsfor live orders (#4797), thanks @xxxxxx-oss - Changed Betfair
stream_heartbeat_mstostream_heartbeat_secs, now seconds rather than milliseconds (default5) - Changed Betfair
stream_idle_timeout_mstostream_heartbeat_timeout_secs, now seconds (default60) - Changed Binance spot and futures WebSocket API trading clients to send a keepalive, which they previously omitted
- Changed Bybit
bybit_bar_spec_to_intervalto take aBarAggregationinstead of an integer - Changed Bybit execution
heartbeat_interval_secsdefault from5to20, matching the documented cadence - Changed Hyperliquid
subscribe_book_deltasandsubscribe_book_snapshotsto take aBookTypeinstead of an integer - Changed OKX and dYdX Python WebSocket clients to default
heartbeatto the venue cadence instead ofNone - Changed Polymarket
HeartbeatResponse::Acknowledgedto carry a required chained ID - Changed Polymarket Gamma
game_idto a string onGammaMarket,GammaEvent, and instrumentinfo - Changed Polymarket Gamma and CLOB tick size fields from
f64toDecimal - Changed Polymarket strict allowance decoding to require the plural
allowancesmap (#4760), thanks @seungpyoson
Security
- Hardened development wheel publishing to validate exact artifacts and fail closed
- Pinned the direct
alloycrate dependency to v2.2.0 to limit its larger supply‑chain risk surface - Fixed Rust network and WebSocket adapter logs that could expose credentials and payload contents
- Removed
OrderBookDeltas.from_pycapsule, which reinterpreted unvalidated pointers and risked invalid memory access - Fixed Hyperliquid client configs leaking private keys in
Debugoutput
Fixes
- Fixed overflowing order fill raw sums becoming undefined quantities or panicking
- Fixed
MarginAccounttotal margin getters panicking on out-of-range raw sums - Fixed clocks accepting oversized timer intervals and unrepresentable first event times
- Fixed live timers firing up to 1 ms before their nominal deadlines
- Fixed
LiveClock::default()missing time-event senders initialized after clock construction - Fixed Python
on_historical_datato receiveCustomDataresponse batches as a single list - Fixed
Cache::get_xratefor instrument symbols that do not use theBASE/QUOTEformat - Fixed market order risk checks to use cached bars and deny orders without a usable price
- Fixed
Positionaverage open price (avg_px_open) for exact closes after partial fills - Fixed order list
OrderInitializedevents to carryorder_list_idthrough publication, persistence, and replay - Fixed Postgres cache restore dropping order
tagsandexec_algorithm_params - Fixed Cache venue order ID alias indexing and purging during mass-status reconciliation
- Fixed failed live strategy registrations leaving orphaned external‑order claims (#4620), thanks @folknor
- Fixed network controllers treating aborted reconnects as completed reconnections (#4623), thanks @folknor
- Fixed WebSocket pongs held across a reconnect being enqueued on the replacement connection (#4613), thanks @folknor
- Fixed Python v2
FeeModelsubclass constructors and concrete model inheritance (#4640), thanks @dfjmax - Fixed fee model panics from invalid Python inputs and decimal overflow (#4640), thanks @dfjmax
- Fixed malformed external message topics aborting Python v2
LiveNode(#4630), thanks for reporting @davidgreyme - Fixed macOS ARM64 PyArrow SIGSEGVs (#4633, #4642), thanks for reporting @ZhongxuanWang; thanks @alex09x
- Fixed macOS Python allocator TLS collisions by selecting mimalloc v2 (#4758), thanks @faysou
- Fixed
CashAccountaborts when reserving negative‑price buy orders (#4725), thanks @folknor - Fixed
OrderBookDeltas::new_checkedaccepting child instrument mismatches (#4710), thanks @folknor - Fixed Python
MessageBusendpoint panics from empty, whitespace, or wildcard addresses - Fixed synthetic formula parser stack overflows from unbounded nesting (#4723), thanks @folknor
- Fixed
f32logarithm approximation on non‑positive and non‑finite inputs (#4740), thanks @folknor - Fixed margin models reserving a negative requirement for negative‑price orders (#4751), thanks @folknor
- Fixed
DeltaNeutralVolaborting when a rehedge quantity rounds to zero (#4752), thanks @folknor - Fixed strategy config accepting
GTDmarket exits, which later aborted flattening (#4762), thanks @folknor - Fixed backtest
BorrowMutErroraborts whenuse_message_queueis disabled (#4763), thanks @folknor - Fixed AMA reset history retention and Rust
FuzzyCandlesticksoutput retention (#4666), thanks @mkzung - Fixed
ChandeMomentumOscillatorreturning values outside [-100, 100] for a zero gain average (#4667), thanks @mkzung - Fixed portfolio PnL and net exposure currency when
convert_to_account_base_currencyis disabled - Fixed portfolio realized PnL mixing snapshot and position exchange rates with
use_mark_xratesenabled - Fixed account state log throttling for events carrying an earlier
ts_init - Fixed catalog and session queries treating DataFusion decode failures as exhausted; Python now raises
RuntimeError - Fixed default execution mass status generation to compose granular reports (#4669), thanks @folknor
- Fixed Parquet custom data queries for
Vec<u8>fields (#4670), thanks @TheoBabilon - Fixed WebSocket pongs replaying on replacements via connection epoch binding (#4683), thanks @folknor
- Fixed backtest windows dropping boundary data and empty runs advancing time (#4685), thanks @folknor
- Fixed
BetPositionaverage price and PnL after stake increases (#4684), thanks @folknor - Fixed option expiry settlement dispatching partial legs and failing to retry missing prices (#4618), thanks @folknor
- Fixed simulated exchange order queries returning all orders for unknown instruments (#4687), thanks @folknor
- Fixed
FixedRiskSizeromitting instrument contract multipliers (#4699), thanks @dfjmax - Fixed cache resets retaining stale
OptionGreeksvalues (#4701), thanks @folknor - Fixed
f32exponential approximation outside its normal exponent range (#4709), thanks @folknor - Fixed orderless position cache indexes and replayed flips (#4688), thanks @pengpengyi92
- Fixed event-store
verifyreporting a timeout when a large corrupt report filled the worker pipes - Fixed event-store writer treating a zero channel capacity as a rendezvous that fail-stopped the run
- Fixed portfolio Greeks failing on closed positions (#4700), thanks @folknor
- Fixed
AverageTrueRangeignoring its configuredma_typeand always using a simple moving average - Fixed Python
MessageBusaccepting empty or whitespace‑only subscription patterns - Fixed the
OptionSeriesIdPython constructor panicking on an invalid venue; it now raisesValueError - Fixed Python
BarSpecificationpanicking on oversized time intervals; construction now raisesValueError - Fixed stale venue book snapshots logging one out‑of‑order warning per delta
- Fixed backtest timer callbacks inheriting the next data event's timestamp (#4747), thanks @faysou
- Fixed
AverageTrueRange.reset()leaving the inner moving average populated (#4749), thanks @mkzung - Fixed HTTP query parameters being dropped when the URL already has a fragment (#4750), thanks @folknor
- Fixed option constructors accepting a zero or negative strike price (#4745), thanks @folknor
- Fixed cache position updates applying the index change before the value write (#4767), thanks @folknor
- Fixed DeFi pool positions dropping fees when fee‑growth counters wrap (#4768), thanks @folknor
- Fixed
MovingAverageConvergenceDivergenceinput counting (#4779), thanks @mkzung - Fixed WebSocket text heartbeats being replayed on the replacement connection
- Fixed startup reconciliation losing the source execution client for external orders (#4781), thanks @xxxxxx-oss
- Fixed cache order and position adds leaving partial indexes when persistence failed (#4783), thanks @folknor
- Fixed cache position updates recreating a partial entry for an unknown or purged ID (#4785), thanks @folknor
- Fixed purge retention minutes overflowing nanoseconds and panicking in timer callbacks (#4784), thanks @folknor
- Fixed stopped TWAP execution schedules never resuming their remaining slices (#4786), thanks @folknor
- Fixed purge timer setup panicking on oversized intervals (#4804), thanks @folknor
- Fixed Betfair stream reauthentication and subscription replay after session replacement
- Fixed Betfair rounding a sub-second stream heartbeat interval up instead of down
- Fixed Binance Spot HTTP submissions to use private‑stream order events across reconnects
- Fixed Binance Futures hedge‑mode
positionSideforclose_positionexits (#4732), thanks @hashtagdenis - Fixed Bybit REST and WebSocket order
smpGroupstring decoding (#4655), thanks for reporting @a-green-hand-jack - Fixed Bybit
open_onlyreports missing recently closed orders (#4765), thanks @NoiceHax - Fixed Databento MBO snapshots advancing the incremental sequence (#4686), thanks @faysou
- Fixed Databento parent book-delta responses splitting by child instrument
- Fixed Deribit losing its
set_heartbeatcontract after reconnecting, disabling venuetest_requestfor the session - Fixed Derive cancel‑only replacements and reused labels during order reconciliation
- Fixed Derive WebSocket recovery, subscription replay, and silent connection detection
- Fixed Derive fill commissions to construct exactly from wire decimals and error on unrepresentable fees
- Fixed Derive account state reporting collateral credit as locked and net health as margin requirements
- Fixed Derive denying unsupported orders only after
OrderSubmitted - Fixed Derive historical trade aggressor side and forward-price event times
- Fixed Hyperliquid historical candle timestamps and unfinished candle filtering (#4727), thanks @HKOWL
- Fixed Hyperliquid order and position reconciliation across standard and HIP‑3 dexes
- Fixed Hyperliquid WebSocket reconnect events being swallowed after resubscription
- Fixed Hyperliquid oid queries dropping the known client order ID
- Fixed Hyperliquid REST user fills dropping venue
tidandbuilderFee - Fixed Hyperliquid historical order and order‑status parsing for
FrontendMarketandLiquidationMarketTIF - Fixed Interactive Brokers continuous futures historical bar requests (#4664), thanks @dfjmax
- Fixed Interactive Brokers deactivated open‑order processing
- Fixed Interactive Brokers delayed market data not emitting
QuoteTickvalues (#4719), thanks @faysou - Fixed Interactive Brokers local modify and cancel rejection event emission (#4564), thanks for reporting @davidgreyme
- Fixed Lighter startup reconciliation for bounded fill history, incomplete coverage, and restored fills
- Fixed Lighter acknowledged creates, position snapshot versus incremental updates
- Fixed OKX margin reconciliation omitting
SPOTorders and fills (#4743), thanks @silarin - Fixed OKX
QueryOrderrouting for algo and regular orders (#4731), thanks @silarin - Fixed OKX algo child dispatch and triggered conditional query recovery
- Fixed OKX retryable and timeout command failures being treated as venue rejections
- Fixed Polymarket commissions to preserve exact decimal values in
Moneyconstruction - Fixed Polymarket maker fill ownership and reported mass‑status trade drops (#4662), thanks @seungpyoson
- Fixed Polymarket WebSocket asset and discovery subscription replay across reconnects
- Fixed Polymarket market subscriptions to explicitly request initial book snapshots
- Fixed Polymarket buffered fills after terminal status leaving orders
PartiallyFilledand dropping expiry fills - Fixed Polymarket HTTP rejection reasons carrying the raw JSON body instead of the venue message
- Fixed Polymarket WebSocket
FAKandFOKBUY sizes reported as the signed pUSD maker amount - Fixed Polymarket order‑safety heartbeat routing, ID chaining, rate‑limit retries, and safety deadlines
- Fixed Polymarket order book snapshots accepting divergent data with invalid venue hashes
- Fixed Polymarket compact book snapshots being dropped when hash preimage fields are absent
- Fixed Polymarket open markets being removed from live state after
endDate(#4706), thanks @mystic-io - Fixed Polymarket Gamma pagination for composite
gameIdsports markets (#4771), thanks for reporting @jamesjklin - Fixed Polymarket treating HTTP 425 and non‑CLOB 429 submit failures as definitive rejections
- Fixed Polymarket WebSocket application heartbeat liveness
- Fixed Polymarket terminal condition retirement repeating every poll cycle
- Fixed Polymarket auto‑load dropping open markets omitted from the default Gamma lookup (#4728), thanks @mystic-io
- Fixed Polymarket allowance decoding accepting duplicate spender keys (#4760), thanks @seungpyoson
- Fixed Polymarket FIFO replay evicting still‑active order identity and fill state
- Fixed Polymarket unsent and rejected cancels remaining in flight
- Fixed Polymarket user channel dropping batched messages on unknown event types (#4794), thanks @yashwardhan-gautam
- Fixed Polymarket partial GTC fills not reaching a terminal order status (#4795), thanks @yashwardhan-gautam
- Fixed Polymarket pagination accepting stalled or repeated cursors (#4800), thanks @seungpyoson
- Fixed Tardis CSV funding rates dropping
next_funding_nswithout a predicted rate - Fixed Tardis Machine funding rates omitting
next_funding_ns - Fixed Tardis Machine heartbeats continuing after the stream ended
Internal Improvements
- Added
Fromconversions fromActorId,ExecAlgorithmId, andStrategyIdtoComponentId - Improved native backtest workload coverage for canonical result checks
- Improved indicator test tolerances across floating‑point magnitudes (#4718, #4742), thanks @mkzung
- Improved published‑registry verifier tests to ignore fork metadata (#4715), thanks @xxxxxx-oss
- Improved Coinbase request tests by removing redundant waits (#4637), thanks @pengpengyi92
- Improved WebSocket reconnect replay to drop Ping, Pong, and Close frames instead of resending them
- Improved network crate tests for retries, rate limits, mutual TLS, HTTP, socket reconnects, and WebSocket messages
- Improved Polymarket order response tests for the
tradeIDsmatched shape and batch submission legs - Improved Polymarket on‑chain approval‑plan sharing and test coverage (#4773), thanks @seungpyoson
- Improved Tardis tests with OKX X‑Perp and USDC index migration fixtures
- Refactored the Redis cache adapter to delegate deletions and custom data writes to
RedisCacheDatabase(Rust) - Refined CI, build, and dependency configuration after the v1 removal
- Replaced Chrono and Chrono-TZ with Jiff and bundled TZDB data (#4639), thanks @sunlei
- Standardized remaining risk engine order‑denied reasons to coded values (#4744), thanks @folknor
- Standardized order command failure classification with shared
CommandFailurefor Architect AX, Bybit, and Kraken - Standardized OKX order command failure classification with the shared
CommandFailuretype - Standardized Polymarket submit and cancel HTTP failures with
CommandFailure - Standardized Polymarket local order denials to coded
OrderDeniedReasonvalues - Optimized pre-commit and local validation by reusing build artifacts and skipping unchanged checks, thanks @faysou
- Optimized Hyperliquid allMids projection to update on subscribe instead of every message
- Optimized Polymarket interleaved price‑change dispatch and timestamp parsing
- Updated concept and tutorial docs to describe current Rust and PyO3 behavior after the v1 removal
- Upgraded Python and workflow tools:
uvv0.12.5,pypi-attestationsv0.0.30, andzizmorv1.29.0 - Upgraded Python lockfile dependencies:
numpyv2.5.2,platformdirsv4.11.2,librtv0.15.0, andsoupsievev2.9.2 - Upgraded Rust development tools:
cargo-hawkv0.1.12,cargo-nextestv0.9.143, and Mirinightly-2026-08-14 - Upgraded
cargo-llvm-covto v0.9.0 - Upgraded
flamegraphto v0.6.14 - Upgraded
prekto v0.4.14 andosv-scannerto v2.5.1 - Upgraded
async-traitcrate to v0.1.92 - Upgraded
aws-lc-rscrate to v1.18.0 - Upgraded
base64crate to v0.23.1 with only its safestdfeature enabled - Upgraded
blake3crate to v1.8.6 - Upgraded
bollardcrate to v0.21.1 - Upgraded
capnpandcapnpccrates to v0.27.0 and regenerated schema bindings - Upgraded
clapcrate to v4.6.6 - Upgraded
databentocrate to v0.58.0 - Upgraded
futuresandfutures-utilcrates to v0.3.34 - Upgraded
httpcrate to v1.5.0 - Upgraded
ibapicrate to v3.3.0 - Upgraded
pemcrate to v4.0.0 to align with the current Base64 API - Upgraded
pyo3crate to v0.29.2 for object‑lifetime, free‑threading, and compatibility fixes - Upgraded
rcgencrate to v0.14.9 - Upgraded
redbcrate to v4.2.0 - Upgraded
rediscrate to v1.6.0 - Upgraded
thiserrorcrate to v2.0.20 - Upgraded
timecrate to v0.3.55 - Upgraded
tomlcrate to v1.1.4 - Upgraded
uuidcrate to v1.24.1
Documentation Updates
- Added Python concept guidance for runtime ownership, public APIs, and hosted live execution
- Added thousands separators to adapter config-table quantity values
- Consolidated Python v2 integration guides and examples on canonical paths
- Corrected the Rust
DataTesterbook depth support note in the data testing spec - Documented external Redis message fields and Python custom-data registration
- Documented order book out‑of‑order update and stale snapshot reporting behavior
- Documented Polymarket command‑failure classes and coded local denial reasons
- Documented Hyperliquid reconnect event forwarding, dead‑peer timeout, and socket-state endpoints
- Documented the transient startup position-check race in the Lighter integration guide
- Fixed broken README links on PyPI (#4644, #4648), thanks for reporting @ZhongxuanWang; thanks @xxxjqm
Deprecations
- Deprecated
BUYER/SELLERserialization input forAggressorSide; useBUY/SELL(removal in a future release)
Artifact checksums
SHA256 checksums are attached as SHA256SUMS, per-asset .sha256 files, and dist-manifest.json.
| Artifact | SHA256 |
|---|---|
| nautilus_trader-2.0.0rc3-cp312-cp312-macosx_11_0_arm64.whl | 6fa9df3ac4c066b50a845dcb5123cc4ce60f7dedcf71784810156468c10d882e |
| nautilus_trader-2.0.0rc3-cp312-cp312-manylinux_2_34_aarch64.whl | 5ee6db83a68260490a7cd4f3d219dd5f03211eecd71308039059de1ad23e0090 |
| nautilus_trader-2.0.0rc3-cp312-cp312-manylinux_2_34_x86_64.whl | 245a27cd38c1ec26a2edd43a4ee77da177e5492ccb1e63832972e0260de4aa77 |
| nautilus_trader-2.0.0rc3-cp312-cp312-win_amd64.whl | 8a90b01ccf66d78946c565bca08b7758bc7f312caf1ded1c2c2c710013a7c092 |
| nautilus_trader-2.0.0rc3-cp313-cp313-macosx_11_0_arm64.whl | f56600cc1d079365481f552abe4a318dc376af6596b16edc1e95ee31fffcedef |
| nautilus_trader-2.0.0rc3-cp313-cp313-manylinux_2_34_aarch64.whl | c64378ca9cbbe8cd1915f726af718233ac4aff6c9830f43ff353cb96a14c6118 |
| nautilus_trader-2.0.0rc3-cp313-cp313-manylinux_2_34_x86_64.whl | b16595e9fa27f1c1e405d28036ba098303a241d573b3ae936ded890b5c255dbc |
| nautilus_trader-2.0.0rc3-cp313-cp313-win_amd64.whl | 1d877393e57c4ebab36ee80cf0183c34a0bb0e58c7b357b1d335cd984ecf7a54 |
| nautilus_trader-2.0.0rc3-cp314-cp314-macosx_11_0_arm64.whl | 3569e8d835dd48f74c450f6a4e559771e1d49f7800a5ae371147175ef99ff3df |
| nautilus_trader-2.0.0rc3-cp314-cp314-manylinux_2_34_aarch64.whl | f09f90aeeb13b3149d901a84b42415077d9952cb236819de4559ca56e6e57460 |
| nautilus_trader-2.0.0rc3-cp314-cp314-manylinux_2_34_x86_64.whl | e0c1c8d697e540f7b37616d16862cce416ae6120605857a8cf5701d69e8be294 |
| nautilus_trader-2.0.0rc3-cp314-cp314-win_amd64.whl | d9ccc03a588fd159bfe74f902372988437e32d1bc942c02ebe6da23fa9777142 |
| nautilus_trader-2.0.0rc3.tar.gz | 8025c59e396c204b8cab88c254769739bf7b7557ba43eb6d4ed1ac68e95424d7 |
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