Repository navigation
Reflex Roadmap #2727
Description
This issue is the public, living copy of the Reflex Framework Roadmap. It describes the major initiatives for Reflex 0.10.0, v1.0, and beyond. Each section links its tracking issue and the individual issues behind it. Last updated: October 2026.
Feel free to comment to leave feedback or upvote any issues you'd like to see prioritized, and we welcome outside contributions for any issues.
Why This Roadmap
Reflex exists so that Python developers can build production web apps without learning JavaScript. That promise only holds if the framework is stable enough to bet a product on, simple enough that you spend your time on ideas rather than plumbing, and fast enough that users never notice there's a Python backend behind the UI.
Every initiative below serves one of those three goals. If the team executes on these items, Reflex becomes the best Python web framework for human developers and AI agents alike — a framework where a single rx.event handler is simultaneously a reactive UI binding, an HTTP endpoint, and an MCP tool, all without extra code.
Key Focus Areas
Stability — As we approach 1.0, we're making the core API stable and limiting breaking changes so Reflex can be a solid foundation for long-term projects.
Simplicity — Improve the out-of-the-box experience so developers can focus on their ideas. This means a growing third-party component ecosystem, simpler APIs for core components, and fewer required dependencies.
Speed — Reflex apps should be fast for end users and developers alike. We're investing in compile-time performance, hot-reload times, and runtime efficiency so apps stay fast as they grow.
Event System
Tracking issue: #6236
- EventHandler awaitable semantics — EventHandler redesign: awaitable semantics #6223
- Thread pool executor for sync events — Explicit thread pool executor for sync event handlers #6225
- Event lifecycle hooks
on_connecthook —on_connectlifecycle hook for@rx.event#6229
- Background task exit on disconnect — Make it easier to exit a background task when the socket disconnects #5049
- EventHandler return values — EventHandler return values: stream yielded/returned values to the frontend #7608
- Frontend queues an event and may use
for await ...syntax to process each yielded/returned value - crucially uses async iterator style for all events as it is the superset of supported python syntaxes - Each request will require an id to allow multiple in-flight requests to identify their results
- Frontend queues an event and may use
State Refactor
Tracking issue: #7612
- Var tracking mixin — Var tracking mixin: dirty/accessed field tracking independent of
rx.State#6228 - Field setters —
rx.Fieldsetter decorators with frontend compilation support #6230 - Field change observers —
rx.Fieldchange observers (@field_name.on_changedecorator) #6231 - Move BaseState and friends into reflex-base — ENG-10096: Make Field, ComputedVar and EventHandler state descriptors #7312 (merged), Move the core state machinery into reflex_base.state #7314
- Separate distributed lock manager from state manager — Replace StateProxy with state locks held by the EventContext #7313, Check out states in the EventContext, make StateManager a key-value store #7338
- Simplify StateManager API (to make downstream implementations possible) — Check out states in the EventContext, make StateManager a key-value store #7338
Frontend
Tracking issue: #7613
- Ship static frontend javascript as an installable JS package — Ship the frontend runtime JavaScript as an installable npm package #7609
- Include JS tests for frontend functionality using standard tooling — Unit-test the shipped frontend JavaScript with standard JS tooling (vitest) #7611
- Minify user JS in rx.script tags — Minify js code in rx.script tags #3034
- Do as part of secure script eval, outputting the script to a standalone file and letting vite minify
- ClientStateVar refactor — Refactor ClientStateVar: scoped client state via a useClientState hook (rx.client_state) #7610
- Frontend-only hot reload — reflex run --frontend-only should support hot reload #2294
Components
- Reflex-native component library — Reflex-native component library built on base HTML elements #6247
- Immutable Components — Single-pass compiler: Make Component effectively immutable #6214 (under the Single Pass Compiler tracking issue Single Pass Compiler: Tracking Issue #6235)
- Remove interim
Tagin Component render pipeline — Remove interimTagin Component render pipeline #7618Component.renderreturns aVarrepresenting thejsxfunction call instead of aTagor render dict. TheVarcarries the hooks, imports, and app wraps the component requires. (breaking)
Backend
- Consolidate endpoints under
/_reflex/— Consolidate all internal endpoints under/_reflex/prefix #6226
Security
- Safe frontend eval environment — Safer script evaluation #6208
- Use request IDs so the backend can eval a function and wait for the result to come back
- Token Protected Endpoints — JWT-based authenticated event processing #6232. Phase 0 (signed session cookies for event transport) is in progress: Keep request credentials out of frontend router data #7360, Add signed browser sessions and bound client tokens #7361, Authorize browser state through session-aware transports #7362, Persist browser sessions without delaying hydration #7363, Validate enforced sessions and document migration #7364
Developer Experience
- Event loop blocking detection — Implement event loop blocking detection #7619
- Move entire integration test suite to playwright (WiP) — Move the integration test suite to Playwright #7617
- Organize test suites by subpackage (reduce number of tests need to validate changes in subpackage)
- Unified exception handler API — Unify generic frontend/backend exception handler API #5168
- Remove Pydantic v1 hacks — Remove unsupported hacks to use Pydantic v1 #6241
- Reduce install footprint — Reduce External Dependencies #4921
- Config via pyproject.toml — Config via
pyproject.tomlwith app profiles #6240 - ASGI interoperability — ASGI Interoperability — mountable Reflex sub-app #6239 (also addresses Embedding Reflex in other apps #46, the oldest open issue)
Database & ORM
Make the database layer less opinionated. Remove custom ORM abstractions that get in the way while keeping an easy-to-use experience built on standard SQLAlchemy and Alembic. If you know SQLAlchemy, you should feel at home. If you don't, rx.session and reflex db still give you a gentle on-ramp.
rx.Model will be deprecated in favor of bring-your-own model base. reflex-orm becomes a separately installable package — useful for convenience, never required.
Tracking issue: #6238
- Extract reflex-orm package — Extract
reflex-ormpackage #6243 - Remove rx.Model — Remove
rx.Model#6244 - Simplify rx.session + reflex db — Simplify
rx.sessionandreflex dbCLI #6245
Internationalization & Localization
Highly requested by the community. I18N/L10N framework support will let developers build apps that serve global audiences without rolling their own translation infrastructure.
- I18N/L10N framework support — Internationalization (I18N) and localization (L10N) (Feature Request) #2339 (top voted feature request)
v1.0 Release Gate
- Remove v1.0-promised deprecated functionality. Once every pre-1.0 breaking change above has landed, remove the deprecations promised for 1.0 and cut the release.
Previous roadmap (0.9) items no longer tracked here
These items were on the 0.9 roadmap. They either shipped, were dropped, or remain open outside the current roadmap.
Shipped
EventContextas the foundational execution primitive, and the event queue moved to the backend (see Event System: Tracking Issue #6236)rx.Field,ComputedVarandEventHandleras first-class descriptors — ENG-10096: Make Field, ComputedVar and EventHandler state descriptors #7312- ContextVar-based registry for registered objects — ContextVar-based Registry for Registered Objects (Config, State, EventHandler, Field, etc.) #6249
- Full-stack OpenTelemetry instrumentation (
reflex-otel) —opentelemetry-instrumentation-reflex: full-stack OTel package #6227 - Single-pass compiler core:
CompilerPluginprotocol and core plugins (Single-pass compiler: Introduce CompilerPlugin protocol, CompilerHooks, and context objects #6210, Single-pass compiler: Implement core compilation plugins (imports, hooks, custom code, dynamic imports, refs) #6211, Single-pass compiler: Wire plugin pipeline into App._compile() and remove multi-pass tree walks #6212),rx._x.memo-based memoization (Single-pass compiler: Replace StatefulComponent auto-memoization with rx._x.memo-based approach #6213, New @rx._x.memo decorator (experimental) #6186), removal of the multi-process executor (Single-pass compiler: Remove legacy multi-threading/multiprocessing executor infrastructure #6217), profiling and optimization (Single-pass compiler: Profile, benchmark, and optimize the new compilation pipeline #6215), memo provenance (Compiler: Track provenance of rx.memo components and output to mirrored Python paths #6218) - Single-port mode and the
previewrun mode with backend-served hot reload — Investigate: Internally-managed hot reload with single-port dev mode #6221, ENG-9153: Add preview run mode #6663 - Monorepo split into separately installable packages — Monorepo split: separate pip distributions #6242 (tracking: Dependency Reduction & Decoupling #6237)
- Remove JSON5 dependency — remove JSON5 dependency #5820
- Framework-level MCP server — Framework-level MCP server: agent-friendly tool discovery for Reflex apps #6248, shipped in reflex-enterprise
- Event handler HTTP endpoints with OpenAPI spec — shipped as the EventHandler API in reflex-enterprise
- Docs moved into the framework repo (
docs/) - Better error path for an unprocessable delta — Need a better error path when backend sends unprocessable delta #6019
- Interoperability & Standardization umbrella — Interoperability & Standardization #6246 (its open items, ASGI Interoperability — mountable Reflex sub-app #6239 and Config via
pyproject.tomlwith app profiles #6240, now sit under Developer Experience above) - Tailwind v4 — upgrade to tailwind v4 #4694
Dropped
- Replicache-based state synchronization — Replicache-based state synchronization (replace JSONPatch) #6224
- Page
on_unloadlifecycle hook — Pageon_unloadlifecycle hook #6233 on_disconnectlifecycle hook — removed from the roadmap- Desktop app support — not on the current roadmap
Open, but outside the current roadmap
- Single Pass Compiler tracking issue — Single Pass Compiler: Tracking Issue #6235: selective page recompilation and caching (Single-pass compiler: Implement selective page recompilation and caching #6216),
module_codein VarData (Compiler: Addmodule_codefield to VarData #6219) - Lighthouse & production performance — Improve lighthouse performance scores (desktop and mobile) #6295
- Strategies for improving hot reload time — Strategies for Improving Hot Reload Time #4922
- Source maps: available through
VITE_SOURCEMAPin preview mode (ENG-9153: Add preview run mode #6663), not tracked further - Remove SQLModel as a hard dependency: folded into the
reflex-ormextraction (Extractreflex-ormpackage #6243) - PWA first-class support (PWA - First class support for Progressive Web App development #3931) and push notifications in PWAs (Push notifications support in PWAs #5078): removed from the roadmap, still in the backlog
Incomplete Plans from Previous Roadmap (0.8.0)
These items were on the previous 0.8.0 roadmap and have not yet been completed. They are being tracked separately or carried forward into the plans above.
Reflex Cloud
- Cloud: Support for Team and Enterprise tiers #4915
- Cloud: Improved Integration with Reflex.Build #4916
- Cloud: Improvements to CLI #4917
- Cloud: Improved Package visibility #4918
- Cloud: Improve Billing Usage Display #4919
- Cloud: One-Click Auth / User Management #4920
- Cloud: Improved Log Searching #4924
- Cloud: Custom Alerts #4925
- Cloud: Custom Roles #4926
- Cloud: Otel + Prometheus support #4927
Reflex Enterprise
- One Click Auth [Pro plan]
- Database Model Interface [Pro plan]
- 3rd Party Integrations with AI Builder [Enterprise Plan]
Please leave comments on what you think about this tentative plan.
Activity
[-]Reflex 0.5.0 Roadmap[/-][+][REF-2092] Reflex 0.5.0 Roadmap[/+][-][REF-2092] Reflex 0.5.0 Roadmap[/-][+][REF-2092] Reflex 0.5.0 Roadmap [WIP][/+][-][REF-2092] Reflex 0.5.0 Roadmap [WIP][/-][+]Reflex 0.5.0 Roadmap [WIP][/+]abulvenz commentedon Feb 28, 2024
benedikt-bartscher commentedon Feb 28, 2024
picklelo commentedon Feb 28, 2024
picklelo commentedon Feb 28, 2024
cllatser commentedon Mar 2, 2024
dentroai commentedon Mar 20, 2024
include commentedon Mar 21, 2024
[-]Reflex 0.5.0 Roadmap [WIP][/-][+]Reflex 0.5.0 Roadmap[/+]Sprocketer commentedon Apr 10, 2024
25 remaining items
SomniaUmbra commentedon Apr 13, 2025
Lendemor commentedon May 28, 2025
SomniaUmbra commentedon May 31, 2025
Lendemor commentedon May 31, 2025
SomniaUmbra commentedon Jun 1, 2025
SomniaUmbra commentedon Jun 1, 2025
NormanShelley commentedon Jun 12, 2025
HasanRad021 commentedon Oct 19, 2025
👌👌👌
CMajorChords commentedon Jan 13, 2026
Making the Reflex MCP open-source as a standalone tool—or offering it for individual subscription—would solidify Reflex’s dominance in the Python web ecosystem. This move would significantly expand the training corpus for the latest Reflex APIs, making AI-assisted development even more powerful.
larsblumberg commentedon Mar 24, 2026
What's your take on adding offline support, e.g. deploying the backend (as WASL) together with the frontend so that Reflex survive connectivity issues. Audi likely reduces some performance issues for when lots of state is exchanged.
masenf commentedon Mar 24, 2026
@larsblumberg in the process of updating the roadmap currently. I want to see better offline support, I think we're going to implement the core with replicache (or similar) which should give some offline ability while largely being backend driven.
No immediate plans to have reflex running in the browser though.