v1.228.0

QwenLM/Qwen3-ASRv1.228.0Jun 8, 2026by github-actions[bot]

AI Summary

A major beta release introducing extensive DeFi support, a robust plugin architecture, and enhanced data engine capabilities for backtesting and live trading.

Key Highlights

  • Added BSC chain support with UniswapV3 and PancakeSwapV3 DEX registrations and Aerodrome pool-event signatures.
  • Introduced a comprehensive plugin system (`nautilus-plugin` crate) with `PluginActor` and `PluginStrategy` traits for custom extensions.
  • Enhanced DataEngine with continuous futures, funding rate catalog, historical order book snapshots, and mixed-instrument OrderLists.
  • Added support for new exchanges including Deribit, Hyperliquid, Lighter, and Polymarket with advanced trading features.
  • Implemented deterministic liquidation engine, beta-weighted vega greeks, and `OptionGreeks` persistence support.

Breaking Changes

  • Renamed custom-data field marker `json` to `serde`.
  • Removed live engine `graceful_shutdown_on_error`; use node-level `shutdown_on_error` instead.
  • Changed `get_exchange_rate` to return `decimal.Decimal` instead of `float`.
  • Changed DeFi pool-event types to require `ts_event`/`ts_init` timestamps.
  • Changed `CVec` to no longer implement `Send`.
  • Changed Hyperliquid HIP-4 outcome `InstrumentId` format.
  • Changed Deribit combo trade parsing to land as `CryptoOptionSpread`/`CryptoFuturesSpread`.

New Features

  • BSC chain adapter support
  • `analyze-pools` CLI for DeFi pool snapshot hydration
  • `nautilus-plugin` crate for loading Rust cdylibs
  • DataEngine continuous futures and live bar subscriptions
  • Mixed-instrument OrderLists support
  • Portfolio PyO3 bindings
  • Beta-weighted vega greeks
  • Deterministic liquidation engine
  • Coinbase WebSocket status channel
  • Deribit combo trade parsing
  • Hyperliquid HIP-4 outcome parsing
  • OKX Nitro spread order execution
  • Polymarket condition-level resolution

Full Release Notes

# NautilusTrader 1.228.0 Beta

Released on 8th June 2026 (UTC).

### Enhancements
- Added BSC chain support to blockchain adapter with `UniswapV3` and `PancakeSwapV3` DEX registrations
- Added Aerodrome Slipstream pool-event signatures and parsers for bootstrap and replay on Base
- Added Blockchain adapter `analyze-pools` CLI for batch DeFi pool snapshot hydration
- Added structured `PoolProfilerError` carrying pool id, block, transaction/log index, and event kind
- Added DeFi data (`DefiData`) replay through the data and backtest engines as a first-class `Data` variant
- Added `BacktestEngine.add_defi_data` for replaying DeFi block, pool, and pool-event data in backtests
- Added funding-rate catalog replay and `FundingSettlement` handling for backtests (Rust)
- Added generic structured key-value fields to `LogLine` (#4090), thanks @filipmacek
- Added `correlation_id` field to trading and system command structs for request tracing (Rust)
- Added checked mantissa/exponent constructors for `Price` and `Quantity` (Rust)
- Added Cap'n Proto and adapter split propagation of trading command `correlation_id`
- Added `nautilus-plugin` crate for loading separately compiled Rust cdylibs at live-node startup (Rust)
- Added custom-data plug point via `PluginCustomData` trait and `nautilus_plugin!` macro (Rust)
- Added actor plug point via `PluginActor` trait with lifecycle and data callbacks (Rust)
- Added strategy plug point via `PluginStrategy` trait with `HostVTable` order-command surface (Rust)
- Added plug-in `HostVTable` callbacks for cache, subscriptions, msgbus, and timers (Rust)
- Added `PluginActorAdapter` and `PluginStrategyAdapter` wrapping plug-in cdylibs as host `DataActor`/`Strategy` (Rust)
- Added `PluginLoader::with_host` so the live node can install a custom `HostVTable` for order-command routing (Rust)
- Added `host_vtable` and `plugin_loader` helpers binding submit/cancel/modify order to the strategy adapter (Rust)
- Added `register_custom_data_from_manifest` to register plug-in custom data with `DataRegistry` at load time (Rust)
- Added `config_json` argument to plug-in `create` thunks and `PluginActor::new`/`PluginStrategy::new` (Rust)
- Added `DataEngine` continuous futures historical bar requests and live bar subscriptions (Rust)
- Added `DataEngine` response bounds-trim and request-pipeline fan-in with `RequestJoin` support (Rust)
- Added `DataEngine` catalog / client response-side request splitting (Rust)
- Added `DataEngine` catalog orchestration for funding rates, custom data, and instruments (Rust)
- Added `DataEngine` time-range pipeline support for long historical requests (Rust)
- Added `DataEngine` order book deltas request and response with catalog/client split (Rust)
- Added `DataEngine` historical order book snapshot replay at UTC day boundaries (Rust)
- Added support for mixed-instrument `OrderList`s at the same venue (e.g. pairs, calendar spreads, multi-leg legs)
- Added `OrderList.is_uniform_instrument` and `OrderList.instrument_ids` helpers (Python)
- Added deny guard for mixed-instrument order lists submitted with a `position_id`
- Added portfolio PyO3 bindings and `Strategy.portfolio` access (#4085), thanks @ms32035
- Added beta-weighted vega greeks against volatility index instruments (#4097), thanks @faysou
- Added native `OptionGreeks` persistence and backtest replay support (#4132), thanks @Jonah-Chan
- Added `StrikeRange.delta(...)` to select option-chain strikes by target delta
- Added deterministic liquidation engine for backtests (#4077), thanks @abhishektang
- Added configurable logging IO policies (#4158), thanks @sunlei
- Added Binance Futures liquidation custom data subscriptions (#4095), thanks @graceyangfan
- Added Binance Futures open interest request custom data (Rust) (#4109), thanks @graceyangfan
- Added Binance Spot JSON public market data mode (#4178), thanks @graceyangfan
- Added pending-resolution settlement pipeline for binary options (Rust) (#4101), thanks @graceyangfan
- Added `Serialize`/`Deserialize` derives for `PositionEvent` (#4199), thanks @filipmacek
- Added Coinbase WebSocket `status` channel subscription emitting `InstrumentStatus` events
- Added Coinbase Python v2 factory bindings and tester examples
- Added `CryptoFuturesSpread` and `CryptoOptionSpread` instrument types mirroring `CryptoFuture`/`CryptoOption`
- Added Deribit `option_combo` and `future_combo` parsing as `CryptoOptionSpread`/`CryptoFuturesSpread` instruments
- Added Deribit combo trade leg parsing (`legs[]`, `combo_id`, `combo_trade_id`) on public trade messages
- Added Deribit `get_last_trades_by_currency` HTTP endpoint for combo trade backfill
- Added Deribit `get_expirations` HTTP endpoint for traded option-chain expirations
- Added Deribit public `TradeId` provenance prefix (`RFQ-`/`BLK-`/`COMBO-`) for block, RFQ, and combo trades
- Added Deribit `subscribe_combo_legs` opt-in for combo leg trade streams
- Added Derive initial adapter (on-chain spot, perps, options)
- Added Derive WebSocket trading API support for submit, cancel, modify, and cancel-all actions
- Added Hyperliquid WebSocket trading API support for submit, cancel, modify, and cancel-all actions
- Added Hyperliquid HIP-4 outcome `BinaryOption.info` with parsed venue description and question metadata
- Added Hyperliquid `HYPERLIQUID_ACCOUNT_ADDRESS` env var fallback for `HyperliquidExecClientConfig.account_address`
- Added Hyperliquid live open interest custom data from `activeAssetCtx` (Rust) (#4120), thanks @graceyangfan
- Added Hyperliquid `allDexsAssetCtxs` custom data subscriptions (#4136), thanks @graceyangfan
- Added Kraken WebSocket rate limiting (#4093), thanks @filipmacek
- Added Lighter initial adapter (DEX: spot, perps)
- Added OKX `on_instrument` write-through so data-client instrument updates refresh exec caches without restart
- Added OKX spread instrument discovery as `CryptoFuturesSpread` instruments (Rust)
- Added OKX Nitro spread order execution and reconciliation support (Rust)
- Added Polymarket adapter bounded-retry auto-load with `auto_load_max_retries` and exponential backoff with jitter (Rust)
- Added Polymarket condition-level resolution for expired markets (#4164), thanks @graceyangfan
- Added Polymarket `new_market` fetch dedupe and bounded concurrency (#4185), thanks @graceyangfan
- Added Polymarket `POLY_1271` deposit-wallet signing support (#4053), thanks for reporting @sumuzhao and @sophyphilo
- Added `shutdown_on_error` to stop Rust backtests and live nodes after error logs
- Added Tardis option greeks ingestion to the catalog for backtest replay
- Added Tardis `extract_bbo_as_quotes` to emit `QuoteTick` from `option_summary` BBO fields

### Breaking Changes
- Renamed custom-data field marker `json` to `serde` (#4133), thanks @faysou
- Removed live engine `graceful_shutdown_on_error`; use node-level `shutdown_on_error` instead
- Changed `nautilus_pyo3.get_exchange_rate` to return `decimal.Decimal` instead of `float`
- Changed DeFi pool-event and snapshot types to require `ts_event`/`ts_init` timestamps (was optional `timestamp`)
- Changed `PoolProfiler::initialize` and `check_if_initialized` to return `Result` rather than assert
- Changed command `new` constructors to accept `correlation_id: Option<UUID4>`, pass `None` for old behavior (Rust)
- Changed `CVec` to no longer implement `Send`; use typed wrappers for thread transfer (Rust)
- Changed Hyperliquid HIP-4 outcome `InstrumentId` to `{outcome_index}-{YES|NO}-OUTCOME.HYPERLIQUID`
- Changed Deribit `DeribitWebSocketClient.with_credentials` to accept `api_key`/`api_secret` after `environment`
- Changed order event `reconciliation` and `due_post_only` from `u8` to `bool` (changes JSON/Arrow schemas)
- Changed Deribit combos to land as `CryptoOptionSpread`/`CryptoFuturesSpread` instead of `OptionSpread`/`FuturesSpread`; `FuturesSpread`/`OptionSpread` once again guarantee whole-contract sizing
- Changed `NautilusKernelConfig.timeout_connection` default from 120 to 60 seconds (#4179)

### Security
- Added OpenSSF Scorecard workflow (#4187), thanks @pushkarm029
- Fixed DataFFI PyCapsules to reject mismatched types and prevent repeated `CVec` drops
- Fixed thread-local registry access to avoid exposing global-lifetime actor and component refs
- Fixed `OrderBookDepth10` FFI constructor to avoid unwinding across C ABI boundaries
- Fixed `StackStr::from_c_ptr_checked` to return `None` for null C string pointers

### Fixes
- Fixed matching engine panic on mark price bars in Rust (#4189), thanks @po4yka
- Fixed raw value boundary constants in Rust (#4188), thanks @po4yka
- Fixed unbounded Cache `VecDeque` memory leak (Rust) (#4107), thanks @filipmacek
- Fixed `Throttler` silently dropping buffered messages in buffer mode (Python v1) (#4221), thanks @santatic
- Fixed `Cache.reset` clearing FX rate lookup for retained instruments (#4159), thanks for reporting @dfjmax
- Fixed `BacktestEngine` option positions remaining open when data stops before expiry
- Fixed `BacktestEngine` losing latency-deferred commands at shutdown (Rust) (#4062), thanks for reporting @zhanghaoda
- Fixed `BacktestEngine` duplicate account state events on reset, thanks for reporting @dfjmax
- Fixed calculated account state flag for cash and margin accounts (#4218), thanks @faysou
- Fixed `PortfolioStatistic.downsample_to_daily_bins` to compound sub-daily returns (#4141), thanks @mahimn01
- Fixed missing `PortfolioStatistic` trait methods returning `None` (#4174), thanks @mahimn01
- Fixed matching engine not canceling unmatched IOC/FOK limit orders (Rust) (#4112), thanks for reporting @Jonah-Chan
- Fixed matching engine L1 slip-through for market orders exhausting top-of-book volume (Rust)
- Fixed multi-currency balance update violating `total == locked + free` (#4165), thanks for reporting @qaxayuan
- Fixed NETTING reconciliation opening phantom reduce-only positions (#4106), thanks for reporting @M-at-ti-a
- Fixed HEDGING margin scaling with fill count instead of net exposure (#4110), thanks for reporting @qaxayuan
- Fixed live reconciliation filtering for unclaimed external venue orders (Rust)
- Fixed `ExecTester` on_stop leaving INITIALIZED orders and bracket legs live across all cancel modes (Rust)
- Fixed Aerodrome Slipstream `AmmType` from `StableSwap` to `CLAMM`
- Fixed `PoolProfiler::update_position` to pre-validate active liquidity so failures leave pool state unchanged
- Fixed `DefiDataEngine` exposing zero-state pool profiler during snapshot bootstrap
- Fixed pool profiler `AlreadyInitialized` error when hypersync replay revisits `Initialize` after snapshot restore
- Fixed deterministic catalog directory registration order (#4208), thanks @faysou
- Fixed `LiveNode` signal handling during startup connection wait (#4102), thanks @filipmacek
- Fixed `NautilusKernelConfig.timeout_connection` default at 60 seconds (#4179), thanks for reporting @triyys
- Fixed quarter bar volume precision (#4201), thanks @HaakonFlaaronning
- Fixed Python `ShutdownSystem` dict serialization to round-trip `correlation_id` (was previously dropped)
- Fixed Python v2 live trading deadlocks from timer callbacks and kept Polymarket instrument refreshes Rust-only
- Fixed Python v2 order-book wranglers writing raw fixed-point bytes in big-endian (needed little-endian) (#4111), thanks for reporting @fabz1
- Fixed Python v2 type stub generation failing to locate `libpython` under uv-managed interpreters
- Fixed Betfair adapter snapshot book deltas emitting zero-volume `Add` entries (Rust)
- Fixed Betfair adapter traded volume cache to handle bet voids and non-runner adjustments (Rust)
- Fixed Betfair adapter RCM custom data `ts_init` parity between live and historical streams (Rust)
- Fixed Betfair adapter overfill checks for rounded stream matched sizes (Rust)
- Fixed Betfair adapter unsupported unsubscribe commands logging above debug (Rust)
- Fixed Binance Futures algo params for trailing stops/reduce-only (#4192), thanks for reporting @luckykefu
- Fixed Binance Futures execution symbol format (#4182), thanks for reporting @luckykefu
- Fixed Binance Futures full-depth book startup after snapshot retries
- Fixed Binance Spot full-depth book startup after snapshot retries (#4181), thanks for reporting @graceyangfan
- Fixed Binance Spot full-depth books to seed diffs from REST snapshots
- Fixed Binance Spot JSON full-depth books to use REST-synced diff streams (#4181), thanks @graceyangfan
- Fixed Binance Spot SBE numeric parsing to reject invalid price and quantity values
- Fixed Binance status-unknown submits emitting phantom rejections (#4215), thanks for reporting @Centaur-pub
- Fixed BitMEX startup handling for crypto futures spreads, duplicate subscriptions, `USYC` margins, and account ID discovery
- Fixed BitMEX order submission to deny unsupported GTD time-in-force locally
- Fixed BitMEX mark/index price updates on altcoin perps (#4147), thanks @filipmacek
- Fixed Blockchain adapter `analyze-pool --to-block` bounds during snapshot replay
- Fixed Blockchain adapter caching a half-initialized `PoolProfiler` when `initialize` returns `InitialTickMismatch`
- Fixed Blockchain adapter Multicall validation chunking and flash-event resume bounds
- Fixed Bybit linear/inverse `minNotionalValue` parsing (#4216), thanks @filipmacek
- Fixed Coinbase book snapshot deltas missing `F_SNAPSHOT` flag in REST and WebSocket parsers
- Fixed `CurrencyPair.asset_class` for crypto pairs (#4175), thanks @filipmacek
- Fixed Deribit `DeribitExecutionClient` not forwarding config credentials to the WebSocket client
- Fixed dYdX rate limiter being skipped due to missing keys (#4091), thanks @filipmacek
- Fixed Hyperliquid `Alo` limit order status reports being parsed as trigger orders
- Fixed Hyperliquid account balances for zeroed perp summaries (#4207), thanks @jungsooyun
- Fixed Hyperliquid balances preserving negative `totalRawUsd` (#4177), thanks for reporting @jzheng2017
- Fixed Hyperliquid cancel-replace modify overfill on an in-flight fill (#4154), thanks for reporting @AlphaTraderK
- Fixed Interactive Brokers order submit to guard on client readiness (#4100), thanks @honvl
- Fixed Interactive Brokers order requests to guard on client readiness (Rust) (#4125), thanks @faysou
- Fixed Interactive Brokers Python `request_instruments` cache leakage (#4099), thanks @mahimn01
- Fixed Interactive Brokers `request_instruments` returning cumulative cache (Rust) (#4114), thanks @faysou
- Fixed Interactive Brokers Rust orders routing to exchange MIC venues (#4129), thanks @faysou
- Fixed Interactive Brokers live bar reconnect tracking cleanup (#4169), thanks @faysou
- Fixed Interactive Brokers warmup `last_disconnection_ns` (#4173), thanks @HKOWL
- Fixed Kraken Futures `feeScheduleUid` deserialization to tolerate absence ahead of the 2026-06-22 Fee Schedules deprecation
- Fixed Kraken Spot L2 snapshots and subscribed-depth pruning
- Fixed OKX `OKXExecutionClient` not forwarding config credentials to WebSocket clients (#4115), thanks @pusteckiy
- Fixed OKX adapter to validate `clOrdId` rules before submission (#4116), thanks for reporting @pusteckiy
- Fixed Polymarket adapter dropping auto-load batches on Gamma chunk failures (Rust)
- Fixed Polymarket Gamma market lookups to send repeated list query params (Rust)
- Fixed Polymarket adapter treating encoded-empty `clob_token_ids` as terminal instead of transient (Rust)
- Fixed Polymarket PyO3 bootstrap to honor `instrument_config` (#4127), thanks @graceyangfan
- Fixed sandbox cached account config after initial `AccountState` (#4191), thanks @graceyangfan
- Fixed Tardis CSV delta loaders missing book resets between consecutive snapshots

### Internal Improvements
- Added `cargo machete` pre-commit hook to detect unused workspace dependencies
- Added cargo conventions check for stale `[package.metadata.cargo-machete]` ignored entries
- Added default log color signature (#4202), thanks @HaakonFlaaronning
- Added `try_liquidity_math_add` returning structured `LiquidityMathError` alongside the panicking variant
- Added structured-error coverage tests for `PoolProfiler` overflow/underflow paths and Display formats
- Added round-trip tests for `correlation_id` in Cap'n Proto, Arrow, and msgpack serialization
- Added DEX event-signature/parser parity tests across all registered chains
- Added Derive fuzz targets
- Added option chain backtest replay tests for slice assembly and snapshot cadence
- Added Hyperliquid `flatten` binary that cancels working orders and closes perpetual positions
- Added Hyperliquid Criterion bench groups for inbound pipeline, exec pipeline, and dispatch (Rust)
- Added OKX Criterion bench groups for inbound pipeline, exec pipeline, dispatch, and HTTP signing (Rust)
- Added Polymarket `auto_load_retry_delay` helper with exponential backoff and jitter (Rust)
- Added Polymarket Criterion bench groups for inbound pipeline, exec pipeline, and signing (Rust)
- Enabled `unreachable_pub` rustc lint workspace-wide to prevent dead public surface
- Implemented OKX `DataClient::unsubscribe_instrument` override to silence missing-handler warning at teardown
- Improved Portfolio calculations with `Decimal` arithmetic (Rust)
- Improved `RiskEngine` per-order pre-trade checks to resolve each order's own instrument in mixed-instrument lists
- Improved `ExecutionEngine` to route own-order-book inserts per order for mixed-instrument lists
- Improved Binance Spot SBE missing credentials error message (#4092), thanks @filipmacek
- Improved Coinbase `avg_price` parsing to validate via `Decimal` before `f64` conversion
- Aligned Derive and Lighter configs with workspace conventions (#4183), thanks @filipmacek
- Refined `OptionSpread`/`FuturesSpread` trait accessors to read `size_precision`/`size_increment` fields
- Refined Rust data engine to match Cython behavior (#4219), thanks @faysou
- Refined Hyperliquid adapter hot paths in WebSocket handler, parse, and signing modules
- Refined Interactive Brokers `nautilus-execution`/`nautilus-network` deps behind `execution` feature
- Refined OKX adapter hot paths in WebSocket frame deserializer, book10 parse, and fee currency lookup
- Removed dead Hyperliquid WebSocket codec module
- Removed unused `async-stream` and `indexmap` from `nautilus-interactive-brokers` dependencies
- Optimized common logging hot paths (#4150), thanks @sunlei
- Optimized datetime and UUID formatting (#4161), thanks @sunlei
- Optimized `AtomicMap` snapshot borrowing (#4162), thanks @sunlei
- Optimized Derive signing and hot paths with benchmark report
- Optimized Hyperliquid signing and hot paths with benchmark report
- Optimized OKX hot paths with benchmark report
- Optimized portfolio `update_position` to avoid per-event `Position` clones (#4197), thanks @po4yka
- Upgraded Rust (MSRV) to 1.96.0
- Upgraded Cython to v3.2.5
- Upgraded `databento` crate to v0.53.0
- Upgraded `redis` crate to v1.2.2
- Upgraded `sqlx` crate to v0.9.0

### Documentation Updates
- Added plug-in concept guide covering the C-ABI boundary, manifest, lifecycle, and live-node integration
- Added event-sourcing concept guide covering capture, replay, snapshot recovery, and verifier behaviour
- Added concept-guide section on mixed-instrument order lists covering downstream caveats and OMS guards
- Added backtesting guide notes for funding settlement flows
- Added FFI and Rust unsafe-code guidance for `PyCapsule` ownership and scoped TLS access
- Added Polymarket integration guide notes for `POLY_1271` deposit wallets
- Refined `BacktestEngine` shutdown notes with `on_stop` venue-latency ordering and pre-stop fill caveats
- Refined Coinbase integration guide for instrument-status, funding rate backlog, and order rejection wording
- Refined OKX integration guide with product capabilities and Nitro spread order notes
- Fixed `NautilusKernelConfig` state flag default docs (#4144), thanks for reporting @trikafi
- Fixed `LatencyModelConfig` base latency unit comment (1 second) (#4170), thanks for reporting @phx000
- Fixed Polymarket crate README labelling separate Gamma and Data API endpoints
- Fixed Polymarket integration guide inaccuracies (Gamma vs Data API split, `determine_trade_id` hash by adapter)

### Deprecations
None







<!-- release-checksums:start -->
## Artifact checksums

SHA256 checksums are attached as `SHA256SUMS`, per-asset `.sha256` files, and `dist-manifest.json`.

| Artifact | SHA256 |
| --- | --- |
| [nautilus_trader-1.228.0-cp312-cp312-macosx_15_0_arm64.whl](https://github.com/nautechsystems/nautilus_trader/releases/download/v1.228.0/nautilus_trader-1.228.0-cp312-cp312-macosx_15_0_arm64.whl) | e14cecd5480efb1b33f8a0faeb66bcc690e4f4d71baad3f205a8872fc6986f63 |
| [nautilus_trader-1.228.0-cp312-cp312-manylinux_2_35_aarch64.whl](https://github.com/nautechsystems/nautilus_trader/releases/download/v1.228.0/nautilus_trader-1.228.0-cp312-cp312-manylinux_2_35_aarch64.whl) | 949b77e8854988096ac3bf11a766bdb239332e1df3c86ac0c3518d62c7271682 |
| [nautilus_trader-1.228.0-cp312-cp312-manylinux_2_35_x86_64.whl](https://github.com/nautechsystems/nautilus_trader/releases/download/v1.228.0/nautilus_trader-1.228.0-cp312-cp312-manylinux_2_35_x86_64.whl) | 46bd4f8d719a960f3062b68ab8328be88e796f5bd102e79ea002cabe1e526d2b |
| [nautilus_trader-1.228.0-cp312-cp312-win_amd64.whl](https://github.com/nautechsystems/nautilus_trader/releases/download/v1.228.0/nautilus_trader-1.228.0-cp312-cp312-win_amd64.whl) | cfbba976a0ac882396a93b1c5a89a67392c6e98bfb888c54fb604cc61f7d9ba2 |
| [nautilus_trader-1.228.0-cp313-cp313-macosx_15_0_arm64.whl](https://github.com/nautechsystems/nautilus_trader/releases/download/v1.228.0/nautilus_trader-1.228.0-cp313-cp313-macosx_15_0_arm64.whl) | 281795b998278affc16a134e132c7cd9d3dcdf6a2ef0c9e24c22d34e61e0eff6 |
| [nautilus_trader-1.228.0-cp313-cp313-manylinux_2_35_aarch64.whl](https://github.com/nautechsystems/nautilus_trader/releases/download/v1.228.0/nautilus_trader-1.228.0-cp313-cp313-manylinux_2_35_aarch64.whl) | 232859bd16ff8e2c3e24b074189d62fbb0876db74008b6b7b18621a1587fc506 |
| [nautilus_trader-1.228.0-cp313-cp313-manylinux_2_35_x86_64.whl](https://github.com/nautechsystems/nautilus_trader/releases/download/v1.228.0/nautilus_trader-1.228.0-cp313-cp313-manylinux_2_35_x86_64.whl) | 997608689f5f87e8e08e18a9ab29fd20d468c2d5783a38106ff3a27fbc58c6c7 |
| [nautilus_trader-1.228.0-cp313-cp313-win_amd64.whl](https://github.com/nautechsystems/nautilus_trader/releases/download/v1.228.0/nautilus_trader-1.228.0-cp313-cp313-win_amd64.whl) | 3f5d86b873c648253b2f25e75f359ea4cd1a2f97c0d7de89efab9c8a1519c541 |
| [nautilus_trader-1.228.0-cp314-cp314-macosx_15_0_arm64.whl](https://github.com/nautechsystems/nautilus_trader/releases/download/v1.228.0/nautilus_trader-1.228.0-cp314-cp314-macosx_15_0_arm64.whl) | 9d599000940fbdacb18ba0f2baf1cc9254eadfa6bf14da63ead13e5c6efc92d0 |
| [nautilus_trader-1.228.0-cp314-cp314-manylinux_2_35_aarch64.whl](https://github.com/nautechsystems/nautilus_trader/releases/download/v1.228.0/nautilus_trader-1.228.0-cp314-cp314-manylinux_2_35_aarch64.whl) | 0e5cf89eeeb9ca00ebc11c43c7911c0f17ec197378ada603eb2ac84dffd07b15 |
| [nautilus_trader-1.228.0-cp314-cp314-manylinux_2_35_x86_64.whl](https://github.com/nautechsystems/nautilus_trader/releases/download/v1.228.0/nautilus_trader-1.228.0-cp314-cp314-manylinux_2_35_x86_64.whl) | 78bba92b73eba716bd894023ac161b4a4174aa5fc1346ae8ed21c5d01fb313ee |
| [nautilus_trader-1.228.0-cp314-cp314-win_amd64.whl](https://github.com/nautechsystems/nautilus_trader/releases/download/v1.228.0/nautilus_trader-1.228.0-cp314-cp314-win_amd64.whl) | 8a7df87fada86bc3e5055a57957b4c276194c00975e9c6815760859edf2cd3de |
| [nautilus_trader-1.228.0.tar.gz](https://github.com/nautechsystems/nautilus_trader/releases/download/v1.228.0/nautilus_trader-1.228.0.tar.gz) | 1708eec65aa57135883720cd53643a2d36cc186802a91d1e725bd36d283fc7a7 |

### Verify provenance

After downloading an artifact, verify its GitHub artifact attestation:

```bash
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
```

<!-- release-checksums:end -->


### Release completion note
The automated `publish-release-integrity` job did not complete for this release. Cargo crate publishing was recovered after manually publishing these crates with a short-lived crates.io token: `nautilus-analysis`, `nautilus-common`, `nautilus-execution`, `nautilus-lighter`, `nautilus-network`, `nautilus-portfolio`, `nautilus-testkit`, and `nautilus-trading`. Those crate versions therefore show crates.io `published_by` metadata rather than Trusted Publishing metadata. The final integrity assets, including `crates-manifest.json` and attestation sibling files, were attached manually after PyPI/Sigstore verification continued to fail on CI despite the affected wheel verifying locally.