Download Latest Version v3.14.0 source code.zip (23.5 MB)
Email in envelope

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

Home / v3.14.0
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2026-06-30 5.3 kB
v3.14.0 source code.tar.gz 2026-06-30 22.9 MB
v3.14.0 source code.zip 2026-06-30 23.5 MB
Totals: 3 Items   46.4 MB 0

Security

  • ⚠️ Harden against X-Forwarded-Prefix reflection and clarify the security documentation (#6124 by @evnchn, @falkoschindler)

New features and enhancements

  • Add a custom keybindings API to the ui.codemirror (nicegui.io) editor (#6000 by @Jepson2k, @evnchn, @falkoschindler)
  • Declare the page language via <html lang="..."> when ui.run(language=...) is set, and stop Quasar from forcing en-US otherwise (#5811 by @evnchn, @falkoschindler)
  • Introduce ui.markdown (nicegui.io).default_extras to configure Markdown extras globally (#5548, [#5610] by @tomsquest, @evnchn, @falkoschindler)
  • Simplify the multipart spool-size lookup now that Starlette ≥ 1.0.1 is required, and respect an explicit spool_max_size = 0 (#6102 by @falkoschindler, @evnchn)

Bugfixes

  • Fix character loss in ui.input (nicegui.io) (and other value elements) on high-latency connections by preserving client-originated values during element updates (#5185, [#6104] by @Xitod, @samuller, @evnchn, @falkoschindler)
  • Fall back to polling when the WebSocket cannot connect, fixing the endless reload loop on iOS 26 Safari over plain HTTP (#5802, [#6103] by @michaeljandrews, @evnchn, @falkoschindler)
  • Fix native window close hanging or failing to shut down the app — on Windows, after a hot reload, and when run.cpu_bound was used (#5443, [#5845], [#6106], [#6111], [#6131], [#6132] by @MaidScientistIzutsumiMarin, @trivedihoney, @Mick235711, @trivedihoney, @chidoziemanagwu, @evnchn, @falkoschindler)
  • Fix ui.sub_pages wildcard routes not re-rendering on client-side navigation, and reject unsupported route patterns (#6090, [#6092] by @JoelBender, @falkoschindler, @evnchn)

Breaking change: Route patterns that previously failed silently (e.g. '/{_:path}', '/{name:path}') now raise a ValueError at ui.sub_pages(...) / .add(...). These never matched anything before, so only already-broken routes are affected; use show_404=False together with PageArguments.remaining_path for wildcard routing instead.

  • Fix a selection error when changing ui.select (nicegui.io) options inside an "input-value" handler (#4420, [#6100] by @platinops, @VedantMadane, @falkoschindler, @evnchn)
  • Fix ui.select (nicegui.io)(with_input=True) dropping its html_id, which broke tooltips (#6114, [#6116] by @rolfn, @python-and-novella, @evnchn, @falkoschindler)
  • Fix ui.skeleton (nicegui.io)'s animation_speed being sent as milliseconds instead of seconds (#6107, [#6110] by @python-and-novella, @evnchn, @falkoschindler)
  • Fix ui.interactive_image click coordinates when a stream changes its resolution (#6122, [#6123] by @LeBoozer, @evnchn, @falkoschindler)
  • Fix GLTF models in ui.scene (nicegui.io) being overwritten with the default material at startup (#6118, [#6125] by @fabian0702, @evnchn, @falkoschindler)
  • Fix an infinite reload loop when an async page build exceeds response_timeout, showing a terminal error page instead (#6126, [#6127] by @evnchn, @falkoschindler)
  • Fix the run.cpu_bound/run.io_bound return type to R | None, surfacing the latent None they already return on cancel/shutdown (#5925, [#6056] by @calebgregory, @evnchn, @falkoschindler)

Note: This is a type-level change only; runtime behavior is unchanged. mypy may now flag code that typed the result as non-optional R — these are surfaced latent bugs, not regressions. NiceGUI 4.0 will raise CancelledError instead of returning None.

Documentation

  • Improve AI-agent detection in Markdown content negotiation so agents reliably receive Markdown docs (#6109, [#6113] by @jwinpbe, @evnchn, @falkoschindler)
  • Improve app.storage (nicegui.io) documentation clarity and fix inconsistencies (#5717, [#5719] by @phifuh, @evnchn, @falkoschindler)
  • Reserve NOTE: comment markers for drawing special attention (#6101 by @falkoschindler, @evnchn)

Infrastructure

  • Add a request check to the startup smoke test so request-time regressions no longer ship green (#6079, [#6084] by @evnchn, @SSDWGG, @falkoschindler)
  • Remove the redundant CI Gate run on push to main now that the merge queue already validates every commit reaching main, speeding up releases (#6136 by @falkoschindler, @evnchn)
  • Bump actions/checkout from 6 to 7 (#6121 by @dependabot, @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-06-30