Deprecations
get_config(reload=True)is deprecated (removal in 1.0) but keeps working: passingreload=Trueemits a deprecation warning and delegates toreload_config(), which forces a fresh load of the config into the currentRegistrationContext. (#6985)
Bug Fixes
- Resolve
TypeAliasTypeannotations (PEP 695typestatements and thetyping_extensionsbackport) in_isinstanceandtypehint_issubclass, so assigning to an alias-annotated state var no longer raisesTypeError: isinstance() arg 2 must be a typefromState.__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 toVar.guess_type. (#6986) - The generated
vite.config.jsno longer passes options rejected or deprecated by rolldown-vite 8.x: the no-oprollupOptions.jsxkey is dropped andoutput.advancedChunksmigrated tooutput.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.VarAttributeErrormessages 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 droppedreact-router-dom: uselibrary = "react-router"instead, or"react-router/dom"forRouterProvider/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-forklogging.config.dictConfigcloses 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--jsonoutput. (#6992)
Performance
- Speed up prop validation and JSON serialization on hot paths:
_isinstancenow reads__origin__once per type, memoizesget_args, and caches the deferredVar/LiteralVar/Fieldimports instead of re-importing on every call, andjson_dumpscaches its deferredserializers.serializelookup. (#6862) vite_config_templatedeclares aresolveIdhook filter ({ id: /react-dom\/server/ }) onvite-plugin-always-use-react-dom-server-node. The plugin runs withenforce: "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 byentry.server.node.tsx; the filter is evaluated natively and skips the call otherwise. The template also imports./vite-plugin-safari-cachebust.jswith its extension, which Vite'sconfigLoader: "native"requires and warns about today. (#6959)