Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Reflex Enterprise

Advanced components, authentication, and agent APIs for Reflex apps — in pure Python.

PyPI Python

Documentation · Components · Pricing


What is it?

reflex-enterprise is the premium add-on package for the Reflex web framework. It adds components and plugins that the Reflex team builds and maintains:

  • Enterprise-grade components — AG Grid data tables, Leaflet maps, drag-and-drop, node editors, and more, all wrapped for Python with typed props and event handlers.
  • Secure-by-default authentication — OIDC login, plus page, event, and state-field protection that is on unless you opt out.
  • A first-class agent surface — expose your app's own event handlers to AI agents over MCP or REST, with OAuth 2.1 and per-scope human consent.

It is a drop-in layer, not a different framework: swap rx.App for rxe.App and rx.Config for rxe.Config, and the rest of your Reflex app is unchanged. Everything in rx keeps working exactly as before.

Installation

pip install reflex-enterprise

Optional extras:

pip install "reflex-enterprise[mcp]"      # MCPPlugin — expose the app to AI agents
pip install "reflex-enterprise[testing]"  # the reflex_app pytest fixture

Requires Python 3.10+ and reflex >= 0.9.6 (installed automatically).

Getting started

Two swaps, then run the app as usual with reflex run.

# rxconfig.py
import reflex_enterprise as rxe

config = rxe.Config(
    app_name="my_app",
    # accepts every rx.Config option, plus the enterprise-only ones
)
# my_app/my_app.py
import reflex_enterprise as rxe

app = rxe.App()

Enterprise components live in the rxe namespace next to everything you already use from rx.

Free usage and licensing

reflex-enterprise is free to use in development, but it is not open source — it ships under a proprietary EULA and its use is tied to a Reflex account.

  • A Reflex login is required. Run reflex login, or set REFLEX_ACCESS_TOKEN. An app started while logged out exits with an error.
  • Development is free. reflex run works on the Free tier, with no time limit and no feature gating on components.
  • Shipping requires a paid plan. reflex export and reflex run --env prod require Pro or Enterprise. (Deploying to Reflex Cloud is not gated by this check — it follows your cloud plan.)
  • The "Built with Reflex" badge is displayed in production builds. Hiding it (show_built_with_reflex=False) requires Pro or above on Reflex Cloud, and Enterprise when self-hosted.

See reflex.dev/pricing for what each tier includes.

Features

Authentication — AuthPlugin

Add OIDC login to an app by registering one plugin. Pages, event handlers, state fields, and computed vars are then protected by default — a protected var is never serialized to an anonymous visitor, and a protected handler never runs for one — so an unguarded surface has to be an explicit choice rather than an oversight.

# rxconfig.py
import reflex_enterprise as rxe

config = rxe.Config(app_name="my_app", plugins=[rxe.AuthPlugin()])
import reflex as rx

import reflex_enterprise as rxe


class DashboardState(rx.State):
    revenue: int = 0  # protected: never sent to an anonymous visitor

    @rxe.var(auth=False)
    def headline(self) -> str:  # explicitly public
        return "Welcome!"

    @rxe.event(auth=lambda ctx: ctx.auth_user_state.email.endswith("@acme.com"))
    def close_the_books(self): ...


@rxe.page(route="/dashboard")      # login required
def dashboard() -> rx.Component: ...


@rxe.page(route="/", auth=False)   # public
def index() -> rx.Component: ...

/login, /logout, /callback, and /forbidden routes are generated for you (and are fully customizable), an event blocked before login is replayed afterwards instead of being lost, and an audit hook can observe every login and access decision.

AI agent access — MCPPlugin

Publish your app's existing event handlers as Model Context Protocol tools, so an agent can drive the real app — no separate API to write or keep in sync.

# rxconfig.py
import reflex_enterprise as rxe

config = rxe.Config(app_name="my_app", plugins=[rxe.AuthPlugin(), rxe.MCPPlugin()])

A streamable-HTTP MCP server is mounted at /_reflex/mcp with search_events and queue_event tools plus a reflex:// resource family for reading live session state. Add an AuthPlugin and the app becomes a spec-compliant OAuth 2.1 authorization + resource server: agents authenticate through your existing identity provider, the human approves individually grantable app scopes on a consent page, and the app issues its own resource-bound tokens so upstream IdP tokens never leave the server. Every auth check you already wrote applies to agent traffic unchanged. Prefer REST? EventHandlerAPIPlugin exposes the same handlers as HTTP endpoints with a generated OpenAPI spec.

Advanced components

Component Description Docs
AG Grid Enterprise data grid — sorting, filtering, pivoting, grouping, master/detail, cell selection, server-side row model, and direct SQLModel table binding. Docs
AG Charts Financial and statistical visualizations, with charting driven straight from state. Docs
Map Interactive Leaflet maps: tile layers, markers, popups, vector shapes, controls, and a programmatic map API. Docs
Drag and Drop react-dnd draggables and drop targets, with hooks for advanced cases. Docs
React Flow Node-based editors, flowcharts, and diagrams with custom nodes and edges. Docs
Mantine Extra inputs and UI primitives — autocomplete, multi-select, tags input, tree, timeline, date pickers, progress rings. Docs
import reflex as rx

import reflex_enterprise as rxe


class State(rx.State):
    column_defs: list[dict] = [{"field": "name"}, {"field": "age"}]
    row_data: list[dict] = [{"name": "Ada", "age": 36}]

    @rx.event
    def handle_drop(self, item: dict):
        return rx.toast(f"dropped {item}")


rxe.ag_grid(
    id="grid",
    column_defs=State.column_defs,
    row_data=State.row_data,
    row_selection={"mode": "multiRow"},
)

rxe.map(
    rxe.map.tile_layer(url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"),
    rxe.map.marker(rxe.map.popup("You are here"), position=rxe.map.latlng(lat=51.505, lng=-0.09)),
    id="map",
    center=rxe.map.latlng(lat=51.505, lng=-0.09),
    zoom=13,
    height="50vh",
)

rxe.dnd.drop_target(
    rxe.dnd.draggable(rx.card("Drag me"), type="card"),
    accept=["card"],
    on_drop=State.handle_drop,
)

Testing

The reflex_app pytest fixture boots your real app — frontend and backend — and hands the test a live URL to drive with Playwright or any other browser tooling. It is registered through an entry point, so there is no conftest.py wiring to do.

from playwright.sync_api import Page, expect

from reflex_enterprise.testing import ReflexApp


def test_signup(reflex_app: ReflexApp, page: Page):
    page.goto(reflex_app.url)

    page.get_by_placeholder("Email").fill("dev@reflex.dev")
    page.get_by_role("button", name="Sign up").click()

    expect(page.get_by_text("Thanks, dev@reflex.dev!")).to_be_visible()

The app under test is discovered by walking up to the nearest rxconfig.py, started once per session, and reused across tests.

License

Proprietary — see the EULA. Copyright © Pynecone, Inc.

Metadata

Release files for reflex-enterprise 0.9.6a1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for reflex-enterprise 0.9.6a1
File Size Uploaded
reflex_enterprise-0.9.6a1.tar.gz 858.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for reflex-enterprise 0.9.6a1
File Interpreter ABI Platform
reflex_enterprise-0.9.6a1-py3-none-any.whl Python 3 none any Details

Total release size: 1.3 MB

Release files / reflex_enterprise-0.9.6a1.tar.gz

Download URL reflex_enterprise-0.9.6a1.tar.gz
Size 858.4 kB
Tags Source
SHA-256 checksum
How to use checksums
d8769b6dee5b9a0eb5596e6ab8d536f8839263f39e817df40b4cb046c4b102c2
BLAKE2b-256 checksum
How to use checksums
3b506c7b082633398658a0b460c53e090ef7e733b711f0f2a3e566902d8bff1b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / reflex_enterprise-0.9.6a1-py3-none-any.whl

Download URL reflex_enterprise-0.9.6a1-py3-none-any.whl
Size 467.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
59ecc2be2757049c1baffb703b566eb7a6454a00efa3ed6cb9dd350d250aa2ef
BLAKE2b-256 checksum
How to use checksums
4da9fe1cbcce4bf85ce6cfc3ca8b65720a4bbdffffa7bc7e4a521e941f28b612
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

0.9.6

2 release files

This release

0.9.6a1 This release

2 release files

0.9.5

2 release files

0.9.4

2 release files

0.9.3

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.5

2 release files

0.6.4

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.5

2 release files

0.5.4

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.2

1 release file

0.3.1

1 release file

0.3.0

1 release file

0.2.1

1 release file

0.2.0

1 release file

0.1.2

4 release files

0.1.1

4 release files

0.1.0

4 release files

0.0.5

4 release files

0.0.4

4 release files

0.0.3

4 release files

0.0.2

4 release files

0.0.1

4 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page