Skip to content

reflex-base@0.9.9a2

Pre-release
Pre-release

Choose a tag to compare

Deprecations

  • get_config(reload=True) is deprecated (removal in 1.0) but keeps working: passing reload=True emits a deprecation warning and delegates to reload_config(), which forces a fresh load of the config into the current RegistrationContext. (#6985)

Bug Fixes

  • Resolve TypeAliasType annotations (PEP 695 type statements and the typing_extensions backport) in _isinstance and typehint_issubclass, so assigning to an alias-annotated state var no longer raises TypeError: isinstance() arg 2 must be a type from State.__setattr__, and event handlers with alias-annotated arguments can be passed uncalled to event triggers without crashing page compile. Parameterized generic aliases (Items[str]) and aliases nested in unions (Key | None) are resolved as well, completing the alias support added to Var.guess_type. (#6986)
  • The generated vite.config.js no longer passes options rejected or deprecated by rolldown-vite 8.x: the no-op rollupOptions.jsx key is dropped and output.advancedChunks migrated to output.codeSplitting (same shape), removing the "Invalid input options" and "advancedChunks option is deprecated" warnings from every prod build/export. (#6987)
  • Console warnings and errors no longer print literal backslash-escaped brackets (e.g. dict\[str, str]). The rich-markup escapes were left over from the legacy console helpers, but the logging pipeline renders messages with markup disabled, so bracketed type names now print verbatim. VarAttributeError messages drop the same escapes. (#6989)
  • A custom component declaring library = "react-router-dom" (including versioned and subpath forms) now fails compilation with an actionable error naming the component, instead of silently installing the removed package — which pulled in a second, unpinned React Router 7 copy that worked in dev by accident and broke production builds. React Router 8 dropped react-router-dom: use library = "react-router" instead, or "react-router/dom" for RouterProvider/HydratedRouter. (#6991)
  • With REFLEX_ENABLE_FULL_LOGGING, granian worker records reach the log file again: the file handler now opens in append mode (truncating once up front), so it reopens after the worker's post-fork logging.config.dictConfig closes it instead of silently dropping every worker-side record. The legacy console file writer follows the reopened stream through a proxy, so its timestamped lines no longer leak to stdout and break --json output. (#6992)

Performance

  • Speed up prop validation and JSON serialization on hot paths: _isinstance now reads __origin__ once per type, memoizes get_args, and caches the deferred Var/LiteralVar/Field imports instead of re-importing on every call, and json_dumps caches its deferred serializers.serialize lookup. (#6862)
  • vite_config_template declares a resolveId hook filter ({ id: /react-dom\/server/ }) on vite-plugin-always-use-react-dom-server-node. The plugin runs with enforce: "pre", so without a filter rolldown invoked its JS handler for every import specifier in the graph (~15,800 calls on the Reflex docs build) to redirect the one specifier imported by entry.server.node.tsx; the filter is evaluated natively and skips the call otherwise. The template also imports ./vite-plugin-safari-cachebust.js with its extension, which Vite's configLoader: "native" requires and warns about today. (#6959)