Security
- ⚠️ Make single-use download routes of
ui.download,app.add_static_file()andapp.add_media_file()unguessable and truly single-use (GHSA-p92q-2755-mhgh by @hsnyus-09, @evnchn, @falkoschindler)
New features and enhancements
- Add a decoration API to
ui.codemirrorfor marking ranges, styling lines, hiding or replacing text and inserting text widgets without modifying the document (#5991 by @Jepson2k, @evnchn, @falkoschindler) - Warn when
NICEGUI_PORT,NICEGUI_HOSTorNICEGUI_PROTOCOLare set in the environment but ignored, sinceui.runonly uses them internally (#6301, #6337 by @evnchn, @Zeeshan-Chaudhry, @SaadZahem, @falkoschindler)
Bugfixes
- Cancel
button.clicked()and theinitialized()awaits ofui.scene,ui.scene_viewandui.leafletwhen the client is deleted instead of stranding one task per abandoned page load (#6232, #6271, #6277, #6294 by @evnchn, @SaadZahem, @falkoschindler) - Fix awaited
ui.run_javascriptreporting a bogus timeout or leaking its task when the client is deleted (#6278, #6295 by @falkoschindler, @SaadZahem, @evnchn) - Cancel awaited
Event.emitted()when the client is deleted (#6311, #6322 by @falkoschindler, @chiliec, @evnchn) - Fix page builders returning HTTP 500 "No response returned." when their task is cancelled (#6296, #6297 by @evnchn, @SaadZahem, @falkoschindler)
- Fix
app.handle_exceptionreplacing the real exception with aRuntimeErrorafter the client has been deleted, and keep running the remaining exception handlers when one of them fails (#6230, #6272, #6328 by @evnchn, @SaadZahem, @falkoschindler) - Fix half-built
ui.sub_pagesandui.selectelements remaining registered after their constructor raised (#6313, #6323, #6330 by @falkoschindler, @gyanu2507, @evnchn) - Fix
ui.sub_pagesstaying in the SPA instead of loading pages registered viaapp.include_router()or reached with a query string or fragment; apage('/')on a prefixedAPIRouternow registers the bare prefix without trailing slash, old URLs are redirected (#6281, #6288 by @falkoschindler, @DineshThumma9, @evnchn) - Fix
ui.select,ui.radioandui.togglerebuilding their options for every prop write during construction, which made large option lists slow to create (#6317, #6324 by @benthie, @evnchn, @falkoschindler) - Fix sortable containers not working when created in a callback or inside a dialog (#6318, #6326 by @bodacious-bill, @python-and-novella, @evnchn, @falkoschindler)
- Fix
ui.codemirrorandui.editorlosing their HTML id, which broke tooltips (#6315, #6316 by @python-and-novella, @evnchn, @falkoschindler) - Fix
ui.codemirrorline anchors and tooltips set together with a new value being applied to the old document, and reject line anchors on fractional lines (#6335, #6336, #6285 by @falkoschindler, @Jepson2k, @evnchn) - Fix
ui.scene.move_camera()recreating the camera controls when the up vector is unchanged, which discarded user configuration and misaligned TrackballControls after a window resize (#6241, #6242, #6247 by @ptruka, @evnchn, @falkoschindler) - Skip the page re-render when
ui.on()registers a global event after the first render, which caused flicker and lost client-side state (#6248, #6249 by @amks1, @evnchn, @falkoschindler) - Keep the tab alive when a stale socket disconnects after the browser has already reconnected (#6237 by @evnchn, @falkoschindler)
- Pin each client to a single tab ID so that replayed handshakes can no longer create unbounded tab storages (#6279 by @evnchn, @falkoschindler)
- Close the storage file when a backup task is cancelled, and fix queued lazy tasks losing their
await_on_shutdownprotection (#6263, #6329 by @evnchn, @falkoschindler) - Fix
ui.popupandui.menunot appearing in Firefox 153+ (#6221 by @SHDocter, @evnchn, @falkoschindler) - Make
ui.query'sstyle(replace=...)replace the existing styles instead of merging them (#6182 by @evnchn, @falkoschindler) - Fix Quasar overriding Tailwind's monospace font stack for
ui.codeand otherpreelements, which fell back to Courier on Safari (#6340, #6342 by @tcjennings, @falkoschindler, @evnchn)
Documentation
- Fix the
on_changedocumentation ofui.sliderandui.range, which fire while dragging and not only on release (#6291, #6292 by @KeurKeur, @evnchn, @falkoschindler)
Testing
- Fix
nicegui_reset_globals()not clearingSlot.stacks, which broke laterUsertests after an element was built outside a page (#6314, #6334 by @evnchn, @jnchen, @falkoschindler)
Special thanks to our top sponsors DiscoLike Inc., TestMu AI and Lechler GmbH ✨
and all our other sponsors and contributors for supporting this project!
🙏 Want to support this project? Check out our GitHub Sponsors page to help us keep building amazing features!