Janko Marohnić's Avatar

Janko Marohnić

@janko.io

Senior Ruby engineer, father, vegan. Creator of Shrine, rodauth-rails and vim-test.

231
Followers
112
Following
242
Posts
24.10.2024
Joined
Posts Following

Latest posts by Janko Marohnić @janko.io

Wait, do they not support not supporting it, or they don’t support supporting it?

In other words, does the @supports block not get gracefully skipped when @scope is not supported, or does it get incorrectly skipped when @scope is supported?

11.03.2026 07:05 👍 0 🔁 0 💬 0 📌 0

I didn’t know browsers had to support not supporting a feature 😄

I thought they implement @supports by just returning false for anything they don’t recognize.

11.03.2026 06:55 👍 0 🔁 0 💬 1 📌 0

If it’s a custom LSP request, then that probably won’t be available for calling in the Zed extension.

There are a few custom Ruby LSP requests I would like to be able to utilize in Zed (e.g application/test file switching), but last time I checked it’s not yet supported.

07.03.2026 12:43 👍 1 🔁 0 💬 1 📌 0
Four months of Ruby Central moving Ruby backward From the moment RubyGems was first created in 2004, Ruby Central provided governance without claiming ownership, to support the Ruby community. Providing governance meant creating processes to provide stability and predictability. Avoiding ownership meant allowing the community to contribute, to th…

after four months of private discussions, I have an update on the Bundler and RubyGems situation with Ruby Central: andre.arko.net/2026/03/03/fou…

03.03.2026 20:11 👍 53 🔁 28 💬 0 📌 2

Companies: We're orchestrating a team of AI agents to autonomously build complex features for several hours without human intervention.

Me: Eagerly awaiting whether Claude Code will finally figure out how to change the default font family on my blog.

01.03.2026 10:37 👍 5 🔁 0 💬 1 📌 0

My wife asks me “is everything OK?” when she sees something is bothering me.

I feel like that has a better undertone, because it’s focusing more on external factors than my psychological state.

26.02.2026 08:04 👍 1 🔁 0 💬 0 📌 0

The connected callback is built in, as well as attribute changes. Not sure what else you’d need the mutation observer for, except for maybe targets, which web components don’t have.

Shadow DOM isn’t required, but then you don’t get slots as you said, you have to clean up HTML changes on disconnect.

21.02.2026 10:14 👍 0 🔁 0 💬 0 📌 0

You were the only person in my timeline talking about web components. I'm glad I finally see why people are excited about them 🙂

21.02.2026 07:00 👍 0 🔁 0 💬 1 📌 0

Not as much now that you don't need ShadyDOM and ShadyCSS polyfills anymore 😆

21.02.2026 06:56 👍 1 🔁 0 💬 0 📌 0
Preview
Add ability to rename outlets by imanpalsingh · Pull Request #786 · hotwired/stimulus This PR adds ability to rename outlets with the following api // chat_controller.js export default class extends Controller { static outlets = [ "user-status", { time: "features--...

I also love that custom elements already contain the behavior, so I can do:

document.querySelector("cocoon-column").doSomething()

I hate Stimulus.getControllerFromElementAndIdentifier() from the bottom of my heart 😄 Sure, Stimulus has outlets, but they're unfinished.

github.com/hotwired/sti...

20.02.2026 22:22 👍 3 🔁 0 💬 1 📌 0
Post image

This is the HTML interface I was able to achieve with Web Components 👇

With Stimulus, you have a lot of repetition in `data-*` attributes, because multiple controllers can be connected to a single element.

It's beautiful how concise it is to just use HTML attributes 😍

20.02.2026 21:49 👍 6 🔁 0 💬 3 📌 0

I finally used the new Popover API and <dialog> for dropdown and modal components, and the've been a breath of fresh air! Thanks @fractaledmind.bsky.social for such great intro 🙏

I wish anchor positioning and invoker commands were widely available, though I know there is a polyfill for the latter.

20.02.2026 21:38 👍 3 🔁 0 💬 0 📌 0

The user HTML ends up less verbose than Stimulus. Event listeners are declared in the component, and it can contain some HTML too.

Shadow DOM was a learning curve. But slots are great, and because it's excluded from Turbo cache I don't need any cleanup on disconnect.

I am missing Stimulus targets.

20.02.2026 21:30 👍 0 🔁 0 💬 1 📌 0
Preview
Lit Simple. Fast. Web Components.

I've decided to use Lit, since it seems to be widely known, and its interface clicked for me.

lit.dev

I love that I get declarative templates with the speed of React, without the complexity of a virtual DOM. I get to stay in vanilla JS, so it's not far from Stimulus.

20.02.2026 21:30 👍 0 🔁 0 💬 1 📌 0

At work, our main Rails/Hotwire app has multiple embedded React apps that are isolated microservices. We realized we need to start sharing UI components so they feel like one app.

So, I've been building a Web Component library for the past 3 weeks. It's nice to be learning a new technology again 😍

20.02.2026 21:30 👍 1 🔁 0 💬 1 📌 0
This pull request improves the parser's error reporting for HTML close tags that are missing their closing `>` by introducing a new `UnclosedCloseTagError`.

Given this input:

```html+erb
<% case Date.today.cwday %>
<% when 6 %>
  <p>Today is Saturday</p
<% else %>
  <p>Today is not a day of the week</p>
<% end %>
```
Previously, when parsing `</p` (missing closing `>`), the error was reported on the next tag (e.g., `<% else %>`) instead of on the `</p` itself. Additionally, the next token (e.g., `<%`) would get incorrectly consumed as the `tag_closing` of the `HTMLCloseTagNode`.

This pull request improves the parser's error reporting for HTML close tags that are missing their closing `>` by introducing a new `UnclosedCloseTagError`. Given this input: ```html+erb <% case Date.today.cwday %> <% when 6 %> <p>Today is Saturday</p <% else %> <p>Today is not a day of the week</p> <% end %> ``` Previously, when parsing `</p` (missing closing `>`), the error was reported on the next tag (e.g., `<% else %>`) instead of on the `</p` itself. Additionally, the next token (e.g., `<%`) would get incorrectly consumed as the `tag_closing` of the `HTMLCloseTagNode`.

These kinds of small fixes are oddly satisfying to get right. This ships in the next version of Herb! 🙌

20.02.2026 01:31 👍 26 🔁 4 💬 1 📌 0
Preview
Split Diffs are Here | Zed Blog From the Zed Blog: View your code changes in a split diff view in Zed.

Split diffs are now the default in Zed. Simple feature, complex implementation.

Cole wrote about what it took to get alignment right on every keystroke: zed.dev/blog/split-d...

18.02.2026 19:59 👍 104 🔁 10 💬 5 📌 1

You wouldn't need to write `@layer components { ... }` everywhere, you can just `@import "custom.css" layer(components)` in the entrypoint, and then all styles in `custom.css` can be flat.

18.02.2026 19:00 👍 1 🔁 0 💬 0 📌 0
Preview
RubyConf Austria RubyConf Austria is the Austrian Ruby conference. Join us in Vienna, Austria in 2026 on 29-31 of May.

Going to #RubyConfAT 🤘🏻
Gotta when it's so close to where I live in Czechia 😄

rubyconf.at

17.02.2026 17:30 👍 1 🔁 0 💬 0 📌 0

Actually, a ruby hike sounds pretty good now, I'll probably take the full ticket 😄

17.02.2026 17:24 👍 1 🔁 0 💬 1 📌 0

@adrianthedev.com Do you know why for #RubyConfAT there are tickets for either 30.5. & 31.5. or 29-31.5, when talks are on 29.5. & 30.5?

I would like to attend only the days with ruby talks, but I suppose that isn't an option?

17.02.2026 17:19 👍 0 🔁 0 💬 2 📌 0

Maybe because it’s then just a matter of time before it becomes widely available.

When you know Safari doesn’t yet support a feature, you don’t know if they’ll add it in one month or in 5 years 😅

Once it lands eveywhere, then it’s more predictable when you’ll be able to use it in production.

16.02.2026 08:56 👍 1 🔁 0 💬 1 📌 0
Preview
January 2026 January was a busy month for RDoc, with a batch of improvements that align with my RDoc roadmap for 2026. I also published ruby-skills, a Claude Code plugin ...

Trying something new in 2026: I'm going to post monthly updates about the OSS work I did.

Here's the first one: st0012.dev/updates/janu...
(Repost as I updated the slug after posting 😅)

07.02.2026 16:11 👍 6 🔁 2 💬 1 📌 0

Super honored to be selected for the Gem Fellowship 🙏

I’ll continue pushing Herb forward as we get closer to 1.0 as part of this grant!

04.02.2026 04:51 👍 41 🔁 3 💬 1 📌 0

Herb and Cuprite/Ferrum are in there!

03.02.2026 08:56 👍 0 🔁 0 💬 0 📌 0

Yeah, I think Slim has the same issue, I always have to use the explicit `class: "..."` syntax for any Tailwind classes with special characters.

They went as far as allowing `:` for Tailwind variants, but nothing further. Shows the limitation of this kind of syntax sugar.

29.01.2026 19:39 👍 1 🔁 0 💬 0 📌 0

Did ruby gain improvements that will make this easier?

Or is it a backwards compatibility layer with the classic autoloader that you’re removing?

29.01.2026 10:59 👍 0 🔁 0 💬 1 📌 0

I am working these days on a change to Zeitwerk that will remove a hack.

When I wrote the gem, autoloading had been brittle for more than a decade and I wanted to mimic the classic autoloader as much as possible for users' peace of mind.

But there was a corner case that had no clean solution.

29.01.2026 08:40 👍 5 🔁 2 💬 1 📌 1
Preview
Master Hotwire: Build Modern Web Apps with Rails Simplicity “Master Hotwire” is structured to help you build a strong mental model of Hotwire. It combines explanations of functionality with hands-on coding. The book guides you through building a collaborative…

If you keep working on something, turns out eventually you may finish it. So it is with "Master Hotwire" book! I've finally finished it and it's available in Web, PDF and EPUB formats at masterhotwire.com

I started working on it a bit under 2 years ago. :)

27.01.2026 11:01 👍 10 🔁 3 💬 1 📌 0

I built a Claude Code plugin that teaches it how to work with Ruby - picks the right version manager, reads the right docs, connects to Ruby LSP.

I think we will eventually have community maintained bridges between AI agents and the language ecosystem.

24.01.2026 14:36 👍 10 🔁 4 💬 2 📌 0