Download Latest Version v3.15.0 source code.zip (23.6 MB)
Email in envelope

Get an email when there's a new version of NiceGUI

Home / v3.15.0
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2026-07-23 3.9 kB
v3.15.0 source code.tar.gz 2026-07-23 22.9 MB
v3.15.0 source code.zip 2026-07-23 23.6 MB
Totals: 3 Items   46.6 MB 0

New features and enhancements

  • Introduce ui.popup (nicegui.io), a menu on desktop and a dialog on small screens (#1125, [#2149], [#5613] by @DelScipio, @adosikas, @evnchn, @phifuh, @falkoschindler)
  • Make the start method of the run.cpu_bound process pool configurable via run.process_pool_start_method (#6117 by @evnchn, @NiklasNeugebauer, @falkoschindler)
  • Speed up binding cleanup with a reverse index (#6135, [#6150] by @ftilde, @jwinpbe, @evnchn, @falkoschindler)
  • Speed up observable change handlers by resolving expects_arguments once at registration (#6098, [#6108] by @maybites, @evnchn, @falkoschindler)
  • Add element identity to the "parent slot has been deleted" error (#6153 by @pascalzauberzeug, @evnchn, @falkoschindler)

Bugfixes

  • Fix ObservableCollection leaking change handlers and keeping discarded containers alive (#6139, [#6140] by @falkoschindler, @evnchn)
  • Raise KeyError from ObservableDict.pop() for a missing key, like dict.pop (#6163, [#6164] by @evnchn, @falkoschindler)

Breaking change: app.storage (nicegui.io).general, .user, .tab and .client are ObservableDicts, so storage.pop('missing') now raises a KeyError instead of returning None. Pass an explicit default to keep the previous behavior: storage.pop('missing', None).

  • Skip change events for no-op mutations of observable collections (#6169, [#6171] by @falkoschindler, @evnchn)
  • Fix ui.page_title, ui.add_head_html, ui.add_body_html and ui.add_css being lost in async ui.sub_pages builders (#6058, [#6147], [#6148], [#6168] by @cervelas, @evnchn, @falkoschindler)
  • Fix run.cpu_bound hanging with the forkserver start method, e.g. on Python 3.14 + Linux (#6166, [#6167] by @evnchn, @falkoschindler)
  • Fix PermissionError on Windows when clearing storage while a backup is in flight (#6158, [#6159], [#6173], [#6174] by @Jepson2k, @evnchn, @falkoschindler)
  • Fix sporadic HTTP 500 when user storage is pruned during an in-flight request (#6145, [#6146] by @evnchn, @falkoschindler)
  • Fix TypeError in ui.input (nicegui.io)'s shadow text when the autocomplete list is absent (#6161, [#6162] by @Jepson2k, @evnchn, @falkoschindler)
  • Fix placement and order of ui.fab_actions under dir="rtl" (#6165, [#6172] by @roximn148, @evnchn, @falkoschindler)
  • Fix crash when loading an STL model into ui.scene (nicegui.io) with wireframe=True (#5989, [#6118], [#6137] by @fabian0702, @Jepson2k, @evnchn, @falkoschindler)
  • Close streamed media file handles synchronously on teardown (#6149 by @evnchn, @falkoschindler)

Documentation

  • Add an accessibility heading tree to the homepage (#6155 by @evnchn, @falkoschindler)

Testing

  • Make CPython-only-semantics tests PyPy-compatible (#6157 by @evnchn, @falkoschindler)

Dependencies

  • Update nicegui-highcharts to 3.3, fixing dynamic adding and removing of chart series (#6138 by @falkoschindler, @evnchn)

Infrastructure

  • Run examples/pytests in CI so bundled example tests can't silently rot (#6141, [#6144] by @falkoschindler, @evnchn)

Special thanks to our top sponsors DiscoLike Inc. 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-07-23