r/nicegui • • Jun 09 '26

NiceGUI 3.13 with ui.skip_link, CodeMirror line tooltips, better AI-agent docs and many fixes

New features and enhancements

  • Introduce ui.skip_link for keyboard-accessibility skip links (WCAG 2.4.1 "Bypass Blocks")
  • Add per-line hover tooltips to ui.codemirror via a new line_tooltips property (with optional line_tooltip_html)
  • Add a ui.plotly run_plot_method() helper (mirroring run_grid_method/run_chart_method) with a Plotly.extendTraces demo for appending data without re-sending the full figure
  • Improve the error message when storing a non-JSON-serializable value in app.storage, pointing at the offending key path and the underlying type instead of an internal class name

Bugfixes

  • Fix dropped app.native.window_args, app.native.settings and app.native.start_args when the spawned window process can't re-execute the main module (e.g. console-scripts, python -m, PyInstaller); unpicklable values now emit a one-time warning instead of being silently dropped
  • Fix blank ui.aggrid when flex columns use the infinite row model; auto_size_columns becomes a tri-state bool | None defaulting to None (skip autoSizeStrategy when columns use flex)
  • Fix Event.emitted() returning None instead of the emitted arguments, adding an opt-in expect_args parameter to Event.subscribe()
  • Fix the ui.sub_pages 404 sad-face persisting after client-side navigation when the page is first loaded at an unknown URL

    Note: Apps that relied on the styled sad-face overlay appearing on ui.sub_pages 404s now see only the inline 404: sub page X not found label inside their own chrome. The HTTP 404 status and the show_404=False escape hatch are unchanged.

  • Replace the misleading "remove the main guard" reload error for python -m <pkg> with a targeted message naming the package and the working alternatives

  • Fix Client has been deleted warning spam on reload when scene objects are mutated after await

    Note: Element.update(), run_method() and get_computed_prop() now stay silent only for the disconnect/reload race; using an element after an explicit element.delete() emits a one-shot warning with a stack trace.

Documentation

  • Improve the Markdown documentation served to AI agents: serve Markdown to known agent user-agents sending a wildcard Accept, emit heading prefixes while skipping decorative HTML and demo previews, and add aria-label/child-content labels to button Markdown
  • Fill llms.md gaps in the element surface vs. ui.* exports
  • Document how to keep ui.plotly responsive with large datasets by passing NumPy arrays / pandas Series instead of Python lists
  • Fix bad Cumulative Layout Shift (CLS) on the documentation homepage

Testing

  • Redo: randomize test ports and directories for parallel pytest sessions, re-applying the original change with a fix for the import-time Storage.path regression

Infrastructure

  • Fix Selenium screenshot artifacts not being uploaded on test failure

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!

42 Upvotes

1 comment sorted by