Quality
20,000+ automated tests, continuous benchmarking, and rigorous quality assurance across the NautilusTrader codebase.
Testing
Built into the process
Testing is not an afterthought. Every component is validated across multiple dimensions, from unit correctness through full trading simulation. Both the Python and Rust codebases carry dedicated test suites with strict standards for coverage and correctness.
Test categories
Unit tests
Thousands of focused tests validate individual functions, data types, models, and calculations. Both Python and Rust have dedicated unit test suites covering parsing, serialization, arithmetic precision, and state transitions.
Integration tests
Test component interactions: data engine to message bus, execution engine to risk engine, cache updates, and adapter lifecycle. Verify that subsystems compose correctly under realistic message flows.
Acceptance tests
End-to-end scenarios exercise full trading workflows: strategy signal generation, order submission, fill processing, position management, and portfolio updates. Deterministic reruns confirm reproducibility across runs.
Property-based tests
Using proptest in Rust to generate randomized inputs and verify invariants hold across thousands of edge cases. Covers order book invariants, backoff logic, value types, timers, throttlers, instruments, retry logic, and network behavior.
Deterministic simulation
Two layers of deterministic simulation. The network crate uses turmoil for transport-layer reconnects, partitions, and adverse conditions. A broader DST framework swaps tokio for madsim under the simulation Cargo feature, producing seed-reproducible async scheduling, timer firings, RNG output, and channel ordering. Property-driven concurrency and reconciliation soak loops grind thousands of seeds and persist any divergence as a replayable JSON artifact.
Performance tests
Rust benchmarks target critical hot paths including order matching, message bus throughput, and data serialization. Continuous measurement guards against performance regressions in latency-sensitive code.
Memory safety
A dedicated leak-testing suite uses tracemalloc, RSS monitoring, and memray to detect memory leaks across the Python-Rust boundary. 19 test files run targeted scenarios to verify stable long-running memory behavior.
Undefined behavior detection
A nightly Miri job runs the test suites of the nautilus-core and nautilus-model crates under strict provenance and Stacked Borrows checks. Catches undefined behavior in unsafe Rust code, including raw pointer misuse, aliasing violations, and FFI invariant breaches that ordinary tests cannot observe.
CI/CD pipeline
Continuous validation
Every merged commit to the develop branch triggers the full test suite. Builds that pass produce development wheels as bleeding-edge artifacts. The live CI pipeline shows real-time build status for recent commits.
View live CI pipeline
Benchmarks
Performance measurement
NautilusTrader includes Rust-based benchmarks for critical hot paths including order matching, message bus throughput, and data serialization. Continuous measurement guards against performance regressions in latency-sensitive code.
View benchmarks in docs
Quality assurance
Engineering standards
Type-safe core in Rust with strict compiler checks
Python type annotations with static analysis
Continuous integration on all pull requests and merged commits
Code review required for all changes
Deterministic builds with pinned dependencies
SLSA Level 3 build provenance on all wheel artifacts
Immutable, attested releases with post-publish registry verification
aws-lc-rs (AWS-LC) for TLS, HMAC, and RSA cryptography
Supply chain security policy
Learn more about NautilusTrader.
NautilusTraderâ„¢ is a product of Nautech Systems Pty Ltd (ABN 88 609 589 237). Nautech Systems provides algorithmic trading software only. We do not operate as a broker, dealer, or exchange, nor offer financial advisory services. Users are solely responsible for compliance with applicable laws and regulations. Subject to non-excludable consumer guarantees, we make no warranties and accept no liability for trading losses or regulatory violations arising from use of the software. Read full disclaimer.