# NiceGUI

[](/)

[Installation](/#installation)

[Features](/#features)

[Demos](/#demos)

[Documentation](/documentation)

[Examples](/examples)

[Why?](/#why)

[Button]

[Button]

[](https://github.com/zauberzeug/nicegui/)

[Button: icon:more_vert]

<?xml version="1.0" encoding="UTF-8"?>
<svg id="Ebene_1"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 62.44 71.74">
    <defs>
        <style>.svg_face{fill:none;stroke-linecap:round;stroke-linejoin:round}</style>
    </defs>
    <path class="svg_face" d="M55.35,18.98v23.97c0,14.34-10.89,25.96-24.34,25.96S6.68,57.29,6.68,42.95v-11.31c7.48,0,8.01-11.96,8.01-11.96,1.79-.78,3.82-.89,6.02,.23,11.9,6.08,26.13,1.69,31.33-.41,1.21-.49,2.34-.6,3.31-.52Z"/>
    <path class="svg_face svg_eye" d="M14.7,38.09s3.18-2.52,6.99,0"/>
    <path class="svg_face svg_eye" d="M39.71,38.09s3.18-2.52,6.99,0"/>
    <path class="svg_face" d="M6.68,34.87v9.97c-2.07,0-3.75-2.23-3.75-4.99s1.68-4.98,3.75-4.98Z"/>
    <path class="svg_face" d="M55.35,44.84v-9.97c2.07,0,3.75,2.23,3.75,4.99s-1.68,4.98-3.75,4.98Z"/>
    <path class="svg_face" d="M58.69,20.11s-1.33-.96-3.34-1.13c-.97-.08-2.1,.03-3.31,.52-5.2,2.1-19.43,6.49-31.33,.41-2.2-1.12-4.23-1.01-6.02-.23,0,0-.53,11.96-8.01,11.96v-10.33c0-.18,0-.35,.01-.53,.03-2.34,.17-4.72,.61-7,.62-3.05,4.35-7.48,9.01-8.8C34.04-.04,47.2,4.46,51.85,7.66c4.91,3.39,6.85,12.41,6.84,12.45Z"/>
    <path class="svg_face" d="M7.3,13.78c-.44,2.28-.58,4.66-.61,7,.01-2.33,.15-4.71,.61-7Z"/>
    <path class="svg_face" d="M58.69,20.11s-.99-6.57-7.03-6.71c-2.46-.05-4.13,1.75-7.1,1.77-3.8,.02-5.11-1.97-5.11-1.97"/>
    <path class="svg_face" d="M14.82,51.45s4.92,6.49,15.65,6.49,16.74-6.49,16.74-6.49"/>
</svg>


Meet the *NiceGUI*.


                Let any browser be the frontend of your Python code.<br>
                Loved by robotics, IoT, and ML teams worldwide.
            

[Button: Get Started]

[Button: pip install nicegui]

# about

Interact with Python through buttons, dialogs, 3D scenes, plots and much more.


                    NiceGUI manages web development details, letting you focus on Python code.
                    Connect peripherals like webcams and GPIO pins, build interactive UIs,
                    and run your entire application from a single script.
                


                    Focus on Python - connect peripherals, build interactive UIs, and run everything from a single script.
                


                    Available on
                    [PyPI](https://pypi.org/project/nicegui/),
                    [Docker](https://hub.docker.com/r/zauberzeug/nicegui) and
                    [GitHub](https://github.com/zauberzeug/nicegui).
                

Try it out!

[Button: Click me!]

- [ ] Check me

# installation

Three lines to a running app.

Write a Python file, install and run — that’s it.

1

Write

main.py

[Button]

````python
from nicegui import ui

ui.label('Hello NiceGUI!')

ui.run()

````

2

Run

bash

[Button]

````console
$ pip3 install nicegui
$ python3 main.py

````

3

Enjoy

# features

Code nicely.

Everything you need to build sophisticated web UIs, all from Python.

ui.card()

Interaction

- [Buttons](/documentation/button), [switches](/documentation/switch), [sliders](/documentation/slider), [inputs](/documentation/input), ...
- [Notifications](/documentation/notification), [dialogs](/documentation/dialog) and [menus](/documentation/menu)
- [Interactive images](/documentation/interactive_image) with SVG overlays
- Web pages and [native window apps](/documentation/section_configuration_deployment#native_mode)

ui.card()

Layout

- [Navigation bars](/documentation/page_layout), [tabs](/documentation/tabs), [panels](/documentation/expansion)
- [Rows](/documentation/row), [columns](/documentation/column), [grids](/documentation/grid) and [cards](/documentation/card)
- [HTML](/documentation/html) and [Markdown](/documentation/markdown) elements
- Flex layout by default

ui.card()

Visualization

- [Charts](/documentation/echart), [tables](/documentation/table), [audio](/documentation/audio)/[video](/documentation/video)
- [3D scenes](/documentation/scene)
- Straight-forward [data binding](/documentation/section_binding_properties)
- Built-in [timer](/documentation/timer) for data refresh

ui.card()

Styling

- Customizable [color themes](/documentation/section_styling_appearance#color_theming)
- Custom CSS and classes
- Modern look with material design
- [Tailwind CSS](https://tailwindcss.com/)

ui.card()

Coding

- Single page apps with [ui.sub_pages](/documentation/sub_pages)
- Auto-reload on code change
- Persistent [user sessions](/documentation/storage)
- Super powerful [testing framework](/documentation/section_testing)

ui.card()

Foundation

- Generic [Vue](https://vuejs.org/) to Python bridge
- Dynamic GUI through [Quasar](https://quasar.dev/)
- Content served with [FastAPI](https://fastapi.tiangolo.com/)
- Python 3.10+

# demos

See it in action.

Interactive examples that showcase NiceGUI's power and flexibility.

main.py

[Button]

````python
from nicegui import ui

def root():
    ui.sub_pages({
        '/': table_page,
        '/map/{lat}/{lon}': map_page,
    }).classes('w-full')

def table_page():
    ui.table(rows=[
        {'name': 'New York', 'lat': 40.7119, 'lon': -74.0027},
        {'name': 'London', 'lat': 51.5074, 'lon': -0.1278},
        {'name': 'Tokyo', 'lat': 35.6863, 'lon': 139.7722},
    ]).props('flat bordered') \
        .on('row-click', lambda e: ui.navigate.to(f'/map/{e.args[1]["lat"]}/{e.args[1]["lon"]}'))

def map_page(lat: float, lon: float):
    ui.leaflet(center=(lat, lon), zoom=10)
    ui.link('Back to table', '/')

ui.run(root)
````

main.py

[Button]

````python
from nicegui import ui

def root():
    user_input = ui.input(value='Hello')
    ui.label().bind_text_from(user_input, 'value', reverse)

def reverse(text: str) -> str:
    return text[::-1]

ui.run(root)
````

main.py

[Button]

````python
import time
from nicegui import Event, app, ui

sensor = Event[float]()

@app.post('/sensor')
def sensor_webhook(temperature: float):
    sensor.emit(temperature)

def root():
    chart = ui.echart({
        'xAxis': {'type': 'time', 'axisLabel': {'hideOverlap': True}},
        'yAxis': {'type': 'value', 'min': 'dataMin'},
        'series': [{'type': 'line', 'data': [], 'smooth': True}],
    })

    def update_chart(temperature: float):
        data = chart.options['series'][0]['data']
        data.append([time.time(), temperature])
        if len(data) > 10:
            data.pop(0)

    sensor.subscribe(update_chart)

ui.run(root)
````

Browse through plenty of live demos.

Fun-Fact: This whole website is also made with NiceGUI.

[Button: Documentation]


                **Or, let your AI do it!**
                Most LLMs already know NiceGUI.
                For the rest, paste our [LLM reference](/llms.txt) (a single Markdown drop-in),
                or point a RAG pipeline at the [documentation index](/documentation/section_configuration_deployment#documentation_index)
                for the full API as JSON.
            

# examples

Built with NiceGUI.

Real-world examples you can learn from and adapt.

[](https://github.com/zauberzeug/nicegui/tree/main/examples/authentication/main.py)

[](https://github.com/zauberzeug/nicegui/tree/main/examples/chat_app/main.py)

[](https://github.com/zauberzeug/nicegui/tree/main/examples/todo_list/main.py)

[Browse all examples →](/examples)

# sponsors

Supported by the community.

Join thousands of developers building with NiceGUI!

15k+

GitHub Stars

207

Contributors

25

Sponsors

[](https://www.lechler.com/)

[](https://www.discolike.com/)

[Button: Become a sponsor]

Why?

“We like Streamlit but find it does too much magic when it comes to state handling.”

[Read the full story →](https://github.com/zauberzeug/nicegui/discussions/21)

Just Python

No HTML, CSS, or JavaScript needed. Build web interfaces entirely in Python using familiar patterns and your existing tooling.

Grows with You

From a 10-line prototype to a multi-page production app — same patterns, same codebase, no rewrite needed.

Batteries Included

100+ components, reactive data binding, charts & plots, 3D scenes, native desktop apps, and Docker support — all out of the box.


            Built with [Vue](https://vuejs.org/) and [Quasar](https://quasar.dev/) on the frontend,
            [FastAPI](https://fastapi.tiangolo.com/), [Starlette](https://www.starlette.io/),
            and [Uvicorn](https://www.uvicorn.org/) under the hood.
            [Learn more →](/documentation/section_foundations)
        

**Nice**GUI

The Python UI framework that shows up in your browser.

[](https://github.com/zauberzeug/nicegui/)

[](https://discord.gg/TEpFeAaF4f)

[](https://www.reddit.com/r/nicegui/)

Resources

[Documentation](/documentation)

[Examples](/examples)

[LLM reference](/llms.txt)

[GitHub](https://github.com/zauberzeug/nicegui/)

[PyPI](https://pypi.org/project/nicegui/)

Community

[Discussions](https://github.com/zauberzeug/nicegui/discussions)

[Discord](https://discord.gg/TEpFeAaF4f)

[Reddit](https://www.reddit.com/r/nicegui/)

[Contributing](https://github.com/zauberzeug/nicegui/blob/main/CONTRIBUTING.md)

[Sponsors](https://github.com/sponsors/zauberzeug)

Legal

[Imprint](/imprint_privacy#imprint)

[Privacy](/imprint_privacy#privacy)

Made with NiceGUI by [Zauberzeug](https://zauberzeug.com)

© 2026 [Zauberzeug GmbH](https://zauberzeug.com)