Releases: zauberzeug/nicegui
v1.4.2
New features and enhancements
- Introduce
ui.pagination
(#1890, #1899 by @BertrandBorel, @falkoschindler, @adarshpunj) - Introduce
new_value_mode
forui.select
(#1045, #1819 by @groucho86, @artreven, @falkoschindler) - Support
ui.tab_panels
withoutui.tabs
(#1894, #1897 by @CrystalWindSnake) - Support binding source with local file paths (#1282, #1853, #1854 by @DaedlyKitten, @rodja, @falkoschindler)
- Support return values of refreshable function (#1845, #1914 by @gavinpotter, @falkoschindler)
- Avoid blank page when passing an invalid dynamic property (#1950 by @v479038280, @falkoschindler)
- Raise exception if
ui.element
is called with an invalid HTML tag (#1908, #1915 by @ed2050, @ProbablyBrian, @falkoschindler)
Bugfix
- Fix
ui.upload
for files with whitespace in native mode (#1576 by @birchtree02, @falkoschindler)
Documentation
- Add inheritance to the "Modularization" example (#1929 by @rodja)
- Add page function to the "Chat with AI" example (#1919 by @Dronakurl)
- Add an "Editable Table" example (#1833, #1905 by @Dronakurl, @falkoschindler)
- Fix "SQLite Database" example to avoid bug in tortoise-orm and aiosqlite (#1901 by @hu76589, @falkoschindler)
- Add note about conflicts between Quasar and TailwindCSS (#1821 by @Rinzlov, @natankeddem, @falkoschindler)
v1.4.1
Bugfixes
- Fix startup and shutdown handlers with existing FastAPI app (#1870, #1874, #1877 by @ProbablyBrian, @zilch42, @falkoschindler)
- Fix component name clashes (#1887 by @valgarf, @falkoschindler)
Documentation
- Add missing
label
documentation forui.select
(#1851 by @gavinpotter, @falkoschindler) - Improve robustness and documentation for
AwaitableResponse
(#1880 by @falkoschindler) - Add hint about styling
ui.input
(#1884 by @adarshpunj, @falkoschindler)
v1.4.0
New features and enhancements
- Make JavaScript calls optionally awaitable (#1471, #1709, #1797 by @falkoschindler)
- Introduce react-like
ui.state
to be used withui.refreshable
(#1410, #1438, #1447, #1489 by @qingant, @falkoschindler) - Move Highcharts dependency into a separate nicegui-highcharts package to avoid the need for a license for commercial projects (#1850, #1863 by @rodja, @falkoschindler)
- Refactor
globals
module (#1708, #1847 by @falkoschindler) - Use FastAPI's new
lifespan
API (#1849 by @rj-vera, @rodja, @falkoschindler) - Use flex layout per default for layout elements (#1614, #1796 by @youyou015, @natankeddem, @falkoschindler)
- Replace netifaces with much simpler (and better) ifaddr (#1856 by @retsyo, @rodja)
- Convert
ui.timer
into an element (#1710, #1829 by @falkoschindler) - Update httpx dependency (#1820 by @tscheburaschka, @falkoschindler)
- Consistently mark methods private if not part of the public API (#1326 by @falkoschindler)
- Remove deprecated APIs (#1711 by @falkoschindler)
Bugfixes
- Fix AG Grid bug with hidden cells by upgrading to new version (#1860 by @rhkarls, @natankeddem, @falkoschindler)
Documentation
- Add LangChain handler to the "Chat with AI" example (#1832 by @cam-barts)
Breaking changes and migration guide
No need to await JavaScript calls
When using run_javascript
, run_method
, call_api_method
and call_column_api_method
,
you can decide whether the client should respond with a return value or not by awaiting the method call or not.
The method will automatically inform the client.
The respond
parameter of run_javascript
is not used anymore. See https://nicegui.io/documentation/run_javascript
ui.chart
is now ui.highchart
and requires the package "nicegui-highchart"
Highcharts requires you to buy a license for commercial products if the code is installed on your machine.
That's why we made it an optional package.
Install with pip install nicegui[highcharts]
.
The globals
module is gone
We removed the ugly globals
module, which was never intended to be public API,
but might have been used nonetheless.
- If you need the app configuration, use
app.config
instead (usingfrom nicegui import app
to get the app object). - If you need the current client or slot, use the
context
module instead. - If you need the client dictionary, use
Client.instances
instead.
FastAPI's new lifespan API
Since FastAPI's @on_event("startup")
and @on_event("shutdown")
are deprecated,
NiceGUI switched to the new lifespan API.
You can still use app.on_startup()
and app.on_shutdown()
.
Layout elements use flex layout by default
Before you needed to use ui.column
inside, e.g., ui.tab_panel
and other elements to get proper alignment, padding and spacing.
Now most UI elements provide reasonable default so that the content looks like in a ui.row
or ui.column
.
Upgraded third-party dependencies
- vue: 3.3.4 → 3.3.6
- quasar: 2.12.2 → 2.13.0
- tailwindcss: 3.3.2 (unchanged)
- socket.io: 4.7.1 → 4.7.2
- es-module-shims: 1.7.3 → 1.8.0
- aggrid: 30.0.3 → 30.2.0
- echarts: 5.4.3 (unchanged)
- mermaid: 10.2.4 → 10.5.1
- nipplejs: 0.10.1 (unchanged)
- plotly: 2.24.3 → 2.27.0
- three: 0.154.0 → 0.157.0
- tween: 21.0.0 (unchanged)
- vanilla-jsoneditor: 0.18.0 → 0.18.10
v1.3.18
New features and enhancements
- Support single and double quotes in element props (#1800 by @Dronakurl)
- Improve client and slot pruning (#1826, #1838 by @rodja, @falkoschindler)
Bugfixes
- Fix incorrect python-socketio requirement (#1842, #1843 by @zilch42, @falkoschindler)
- Fix click handler of
ui.menu_item
inui.context_menu
(#1827 by @rodja, @falkoschindler)
Documentation
Development
v1.3.17
New features and enhancements
- Introduce
ui.context_menu
(#1738, #1801 by @gavinpotter, @natankeddem, @falkoschindler) - Introduce
validate()
method for validation elements (#1781 by @falkoschindler) - Improve recovery after reconnecting (#1761, #1762, #1763 by @s2terminal, @rodja)
- Adapt socket.io heartbeat depending on the provided reconnect_timeout (#1812 by @rodja)
Bugfixes
- Fix "coroutine 'AsyncServer.enter_room' was never awaited" (#1809 by @FlynV, @Barriradio, @nghia-vo, @falkoschindler)
- Refresh binding before page delivery (#1561, #1775 by @laserir, @falkoschindler)
Documentation
- Improve Fly replay middleware to only replay if the target instance is still available (#1814 by @rodja)
- Fix typo: change "styles" to "style" (#1799 by @frankhuurman)
- Fix script "Script Executor" example on Windows (#1767 by @dotnfc, @rodja)
- Clarify usage of
ui.open
on auto-index pages (#1760 by @rodja) - Simplify tree example and showing disable feature (#1759 by @rodja)
v1.3.16
New features and enhancements
- Simplify row updates in
ui.table
(#1753, #1755 by @nghia-vo, @falkoschindler) - Warn if
ui.notify
has no connected client to display the message (#1754 by @rodja) - Add play, pause and seek methods to
ui.audio
andui.video
(#1636, #1741 by @Squigglez2, @wgong, @falkoschindler) - Make name of
ui.icon
a bindable property (#1690, #1725 by @thetableman, @wgong, @falkoschindler) - Improve
ui.aggrid.from_pandas
to support datatypes likeDatetimeIndex
(#1698 by @johancj, @bapowell, @falkoschindler) - Introduce default style, classes and props for UI elements (#1683, #1689 by @natankeddem, @falkoschindler)
- Add expand and collapse methods to
ui.tree
(#1385, #1704 by @frwkl, @signup2k, @falkoschindler, @rodja)
Bugfixes
- Fix evaluation of empty Tailwind class values (#1736 by @natankeddem, @falkoschindler)
- Fix Ctrl-C not closing the pywebview window (#604, #1732 by @miningmanna, @ItsCubeTime, @al-eax, @rodja, @falkoschindler)
- Connection lost popup drawer interaction (#1729 by @natankeddem, @falkoschindler)
Documentation
- Add licenses of third-party libraries to Dependencies.md (#1286, #1747 by @firai, @rodja, @falkoschindler)
Development
- Fix type hint for
value
inui.tab_panels
(#1728 by @s2terminal) - Fix race condition in pytests (#1734 by @miningmanna, @rodja)
v1.3.15
New features and enhancements
- Introduce
ui.code
for displaying code blocks (#592, #1567, #1653 by @yipeng-jiang, @angel0614563, @falkoschindler) - Introduce
ui.editor
(#1124, #1651 by @DelScipio, @falkoschindler) - Introduce
ui.timeline
(#1639 by @alikalik9, @falkoschindler) - Introduce
run.cpu_bound
andrun.io_bound
(#1609, #1656 by @WolfgangFahl, @falkoschindler) - Improve
ui.echart
with click events and dynamic options (#1562, #1579 by @thetableman) - Support non-string column names for AG Grid from pandas (#1665 by @CrystalWindSnake, @falkoschindler)
On Air
- Correctly propagate the storage session ID to the app (#1603 by @Smug246, @rodja)
- Support multiple identical header fields in HTTP responses (#1661 by @rodja)
Documentation
- Add an example for authentication and user management with Descope (#1676 by @rodja)
- Improve demo for
ui.menu
(#1657 by @natankeddem, @rodja) - Keep header height unchanged when opening a dialog (#1678 by @natankeddem, @falkoschindler)
- New ROS2 tutorial which explains step-by-step how NiceGUI can be used with ROS2 (by @JensOgorek)
Development
- Add a basic dev container to simplify contributing to the project (#1057, #1532 by @xec-abailey, @jacoverster, @natankeddem, @rodja)
- Add NO_NETIFACES environment variable for Docker releases (#1662 by @rodja)
v1.3.14
New features and enhancements
- Allow making
ui.toggle
clearable (#1550, #1644 by @superlou, @falkoschindler) - Provide the list of URLs on which the server is available (#1537 by @rodja, @falkoschindler)
- Allow specifying pagination for
ui.table
as a dictionary (#1643, #1646 by @natankeddem)
Bugfixes
- Make sure to serve static JavaScript files with correct mimetype (#1510, #1594 by @jsmaupin, @thetableman, @natankeddem, @falkoschindler)
- Fix
ui.stepper
dropping UI state (#1638 by @rodja, @falkoschindler) - Fix
ui.echart
width on initial load (#1563, #1570 by @thetableman, @natankeddem, @dabenny, @falkoschindler) - Fix mousemove events for
ui.interactive_image
(#1634, #1635 by @falkoschindler)
Documentation
- Introduce AuthMiddleware in the authentication example (#1555, #1557 by @laserir, @rodja)
- Add a custom binding example (#1578, #1581 by @v479038280, @rodja)
- Fix several demos not being rendered (#1616, #1617 by @natankeddem, @falkoschindler)
- Fix
ui.markdown
by upgrading pygments dependency (#1595, #1605 by @superlou, @clueple, @rodja)
v1.3.13
New features and enhancements
- Use scoped logging (#1496, #1497 by @dreusel)
- Simplify nesting of elements inside
ui.circular_progress
(#1491, #1493 by @Vincent1334, @pythonormen, @rodja)
Bugfixes
- Stop
ui.timer
when its context is deleted (#1500 by @dreusel, @falkoschindler) - Adhere forwarded-prefix for redirects (#1464, #1501 by @Smug246, @rodja)
- Catch gaierror and improve startup speed (#1178, #1498 by @tianqiqiu, @natankeddem, @pythoninthegrass, @rodja)
- Fix type of
GenericEventArguments.args
(#1518 by @AndrewMHenry, @falkoschindler) - Make distinction between absolute and relative urls in redirect middleware (#1517 by @Smug246, @rodja)
- Fix and improve elements clear, remove and delete methods (#1512, #1514 by @dreusel, @falkoschindler)
Documentation
- Fix bug in storage demo (#1511 by @v479038280, @rodja)
- Ensure search index is not cached between versions (#1499 by @rodja)
v1.3.12
New features and improvements
- Allow canceling a
ui.timer
(#1477, #1478 by @bergmansj, @falkoschindler) - Make storage path configurable via environment variable (#1418, #1426, #1476 by @Smug246, @falkoschindler)
- Add optional preview for
ui.color_input
(#1390, #1473 by @adosikas, @falkoschindler) - Support passing functions to
ui.aggrid
(#1420, #1468, #1470 by @PyAntony, @aersam, @falkoschindler) - Introduce new
ui.json_editor
element (#1474 by @natankeddem, @falkoschindler)
Bugfixes
- Fix float conversion for empty
ui.number
(#1479 by @bergmansj, @falkoschindler) - Fix deactivated one-shot
ui.timer
(#1477 by @bergmansj, @falkoschindler)
Development
- Discussion about RuntimeError caused by python-engineio (#1467 by @tianqiqiu)
- Replace obsolete
docker-compose
withdocker compose
(#1456 by @Suraj1089, @rodja)