Skip to content

Releases: medz/roux

v0.4.0

08 Mar 20:11

Choose a tag to compare

0.4.0

Features

  • Add DuplicatePolicy.append so 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

08 Mar 06:56

Choose a tag to compare

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 ANY and exact-method
    matches, with ANY ordered first at the same scope.
  • Add configurable duplicate route registration via DuplicatePolicy.reject,
    DuplicatePolicy.replace, and DuplicatePolicy.keepFirst.

v0.2.0

11 Feb 19:57

Choose a tag to compare

Highlights

  • Rebooted router core around Router<T> and trie-based matching internals.
  • Added method-aware routing with optional method on add / 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 Router methods.
  • 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

04 Feb 05:48

Choose a tag to compare

Features

  • Add a runnable example/main.dart showcasing router setup and matching.

v0.1.0

04 Feb 05:22

Choose a tag to compare

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.