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:
Just reproduced the official Basecamp’s Pi benchmark with Rage.
Rage replaced Rails+Puma+Resque+Redis, handled 10x clients, with ~22x the deliveries per second and ~4x less memory per connection.
The most common piece of feedback I got about Rage? “API-only sucks.”
So I shipped the official Inertia.js adapter. Auto-starts Vite in dev, pre-builds assets for prod, exposes Inertia props out of the box.
What’s your next excuse?
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.
Benchmarks across a full request cycle - request in, connection pool, database query - show the 2.2x to 4x improvement. In 30 lines of code.
Simplicity-driven development wins again.
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.
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.