What you can build with Reflex
Reflex is a Python web app framework. Define the interface and backend logic in Python; Reflex compiles the interface to React. Combine forms, tables, interactive charts, and streamed model responses in one application. Start with a working example, then add the data access, authentication, and deployment configuration your application needs.
You can use Reflex for the data-app, dashboard, chat, model-demo, and internal-tool workflows commonly associated with Streamlit, Dash, and Gradio. These patterns can share a custom, multi-page interface: a conversation can sit beside a chart, a model prediction can populate an editable form, and a dashboard selection can update a table. The examples below demonstrate the individual building blocks; the framework comparisons explain the different development models.
Choose a starting point
These are application patterns, not separate Reflex products. The framework's components, state, and events are the building blocks in each case. Reflex Build is a separate way to generate applications; you can write these framework examples directly in Python.
Customize the whole interface
Reflex gives you control over the layout and behavior surrounding a chart, conversation, or model. You compose the interface from components and connect them to your application's state and events.
You can change the model demo's form, result panel, and surrounding page without changing predict_flower. Likewise, a streaming chat's provider call can stay the same while you change its message layout or add a source panel. Existing supported components can be composed directly; integrating a new React library requires wrapper code.
Understand the performance model
Reflex compiles Python component definitions into a React frontend. An ordinary interaction calls the associated Python event handler and synchronizes changed state; it does not rerun the whole Python page definition. Browser-local interactions and compiled Var expressions can run without a Python event. This lets you keep expensive data loading separate from controls that only change the view.
The Streamlit and Dash benchmarks show where these techniques delivered measurable gains: faster initial dashboard data visibility and faster bulk component updates. Read the results alongside their workload, rendering strategy, and measurement setup, then apply the execution guide to your own app.
Connect data and services
An event handler can call a Python library, query a database, or await an external service. Follow the database guide for database access and the background events guide for asynchronous work that can run alongside other events. Keep service credentials on the backend, and put access checks in the operation that reads or changes the data.
For an existing React component that is not exposed by the component library, use the React wrapping guide. Wrapping requires declaring the props and events your application uses; it is distinct from using an already supported component.
Grow the example into an application
The tutorials deliberately start small. Before deploying a shared application, decide where records and generated files persist, how users authenticate, which operations each user may perform, and how failures are reported. In-memory session state is not a database or an authorization system.
Read performance and execution to understand browser work, Python events, network round trips, and background tasks. Use the self-hosting guide for deployment instructions.
Choosing between Python frameworks
Explore the framework comparisons to find your current framework and understand how its interface, state, and backend fit into Reflex. Then choose a working tutorial above to implement your first workflow.