Non-JS Alternatives
Rails 8, Phoenix LiveView, Django + HTMX, Go, Rust — and why you might learn one.
The "no/low JS" school had a real revival once HTMX, Hotwire, and LiveView matured. Even if you stay on JS for production, learning one of these expands the menu.
Ruby on Rails 8 + Hotwire
- Hotwire = Turbo (HTML-over-the-wire navigation) + Stimulus (light JS sprinkles).
- Rails 8 included Solid Queue, Solid Cache, Solid Cable — so you can run Rails on a single Postgres + filesystem with no Redis required.
- Kamal for deploying Rails to your own boxes with one command.
- Why care: for CRUD-heavy products, the productivity ceiling is very high with very little JS.
bin/rails generate scaffoldstill produces working software faster than most JS stacks.
Phoenix LiveView (Elixir)
- WebSocket-driven server rendering — diff is sent over the wire, DOM is patched in place.
- Real-time, multi-user collaboration is essentially free.
- Elixir's BEAM runtime handles huge concurrency with tiny memory.
- Why care: the cleanest demonstration of "server is the source of truth" architecture. You'll think differently about realtime even if you never ship Elixir.
Django + HTMX
- Django is still one of the most productive backends ever shipped. Pair it with HTMX (or Alpine.js for sprinkles) and you can build modern-feeling apps with almost no JS code.
- Why care: if your app is mostly forms and lists, you might be over-engineering with React.
Go (chi / Echo / Fiber + templ + HTMX)
- Single-binary deploys, very low memory, great for self-hosted apps.
- templ brings type-safe HTML templates to Go.
- Why care: for small backends, ops cost is essentially zero — copy a binary to a VPS and it runs.
Rust (Axum / Actix + Leptos / Dioxus / Solid)
- High-performance backends; Leptos and Dioxus bring fine-grained reactivity to Rust on both client and server (Leptos compiles to WASM).
- Why care: Leptos is the most interesting "isomorphic Rust" stack; production-ready for a handful of teams.
When to use these in production
- Solo founder / small team where the language and ecosystem fit.
- A product where complexity is in business logic, not in the UI.
- Long-lived internal tools where simplicity of ops matters.
When to stay on the JS stack
- The UI is a serious app (editors, dashboards, multi-step flows with rich client state).
- You need the JS-ecosystem libraries (Tiptap, Lexical, etc.).
- You're hiring quickly and need to maximize the candidate pool.