mrkeyoor.com_
Tue 01 Sept 17:40 UTC
Webevaluationupdated 25 Aug 2026

reflex review

Reflex is a Python framework for building a browser interface and server-side application in one codebase. It compiles Python UI definitions into a React frontend, keeps state and event logic in a Python backend, and connects the two over WebSockets.

+7stars / 7d
Verdict

Our Reflex build took 4 seconds, but all 200 reported test outcomes were failures or setup errors because the docs suite could not import reflex_docs, so the quick app path is cleaner than the contributor verification path we found. Reflex is worth using when a Python team needs more interface control than a dashboard tool provides and accepts a server-driven architecture. Choose a normal frontend and API split when browser-side behavior, frontend hiring, or independent scaling matters more than one-language development.

We ran it

Lab card: what happened when we ran reflexScreenshot of reflex (reflex.dev)
Install✓ · 57s66 packages · 65 MB
Build✓ · 4s
Tests✗ · 5s0 passed · 3 failed · 197 errors of 200 (pytest)
Known vulns0(pip-audit)
Repo1704 files~227,808 lines of source · 18.7 MB · 19 CI workflows · tests dir

Answers from our run

Does reflex build from source?

Dependencies installed in 57 seconds (66 packages), and the build succeeded in 4 seconds. We cloned commit d02e452 into a clean Debian container with 3 CPUs and no project-specific setup.

Do reflex's tests pass?

Not all of them: 0 of 200 passed and 3 failed when we ran the project's own test command (pytest), with 197 collection errors. Some failures need services or credentials a bare container does not have.

Does reflex have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use reflex?

Frontend teams that need direct control of every React detail: custom gaps can require wrapping a React component, according to the architecture guide.

What are the alternatives to reflex?

Streamlit, Gradio, Dash. Our Reflex build took 4 seconds, but all 200 reported test outcomes were failures or setup errors because the docs suite could not import reflex_docs, so the quick app path is cleaner than the contributor verification path we found.

Setup4/5Fast basic build, but the repository test setup was incomplete
Docs4/5Strong user guides, with a docs test dependency missing in our run
Community5/5Current release, daily commits, and active issue and PR work
Maturity4/5Broad framework and deploy path, with current state edge cases

Discussed on

  1. hnReflex – Web apps in pure Python254 points
  2. hnShow HN: XY – A Fast, composable, GPU-accelerated interactive plotting library136 points
  3. hnGlobal temperature changes from 12,000 weather stations (1850-2026)9 points
  4. hnFull stack web apps in Python with Reflex dev6 points

Who it’s for

Python teams that need a custom web app but do not want to maintain a separate JavaScript frontend.
Data and AI developers moving beyond a dashboard into a multi-page product interface.
Teams comfortable with server-held state, WebSockets, and generated frontend code.
Developers who want hosted deployment available but still need an open-source framework underneath.

Who it’s NOT for

Frontend teams that need direct control of every React detail: custom gaps can require wrapping a React component, according to the architecture guide.
Apps that must keep most interaction logic in the browser: Reflex keeps application logic and state on the Python server.
Teams assuming pure Python removes web operations: production still has a generated frontend, a FastAPI backend, WebSockets, and commonly Redis for shared state.
Sites depending on dynamic state-based metadata today: issue 6923 reports VarTypeError for state variables used as page titles or descriptions.
Mobile flows that rely on clipboard actions without device testing: issue 6882 reports rx.set_clipboard failing on Android browsers.

Setup reality

Our sandbox installed 66 packages in 57 seconds, using 65 MB on disk, and the build succeeded in 4 seconds. Tests failed after 5 seconds: pytest showed 0 passed, 3 failed, and 197 collection or setup errors out of 200 because the docs tests could not import reflex_docs. The audit found 0 known vulnerabilities.

A basic local app needs Python, a virtual environment, uv, and the generated frontend toolchain managed by Reflex. API-driven examples need their provider credentials. Hosted deployment adds an account and cloud settings; production state may require Redis.

The browser runs generated React while FastAPI runs Python state and events, connected by WebSockets. That split affects proxies, horizontal scaling, reconnect behavior, and debugging even though application code stays in Python.

Python authors the app, while React still runs the page

Reflex lets a developer declare components, state, and event handlers in Python. During development it compiles the interface into a React application and runs the backend with FastAPI. Browser events travel to Python over a WebSocket, state changes are calculated on the server, and updates return to the page. The result feels like one Python project in source control, even though deployment still contains two runtimes.

That architecture sits between dashboard libraries and a hand-built frontend plus API. A data team can create pages, forms, themes, responsive layouts, and event-driven workflows without learning a second application language first. Reflex also allows React components to be wrapped when its component catalog does not cover a need. At that point, the JavaScript boundary becomes visible again, which is fair but worth budgeting for.

Server-held state makes Python easy and scaling concrete

Application state lives in Python classes, and event handlers are the route for changing it. Because handlers run on the server, they can call normal Python packages and private services without moving secrets into browser code. The frontend reflects serialized state instead of running the business logic itself. This model is approachable for backend developers and works well for forms, internal systems, and AI interfaces.

Every interaction that needs a handler also depends on the connection to the backend. Reflex uses a client token for each browser tab and queues events before the server applies them. The architecture guide says the default state manager can be an in-memory dictionary, while production uses Redis. Multiple workers, reconnects, proxy timeouts, and background events therefore deserve the same attention they would receive in any WebSocket application.

Pure Python does not mean every web concern disappears

The generated frontend is a single-page React app, and Reflex components often wrap existing React libraries. CSS remains the styling language, exposed through Python keyword arguments. Teams still need to understand browser layout, responsive behavior, forms, focus, accessibility, and network failures. The framework changes where those concerns are expressed; it does not remove them.

Current issue reports show the edges. Issue 6923 says state variables used for dynamic page titles and descriptions raise VarTypeError, including on version 0.9.8 source. Issue 6882 reports that a clipboard action worked on desktop but failed in Chrome and Firefox on Android 16. These are specific cases, but both affect features that are easy to miss if testing stays on one desktop browser.

What happened when we ran it

Our sandbox cloned commit d02e452 into an unprivileged Debian container with 3 CPUs, 8 GB of RAM, no secrets, and Python 3.12. The checkout contained 1,704 files, about 227,808 lines of source, and occupied 18.7 MB. It included 19 CI workflow files and a tests directory, with no Dockerfile at the root.

Installation succeeded in 57 seconds. It added 66 packages and used 65 MB on disk. The build finished in 4 seconds, and pip-audit reported 0 known vulnerabilities. Those results make the source package look manageable for its scope and show that compilation itself did not require credentials or an external service in our container.

The test command failed after 5 seconds. Pytest reported 0 passes, 3 failures, and 197 collection or setup errors out of 200 before stopping. The visible failures and errors all said Python could not find reflex_docs, including breadcrumb tests and parameterized documentation generation cases. The log identifies a missing module; it does not show whether application runtime tests would pass once the documentation package is available.

The hosted path is optional, but deployment still has parts

The README's first app uses uv add reflex, reflex init, and reflex run, then serves the page at port 3000. That is a short local path. The example image application adds an OpenAI client and therefore needs provider credentials, but a plain Reflex app does not. Reflex also promotes its own hosting and deployment commands, including Google Cloud controls added in release v0.9.8.post1.

Self-managed production means serving the frontend, running FastAPI, preserving WebSocket connections, and choosing persistent or shared state. Reflex hosting can take on some of that work, while bringing account and platform choices. Teams should decide whether the appeal is the Python programming model or the hosted service, since the open-source framework can be judged independently of the vendor deployment path.

August activity is high, with 338 issues and PRs open

The repository was pushed on August 25, 2026, the same date as our measured commit. GitHub listed 338 open issues and pull requests combined. Release v0.9.8.post1 arrived August 18 with Google Cloud deployment controls, while active pull requests covered state updates, client state, React DevTools labels, and event handling. The project is plainly maintained, and its state machinery is still receiving substantial work.

Reflex is a sound candidate for Python teams that have outgrown a notebook-style interface and want a product-shaped web app. Streamlit or Gradio will usually get a dashboard or model demo online with fewer architectural decisions. A React frontend plus a Python API remains the safer fit when the interface team needs direct browser control and the backend must scale on its own schedule.

Alternatives

ProjectWhat it isPick it when
Streamlit gh↗A Python app framework centered on data scripts, dashboards, and fast interactive tools.pick this instead when a data app matters more than detailed page and component control.
GradioA Python library for putting web interfaces around models and functions quickly.pick this instead when the product is mainly a model demo or a small input-output tool.
Dash gh↗A Python framework for analytical applications built around reactive components and Plotly.pick this instead when charts and analytical dashboards are the center of the application.

What people are saying

  1. [velocity-scout] reflex-dev/reflex

Sources

  1. Reflex README
  2. Reflex architecture guide
  3. Reflex 0.9.8.post1 release
  4. Dynamic metadata state report
  5. Mobile clipboard report
  6. Measured Reflex commit

More web reviews

axios · super-productivity · Graphite · fastify · tabler · go-zero · the whole board →