reflex-dev /reflex

🕸️ Web apps in pure Python 🐍

★ 29,008⑂ 1,834
PythonCreated 2022-10-25reflex.dev
29,008
stars
+23+21+68
1,834
forks
–
watchers
–
prs
–
issues
–
releases
–
discussions

README

✨ Performant, customizable web apps in pure Python. Deploy in seconds. ✨


!versions







---

 [!NOTE]
 Build faster with Reflex:

 - AI Builder - Generate full-stack Reflex apps in seconds.
 - Agent Toolkit - Connect MCP and Skills to your coding assistant.
 - App Management - Deploy and manage your Reflex apps.

---

 Introduction

Reflex is a library to build full-stack web apps in pure Python.

Key features:

- Pure Python - Write your app's frontend and backend all in Python, no need to learn Javascript.
- Full Flexibility - Reflex is easy to get started with, but can also scale to complex apps.

See our architecture page to learn how Reflex works under the hood.

 ⚙️ Installation

Important: We strongly recommend using a virtual environment to ensure the reflex command is available in your PATH.

 🥳 Create your first app

Create a project, add Reflex, and start the development server with uv:

shell
mkdir my_app_name
cd my_app_name
uv init

uv add reflex
uv run reflex init
uv run reflex run


You should see your app running at http://localhost:3000.

Now you can modify the source code in my_app_name/my_app_name.py. Reflex has fast refreshes so you can see your changes instantly when you save your code.

 🫧 Example App

Build an image generation app in Python with Reflex: define the UI, manage state in a class, and call an image model from an event handler.



  
    
  



python
import reflex as rx
import openai

client = openai.AsyncOpenAI()


class State(rx.State):
    prompt: str = ""
    image_url: str = ""
    processing: bool = False

    @rx.event
    def set_prompt(self, value: str):
        self.prompt = value

    @rx.event
    async def generate(self):
        self.processing = True
        yield
        response = await client.images.generate(
            model="gpt-image-1.5",
            prompt=self.prompt,
        )
        self.image_url = f"data:image/png;base64,{response.data[0].b64_json}"
        self.processing = False


def index():
    return rx.vstack(
        rx.heading("Image Generator"),
        rx.input(placeholder="Enter a prompt...", on_change=State.set_prompt),
        rx.button("Generate", on_click=State.generate, loading=State.processing),
        rx.image(src=State.image_url),
    )


app = rx.App()
app.add_page(index, title="Reflex:Image Generation")


 All Thanks To Our Contributors:

Snapshot: 2026-11-10T09:35:25Z · Data license Apache-2.0 · JSON