rx.App's default overlay already mounts a sonner Toaster (connection_toaster()), so a page
that also renders rx.toast.provider(...) (to set position / rich colors / duration) ends up with
two Toaster roots and sonner renders every toast in both: 4 toasts → 8 DOM nodes, the on_load
toast appears twice, bg_count=3 but six toast nodes (results/out_dev/toast.json,
scripts/probe_toaster.py). Identical on sonner 2.0.7 / 0.9.10.post2. The docs warn "in most cases
you will not need to include this component directly" but do not mention the duplication, and there
is no supported way to reconfigure the default toaster short of replacing overlay_component.
Source: prerelease finding 034-08, recorded against Reflex 0.9.11a1 and compared with 0.9.10.post2. See the full campaign report and cluster notes and reproduction artifacts. Findings and verification status above are from that campaign; this filing does not claim a new browser rerun.
rx.App's default overlay already mounts a sonnerToaster(connection_toaster()), so a pagethat also renders
rx.toast.provider(...)(to set position / rich colors / duration) ends up withtwo Toaster roots and sonner renders every toast in both: 4 toasts → 8 DOM nodes, the
on_loadtoast appears twice,
bg_count=3but six toast nodes (results/out_dev/toast.json,scripts/probe_toaster.py). Identical on sonner 2.0.7 / 0.9.10.post2. The docs warn "in most casesyou will not need to include this component directly" but do not mention the duplication, and there
is no supported way to reconfigure the default toaster short of replacing
overlay_component.Source: prerelease finding 034-08, recorded against Reflex 0.9.11a1 and compared with 0.9.10.post2. See the full campaign report and cluster notes and reproduction artifacts. Findings and verification status above are from that campaign; this filing does not claim a new browser rerun.