Reference

Changelog

Full version history for RoExpress. Breaking changes are marked breaking.

v2.5 | Typed Call Form current
Standalone public types, lazy loading, pre-baked remotes, and new utility modules
  • Added `Types.luau` — explicit public-facing type exports for every module, no private field leakage
  • `RoExpress("App")` now returns a typed `RoExpress.App` instance instead of `any`
  • Lazy module loading via `__index` + `rawset` cache — modules require only on first access
  • Pre-baked `RemoteEvent` and `UnreliableRemoteEvent` are now stored as children of the root ModuleScript, removing the server/client timing race
  • Bridge API renamed: `Bind` → `On`, `BindOnce` → `Once`, `Fire` → `Emit`, `UnbindAll` → `Clear`; handlers return a `BridgeConnection` with `:Disconnect()`
  • Added `Maid` — lifecycle cleanup utility with duck-typed cleanup and nested child maids
  • Added `Debounce` — global and per-key cooldown wrappers that return `true` when a call succeeds
v2.3 | Compact Arguments
Handler signatures slim from four arguments to two
  • New compact handler form: function(req, res) | req.player and req.raw hold the old first and second args
  • Detection via debug.info parameter count | existing four-arg handlers continue working without any changes backward compat
  • Stream rebuilt as generic typed channels | Stream.Channel(name, schema), ch:Set, ch:Flush, ch:Rewind
  • breaking Stream (v2.4) replaces the old FPS-only singleton API | see the migration guide
  • Codec LZ77 window size increased from 128 to 512 bytes | better ratio on larger payloads, same API
  • TypeCoercer: added UDim, Rect, UDim2 support
v2.2.3 | Issue #6 Fix
Listener race condition on rapid successive events patched
  • Fixed: listener:Once could fire multiple times under rapid event delivery (GitHub issue #6)
  • Root cause: the disconnect handle was captured before the connection closed | now uses an atomic flag
  • v2.2.1 and v2.2.2 were failed patch attempts; v2.2.3 is the confirmed fix
v2.2 | Server Push & Tamper
Reliable server-initiated events and built-in exploit detection
  • Added app:Push, app:PushAll, app:PushTo | reliable server-to-client events on the existing RemoteEvent
  • Listener transparently separates push packets from request-response packets | no API change on the client
  • Added Tamper module | automatic strike tracking, configurable threshold, kick on exceed
  • TokenBucket: added Grant, GrantAll for rewarding active players after round events
  • Router: typed params now support =boolean and =string in addition to =number
v2.1 | Ports & Benchmark
Namespace isolation and round-trip latency measurement
  • Added Port module | isolated App instances each on their own RemoteEvent
  • Added Benchmark module | fires real requests and measures min/avg/median/p95/p99/max
  • Broadcast: added per-event rate limiting in addition to the existing global limit
  • Bridge: added bridge.BindOnce for single-fire internal listeners
  • Query string parsing added to Router | req.query.page etc.
v2.0 | Full Rewrite breaking
Complete redesign | HTTP semantics, TypeCoercer, Stream, Codec, Bridge
  • breaking All v1 APIs removed | v2 is a ground-up redesign
  • App: HTTP-style routing with GET/POST/PUT/DELETE, middleware, status codes
  • Network: client-side request with callback and query support
  • Listener: client-side event subscription with On, Once, Off, Clear
  • Broadcast: unreliable UnreliableRemoteEvent channel with rate limiting
  • Bridge: internal server-side event bus for module decoupling
  • Stream: FPS position channel (later replaced in v2.3)
  • Codec: LZ77 compression for route-level opt-in
  • Router: named and typed route params, wildcard segments
  • TokenBucket: per-player token bucket rate limiter
  • TypeCoercer: serialize/deserialize Roblox types to string
v1.6
Last v1 release | simple RemoteEvent wrapper
  • Single RemoteEvent with string-keyed event handlers
  • Per-player rate limiting (basic, no token model)
  • No compression, no routing, no push
  • Maintained for backward compat while v2 was developed

See also

Roadmap | what's coming in v2.3+  ·  Migration Guide | v1 → v2 upgrade steps  ·  GitHub | full commit history