Janko Marohnić
janko.io
Janko Marohnić
@janko.io
Senior Ruby engineer, father, vegan. Creator of Shrine, rodauth-rails and vim-test.
@adamwathan.com The FAQ for Tailwind Plus doesn't mention the new custom elements package. I almost wasn't sure whether it's included in the license, even though I knew I read it in the article 😄

I'm considering buying Tailwind Plus almost exclusively for that library, as we don't use React/Vue.
November 16, 2025 at 11:37 AM
Workspace symbol search on Ruby LSP should be working much smoother now on 0.26.3, @vinistock.bsky.social and I made a bunch of fixes recently 🤘

github.com/Shopify/ruby...
github.com/Shopify/ruby...
github.com/Shopify/ruby...
November 13, 2025 at 11:42 AM
Reposted by Janko Marohnić
Herb v0.8 is here! 🚀

The biggest release yet, packed with new language bindings, Linter Autofix support, Linter Fix-on-Save, a new `.herb.yml` config file, formatter improvements, Tailwind Class Sorting integration, and a ton of performance, tooling and LSP improvements! 🌿
November 12, 2025 at 4:05 PM
Reposted by Janko Marohnić
The Ruby extension for @zed.dev just got better! Huge thanks to @marcoroth.dev for adding `zed-comment` support (including all ERB languages) and RBS inline syntax highlighting!

You can find full release notes at github.com/zed-extensio...
Release v0.16.0 · zed-extensions/ruby
What's Changed Add support for zed-comment by @marcoroth in #203 chore(deps): update pnpm to v10.20.0 by @renovate[bot] in #201 Add zed-comment support for all ERB languages by @marcoroth in #205 ...
github.com
November 11, 2025 at 11:20 AM
Reposted by Janko Marohnić
Also coming in Herb v0.8.0, the long awaited Tailwind CSS class sorting feature in the Herb Formatter! 🌿

Here is a demo of that working in @zed.dev using the new `.herb.yml` configuration file! 😍
November 1, 2025 at 2:54 PM
I can’t accept importmap-rails downloading and vendoring JS packages. I feel like I’m back in the pre-Sprockets era.
October 31, 2025 at 3:05 PM
...and it's up 🤘

github.com/Shopify/ruby...
October 28, 2025 at 8:14 PM
Reposted by Janko Marohnić
I'm excited to share that I became a Ruby committer today! A 10 year goal since RubyKaigi 2015.
Huge thanks to @bernsteinbear.com for the JIT mentorship and nomination, @k0kubun.com for years of guidance, and everyone who supported me along the way.
Looking forward to improving Ruby and its DX!
October 28, 2025 at 12:11 PM
Inline RBS is the only gradual typing for Ruby I can get behind.

Sorbet’s RBI was way too verbose, as it had to be valid Ruby, but at least it was inline. RBS was more compact, but required separate files.

Inline RBS is just comments, and I imagine it has advantages over YARD.
October 28, 2025 at 10:10 AM
It seems I've developed a newfound interest for language servers 🙂

They have just unlocked for me recently. It started with a contribution to Stimulus LSP, afterwards I wanted to fix issues I've been experiencing with Ruby LSP.

Kudos to Shopify for solving difficult problems like indexing 🙇‍♂️
October 27, 2025 at 6:24 AM
With all Ruby LSP fixes for workspace symbol search underway, I would like to take a stab at adding a new feature.

Rails.vim had a neat feature where you can follow render calls in view templates via `gf`. I'm exploring adding the same feature to Ruby LSP Rails via "go to definition" 🤞
October 27, 2025 at 6:19 AM
Reposted by Janko Marohnić
What comes through loud and clear from Shan is the lack of respect for open source authors. She actually says it’s none of my business why I was removed from rubygems. I don’t know where you got the audacity but you should put it back. youtu.be/nKpo68g9dEk?...
Technology for Humans: Shan Cureton
YouTube video by reinteractive
youtu.be
October 25, 2025 at 4:16 AM
We're using Chamber for application secrets/settings at work, and probably the only that's keeping me from switching to Rails credentials is the ability to override any value with an environment variable.

That's really a killer feature, both Chamber and AnyConfig support it.
October 24, 2025 at 12:38 PM
So, the reason why project symbol search isn't working reliably in Zed is that Ruby LSP:

1. returns malformed results for method aliases
2. doesn't support request cancellation (Zed doesn't debounce atm)
3. searches gems as well, which is 3.5x slower, and adds up because of 2.
October 22, 2025 at 5:37 PM
The 37signals team must be patting themselves on the back during this AWS outage 😄
October 20, 2025 at 9:20 AM
Reposted by Janko Marohnić
I wrote about some of my thoughts on the lessons we can learn from the RubyGems situation and how we can move forward. blog.peterzhu.ca/open-source-...
Open Source is the Most Fragile and Most Resilient Ecosystem - Peter Zhu
Some of my thoughts on the lessons we can learn from the RubyGems situation and how we can move forward.
blog.peterzhu.ca
October 18, 2025 at 3:58 PM
If anyone using @zed.dev has also been experiencing empty symbol search results from Ruby LSP, please give this a 👍

github.com/zed-industri...
Zed excluding Ruby LSP results from project symbol search · Issue #40294 · zed-industries/zed
Summary Searching Ruby symbols in a project often shows empty results. Description When I'm trying to search project symbols, even though Ruby LSP server returns the results, Zed doesn't display th...
github.com
October 17, 2025 at 6:57 AM
I was trying out Stimulus LSP in Zed, and was consistently seeing duplicates in controller autocompletion.

I didn't know whether the bug was in Zed, the Zed extension for Stimulus, Stimulus LSP or stimulus-parser 😅

It seems like it was the latter – github.com/marcoroth/st...
Registered controllers get duplicated after calling `Project.refresh()` · Issue #402 · marcoroth/stimulus-parser
I've been trying out Stimulus LSP in Zed editor, and have consistently been seeing duplicate controller names in the autocompletion box. I've tracked it down by looking at RCP messages, and saw Zed...
github.com
October 15, 2025 at 10:59 PM
The Herb Linter by @marcoroth.dev just works™

It caught both the fact that we're missing double quotes and that we've used `<% %>` instead of `<%= %>`.

And it automatically produced GitHub-compatible output 👌
October 14, 2025 at 1:51 PM
Balanced take on passkeys, and a direct response to DHH article on failing to go all-in on passkeys.

www.youtube.com/watch?v=XP-7...

Key takeaways: offering passkeys as 2nd factor is good for security, allowing passkey login makes for super fast login experience.
Jason Meller - Passkeys Have Problems, but So Will You If You Ignore Them
YouTube video by Ruby on Rails
www.youtube.com
October 10, 2025 at 9:47 AM
Reposted by Janko Marohnić
My team at Plane is hiring experienced full stack engineers. We use Rails, Postgres, Phlex, Vite, TypeScript and Svelte. I don’t have a full job description yet, but drop me a DM if you want to know more.
October 1, 2025 at 4:22 PM
Reposted by Janko Marohnić
It's empowering to give AI a failing test because then iteration is no longer on you.

AI: I'll try to fix the problem, let's run the test…
AI: I used the API that doesn't exist, let me try to use the correct API…
AI: that API doesn't exist either, I'll search the docs…

Me: yeah maybe you should
September 29, 2025 at 7:36 PM
Reposted by Janko Marohnić
I have fact-checked Ruby Central’s claims here joel.drapper.me/p/ruby-centr...
Ruby Central Fact Check
Fact-checking the claims made by Ruby Central about the RubyGems takeover.
joel.drapper.me
September 25, 2025 at 12:26 PM