// the find
reflex-dev/reflex
🕸️ Web apps in pure Python 🐍
Reflex lets you build full-stack web apps entirely in Python — it compiles your Python component tree to a Next.js frontend and runs a WebSocket-connected FastAPI backend. The target audience is Python developers (data scientists, ML engineers) who want interactive web UIs without learning JavaScript. It's not a Streamlit competitor; it's closer to a Python-flavored React.
- The state model is genuinely clean: a typed Python class with event handlers, no manual serialization, and the framework handles syncing state deltas over WebSocket to the frontend automatically.
- Component library is broad — tables, charts, forms, modals — and they wrap Radix UI under the hood, so the defaults look reasonable without custom CSS.
- Hot reload actually works well in dev mode; the feedback loop for UI iteration is fast enough to be practical.
- Self-hosting story is real: multiple Docker Compose examples with Caddy reverse proxy, not just a 'deploy to our cloud' pitch.
- The WebSocket-for-everything architecture means every user interaction round-trips to the Python server. For high-concurrency apps this becomes a bottleneck, and there's no escape hatch for client-side-only logic without dropping into raw JavaScript.
- Debugging across the Python/Next.js boundary is painful — when something breaks at the component level, error messages often point into generated JS or Reflex internals rather than your code.
- The custom Var system (for reactive expressions in component props) has sharp edges; anything beyond simple attribute access tends to hit type checker failures or silent runtime behavior that's hard to reason about.
- Production deployments outside their managed hosting require running both a Node process and a Python process behind a proxy — the ops burden is higher than it looks from the README, and the Docker examples don't cover horizontal scaling at all.