State of the Ruby language server (LSP) ecosystem / looking for suggestions

This page summarizes the projects mentioned and recommended in the original post on /r/ruby

Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
  • solargraph

    A Ruby language server.

  • https://github.com/castwide/solargraph Seems to be the most mature/developed one. Slow on my system, bad documentation. Language docs are shipped as "cores" you imperatively download that float around in your home directory; this is messy and prone to failure. Doesn't have any docs for versions of ruby past 2.7.

  • sorbet

    A fast, powerful type checker designed for Ruby

  • https://github.com/sorbet/sorbet A type checker. Created before Ruby's signature format and uses its own messy eDSL for type annotations. Has a language server. I don't know if this is usable without first adding type annotations to your code. No idea if it supports language and library documentation; there's no real docs for its LSP mode other than "here, have a vscode extension", and digging through the codebase is... difficult.

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
  • steep

    Static type checker for Ruby

  • https://github.com/soutaro/steep Also a type checker. This one uses rbs files. Not sure what subset of LSP features it supports either.

  • ruby-lsp

    An opinionated language server for Ruby

  • https://github.com/Shopify/ruby-lsp Fairly new project, started in June. Digging through issues indicates it's meant to complement Sorbet's language server. Seems immature right now; it only supports a few queries and does so in janky ways. Probably not the best choice right now, but seems promising.

  • ruby_language_server

    Language Server implementation in Ruby for Ruby. Development happens on the develop branch. Production is master.

  • https://github.com/kwerle/ruby_language_server Seems to be abandoned in an incomplete state, with only minor bug fixes for years.

  • orbacle

    Program allowing for smart jump-to-definitions, autocompletion, constant renaming and more.

  • https://github.com/swistak35/orbacle Hasn't been updated in ~4 years. Someone's master's thesis project. Incomplete.

  • vscode-ruby

    Discontinued Provides Ruby language and debugging support for Visual Studio Code

  • https://github.com/rubyide/vscode-ruby/tree/main/packages/language-server-ruby Part of a VS Code extension. Uses tree-sitter to parse and analyze code. Feels the most technically sound, though still early in development. Unmaintained since April.

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • language_server-ruby

    A Ruby Language Server implementation

  • https://github.com/mtsmfm/language_server-ruby Abandoned project from 4-5 years ago.

  • lib-ruby-parser

    Ruby parser written in Rust

  • I realize this might not be for everyone, but I'm writing it in Rust using Lib-ruby-parser and tower-lsp: two existing libraries that handle a bunch of the heavy lifting for me. I'm more productive in Rust than with Ruby at this point, despite doing Ruby full time for 15 years, plus I really really don't want to have to deal with a slow LSP--that was the whome impetus for this project. I started in the spring, made a bunch of headway, then backtracked to redo the internals to make it easier to handle monkeypatching, overriding/redefining of methods, etc. across your project.

  • tower-lsp

    Language Server Protocol implementation written in Rust

  • I realize this might not be for everyone, but I'm writing it in Rust using Lib-ruby-parser and tower-lsp: two existing libraries that handle a bunch of the heavy lifting for me. I'm more productive in Rust than with Ruby at this point, despite doing Ruby full time for 15 years, plus I really really don't want to have to deal with a slow LSP--that was the whome impetus for this project. I started in the spring, made a bunch of headway, then backtracked to redo the internals to make it easier to handle monkeypatching, overriding/redefining of methods, etc. across your project.

  • tailor

    Discontinued A RubyGem that allows for checking standard styling of Ruby files. (by turboladen)

  • I'd also love some more diagnostics; things that you may get from flog or flay or rubocop (although I think integrating with rubocop would be ideal, given its influence on the ecosystem) or rails_best_practices (prior to rubocop, I actually tried making my own linter, tailor, but rubocop came along and was a million times better)...

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