{"repo":"reflex-dev/reflex","free":true,"listed":false,"github":"https://github.com/reflex-dev/reflex","clone":"git clone https://github.com/reflex-dev/reflex.git","description":"🕸️ Web apps in pure Python 🐍","language":"Python","stars":28825,"topics":["dashboard","data-analysis","data-science","data-visualization","developer-tools","framework","fullstack","gui","open-source","python","webapp"],"license":"Apache-2.0","category":"saas_starter","readme_excerpt":"<div align=\"center\">\n<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/reflex-dev/reflex/main/docs/images/reflex_light.svg\">\n  <source media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/reflex-dev/reflex/main/docs/images/reflex_dark.svg\">\n  <img alt=\"Reflex Logo\" src=\"https://raw.githubusercontent.com/reflex-dev/reflex/main/docs/images/reflex.svg\" width=\"300px\">\n</picture>\n\n<hr>\n\n### **✨ Performant, customizable web apps in pure Python. Deploy in seconds. ✨**\n\n[![PyPI version](https://badge.fury.io/py/reflex.svg)](https://badge.fury.io/py/reflex)\n![versions](https://img.shields.io/pypi/pyversions/reflex.svg)\n[![Documentation](https://img.shields.io/badge/Documentation%20-Introduction%20-%20%23007ec6)](https://reflex.dev/docs/getting-started/introduction)\n[![PyPI Downloads](https://static.pepy.tech/badge/reflex)](https://pepy.tech/projects/reflex)\n[![Discord](https://img.shields.io/discord/1029853095527727165?color=%237289da&label=Discord)](https://discord.gg/T5WSbC2YtQ)\n[![Twitter](https://img.shields.io/twitter/follow/getreflex)](https://x.com/getreflex)\n\n</div>\n\n---\n\n> [!NOTE]\n> Build faster with Reflex:\n>\n> - **[AI Builder](https://build.reflex.dev/)** - Generate full-stack Reflex apps in seconds.\n> - **[Agent Toolkit](https://reflex.dev/docs/ai/integrations/agent-toolkit/)** - Connect MCP and Skills to your coding assistant.\n> - **[App Management](https://reflex.dev/hosting)** - Deploy and manage your Reflex apps.\n\n---\n\n# Introduction\n\nReflex is a library to build full-stack web apps in pure Python.\n\nKey features:\n\n- **Pure Python** - Write your app's frontend and backend all in Python, no need to learn Javascript.\n- **Full Flexibility** - Reflex is easy to get started with, but can also scale to complex apps.\n\nSee our [architecture page](https://reflex.dev/blog/2024-03-21-reflex-architecture/#the-reflex-architecture) to learn how Reflex works under the hood.\n\n## ⚙️ Installation\n\n**Important:** We strongly recommend using a virtual environment to ensure the `reflex` command is available in your PATH.\n\n## 🥳 Create your first app\n\nCreate a project, add Reflex, and start the development server with [uv](https://docs.astral.sh/uv/):\n\n```shell\nmkdir my_app_name\ncd my_app_name\nuv init\n\nuv add reflex\nuv run reflex init\nuv run reflex run\n```\n\nYou should see your app running at http://localhost:3000.\n\nNow 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.\n\n## 🫧 Example App\n\nBuild 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.\n\n<div align=\"center\">\n<video src=\"https://github.com/user-attachments/assets/aaff28ad-8b3c-43bf-967e-439ee34c8a87\" width=\"900\" controls muted poster=\"https://raw.githubusercontent.com/reflex-dev/reflex/main/docs/images/reflex-image-generation-app.png\">\n  <a href=\"https://web.reflex-assets.dev/video/reflex-dalle-video-2x.mp4\">\n    <img src=\"https://raw.githubusercontent.com/reflex-dev/reflex/main/docs/images/reflex-image-generation-app.png\" alt=\"Preview of an image generation app built with Reflex\" width=\"900\">\n  </a>\n</video>\n</div>\n\n```python\nimport reflex as rx\nimport openai\n\nclient = openai.AsyncOpenAI()\n\n\nclass State(rx.State):\n    prompt: str = \"\"\n    image_url: str = \"\"\n    processing: bool = False\n\n    @rx.event\n    def set_prompt(self, value: str):\n        self.prompt = value\n\n    @rx.event\n    async def generate(self):\n        self.processing = True\n        yield\n        response = await client.images.generate(\n            model=\"gpt-image-1.5\",\n            prompt=self.prompt,\n        )\n        self.image_url = f\"data:image/png;base64,{response.data[0].b64_json}\"\n        self.processing = False\n\n\ndef index():\n    return rx.vstack(\n        rx.heading(\"Image Generator\"),\n        rx.input(placeholder=\"Enter a prompt...\", on_change=State.set_prompt),\n        rx.button(\"Generate\", on_click=State.generate, loading=State.processing),\n        rx.image(src=State.image_url),\n    )\n\n\napp = rx.App()\napp.add_page(index, title=\"Reflex:Image Generation\")\n```\n\n## All Thanks To Our Contributors:\n\n<a href=\"https://github.com/reflex-dev/reflex/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=reflex-dev/reflex\" />\n</a>\n","default_branch":"main","files":1665,"tree":[".claude/hooks/session-start.sh",".claude/settings.json",".devcontainer/devcontainer.json",".github/CODEOWNERS",".github/ISSUE_TEMPLATE/bug_report.md",".github/ISSUE_TEMPLATE/build_issue.md",".github/ISSUE_TEMPLATE/cloud_issue.md",".github/ISSUE_TEMPLATE/custom_component_request.md",".github/ISSUE_TEMPLATE/documentation.md",".github/ISSUE_TEMPLATE/enhancement_request.md",".github/ISSUE_TEMPLATE/enterprise_issue.md",".github/ISSUE_TEMPLATE/feature_request.md",".github/actions/setup_build_env/action.yml",".github/codeql-config.yml",".github/pull_request_template.md",".github/scripts/auto_release_internal/detect.sh",".github/scripts/dispatch_release/detect.sh",".github/scripts/dispatch_release/open_release_pr.sh",".github/scripts/dispatch_release/push_prerelease.sh",".github/scripts/publish/create_release.sh",".github/scripts/publish/push_tag.sh",".github/scripts/publish/verify_pyi.sh",".github/workflows/auto_release_internal.yml",".github/workflows/build_packages.yml",".github/workflows/changelog.yml",".github/workflows/check_node_latest.yml",".github/workflows/check_outdated_dependencies.yml",".github/workflows/codeql.yml",".github/workflows/dependency-review.yml",".github/workflows/dispatch_release.yml",".github/workflows/docs_tests.yml",".github/workflows/docs_whitelist.yml",".github/workflows/integration_app_harness.yml",".github/workflows/integration_tests.yml",".github/workflows/min_deps.yml",".github/workflows/performance.yml",".github/workflows/pre-commit.yml",".github/workflows/publish.yml",".github/workflows/reflex_init_in_docker_test.yml",".github/workflows/release_from_changelog.yml",".github/workflows/unit_tests.yml",".gitignore",".pre-commit-config.yaml",".python-version","AGENTS.md","CHANGELOG.md","CLAUDE.md","CODE_OF_CONDUCT.md","CONTRIBUTING.md","DEBUGGING.md","LICENSE","MCP_README.md","README.md","SECURITY.md","docker-example/README.md","docker-example/production-app-platform/.dockerignore","docker-example/production-app-platform/Dockerfile","docker-example/production-app-platform/README.md","docker-example/production-compose/.dockerignore","docker-example/production-compose/Caddy.Dockerfile","docker-example/production-compose/Caddyfile","docker-example/production-compose/Dockerfile","docker-example/production-compose/README.md","docker-example/production-compose/compose.prod.yaml","docker-example/production-compose/compose.tools.yaml","docker-example/production-compose/compose.yaml","docker-example/production-one-port/.dockerignore","docker-example/production-one-port/Caddyfile","docker-example/production-one-port/Dockerfile","docker-example/production-one-port/README.md","docker-example/simple-one-port/.dockerignore","docker-example/simple-one-port/Caddyfile","docker-example/simple-one-port/Dockerfile","docker-example/simple-one-port/README.md","docker-example/simple-two-port/.dockerignore","docker-example/simple-two-port/Dockerfile","docker-example/simple-two-port/README.md","docs/advanced_onboarding/code_structure.md","docs/advanced_onboarding/configuration.md","docs/advanced_onboarding/how-reflex-works.md","docs/ai_builder/apis.md","docs/ai_builder/app_lifecycle/copy_app.md","docs/ai_builder/app_lifecycle/deploy_app.md","docs/ai_builder/app_lifecycle/download_app.md","docs/ai_builder/app_lifecycle/fork_app.md","docs/ai_builder/app_lifecycle/general.md","docs/ai_builder/app_lifecycle/share_app.md","docs/ai_builder/features/agent_toolkit.md","docs/ai_builder/features/agent_tools.md","docs/ai_builder/features/automated_testing.md","docs/ai_builder/features/connect_to_git_providers.md","docs/ai_builder/features/connect_to_github.md","docs/ai_builder/features/design_systems.md","docs/ai_builder/features/editor_modes.md","docs/ai_builder/features/file_tree.md","docs/ai_builder/features/generation_controls.md","docs/ai_builder/features/image_as_prompt.md","docs/ai_builder/features/installing_external_packages.md","docs/ai_builder/features/integration_shortcut.md","docs/ai_builder/features/knowledge.md","docs/ai_builder/features/planning.md","docs/ai_builder/features/restore_checkpoint.md","docs/ai_builder/features/secrets.md","docs/ai_builder/features/security_scanner.md","docs/ai_builder/figma.md","docs/ai_builder/files.md","docs/ai_builder/images.md","docs/ai_builder/integrations/agent_toolkit.md","docs/ai_builder/integrations/agents_md.md","docs/ai_builder/integrations/mcp_installation.md","docs/ai_builder/integrations/mcp_overview.md","docs/ai_builder/integrations/overview.md","docs/ai_builder/integrations/skills.md","docs/ai_builder/organization/audit_logs.md","docs/ai_builder/organization/automated_provisioning.md","docs/ai_builder/organization/cloud_providers.md","docs/ai_builder/organization/custom_roles.md","docs/ai_builder/organization/deployment_approvals.md","docs/ai_builder/organization/domains.md","docs/ai_builder/organization/members.md","docs/ai_builder/organization/moving_projects_and_apps.md","docs/ai_builder/organization/overview.md","docs/ai_builder/organization/project_access.md","docs/ai_builder/organization/provisioning.md","docs/ai_builder/organization/roles_and_permissions.md","docs/ai_builder/organization/service_accounts.md","docs/ai_builder/organization/sso.md","docs/ai_builder/organization/teams.md","docs/ai_builder/organization/usage.md","docs/ai_builder/overview/best_practices.md","docs/ai_builder/overview/project_overview.md","docs/ai_builder/overview/templates.md","docs/ai_builder/overview/tutorial.md","docs/ai_builder/overview/what_is_reflex_build.md","docs/ai_builder/python_libraries.md","docs/ai_builder/urls.md","docs/ai_builder/webhooks.md","docs/api-reference/browser_javascript.md","docs/api-reference/browser_storage.md","docs/api-reference/cli.md","docs/api-reference/event_triggers.md","docs/api-reference/plugins.md","docs/api-reference/special_events.md","docs/api-reference/telemetry.md","docs/api-reference/utils.md","docs/api-reference/var_system.md","docs/api-routes/overview.md","docs/app/.github/workflows/codespell.yml","docs/app/.github/workflows/pre-commit.yml","docs/app/.github/workflows/unit_tests.yml","docs/app/.gitignore","docs/app/CLAUDE.md","docs/app/README.md","docs/app/agent_files/__init__.py","docs/app/agent_files/_plugin.py","docs/app/assets/Reflex.svg","docs/app/assets/chakra_color_mode_provider.js","docs/app/assets/docs/dark/getting_started.svg","docs/app/assets/docs/dark/mcp.svg","docs/app/assets/docs/light/getting_started.svg","docs/app/assets/docs/light/mcp.svg","docs/app/assets/favicon.ico","docs/app/assets/meta/android-chrome-192x192.png","docs/app/assets/meta/android-chrome-512x512.png","docs/app/assets/meta/apple-touch-icon.png","docs/app/assets/meta/browserconfig.xml","docs/app/assets/meta/favicon-16x16.png","docs/app/assets/meta/favicon-32x32.png","docs/app/assets/meta/mstile-144x144.png","docs/app/assets/meta/mstile-150x150.png","docs/app/assets/meta/mstile-310x150.png","docs/app/assets/meta/mstile-310x310.png","docs/app/assets/meta/mstile-70x70.png","docs/app/assets/meta/site.webmanifest","docs/app/assets/reflex_banner.webp","docs/app/assets/robots.txt","docs/app/assets/vintage-button-sound-effect.mp3","docs/app/data/GanttChart-updated.csv","docs/app/data/canada_life.csv","docs/app/data/gapminder2007.csv","docs/app/data/mt_bruno_elevation.csv","docs/app/data/nba.csv","docs/app/data/olympic-winners.json","docs/app/data/wind_dataset.csv","docs/app/pyproject.toml","docs/app/reflex.lock/bun.lock","docs/app/reflex.lock/package.json","docs/app/reflex_docs/__init__.py","docs/app/reflex_docs/changelogs.py","docs/app/reflex_docs/components/button.py","docs/app/reflex_docs/components/docpage/__init__.py","docs/app/reflex_docs/components/docpage/navbar/__init__.py","docs/app/reflex_docs/components/docpage/navbar/buttons/sidebar.py","docs/app/reflex_docs/components/hint.py","docs/app/reflex_docs/components/webpage/__init__.py","docs/app/reflex_docs/docgen_pipeline.py","docs/app/reflex_docs/models.py","docs/app/reflex_docs/pages/__init__.py","docs/app/reflex_docs/pages/docs/__init__.py","docs/app/reflex_docs/pages/docs/api_reference/plugins.py","docs/app/reflex_docs/pages/docs/api_reference/utils.py","docs/app/reflex_docs/pages/docs/apiref.py","docs/app/reflex_docs/pages/docs/cloud.py","docs/app/reflex_docs/pages/docs/cloud_cliref.py","docs/app/reflex_docs/pages/docs/component.py","docs/app/reflex_docs/pages/docs/custom_components.py","docs/app/reflex_docs/pages/docs/enterprise.py","docs/app/reflex_docs/pages/docs/env_vars.py","docs/app/reflex_docs/pages/docs/guide.py","docs/app/reflex_docs/pages/docs/library.py","docs/app/reflex_docs/pages/docs/metadata.py","docs/app/reflex_docs/pages/docs/recipes_overview.py","docs/app/reflex_docs/pages/docs/source.py","docs/app/reflex_docs/pages/docs_landing/__init__.py","docs/app/reflex_docs/pages/docs_landing/views/__init__.py","docs/app/reflex_docs/pages/docs_landing/views/ai_builder.py","docs/app/reflex_docs/pages/docs_landing/views/divider.py","docs/app/reflex_docs/pages/docs_landing/views/enterprise.py","docs/app/reflex_docs/pages/docs_landing/views/framework.py","docs/app/reflex_docs/pages/docs_landing/views/hero.py","docs/app/reflex_docs/pages/docs_landing/views/hosting.py","docs/app/reflex_docs/pages/docs_landing/views/link_item.py","docs/app/reflex_docs/pages/docs_landing/views/other.py","docs/app/reflex_docs/pages/docs_landing/views/self_hosting.py","docs/app/reflex_docs/pages/gallery/__init__.py","docs/app/reflex_docs/pages/integrations/integration.py","docs/app/reflex_docs/pages/integrations/integration_gallery.py","docs/app/reflex_docs/pages/integrations/integration_header.py","docs/app/reflex_docs/pages/integrations/integration_list.py","docs/app/reflex_docs/pages/integrations/integration_request.py","docs/app/reflex_docs/pages/library_previews.py","docs/app/reflex_docs/reflex_docs.py","docs/app/reflex_docs/templates/__init__.py","docs/app/reflex_docs/templates/docpage/__init__.py","docs/app/reflex_docs/templates/docpage/docpage.py","docs/app/reflex_docs/templates/docpage/feedback_state.py","docs/app/reflex_docs/templates/docpage/sidebar/__init__.py","docs/app/reflex_docs/templates/docpage/sidebar/sidebar.py","docs/app/reflex_docs/templates/docpage/sidebar/sidebar_items/__init__.py","docs/app/reflex_docs/templates/docpage/sidebar/sidebar_items/ai.py","docs/app/reflex_docs/templates/docpage/sidebar/sidebar_items/cloud.py","docs/app/reflex_docs/templates/docpage/sidebar/sidebar_items/component_lib.py","docs/app/reflex_docs/templates/docpage/sidebar/sidebar_items/enterprise.py","docs/app/reflex_docs/templates/docpage/sidebar/sidebar_items/item.py","docs/app/reflex_docs/templates/docpage/sidebar/sidebar_items/learn.py","docs/app/reflex_docs/templates/docpage/sidebar/sidebar_items/recipes.py","docs/app/reflex_docs/templates/docpage/sidebar/sidebar_items/reference.py","docs/app/reflex_docs/templates/docpage/sidebar/state.py","docs/app/reflex_docs/templates/docpage/state.py","docs/app/reflex_docs/utils/http.py","docs/app/reflex_docs/views/algolia.py","docs/app/reflex_docs/views/animated_box.py","docs/app/reflex_docs/views/bottom_section/get_started.py","docs/app/reflex_docs/views/bottom_section/newsletter.py","docs/app/reflex_docs/views/docs_navbar.py","docs/app/reflex_docs/views/search.py","docs/app/reflex_docs/whitelist.py","docs/app/rxconfig.py","docs/app/tests/test_agent_files.py","docs/app/tests/test_breadcrumbs.py","docs/app/tests/test_changelogs.py","docs/app/tests/test_doc_description.py","docs/app/tests/test_doc_links.py","docs/app/tests/test_docgen_double_eval.py","docs/app/tests/test_docs_navbar.py","docs/app/tests/test_frontmatter_meta.py","docs/app/tests/test_integrations.py","docs/app/tests/test_routes.py","docs/app/tests/test_sidebar.py","docs/app/tests/test_upload_not_evaluated.py","docs/app/tests/test_urls.py","docs/assets/overview.md","docs/assets/upload_and_download_files.md","docs/client_storage/overview.md","docs/components/conditional_rendering.md","docs/components/html_to_reflex.md","docs/components/props.md","docs/components/rendering_iterables.md","docs/custom-components/command-reference.md","docs/custom-components/overview.md","docs/custom-components/prerequisites-for-publishing.md","docs/database/overview.md","docs/database/queries.md","docs/database/relationships.md","docs/database/tables.md","docs/enterprise/LICENSE","docs/enterprise/ag_chart.md","docs/enterprise/ag_grid/aligned-grids.md","docs/enterprise/ag_grid/cell-selection.md","docs/enterprise/ag_grid/column-defs.md","docs/enterprise/ag_grid/index.md","docs/enterprise/ag_grid/master-detail.md","docs/enterprise/ag_grid/model-wrapper.md","docs/enterprise/ag_grid/pivot-mode.md","docs/enterprise/ag_grid/theme.md","docs/enterprise/ag_grid/tree-data.md","docs/enterprise/ag_grid/value-transformers.md","docs/enterprise/auth/audit.md","docs/enterprise/auth/custom-pages.md","docs/enterprise/auth/deployment.md","docs/enterprise/auth/overview.md","docs/enterprise/auth/providers.md","docs/enterprise/auth/secure-by-default.md","docs/enterprise/auth/testing.md","docs/enterprise/built-with-reflex.md","docs/enterprise/components.md","docs/enterprise/drag-and-drop.md","docs/enterprise/event-handler-api.md","docs/enterprise/mantine/autocomplete.md","docs/enterprise/mantine/collapse.md","docs/enterprise/mantine/combobox.md","docs/enterprise/mantine/index.md","docs/enterprise/mantine/json-input.md","docs/enterprise/mantine/loading-overlay.md","docs/enterprise/mantine/multi-select.md","docs/enterprise/mantine/number-formatter.md","docs/enterprise/mantine/pill.md","docs/enterprise/mantine/ring-progress.md","docs/enterprise/mantine/semi-circle-progress.md","docs/enterprise/mantine/spoiler.md","docs/enterprise/mantine/tags-input.md","docs/enterprise/mantine/timeline.md","docs/enterprise/mantine/tree.md","docs/enterprise/map/index.md","docs/enterprise/mcp/authentication.md","docs/enterprise/mcp/custom-resources.md","docs/enterprise/mcp/deployment.md","docs/enterprise/mcp/extending.md","docs/enterprise/mcp/index.md","docs/enterprise/overview.md","docs/enterprise/react_flow/basic_flow.md","docs/enterprise/react_flow/components.md","docs/enterprise/react_flow/edges.md","docs/enterprise/react_flow/examples.md","docs/enterprise/react_flow/hooks.md","docs/enterprise/react_flow/interactivity.md","docs/enterprise/react_flow/nodes.md","docs/enterprise/react_flow/overview.md","docs/enterprise/react_flow/theming.md","docs/enterprise/react_flow/utils.md","docs/enterprise/single-port-proxy.md","docs/enterprise/testing.md","docs/events/background_events.md","docs/events/chaining_events.md","docs/events/decentralized_event_handlers.md","docs/events/event_actions.md","docs/events/event_arguments.md","docs/events/events_overview.md","docs/events/page_load_events.md","docs/events/special_events.md","docs/events/yield_events.md","docs/getting_started/__init__.py","docs/getting_started/basics.md","docs/getting_started/chatapp_tutorial.md","docs/getting_started/dashboard_tutorial.md","docs/getting_started/installation.md","docs/getting_started/introduction.md","docs/getting_started/project-structure.md","docs/hosting/app-management.md","docs/hosting/billing.md","docs/hosting/bring-your-own-cloud.md","docs/hosting/cloud-providers.md","docs/hosting/compute.md","docs/hosting/config_file.md","docs/hosting/custom-domains.md","docs/hosting/databricks.md","docs/hosting/deploy-quick-start.md","docs/hosting/deploy-to-gcp.md","docs/hosting/deploy-with-github-actions.md","docs/hosting/logs.md","docs/hosting/machine-types.md","docs/hosting/project-members.md","docs/hosting/project-settings.md","docs/hosting/regions.md","docs/hosting/secrets-environment-vars.md","docs/hosting/security-scan.md","docs/hosting/self-hosting.md","docs/hosting/tokens.md","docs/images/dalle.gif","docs/images/dalle_colored_code_example.png","docs/images/reflex-image-generation-app.png","docs/images/reflex.png","docs/images/reflex.svg","docs/images/reflex_dark.svg","docs/images/reflex_light.svg","docs/library/data-display/avatar.md","docs/library/data-display/badge.md","docs/library/data-display/callout-ll.md","docs/library/data-display/callout.md","docs/library/data-display/code_block.md","docs/library/data-display/data_list.md","docs/library/data-display/icon.md","docs/library/data-display/list.md","docs/library/data-display/moment.md","docs/library/data-display/progress.md","docs/library/data-display/scroll_area.md","docs/library/data-display/spinner.md","docs/library/disclosure/accordion.md","docs/library/disclosure/segmented_control.md","docs/library/disclosure/tabs.md"],"storefront":"/r/reflex-dev","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/reflex-dev/reflex/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}