nxtquic-sim 0.1.3

Deterministic network simulator for NxtQuic testing
Documentation
# nxtquic-sim

[![Crates.io](https://img.shields.io/crates/v/nxtquic-sim.svg)](https://crates.io/crates/nxtquic-sim)
[![Documentation](https://docs.rs/nxtquic-sim/badge.svg)](https://docs.rs/nxtquic-sim)
[![License: MIT OR Apache-2.0](https://img.shields.io/badge/License-MIT%20OR%20Apache--2.0-blue.svg)](https://github.com/nxtstream/nxtquic/blob/main/LICENSE.md)
[![Rust: 1.85+](https://img.shields.io/badge/Rust-1.85+-orange.svg)](Cargo.toml)

**Deterministic network simulator for NxtQuic testing.**

`nxtquic-sim` is a virtual network environment for the [NxtQuic](https://crates.io/crates/nxtquic) workspace. It allows you to run QUIC endpoints inside a fully controllable, deterministic simulation — without any real OS networking — making it ideal for unit tests, system tests, and reproducing network edge cases reliably.

## Features

- **Deterministic execution** — controllable virtual time; replay any scenario bit-for-bit
- **Configurable link impairment** — inject latency, packet loss, duplication, and bit corruption
- **Multi-node topologies** — model complex networks with multiple endpoints and routers
- **Mobile handoff simulation** — reproduce path migration, failover, and multipath scenarios
- **I/O-free** — runs on top of `nxtquic-proto` with no OS socket involvement
- **No async runtime required** — synchronous simulation loop, zero flakiness

## Usage

```toml
[dependencies]
nxtquic-sim = "0.1.2"
```

```rust
use nxtquic_sim::{Simulator, LinkConfig};

let mut sim = Simulator::new();
let link = sim.add_link(LinkConfig {
    latency_ms: 50,
    loss_percent: 2,
    ..Default::default()
});

// Feed packets and advance virtual time
sim.step();
```

## Part of the NxtQuic workspace

| Crate | Purpose |
|---|---|
| [`nxtquic`]https://crates.io/crates/nxtquic | Top-level re-export, async API |
| [`nxtquic-proto`]https://crates.io/crates/nxtquic-proto | Core state machine |
| [`nxtquic-crypto`]https://crates.io/crates/nxtquic-crypto | Pluggable crypto backends |
| [`nxtquic-udp`]https://crates.io/crates/nxtquic-udp | Platform-optimized UDP I/O |
| [`nxtquic-api`]https://crates.io/crates/nxtquic-api | Tokio async/await API |
| [`nxtquic-h3`]https://crates.io/crates/nxtquic-h3 | HTTP/3 + QPACK |
| **`nxtquic-sim`** | **Deterministic network simulator (this crate)** |
| [`nxtquic-qlog`]https://crates.io/crates/nxtquic-qlog | qlog structured logging |

## License

Licensed under either of [MIT](https://github.com/nxtstream/nxtquic/blob/main/LICENSE.md) or Apache-2.0 at your option.