Releases: medz/roux
Releases · medz/roux
v0.4.0
0.4.0
Features
- Add
DuplicatePolicy.appendso a normalized route slot can retain multiple
handlers in registration order. Router.matchAll(...)now expands appended entries from the same slot while
keeping deterministic route priority ordering.
Fixes
matchAll(...)now snapshots captured params before backtracking so lazy
parameter materialization stays stable for every collected match.- Lookup normalization now rejects interior empty path segments such as
"/users//42"instead of letting fallback wildcards match them.
Performance
- Reduced matcher hot-path overhead by removing recursive traversal and
streamlining slot collection/materialization. - Improved
matchAll(...)throughput across static, dynamic, and appended-route
scenarios with dedicated benchmarks.
v0.3.0
Features
- Add
Router.matchAll(...)to collect every matching route in deterministic
less-specific-to-more-specific order. - Method-aware multi-match lookups now include both
ANYand exact-method
matches, withANYordered first at the same scope. - Add configurable duplicate route registration via
DuplicatePolicy.reject,
DuplicatePolicy.replace, andDuplicatePolicy.keepFirst.
v0.2.0
Highlights
- Rebooted router core around
Router<T>and trie-based matching internals. - Added method-aware routing with optional
methodonadd/addAll/match. - Kept deterministic precedence: static > param > wildcard > global fallback.
- Added benchmark suite updates for matrix lookup, relic-style comparison, and single-add scenarios.
Breaking Changes
- Legacy function-style APIs were removed in favor of
Routermethods. - This release should be treated as a breaking API update from
0.1.x.
Benchmark Snapshot (release-time)
Environment: local release run on 2026-02-12 (CST), routeCount=500.
All benchmark commands use benchmark_harness-based runners in bench/.
1) Lookup matrix (dart run bench/compare.dart 500)
Roux speedup vs Routingkit (routingkit/roux):
- Static RoundRobin x100000: 21.06x
- Static Hot x100000: 23.69x
- Dynamic RoundRobin x100000: 9.82x
- Dynamic Hot x100000: 9.49x
Roux speedup vs Relic (relic/roux):
- Static RoundRobin x100000: 9.83x
- Static Hot x100000: 10.10x
- Dynamic RoundRobin x100000: 48.88x
- Dynamic Hot x100000: 2.35x
2) Relic-style benchmark (dart run bench/relic_compare.dart 500)
Roux speedup vs Routingkit:
- add static: 2.34x
- lookup static: 7.11x
- add dynamic: 1.35x
- lookup dynamic: 8.49x
Roux speedup vs Relic:
- add static: 1.40x
- lookup static: 5.54x
- add dynamic: 1.10x
- lookup dynamic: 1.81x
3) Single-add benchmark (dart run bench/add_single_compare.dart)
Roux speedup vs Routingkit:
- single add static: 5.36x
- single add dynamic: 4.63x
Roux speedup vs Relic:
- single add static: 2.53x
- single add dynamic: 1.90x
Notes
- Benchmark numbers are snapshots from one machine and should be interpreted as relative trends.
- For reproducibility, run the same commands in this repository with your target runtime/hardware.
v0.1.1
v0.1.0
Added
- Rebranded as Roux with refreshed documentation and examples.
- Function-based routing API (createRouter, addRoute, findRoute, findAllRoutes, removeRoute, routeToRegExp).
- Comprehensive test suite for routing operations.
- Benchmarks for route matching.
Changed
- README redesigned with clearer installation and usage guidance.
- GitHub Actions workflow updated for testing.
- Project versioning, dependencies, and build configuration updated.