Pinned Tweet
Why is Ruby losing ground? It's not because the language is "dead" - it's because our tools haven't evolved to meet modern performance and stability needs.
I built Rage to give Ruby teams the missing pieces they've been looking for in other ecosystems.
A thread on the mission behind Rage:
Rage just got daemons.
Rage::Daemon lets you run long-lived background processes alongside your app.
No external process managers needed. The processes your app depends on now have a home inside the app, supervised by the framework.
For several months, I wanted to optimise the code in Rage that schedules fibers to be woken up at a specific time. The plan was to use skip lists.
Last week, @maciejmensfeld’s compilation of Ruby performance PRs got me inspired, and I decided to give it another look 🧵
Looking back at the previous example, if 1000 fibers try to fetch a connection from an empty pool, each new timer will be `Time. now + 5` - i.e. higher than the previous one.
Which means that if we first check the last element in the list before doing the O(N) insertion, we can get constant-time insertions in the most common scenario.
Recurring background tasks in Rage are one config block away.
Background tasks run on fibers - light, fast, and in-process.
The common Ruby advice - “default to threads, only reach for fibers if you’re I/O-heavy” - is backwards.
The worst case for a fiber-based server is thread level performance.
The downside isn’t really there. The upside is.
What happens when you move two production Rails apps from threads to fibers?
6x and 10x lower p95 latency under load. 0% errors.
Real endpoints, real traffic - not micro-benchmarks.
rage-rb.dev/blog/2026/05/11/…
Rage has official OpenTelemetry support.
Those parallel traces? That’s just fibers doing their concurrency thing without you having to worry about it.
Works with any OTel-compatible backend.





