diff --git a/CHANGELOG.md b/CHANGELOG.md index 2965787..e526e3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -## [0.1.275] - 2026-02-06 +## [0.1.300] - 2026-02-06 ### Added - **Replay (Time-Travel Debugging)**: Complete time-travel debugging system for recording and replaying HTTP requests diff --git a/Cargo.toml b/Cargo.toml index 48036a4..9a954da 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -95,17 +95,17 @@ indicatif = "0.17" console = "0.16" # Internal crates -rustapi-rs = { path = "crates/rustapi-rs", version = "0.1.188", default-features = false } -rustapi-core = { path = "crates/rustapi-core", version = "0.1.188", default-features = false } -rustapi-macros = { path = "crates/rustapi-macros", version = "0.1.188" } -rustapi-validate = { path = "crates/rustapi-validate", version = "0.1.188" } -rustapi-openapi = { path = "crates/rustapi-openapi", version = "0.1.188", default-features = false } -rustapi-extras = { path = "crates/rustapi-extras", version = "0.1.188" } -rustapi-toon = { path = "crates/rustapi-toon", version = "0.1.188" } -rustapi-ws = { path = "crates/rustapi-ws", version = "0.1.188" } -rustapi-view = { path = "crates/rustapi-view", version = "0.1.188" } -rustapi-testing = { path = "crates/rustapi-testing", version = "0.1.188" } -rustapi-jobs = { path = "crates/rustapi-jobs", version = "0.1.188" } +rustapi-rs = { path = "crates/rustapi-rs", version = "0.1.300", default-features = false } +rustapi-core = { path = "crates/rustapi-core", version = "0.1.300", default-features = false } +rustapi-macros = { path = "crates/rustapi-macros", version = "0.1.300" } +rustapi-validate = { path = "crates/rustapi-validate", version = "0.1.300" } +rustapi-openapi = { path = "crates/rustapi-openapi", version = "0.1.300", default-features = false } +rustapi-extras = { path = "crates/rustapi-extras", version = "0.1.300" } +rustapi-toon = { path = "crates/rustapi-toon", version = "0.1.300" } +rustapi-ws = { path = "crates/rustapi-ws", version = "0.1.300" } +rustapi-view = { path = "crates/rustapi-view", version = "0.1.300" } +rustapi-testing = { path = "crates/rustapi-testing", version = "0.1.300" } +rustapi-jobs = { path = "crates/rustapi-jobs", version = "0.1.300" } # HTTP/3 (QUIC) quinn = "0.11" diff --git a/RELEASES.md b/RELEASES.md index df4995b..4d5ae2b 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1,6 +1,6 @@ # RustAPI Release History -## v0.1.275 - Time-Travel Debugging (2026-02-06) +## v0.1.300 - Time-Travel Debugging (2026-02-06) ### 🎯 Major Feature: Replay System diff --git a/crates/rustapi-extras/src/lib.rs b/crates/rustapi-extras/src/lib.rs index bd5d9a4..5e37781 100644 --- a/crates/rustapi-extras/src/lib.rs +++ b/crates/rustapi-extras/src/lib.rs @@ -36,7 +36,7 @@ //! //! ```toml //! [dependencies] -//! rustapi-extras = { version = "0.1.275", features = ["jwt", "cors", "csrf"] } +//! rustapi-extras = { version = "0.1.300", features = ["jwt", "cors", "csrf"] } //! ``` #![warn(missing_docs)] diff --git a/crates/rustapi-openapi/Cargo.toml b/crates/rustapi-openapi/Cargo.toml index 96f7c2d..41ceeab 100644 --- a/crates/rustapi-openapi/Cargo.toml +++ b/crates/rustapi-openapi/Cargo.toml @@ -20,7 +20,7 @@ serde = { workspace = true } serde_json = { workspace = true } # Macros -rustapi-macros = { path = "../rustapi-macros", version = "0.1.188" } +rustapi-macros = { path = "../rustapi-macros", version = "0.1.300" } [features] default = ["swagger-ui"] diff --git a/crates/rustapi-rs/src/lib.rs b/crates/rustapi-rs/src/lib.rs index d4a6bb5..5e2ae6f 100644 --- a/crates/rustapi-rs/src/lib.rs +++ b/crates/rustapi-rs/src/lib.rs @@ -54,7 +54,7 @@ //! //! ```toml //! [dependencies] -//! rustapi-rs = { version = "0.1.275", features = ["jwt", "cors"] } +//! rustapi-rs = { version = "0.1.300", features = ["jwt", "cors"] } //! ``` // Re-export core functionality diff --git a/crates/rustapi-toon/src/lib.rs b/crates/rustapi-toon/src/lib.rs index c8a1b41..4c4a4cb 100644 --- a/crates/rustapi-toon/src/lib.rs +++ b/crates/rustapi-toon/src/lib.rs @@ -30,7 +30,7 @@ //! //! ```toml //! [dependencies] -//! rustapi-rs = { version = "0.1.275", features = ["toon"] } +//! rustapi-rs = { version = "0.1.300", features = ["toon"] } //! ``` //! //! ### Toon Extractor diff --git a/docs/FEATURES.md b/docs/FEATURES.md index 10055b9..9e77b27 100644 --- a/docs/FEATURES.md +++ b/docs/FEATURES.md @@ -1157,7 +1157,7 @@ RustApi::new() ```toml [dependencies] -rustapi-rs = { version = "0.1.275", features = ["full"] } +rustapi-rs = { version = "0.1.300", features = ["full"] } ``` | Feature | Description | @@ -1285,7 +1285,7 @@ let events = store.query() ### 1. Use `simd-json` (when available) ```toml -rustapi-rs = { version = "0.1.275", features = ["simd-json"] } +rustapi-rs = { version = "0.1.300", features = ["simd-json"] } ``` 2-4x faster JSON parsing. diff --git a/docs/GETTING_STARTED.md b/docs/GETTING_STARTED.md index e2338e2..512c7d8 100644 --- a/docs/GETTING_STARTED.md +++ b/docs/GETTING_STARTED.md @@ -22,14 +22,14 @@ Add RustAPI to your `Cargo.toml`: ```toml [dependencies] -rustapi-rs = "0.1.275" +rustapi-rs = "0.1.300" ``` Or with specific features: ```toml [dependencies] -rustapi-rs = { version = "0.1.275", features = ["jwt", "cors", "toon", "ws", "view"] } +rustapi-rs = { version = "0.1.300", features = ["jwt", "cors", "toon", "ws", "view"] } ``` ### Available Features @@ -358,7 +358,7 @@ ApiError::internal("message") // 500 ### CORS ```toml -rustapi-rs = { version = "0.1.275", features = ["cors"] } +rustapi-rs = { version = "0.1.300", features = ["cors"] } ``` ```rust @@ -379,7 +379,7 @@ RustApi::new() ### JWT Authentication ```toml -rustapi-rs = { version = "0.1.275", features = ["jwt"] } +rustapi-rs = { version = "0.1.300", features = ["jwt"] } ``` ```rust @@ -409,7 +409,7 @@ async fn protected(user: AuthUser) -> Json { ### Rate Limiting ```toml -rustapi-rs = { version = "0.1.275", features = ["rate-limit"] } +rustapi-rs = { version = "0.1.300", features = ["rate-limit"] } ``` ```rust @@ -427,7 +427,7 @@ RustApi::new() ## TOON Format (LLM Optimization) ```toml -rustapi-rs = { version = "0.1.275", features = ["toon"] } +rustapi-rs = { version = "0.1.300", features = ["toon"] } ``` ```rust @@ -458,7 +458,7 @@ Response includes token counting headers: Real-time bidirectional communication: ```toml -rustapi-rs = { version = "0.1.275", features = ["ws"] } +rustapi-rs = { version = "0.1.300", features = ["ws"] } ``` ```rust @@ -495,7 +495,7 @@ websocat ws://localhost:8080/ws Server-side HTML rendering with Tera: ```toml -rustapi-rs = { version = "0.1.275", features = ["view"] } +rustapi-rs = { version = "0.1.300", features = ["view"] } ``` Create a template file `templates/index.html`: @@ -697,7 +697,7 @@ struct AnyBody { ... } Check that the `swagger-ui` feature is enabled (it's on by default): ```toml -rustapi-rs = { version = "0.1.275", features = ["swagger-ui"] } +rustapi-rs = { version = "0.1.300", features = ["swagger-ui"] } ``` ### CLI Commands Not Working diff --git a/docs/PHILOSOPHY.md b/docs/PHILOSOPHY.md index bc764c6..c53a28e 100644 --- a/docs/PHILOSOPHY.md +++ b/docs/PHILOSOPHY.md @@ -72,7 +72,7 @@ We achieve this through: ```toml # Your Cargo.toml - simple and stable [dependencies] -rustapi-rs = "0.1.275" +rustapi-rs = "0.1.300" ``` You never write: @@ -111,13 +111,13 @@ validator = "0.16" ```toml # Just the basics -rustapi-rs = "0.1.275" +rustapi-rs = "0.1.300" # Kitchen sink -rustapi-rs = { version = "0.1.275", features = ["full"] } +rustapi-rs = { version = "0.1.300", features = ["full"] } # Pick what you need -rustapi-rs = { version = "0.1.275", features = ["jwt", "cors", "toon"] } +rustapi-rs = { version = "0.1.300", features = ["jwt", "cors", "toon"] } ``` | Feature | What You Get | diff --git a/docs/README.md b/docs/README.md index 1477de3..7f4400f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -32,7 +32,7 @@ RustAPI provides a stable, ergonomic public API. Internal dependencies (`hyper`, ```toml [dependencies] -rustapi-rs = "0.1.275" +rustapi-rs = "0.1.300" ``` ```rust diff --git a/docs/cookbook/src/SUMMARY.md b/docs/cookbook/src/SUMMARY.md index 5ae3673..23287be 100644 --- a/docs/cookbook/src/SUMMARY.md +++ b/docs/cookbook/src/SUMMARY.md @@ -36,6 +36,7 @@ - [Real-time Chat](recipes/websockets.md) - [Production Tuning](recipes/high_performance.md) - [Resilience Patterns](recipes/resilience.md) + - [Time-Travel Debugging (Replay)](recipes/replay.md) - [Deployment](recipes/deployment.md) - [HTTP/3 (QUIC)](recipes/http3_quic.md) - [Automatic Status Page](recipes/status_page.md) diff --git a/docs/cookbook/src/crates/rustapi_extras.md b/docs/cookbook/src/crates/rustapi_extras.md index 4da630b..4d27b8b 100644 --- a/docs/cookbook/src/crates/rustapi_extras.md +++ b/docs/cookbook/src/crates/rustapi_extras.md @@ -89,7 +89,7 @@ The `insight` feature provides powerful real-time traffic analysis and debugging ```toml [dependencies] -rustapi-extras = { version = "0.1.275", features = ["insight"] } +rustapi-extras = { version = "0.1.300", features = ["insight"] } ``` ### Setup diff --git a/docs/cookbook/src/crates/rustapi_jobs.md b/docs/cookbook/src/crates/rustapi_jobs.md index 43c789f..49f1505 100644 --- a/docs/cookbook/src/crates/rustapi_jobs.md +++ b/docs/cookbook/src/crates/rustapi_jobs.md @@ -88,7 +88,7 @@ Enable the `redis` feature in `Cargo.toml`: ```toml [dependencies] -rustapi-jobs = { version = "0.1.275", features = ["redis"] } +rustapi-jobs = { version = "0.1.300", features = ["redis"] } ``` ```rust @@ -104,7 +104,7 @@ Enable the `postgres` feature in `Cargo.toml`. This uses `sqlx`. ```toml [dependencies] -rustapi-jobs = { version = "0.1.275", features = ["postgres"] } +rustapi-jobs = { version = "0.1.300", features = ["postgres"] } ``` ```rust diff --git a/docs/cookbook/src/getting_started/installation.md b/docs/cookbook/src/getting_started/installation.md index 6ea9d02..499d662 100644 --- a/docs/cookbook/src/getting_started/installation.md +++ b/docs/cookbook/src/getting_started/installation.md @@ -30,14 +30,14 @@ cargo-rustapi --version If you prefer not to use the CLI, you can add RustAPI to your `Cargo.toml` manually: ```bash -cargo add rustapi-rs@0.1.275 +cargo add rustapi-rs@0.1.300 ``` Or add this to your `Cargo.toml`: ```toml [dependencies] -rustapi-rs = "0.1.275" +rustapi-rs = "0.1.300" ``` ## Editor Setup diff --git a/docs/cookbook/src/learning/README.md b/docs/cookbook/src/learning/README.md index 1d0280a..a1c4f22 100644 --- a/docs/cookbook/src/learning/README.md +++ b/docs/cookbook/src/learning/README.md @@ -121,9 +121,11 @@ Build robust, observable, and secure systems. | 3 | **Advanced Security** | Add [OAuth2 and Security Headers](../crates/rustapi_extras.md#advanced-security) | | 4 | **Optimization** | Configure [Caching and Deduplication](../crates/rustapi_extras.md#optimization) | | 5 | **Background Jobs** | Implement [Reliable Job Queues](../crates/rustapi_jobs.md) | +| 6 | **Debugging** | Set up [Time-Travel Debugging](../recipes/replay.md) | **Related Cookbook Recipes:** - [rustapi-extras: The Toolbox](../crates/rustapi_extras.md) +- [Time-Travel Debugging](../recipes/replay.md) - [rustapi-jobs: The Workhorse](../crates/rustapi_jobs.md) - [Resilience Patterns](../recipes/resilience.md) @@ -188,6 +190,7 @@ Find examples by the RustAPI features they demonstrate: | TOON (`toon` feature) | `toon-api`, `mcp-server` | | OAuth2 (`oauth2-client`) | `auth-api` (extended) | | Circuit Breaker | `microservices` | +| Replay (`replay` feature) | `microservices` (conceptual) | | OpenTelemetry (`otel`) | `microservices-advanced` | | OpenAPI/Swagger | All examples | @@ -244,6 +247,7 @@ Each example includes: | [Real-time Chat](../recipes/websockets.md) | `websocket` | | [Production Tuning](../recipes/high_performance.md) | `microservices-advanced` | | [Resilience Patterns](../recipes/resilience.md) | `microservices` | +| [Time-Travel Debugging](../recipes/replay.md) | `microservices` | | [Deployment](../recipes/deployment.md) | `serverless-lambda` | --- diff --git a/docs/cookbook/src/recipes/csrf_protection.md b/docs/cookbook/src/recipes/csrf_protection.md index 71dac54..ac2bbb8 100644 --- a/docs/cookbook/src/recipes/csrf_protection.md +++ b/docs/cookbook/src/recipes/csrf_protection.md @@ -15,7 +15,7 @@ RustAPI's CSRF protection works by: ```toml [dependencies] -rustapi-rs = { version = "0.1.275", features = ["csrf"] } +rustapi-rs = { version = "0.1.300", features = ["csrf"] } ``` ```rust diff --git a/docs/cookbook/src/recipes/file_uploads.md b/docs/cookbook/src/recipes/file_uploads.md index 2671366..f089339 100644 --- a/docs/cookbook/src/recipes/file_uploads.md +++ b/docs/cookbook/src/recipes/file_uploads.md @@ -6,7 +6,7 @@ Handling file uploads efficiently is crucial. RustAPI allows you to stream `Mult ```toml [dependencies] -rustapi-rs = "0.1.275" +rustapi-rs = "0.1.300" tokio = { version = "1", features = ["fs", "io-util"] } uuid = { version = "1", features = ["v4"] } ``` diff --git a/docs/cookbook/src/recipes/http3_quic.md b/docs/cookbook/src/recipes/http3_quic.md index 2415513..637d9f9 100644 --- a/docs/cookbook/src/recipes/http3_quic.md +++ b/docs/cookbook/src/recipes/http3_quic.md @@ -8,9 +8,9 @@ HTTP/3 support is optional and can be enabled via feature flags in `Cargo.toml`. ```toml [dependencies] -rustapi-rs = { version = "0.1.275", features = ["http3"] } +rustapi-rs = { version = "0.1.300", features = ["http3"] } # For development with self-signed certificates -rustapi-rs = { version = "0.1.275", features = ["http3", "http3-dev"] } +rustapi-rs = { version = "0.1.300", features = ["http3", "http3-dev"] } ``` ## Running an HTTP/3 Server diff --git a/docs/cookbook/src/recipes/jwt_auth.md b/docs/cookbook/src/recipes/jwt_auth.md index 14195ef..eca436a 100644 --- a/docs/cookbook/src/recipes/jwt_auth.md +++ b/docs/cookbook/src/recipes/jwt_auth.md @@ -8,7 +8,7 @@ Enable the `jwt` feature in your `Cargo.toml`: ```toml [dependencies] -rustapi-rs = { version = "0.1.275", features = ["jwt"] } +rustapi-rs = { version = "0.1.300", features = ["jwt"] } serde = { version = "1", features = ["derive"] } ``` diff --git a/docs/cookbook/src/recipes/replay.md b/docs/cookbook/src/recipes/replay.md index 6cbe399..8e83a92 100644 --- a/docs/cookbook/src/recipes/replay.md +++ b/docs/cookbook/src/recipes/replay.md @@ -10,7 +10,7 @@ Add the `replay` feature to your `Cargo.toml`: ```toml [dependencies] -rustapi-rs = { version = "0.1", features = ["replay"] } +rustapi-rs = { version = "0.1.300", features = ["replay"] } ``` Add the `ReplayLayer` middleware to your application: diff --git a/docs/cookbook/src/recipes/resilience.md b/docs/cookbook/src/recipes/resilience.md index 5736185..17dc28b 100644 --- a/docs/cookbook/src/recipes/resilience.md +++ b/docs/cookbook/src/recipes/resilience.md @@ -10,9 +10,9 @@ Add the resilience features to your `Cargo.toml`. For example: ```toml [dependencies] -rustapi-rs = { version = "0.1.275", features = ["full"] } +rustapi-rs = { version = "0.1.300", features = ["full"] } # OR cherry-pick features -# rustapi-extras = { version = "0.1.275", features = ["circuit-breaker", "retry", "timeout"] } +# rustapi-extras = { version = "0.1.300", features = ["circuit-breaker", "retry", "timeout"] } ``` ## Circuit Breaker diff --git a/docs/cookbook/src/recipes/websockets.md b/docs/cookbook/src/recipes/websockets.md index 48c9510..2ce8acb 100644 --- a/docs/cookbook/src/recipes/websockets.md +++ b/docs/cookbook/src/recipes/websockets.md @@ -6,7 +6,7 @@ WebSockets allow full-duplex communication between the client and server. RustAP ```toml [dependencies] -rustapi-ws = "0.1.275" +rustapi-ws = "0.1.300" tokio = { version = "1", features = ["sync"] } futures = "0.3" ``` diff --git a/docs/cookbook/src/troubleshooting.md b/docs/cookbook/src/troubleshooting.md index 9e61166..64af501 100644 --- a/docs/cookbook/src/troubleshooting.md +++ b/docs/cookbook/src/troubleshooting.md @@ -47,7 +47,7 @@ utoipa = "4.2" # ❌ Don't add this **Correct:** ```toml [dependencies] -rustapi-rs = { version = "0.1.275", features = ["full"] } +rustapi-rs = { version = "0.1.300", features = ["full"] } # rustapi-openapi is re-exported through rustapi-rs ```