The problem isn't the Ruby language; it's that our primary tools haven't evolved to address the modern requirements of request-cycle latency and synchronous I/O.
The Architecture:
- Concurrency via Fibers: Rage uses a custom Fiber scheduler. You get non-blocking I/O using standard, synchronous-looking Ruby, while the framework handles context switching automatically.
- A Lean Core by Design: We treat low overhead as a design constraint, not just a benchmark goal. When a framework fights for every millisecond, it prevents us from solving problems by piling on layers of bloat.
- The No-Upgrade Philosophy: One of the biggest drains on Ruby teams is tooling churn. We focus strictly on stable APIs. Our goal is that "Upgrade Rage" is a task that never appears in your Jira; most updates should be a simple "bundle update".
What's included:
- Zero-dependency WebSockets - Fiber-based Background Jobs - Auto-generated OpenAPI Docs - Domain Events - Rails Compatibility (controllers, Active Record, routes work as you expect)
Happy to answer any questions about the implementation, benchmarks, or why you can't just use Elixir.