NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #4191 most downloaded on PyPI
Create web-based user interfaces with Python. The nice way.
Last release 16 days ago
18 Sep 2026
Ships on a steady schedule
a new release about every 3 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
5 years old
315 releases · first in 2021
One column per quarter.
allowing sophisticated page structures through Quasar Layout (see docs and #128)
ui.header, ui.footer, ui.left_drawer and ui.right_drawerui.page_stickyadding example Image Mask Overlay to shows how an image can be overlayed with a mask
main.pyallow declaring path parameters for ui.page like with ui.get
fixed and improved lifecycle example (see #103)
fixed and improved lifecycle example (see #103)
Nothing published for this version
show a few simple examples on the nicegui.io index page
introduce the yield keyword as an alternative way for defining code that should be executed on-page-ready
Several optimizations to keep the online docs at https://nicegui.io available. Thanks for all the visits to our page. It really points out opportuniti
Several optimizations to keep the online docs at https://nicegui.io available. Thanks for all the visits to our page. It really points out opportunities to improve the performance.
create gaps via tailwind class instead of CSS style (see #104)
fix props and style parsing for certain edge cases
improve style and props parsing to support multi-word props; now you can write .props('name="some multi-word value"') (see #98)
.props('name="some multi-word value"') (see #98)allow tuples as keys in ui.select, ui.toggle and ui.radio
ui.select, ui.toggle and ui.radioui.joystickfixed page registration
fixed page registration (#100)
added missing file to docker image
minor documentation improvements
main.pymain.pyauto-context for on_page_ready (see example)
main.py: load api documentation and examples on_page_ready: This reduces the time to first byte.ValueElement now has a set_value methodmain.pyfunctions decorated with @ui.page can optionally receive a request object
@ui.page can optionally receive a request objectimproved styleability of joystick
The @ui.page decorator is now a class. This enables you to encapsulate common styling and behaviour for all pages. See the customisation example for f
@ui.page decorator is now a class. This enables you to encapsulate common styling and behaviour for all pages. See the customisation example for further details.using private page generator for main.py
Pages are not created through a contextmanager anymore. Instead a decorator is used to configure a page builder. This is much closer to FastAPI and th
Pages are not created through a contextmanager anymore. Instead a decorator is used to configure a page builder. This is much closer to FastAPI and the existing get-decorator.
Example:
@ui.page('/')
def index_page():
ui.label('Hello, world!')
It also allows us to create private pages: Before this change, it was quite complicated to not share all state with all browsers (eg. dialogs and menus). See https://nicegui.io/#page for documentation and #85 for more details on the decision process.
The UI is now stoppable with ui.shutdown (see #83). Example:
The UI is now stoppable with ui.shutdown (see #83). Example:
from nicegui import ui
ui.label('Your UI...')
ui.button('Quit', on_click=ui.shutdown)
ui.run(reload=False)
print('Do something else...')
traffic chart: ignore our own monitoring requests
traffic chart: ignore our own monitoring requests
split uvicorn reload arguments into list of strings to fix #62
Using uvicorn >= 0.18.0 (fixes #80).
adding traffic statistics to main.py
adding traffic statistics to main.py
allow 4.0 and later versions of the typing-extensions package (see #78)
allow 4.0 and later versions of the typing-extensions package (see #78)
list of markdown2 extensions is now configurable; activate "tables" by default
provide optional socket in page.on_disconnect
page.on_disconnectre-organized, simplified and improved examples
Changes
ui.svg because its just ui.htmlBugfixes
docker image now based on python 3.10
Nothing published for this version
Nothing published for this version
introducing on_page_ready callback for ui.page
on_page_ready callback for ui.pageui.notifyintroduction of scene.text and scene.text3d to render text in 3d
scene.text and scene.text3d to render text in 3dNothing published for this version
introducing disconnect-handlers for ui and page
From 0.8 onwards we changed the update strategy of NiceGUI:
From 0.8 onwards we changed the update strategy of NiceGUI:
Prior to this release, we used and propagated the same strategy as JustPy: event handlers needed to return False to not trigger full page updates. This works good for small examples. But if your UI gets bigger, full page updates become a real performance bottle neck. Adding return False everywhere is quite cumbersome and error prone. Instead, NiceGUI now smartly updates only the element which changes. And for cases where it can not simply detect a change the user can use ui.update(...) to enforce an update. See our documentation for more details and examples.
introducing ui.add_head_html() and ui.add_body_html()
ui.add_head_html() and ui.add_body_html()ui.on_connectability to exclude features to speed up loading time
introduce ui.add_static_files for serving a static folder
ui.add_static_files for serving a static folderintroduction of ui.tree to display a hierarchy of elements
ui.tree to display a hierarchy of elementsui.color_pickerimprove behavior of ui.link and ui.open as well as routing of static resources when NiceGUI is served with X-Forwarded-Prefix header
introduce scene.ring, scene.tube and scene.spotlight for 3d scenes
scene.ring, scene.tube and scene.spotlight for 3d scenesui.table using AG Gridtooltip() method via builder patternui.linkGitHub ribbon on https://nicegui.io
adding .tooltip(...) for all ui.elements
ui.expansion elementui.dialog is now awaitable.tooltip(...) for all ui.elementsintroducing parameters to fine-control reload_dir and include/exclude patterns
ui.sceneNothing published for this version
we do not need the "binding" package
we do not need the "binding" package
Nothing published for this version
let ui.open() use socket argument if it is not None
make socket parameter optional for ui.open
ui.openui.openremove obsolete hint about Heroku
allowing to set host and port via environment variables
start NiceGUI in interactive mode (without auto-reload) if ui.run is not found or cannot be pre-evaluated
allow binding to value properties
renamed ui.annotation_tool to ui.interactive_image to have a better name for the newly introduced features
ui.annotation_tool to ui.interactive_image to have a better name for the newly introduced featuresui.interactive_imageui.sceneparameter injection for get decorator
minor corrections improving demo page and documentation
minor corrections improving demo page and documentation
introducing on_request callback for pages to provide session info (this allows reauthentication through cookies)
on_request callback for pages to provide session info (this allows reauthentication through cookies)ui.annotation_tool is now optionalui.annotation_tool with tailwind and cssui.chartYour coding agent can read these notes before it upgrades. Set up the MCP server →