New features and enhancements
- Introduce `app.storage.tab` as a [storage for the current tab](https://nicegui.io/documentation/storage#storing_data_per_browser_tab) (2837, 2866 by rodja, Alyxion, alexzaech, falkoschindler)
- Introduce `app.storage.client` as a [storage for volatile data for the current connection](https://nicegui.io/documentation/storage#short-term_memory) (1308, 2820 by rodja, amks1, sklibanov312, Alyxion, falkoschindler)
- Introduce `ui.matplotlib` element as an [object-oriented alternative to `ui.pyplot`](https://nicegui.io/documentation/matplotlib) (#2553 by tacaswell, falkoschindler)
- Refactor [`ui.list`](https://nicegui.io/documentation/list) and [`ui.menu`](https://nicegui.io/documentation/menu) items (#2855 by codingpaula, falkoschindler)
- Automatically await async results in [`ui.timer`](https://nicegui.io/documentation/timer) (#2856, 2859 by bmrast, falkoschindler)
- Add `maximize()` method for maximizing a [native application](https://nicegui.io/documentation/section_configuration_deployment#native_mode) (2836 by Aues6uen11Z)
- Replace `check_interval` for JavaScript requests with an asyncio event (2482, 2827 by pplno, anjomro, oidex, afullerx, rodja, falkoschindler)
Bugfixes
- Fix typo in [conftest.py](https://github.com/zauberzeug/nicegui/blob/main/nicegui/testing/conftest.py) (#2857 by kj4tmp)
- Fix update of [`ui.leaflet`](https://nicegui.io/documentation/leaflet) after calling `set_center` or `set_zoom` (#2825, 2826 by thetableman, falkoschindler)
- Fix update of invisible [`ui.markdown`](https://nicegui.io/documentation/markdown) elements (#2779, 2803 by me21, aniketkumar7, falkoschindler)
- Avoid ignoring dynamic properties starting with a line break (2845 by falkoschindler)
Documentation
- Add [audio recording example](https://github.com/zauberzeug/nicegui/tree/main/examples/audio_recorder/) (#1610, 2861 by rodja, CVxTz, falkoschindler)
- Add demos for [floating action buttons](https://nicegui.io/documentation/button#floating_action_button) (2832 by rodja)
- Improve the ["Chat with AI" example](https://github.com/zauberzeug/nicegui/blob/main/examples/chat_with_ai/main.py) (#2772, 2800 by merlinarer, rodja, falkoschindler)
Others
- Introduce ruff as an isort replacement and code checker with a pre-commit hook (2619 by mbrulatout, codingpaula, falkoschindler)
- Enable private vulnerability reporting (2870 by sunriseXu, falkoschindler)