My 2026 Ruby on Rails Stack: Zed, Kamal, and Less Bloat
Published on 5 December 2025
I'm closing 2025 by ripping out the cruft and locking in a calmer Rails stack for 2026. Kevin Dobson's Rails Stack 2024 post nudged me to write down my own defaults, especially because I'm finally ditching every editor except Zed.
Editor & daily flow
- Zed only. No Cursor, no VS Code, no Emacs. Less context switching, faster fuzzy search, and multiplayer sessions when I need them.
- AI is assistive, not a co-pilot. I use lightweight prompts to scaffold tests and CSS, but the edits are mine.
Databases: Postgres first, sqlite when it fits
- Postgres is still my default for most products - extensions, reliable JSON, good analytics pipelines.
- I'm launching one new product on sqlite. It keeps the operational surface tiny and pairs nicely with Kamal rolling deploys.
- Migrations stay disciplined: one feature per migration file, explicit locks where needed, no surprises in production.
Views: components over templates
- ViewComponents are now everywhere. They keep UI decisions explicit and give me reusable contracts instead of partial sprawl.
- Stimulus remains my favorite sprinkles layer. It keeps behavior close to the DOM without dragging in a SPA.
- Hotwire hasn't gotten enough love from me; 2026 is the year I default to Turbo Stream.
Styling: tailwind today, simpler CSS tomorrow
- I still ship Tailwind in current apps because of muscle memory and velocity.
- I'm carving out a simpler, hand-rolled CSS layer for new builds. The plan: a tiny design token file, a couple of utility classes I actually use, and AI-assisted refactors when entropy creeps in.
Auth: passwordless by default
- Rails' built-in auth plus passwordless flows are my baseline. I don't want to store passwords anymore.
- Social logins and magic links get the first integration slot; passwords are a compatibility fallback only.
Background jobs: Solid Queue everywhere new
- New apps ship with Solid Queue out of the box. It's boring, Ruby-native, and avoids the Redis tax.
- Legacy projects still on Sidekiq stay there until a major refactor - no busywork migrations just to feel modern.
Deploys & hosting: Kamal on Hetzner
- Kamal handles all deployments. I like the predictable Docker story and zero-dependency servers.
- Hetzner stays the default host: great price/performance, generous bandwidth, and simple private networking for Postgres boxes.
- Health checks and rollout gates live in the Kamal config so I don't have to remember bash incantations at 2 a.m.
Rules I'm carrying into 2026
- One editor (Zed) and one deploy path (Kamal) for every app.
- Postgres for anything collaborative; sqlite for the new single-tenant launch.
- ViewComponents + Stimulus by default; give Hotwire a real chance before writing custom JS.
- Tailwind when it speeds me up; plain CSS when the UI is small and I want fewer dependencies.
- Solid Queue for new work; no premature Sidekiq migrations unless there's clear ROI.
If you want to see how this stack holds up, keep an eye on the projects I'm shipping over on the site. Subscribe via RSS or check back on the blog for follow-ups and postmortems.
← Back to all posts