Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
31bcee9
fix(dispatch): acquire GIL before AppState write lock to prevent dead…
ZhuchkaTriplesix Sep 29, 2026
5d483e9
Merge pull request #227 from QueryaHub/issue-205-fix-gil-lock-deadlock
ZhuchkaTriplesix Sep 29, 2026
84c4f08
fix(dispatch): reject oversized body via Content-Length before readin…
ZhuchkaTriplesix Sep 29, 2026
d94a322
Merge pull request #228 from QueryaHub/issue-206-body-limit-before-read
ZhuchkaTriplesix Sep 29, 2026
df6f14c
fix(rate-limit): stop trusting X-Forwarded-For / X-Real-IP by default
ZhuchkaTriplesix Sep 29, 2026
5d30a86
docs(rate-limiting): document trusted-forwarded-ip and the ip default…
ZhuchkaTriplesix Sep 29, 2026
a2dd88a
Merge pull request #229 from QueryaHub/issue-207-rate-limit-trust-proxy
ZhuchkaTriplesix Sep 29, 2026
56bbd7c
fix(rate-limit): bound shard memory with eviction instead of unbounde…
ZhuchkaTriplesix Sep 29, 2026
af956a3
Merge pull request #230 from QueryaHub/issue-208-rate-limit-bounded-s…
ZhuchkaTriplesix Sep 29, 2026
c069650
fix(middleware): apply_cors/apply_csrf compose instead of clobbering …
ZhuchkaTriplesix Sep 29, 2026
a4ac692
Merge pull request #231 from QueryaHub/issue-209-middleware-stack-clo…
ZhuchkaTriplesix Sep 29, 2026
1b277fc
fix(dispatch): remove /test_db prototype endpoint
ZhuchkaTriplesix Sep 29, 2026
a77aad6
Merge pull request #232 from QueryaHub/issue-210-remove-test-db-endpoint
ZhuchkaTriplesix Sep 29, 2026
b1c18ea
fix(dispatch): stop misreading list/dict handler returns as raw bytes…
ZhuchkaTriplesix Sep 29, 2026
8bc5931
Merge pull request #233 from QueryaHub/issue-211-fix-list-dict-handle…
ZhuchkaTriplesix Sep 29, 2026
9f57546
fix(routing): wildcard *path params never get schema-lite type coercion
ZhuchkaTriplesix Sep 29, 2026
eb0d957
Merge pull request #234 from QueryaHub/issue-212-path-param-wildcard-…
ZhuchkaTriplesix Sep 29, 2026
a1908c1
fix(db): decode UUID, timestamp, and numeric types in DBQuery without…
ZhuchkaTriplesix Oct 17, 2026
f65835e
Merge pull request #237 from QueryaHub/issue-213-dbquery-result-decoding
ZhuchkaTriplesix Oct 17, 2026
46e7f86
fix(docs): pin CDN asset versions, add SRI integrity hashes and allow…
ZhuchkaTriplesix Oct 18, 2026
16720d2
Merge pull request #238 from QueryaHub/issue-226-docs-ui-sri-pinned-cdn
ZhuchkaTriplesix Oct 18, 2026
e66cad6
fix(websocket): validate Origin header on handshake to prevent CSWSH
ZhuchkaTriplesix Oct 18, 2026
47fe214
Merge pull request #239 from QueryaHub/issue-225-websocket-origin-val…
ZhuchkaTriplesix Oct 18, 2026
ecd052b
fix(auth): match Bearer scheme name case-insensitively
ZhuchkaTriplesix Oct 18, 2026
1bdd87d
Merge pull request #240 from QueryaHub/issue-224-bearer-case-insensitive
ZhuchkaTriplesix Oct 18, 2026
4f661d2
fix(dispatch): build json and multipart error bodies using serde_json…
ZhuchkaTriplesix Oct 18, 2026
9dc37ad
fix(auth): ignore malformed cookie segments instead of aborting search
ZhuchkaTriplesix Oct 18, 2026
22f26ff
Merge pull request #242 from QueryaHub/issue-222-json-error-escaping
ZhuchkaTriplesix Oct 18, 2026
741e0bf
Merge pull request #241 from QueryaHub/issue-223-cookie-malformed-pair
ZhuchkaTriplesix Oct 18, 2026
deadf9c
fix(sse): reject newlines in event and id fields to prevent SSE injec…
ZhuchkaTriplesix Oct 18, 2026
86b68d6
fix(rsgi): forward __call__, async iteration, and websocket methods o…
ZhuchkaTriplesix Oct 18, 2026
f8a9c3f
Merge pull request #243 from QueryaHub/issue-221-sse-field-sanitization
ZhuchkaTriplesix Oct 18, 2026
42f851c
fix(resilience): fix AdaptiveConcurrencyLimiter self-throttling and u…
ZhuchkaTriplesix Oct 18, 2026
f1ba0d1
Merge pull request #244 from QueryaHub/issue-216-protocol-wrapper-proxy
ZhuchkaTriplesix Oct 18, 2026
5eca561
docs(db): clarify DBQuery chunk_size batches rows into lists rather t…
ZhuchkaTriplesix Oct 18, 2026
12f12a6
Merge pull request #245 from QueryaHub/issue-215-adaptive-concurrency…
ZhuchkaTriplesix Oct 18, 2026
336e968
Merge pull request #246 from QueryaHub/issue-214-dbquery-chunk-size-docs
ZhuchkaTriplesix Oct 18, 2026
d6f1045
perf(dispatch): fast-path dict/list handler returns with native JSON …
ZhuchkaTriplesix Oct 18, 2026
20b2439
fix(schema): match python json.dumps default separators (', ', ': ')
ZhuchkaTriplesix Oct 18, 2026
06730de
Merge pull request #247 from QueryaHub/issue-217-json-handler-fast-path
ZhuchkaTriplesix Oct 18, 2026
17ea856
perf(params): optimize header_get_lax with exact lookup and zero-allo…
ZhuchkaTriplesix Oct 18, 2026
d3f0b09
perf(dispatch): zero-copy request body with PyBackedBytes and elimina…
ZhuchkaTriplesix Oct 18, 2026
05086f7
Merge pull request #248 from QueryaHub/issue-220-header-get-lax-perf
ZhuchkaTriplesix Oct 18, 2026
364ba7f
Merge pull request #249 from QueryaHub/issue-219-request-body-perf
ZhuchkaTriplesix Oct 18, 2026
ac8bc24
perf(cors): compile CORS and security headers natively and enable syn…
ZhuchkaTriplesix Oct 18, 2026
5747e8f
Merge pull request #250 from QueryaHub/issue-218-cors-security-header…
ZhuchkaTriplesix Oct 18, 2026
2dd325c
perf(response): replace protocol.getattr with call_method1 to avoid P…
ZhuchkaTriplesix Oct 18, 2026
c87e857
perf(rate_limit): eliminate String allocation for existing keys in Ra…
ZhuchkaTriplesix Oct 18, 2026
c2a14c1
Merge pull request #258 from QueryaHub/issue-251-protocol-call-method
ZhuchkaTriplesix Oct 18, 2026
27aec5c
Merge pull request #259 from QueryaHub/issue-252-ratelimit-no-alloc
ZhuchkaTriplesix Oct 18, 2026
15b8fed
perf(dispatch): borrow &str instead of allocating String in try_rsgi_…
ZhuchkaTriplesix Oct 18, 2026
a95cb0d
Merge pull request #260 from QueryaHub/issue-253-sync-short-circuit-b…
ZhuchkaTriplesix Oct 18, 2026
7a7fad9
perf(dispatch): enable sync short-circuit for sync routes with path p…
ZhuchkaTriplesix Oct 18, 2026
ff163a8
Merge pull request #261 from QueryaHub/issue-254-sync-path-params
ZhuchkaTriplesix Oct 18, 2026
5fc9960
perf(dispatch): call model_validate_json directly and stream JSON int…
ZhuchkaTriplesix Oct 18, 2026
855dc58
Merge pull request #262 from QueryaHub/issue-255-pydantic-model-valid…
ZhuchkaTriplesix Oct 18, 2026
0543ac1
perf(dispatch): avoid redundant RwLock reads in handle_rsgi (#256)
ZhuchkaTriplesix Oct 18, 2026
6c26a3c
Merge pull request #263 from QueryaHub/issue-256-avoid-rwlock-contention
ZhuchkaTriplesix Oct 18, 2026
56fcd1b
perf(websocket): streamline frame receive/send without Tokio future b…
ZhuchkaTriplesix Oct 18, 2026
7a7d25b
Merge pull request #264 from QueryaHub/issue-257-streamline-ws-futures
ZhuchkaTriplesix Oct 18, 2026
afc96ad
chore(release): prepare v0.7.0 release
ZhuchkaTriplesix Oct 18, 2026
2dead15
Merge pull request #265 from QueryaHub/release-v0.7.0
ZhuchkaTriplesix Oct 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,45 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.7.0] - 2026-10-18

### Performance

- **Zero-Tokio WebSocket Transport**: Direct Python coroutine execution for WebSocket `receive`/`send`/`accept` eliminating Tokio task hops and future bridge overhead per frame ([#257](https://github.com/QueryaHub/OxyRoute/issues/257), [#264](https://github.com/QueryaHub/OxyRoute/pull/264)).
- **Lock-Free Concurrency Checks**: Move `in_flight` and `max_concurrency` atomics directly to `App` and snapshot `AppState` once per request, eliminating reader lock contention ([#256](https://github.com/QueryaHub/OxyRoute/issues/256), [#263](https://github.com/QueryaHub/OxyRoute/pull/263)).
- **Direct Pydantic Validation & Zero-AST JSON**: Direct `model_validate_json` execution and direct streaming of JSON bytes into Python dicts bypassing intermediate AST copies ([#255](https://github.com/QueryaHub/OxyRoute/issues/255), [#262](https://github.com/QueryaHub/OxyRoute/pull/262)).
- **Sync Short-Circuit for Path Parameters**: Extended zero-Tokio sync short-circuit path to handle sync routes with path parameters ([#254](https://github.com/QueryaHub/OxyRoute/issues/254), [#261](https://github.com/QueryaHub/OxyRoute/pull/261)).
- **Zero-Allocation Routing Attributes**: Extract string slices `&str` instead of heap-allocated `String` during preliminary dispatch ([#253](https://github.com/QueryaHub/OxyRoute/issues/253), [#260](https://github.com/QueryaHub/OxyRoute/pull/260)).
- **Zero-Allocation Rate Limiting**: Zero-alloc key lookup in `RateLimiter::check` reusing byte buffers ([#252](https://github.com/QueryaHub/OxyRoute/issues/252), [#259](https://github.com/QueryaHub/OxyRoute/pull/259)).
- **Cached Protocol Calls**: Replaced runtime `getattr` calls on protocol objects with direct method calls ([#251](https://github.com/QueryaHub/OxyRoute/issues/251), [#258](https://github.com/QueryaHub/OxyRoute/pull/258)).
- **Native Compiled CORS & Security Headers**: Compiled CORS and security header policies executed directly in Rust without Python interop on short-circuited paths ([#218](https://github.com/QueryaHub/OxyRoute/issues/218), [#250](https://github.com/QueryaHub/OxyRoute/pull/250)).
- **Zero-Copy Request Body**: Zero-copy request body handling via `PyBackedBytes` avoiding double memory copying ([#219](https://github.com/QueryaHub/OxyRoute/issues/219), [#249](https://github.com/QueryaHub/OxyRoute/pull/249)).
- **Optimized Header Scanning**: Single-pass case-insensitive ASCII scan in `header_get_lax` with short-circuit lookup ([#220](https://github.com/QueryaHub/OxyRoute/issues/220), [#248](https://github.com/QueryaHub/OxyRoute/pull/248)).
- **Native Fast JSON Serialization**: Fast-path native JSON serializer for dict and list responses ([#217](https://github.com/QueryaHub/OxyRoute/issues/217), [#247](https://github.com/QueryaHub/OxyRoute/pull/247)).

### Security & Hardening

- **CSWSH Protection**: Validate `Origin` header during WebSocket handshake with `allowed_origins` parameter ([#225](https://github.com/QueryaHub/OxyRoute/issues/225), [#239](https://github.com/QueryaHub/OxyRoute/pull/239)).
- **Content-Length Guard**: Reject oversized request bodies using `Content-Length` before allocating buffer memory ([#206](https://github.com/QueryaHub/OxyRoute/issues/206), [#228](https://github.com/QueryaHub/OxyRoute/pull/228)).
- **Rate Limiting Security**: Disallow trusting `X-Forwarded-For` / `X-Real-IP` by default unless explicitly configured ([#207](https://github.com/QueryaHub/OxyRoute/issues/207), [#229](https://github.com/QueryaHub/OxyRoute/pull/229)).
- **Bounded Rate Limiter Memory**: Bound shard memory with LRU-style eviction preventing memory exhaustion from arbitrary IP/key floods ([#208](https://github.com/QueryaHub/OxyRoute/issues/208), [#230](https://github.com/QueryaHub/OxyRoute/pull/230)).
- **SSE Field Sanitization**: Prevent CRLF injection by rejecting newlines in SSE `event` and `id` fields ([#221](https://github.com/QueryaHub/OxyRoute/issues/221), [#243](https://github.com/QueryaHub/OxyRoute/pull/243)).
- **JSON & Multipart Error Safety**: Build error bodies safely with `serde_json::json!` avoiding format string injection ([#222](https://github.com/QueryaHub/OxyRoute/issues/222), [#242](https://github.com/QueryaHub/OxyRoute/pull/242)).
- **Case-Insensitive Bearer Auth**: Match `Bearer` scheme case-insensitively per RFC 6750 ([#224](https://github.com/QueryaHub/OxyRoute/issues/224), [#240](https://github.com/QueryaHub/OxyRoute/pull/240)).
- **Robust Cookie Parsing**: Ignore malformed cookie segments instead of aborting search ([#223](https://github.com/QueryaHub/OxyRoute/issues/223), [#241](https://github.com/QueryaHub/OxyRoute/pull/241)).
- **Docs UI Security**: Pin CDN asset versions and add SRI integrity hashes for Scalar / Swagger UI ([#226](https://github.com/QueryaHub/OxyRoute/issues/226), [#238](https://github.com/QueryaHub/OxyRoute/pull/238)).

### Bug Fixes

- **Deadlock Prevention**: Acquire Python GIL before taking `AppState` write lock to eliminate AB-BA deadlocks with background worker threads ([#205](https://github.com/QueryaHub/OxyRoute/issues/205), [#227](https://github.com/QueryaHub/OxyRoute/pull/227)).
- **Middleware Stacking**: `apply_cors()` and `apply_csrf()` now compose properly onto existing middleware chains rather than overwriting them ([#209](https://github.com/QueryaHub/OxyRoute/issues/209), [#231](https://github.com/QueryaHub/OxyRoute/pull/231)).
- **Wildcard Path Parameters**: Wildcard `*path` parameters preserve string type and bypass numeric/float schema-lite coercion ([#212](https://github.com/QueryaHub/OxyRoute/issues/212), [#234](https://github.com/QueryaHub/OxyRoute/pull/234)).
- **Handler Return Types**: Correctly handle dict/list returns and prevent status code misinterpretation ([#211](https://github.com/QueryaHub/OxyRoute/issues/211), [#233](https://github.com/QueryaHub/OxyRoute/pull/233)).
- **Database Query Decoding**: Robust decoding for Postgres UUID, Timestamp, and Decimal types without panicking ([#213](https://github.com/QueryaHub/OxyRoute/issues/213), [#237](https://github.com/QueryaHub/OxyRoute/pull/237)).
- **Protocol Wrapper Proxy**: Forward all RSGI protocol methods (`__call__`, async iteration, WebSockets) through `_ProtocolWrapper` ([#216](https://github.com/QueryaHub/OxyRoute/issues/216), [#244](https://github.com/QueryaHub/OxyRoute/pull/244)).
- **Adaptive Concurrency Limiter**: Fix unit mismatches and prevent self-throttling under normal operation ([#215](https://github.com/QueryaHub/OxyRoute/issues/215), [#245](https://github.com/QueryaHub/OxyRoute/pull/245)).
- **Cleanup**: Remove deprecated `/test_db` debug prototype endpoint ([#210](https://github.com/QueryaHub/OxyRoute/issues/210), [#232](https://github.com/QueryaHub/OxyRoute/pull/232)).

## [0.6.0] - 2026-09-12

### Added
Expand Down
Loading
Loading