Download Latest Version v3.17.1 source code.zip (23.9 MB) Google Add to Preferred Sources
Home / v3.17.0
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2026-09-16 6.5 kB
v3.17.0 source code.tar.gz 2026-09-16 23.2 MB
v3.17.0 source code.zip 2026-09-16 23.9 MB
Totals: 3 Items   47.1 MB 0

Security

  • ⚠️ Make single-use download routes of ui.download (nicegui.io), app.add_static_file() and app.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.codemirror (nicegui.io) for 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_HOST or NICEGUI_PROTOCOL are set in the environment but ignored, since ui.run (nicegui.io) only uses them internally (#6301, [#6337] by @evnchn, @Zeeshan-Chaudhry, @SaadZahem, @falkoschindler)

Bugfixes

  • Cancel button.clicked() and the initialized() awaits of ui.scene (nicegui.io), ui.scene_view and ui.leaflet (nicegui.io) when 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_javascript reporting a bogus timeout or leaking its task when the client is deleted (#6278, [#6295] by @falkoschindler, @SaadZahem, @evnchn)
  • Cancel awaited Event.emitted() (nicegui.io) 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_exception replacing the real exception with a RuntimeError after 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_pages and ui.select (nicegui.io) elements remaining registered after their constructor raised (#6313, [#6323], [#6330] by @falkoschindler, @gyanu2507, @evnchn)
  • Fix ui.sub_pages staying in the SPA instead of loading pages registered via app.include_router() or reached with a query string or fragment; a page('/') on a prefixed APIRouter now registers the bare prefix without trailing slash, old URLs are redirected (#6281, [#6288] by @falkoschindler, @DineshThumma9, @evnchn)
  • Fix ui.select (nicegui.io), ui.radio (nicegui.io) and ui.toggle (nicegui.io) rebuilding 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.codemirror (nicegui.io) and ui.editor (nicegui.io) losing their HTML id, which broke tooltips (#6315, [#6316] by @python-and-novella, @evnchn, @falkoschindler)
  • Fix ui.codemirror (nicegui.io) line 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() (nicegui.io) 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_shutdown protection (#6263, [#6329] by @evnchn, @falkoschindler)
  • Fix ui.popup (nicegui.io) and ui.menu (nicegui.io) not appearing in Firefox 153+ (#6221 by @SHDocter, @evnchn, @falkoschindler)
  • Make ui.query (nicegui.io)'s style(replace=...) replace the existing styles instead of merging them (#6182 by @evnchn, @falkoschindler)
  • Fix Quasar overriding Tailwind's monospace font stack for ui.code (nicegui.io) and other pre elements, which fell back to Courier on Safari (#6340, [#6342] by @tcjennings, @falkoschindler, @evnchn)

Documentation

  • Fix the on_change documentation of ui.slider (nicegui.io) and ui.range (nicegui.io), which fire while dragging and not only on release (#6291, [#6292] by @KeurKeur, @evnchn, @falkoschindler)

Testing

  • Fix nicegui_reset_globals() not clearing Slot.stacks, which broke later User tests 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!

Source: README.md, updated 2026-09-16