finds.dev← search

// the find

getludic/ludic

★ 889 · Python · MIT · updated Jun 2026

🌳 A type-safe HTML template engine for Python. Build dynamic web pages using Python components with a React-like approach.

Ludic is a Python server-side HTML component library that brings React-style component composition to Python using type hints to enforce HTML structure at development time. Version 1.x is built on Python 3.14's t-strings, making it a bet on a language feature that isn't widely deployed yet. Best fit for Python developers who want htmx-driven interactivity without touching JavaScript or Jinja.

The type-guided HTML enforcement is genuinely useful — catching structural errors like passing children to a void element or wrong attribute names at type-check time rather than at render time is a real improvement over string templates. The t-string approach in v1 cleanly solves the trusted/untrusted content boundary that f-strings can't without workarounds. Integration with Starlette, FastAPI, and Django is optional rather than forced, so you can adopt just the HTML layer. The catalog module ships usable layout primitives based on Every Layout, saving you from writing the same flexbox wrappers from scratch.

Requiring Python 3.14+ for v1 is a hard adoption blocker for most teams in 2026 — 3.14 is still very new and most production environments aren't there yet, meaning you're stuck on 0.5.x with f-strings or you take the upgrade risk. 889 stars and 21 forks is a small community for something meant to replace your templating layer — limited ecosystem, limited StackOverflow answers, limited chance someone else hit your bug first. The htmx model works well for simple interactivity but gets complicated fast with deeply nested partial re-renders, and Ludic doesn't add any abstraction over that complexity. No server-side streaming or progressive enhancement story beyond what htmx itself provides.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →