Where is Ruby Headed in 2021?

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • SonarLint - Deliver Cleaner and Safer Code - Right in Your IDE of Choice!
  • Scout APM - Less time debugging, more time building
  • OPS - Build and Run Open Source Unikernels
  • GitHub repo crystal

    The Crystal Programming Language

    > [...] I’ve used a number of languages and dabbled in a few frameworks but nothing I’ve used brings me joy like ruby does.

    Totally agree, 100%. Ruby isn't "perfect", but it's a pleasure to use. As in, I actually want to use it, not just am "ok" or ambivalent about it. I have my nitpicks about Ruby, about Rails and other things just like anyone, but I second your comment that nothing else has been able to match that sweet spot of great productivity that is a direct result of a fantastic developer experience created through a programming language that just "flows" linguistically so much easier than...well, everything else I've personally ever seen (with Python being an arguable tie there).

    My biggest gripes about Ruby and its ecosystem have been the pain in the posterior it is to deploy apps (all those gems, which eventually wind up abandonware and now you've got dependency hell, especially with apps not maintained in 5 years or something) and its relative sluggishness when compared against some other deployable artifacts.

    Personally, I think Crystal (https://crystal-lang.org/) fixes pretty much all of this, as long as you're willing to cede a few things due to the nature of the beast (compiled vs. interpreted).

    And that's not considering the speed improvements Ruby's gained in the last few years (3x3); it's undoubtedly far better now than when I last released an app with Ruby or Rails (circa ~2016, maybe ~2017ish). I'm just so disappointed that everything's "JavaScript this" or "Go(lang) that". Not that I have a problem with Go (I do have many problems with JavaScript, which I strongly dislike, but that's a separate topic), it's just that this industry acts like lemmings in a lot of cases. "New shiny!" attracts the horde, and that critical mass creates a new tyranny of being the "snowflake" technology/stack/developer, which has a lot of risks for both the organization paying for what you build in tech stack $X (rare language, can I replace this hire later, can I find somebody that knows $X, lower risk if we use $Y b/c we can find plentiful/cheap talent in $Y or $Y salaries are lower than $X), and by that token therefore it's a risk to the developer's career to get hard core on anything perceived as "snowflake" or otherwise not "flavor of the $(month || year || interval)".

    Which is just so sad, and I feel like it's a contributing factor in Ruby's decline (in terms of hiring demand for full time positions). It's not at all the technology's fault, and it's not a performance "issue" whatsoever anymore (really wasn't in the first place unless you were nickel and diming literally everything or did stuff just plain stupid).

    Go, Rust and friends all have their own benefits and drawbacks too, and they're fine languages with their own killer features and/or quirks. They can produce pre-compiled code for a variety of platforms from a single machine, resulting in (if desired) a single file binary deployable artifact that can be installed and simply run, no dependencies to install, no OS configuration necessary. Ruby, without lots of hacks potentially questionable hacks and potential future abandonware, doesn't do that at all AFAIK, but Crystal can also produce fat binaries just like Go can (and I assume Rust can too), making it the best of both worlds in my opinion.

    Crystal: compile Ruby-like code to a "fat" binary for single file, zero-config/dependency deployment that runs true multithreaded apps as native code. And most of those tradeoffs you'd have to give up because "compiled" - most of those you can work around pretty easily and I've heard you can even have it embed source code in the binary to be run in interpreted mode at runtime, so you can have your app compiled for the vast majority of use cases, then have it run its own code inside itself interpreted/JIT'd when run, giving you access to many (all?) of the features you'd otherwise think you'd have to sacrifice.

    So yeah, I love Ruby, and I think Crystal is definitely the next evolutionary step for that language and ecosystem. No hate on Ruby there whatsoever, I just see it as a more mature option for a lot of use cases, but definitely not all. I don't know if you can do that metaprogramming magic Ruby is so amazing at any faster in Crystal since you'd have to run the code as interpreted at runtime, not pre-compiled (AFAIK), so it's not an outright replacement. Still, I think it's damn near one, and you can probably "color outside the lines" just a tiny bit as needed when you absolutely MUST have that feature anyway.

    Okay, end stream-of-consciousness. I haven't been able to sleep for 3 days, so rambling is a sort of unavoidable side effect...sorry about that. But yeah, try Crystal if you haven't already, you'll likely be very happily shocked at how amazing it is!

  • GitHub repo ToolJet

    Open-source low-code framework for building React-based web applications and internal tools 🚀

    We recently migrated (ToolJet)[https://github.com/ToolJet/ToolJet]'s server from Ruby ( Rails ) to TypeScript ( Nest.js ). Our goal was to have only one language in our stack so that it will be easy for the open-source contributors. I have been working as a Ruby dev since 2015 and initially I thought we might miss out on a lot of things when we switch to TS. But it turned out to be a great decision in the end.

    The bad:

  • SonarLint

    Deliver Cleaner and Safer Code - Right in Your IDE of Choice!. SonarLint is a free and open source IDE extension that identifies and catches bugs and vulnerabilities as you code, directly in the IDE. Install from your favorite IDE marketplace today.

  • GitHub repo TypeORM

    ORM for TypeScript and JavaScript (ES7, ES6, ES5). Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, SAP Hana, WebSQL databases. Works in NodeJS, Browser, Ionic, Cordova and Electron platforms.

    TypeORM has a lot of issues but in our case it hasn't caused any major blockers. Most of the time the issue is with documentation and sometimes you run into issues like this: https://github.com/typeorm/typeorm/issues/316.

    NestJS on the other hand is very solid. It has good documentation and a good community. We haven't faced any issues with NestJS yet.

  • GitHub repo joy

    A full stack web framework written in janet (by joy-framework)

    >Node.js comes so close but anemic standard library

    The nodejs API is rather big really. If you're using Ruby as your standard of normal sized almost everything would look small in comparison, but "anemic" is a stretch. You'd really hate Lua.

    If you're taking suggestions, you might enjoy Janet[1]. It has a pretty large user API, lots of bells and whistles included in the standard libs like you'd find in Ruby, and lots of different ways to achieve the same result like Ruby. It's been a while since I checked out the ecosystem, but I was _very_ happy with the Joy Framework[2]. It definitely doesn't come close to the scope of Rails, but I think it _does_ near Rails in it's easy of use for the developer with it's scaffolding, controller generation etc.

    [1]: https://janet-lang.org/

    [2]: https://github.com/joy-framework/joy

  • GitHub repo janet

    A dynamic language and bytecode vm

    >Node.js comes so close but anemic standard library

    The nodejs API is rather big really. If you're using Ruby as your standard of normal sized almost everything would look small in comparison, but "anemic" is a stretch. You'd really hate Lua.

    If you're taking suggestions, you might enjoy Janet[1]. It has a pretty large user API, lots of bells and whistles included in the standard libs like you'd find in Ruby, and lots of different ways to achieve the same result like Ruby. It's been a while since I checked out the ecosystem, but I was _very_ happy with the Joy Framework[2]. It definitely doesn't come close to the scope of Rails, but I think it _does_ near Rails in it's easy of use for the developer with it's scaffolding, controller generation etc.

    [1]: https://janet-lang.org/

    [2]: https://github.com/joy-framework/joy

  • GitHub repo ponyc

    :horse: Pony is an open-source, actor-model, capabilities-secure, high performance programming language

    Wait, Pony as in https://www.ponylang.io/ ? Since this is the first time I've seen someone bring it up, can I what your experience using it has been like? And also what you were using it for?

  • GitHub repo solargraph

    A Ruby language server.

    The two tools I'd recommend for navigating ruby code in addition to #source_location are Solargraph[1] and, my favourite, good 'ol exuberant ctags[2].

    Solargraph is an amazing project but ctags is still just so fast and low overhead that it's what I mostly use.

    1. https://solargraph.org/

    2. http://ctags.sourceforge.net/

  • Scout APM

    Less time debugging, more time building. Scout APM allows you to find and fix performance issues with no hassle. Now with error monitoring and external services monitoring, Scout is a developer's best friend when it comes to application development.

  • GitHub repo falcon

    A high-performance web server for Ruby, supporting HTTP/1, HTTP/2 and TLS. (by socketry)

    There seem to a lot of ruby pieces falling into place for Rails 7.

    The Achilles Heel of Hotwire apps has previously been the low number of supported websocket connections and high memory usage when using ActionCable and Puma but I have high hopes that Falcon[1] will take care of that.

    That along with Github's View Components[2] and Tailwind make me really please with the way Rails is heading right now.

    1. https://github.com/socketry/falcon

    2. https://github.com/github/view_component

  • GitHub repo view_component

    A framework for building reusable, testable & encapsulated view components in Ruby on Rails.

    There seem to a lot of ruby pieces falling into place for Rails 7.

    The Achilles Heel of Hotwire apps has previously been the low number of supported websocket connections and high memory usage when using ActionCable and Puma but I have high hopes that Falcon[1] will take care of that.

    That along with Github's View Components[2] and Tailwind make me really please with the way Rails is heading right now.

    1. https://github.com/socketry/falcon

    2. https://github.com/github/view_component

  • GitHub repo Sequel

    Sequel: The Database Toolkit for Ruby

    I've never used Rails. I used Sinatra in the early days and over the last 8 years I've used Roda[0] and Sequel[1].

    Our stack is front-end heavy with a very mature JS framework and the back-end is mostly an API server. Databases range from SQLite to Postgres.

    Development is usually done on SQLite and staging / production on Postgres. Quite a few projects with SQLite DB in production as well.

    [0]: https://roda.jeremyevans.net

    [1]: https://sequel.jeremyevans.net

  • GitHub repo Roda

    Routing Tree Web Toolkit

    I've never used Rails. I used Sinatra in the early days and over the last 8 years I've used Roda[0] and Sequel[1].

    Our stack is front-end heavy with a very mature JS framework and the back-end is mostly an API server. Databases range from SQLite to Postgres.

    Development is usually done on SQLite and staging / production on Postgres. Quite a few projects with SQLite DB in production as well.

    [0]: https://roda.jeremyevans.net

    [1]: https://sequel.jeremyevans.net

  • GitHub repo hexpm

    API server and website for Hex

    I think many would be pleasantly surprised at this point, especially considering the entire Erlang library is also trivially accessible:

    https://hex.pm/

  • GitHub repo DefinitelyTyped

    The repository for high quality TypeScript type definitions.

    > The types should then be automatically included by the compiler

    [0] https://github.com/DefinitelyTyped/DefinitelyTyped

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts