Build multi-platform apps in Python powered by Flutter
Flet is a framework that allows building web, desktop and mobile applications in Python without prior experience in frontend development.
An internal tool or a dashboard for your team, weekend project, data entry form, kiosk app, or high-fidelity prototype - Flet is an ideal framework to quickly hack great-looking interactive apps to serve a group of users.
No more complex architecture with JavaScript frontend, REST API backend, database, cache, etc. With Flet you just write a monolith stateful app in Python only and get multi-user, real-time Single-Page Application (SPA).
To start developing with Flet, you just need your favorite IDE or text editor. No SDKs, no thousands of dependencies, no complex tooling - Flet has a built-in web server with assets hosting and desktop clients.
Flet UI is built with Flutter, so your app looks professional and could be delivered to any platform. Flet simplifies the Flutter model by combining smaller "widgets" to ready-to-use "controls" with an imperative programming model.
Package your Flet app as a standalone desktop app (for Windows, macOS, and Linux), mobile app (for iOS and Android), dynamic/static Web app or as a Progressive Web App (PWA).
Below is a simple "Counter" app, with a text field and two buttons to increment and decrement the counter value:
import flet as ft
def main(page: ft.Page):
page.title = "Flet counter example"
page.vertical_alignment = ft.MainAxisAlignment.CENTER
input = ft.TextField(value="0", text_align=ft.TextAlign.RIGHT, width=100)
def minus_click(e):
input.value = str(int(input.value) - 1)
page.update()
def plus_click(e):
input.value = str(int(input.value) + 1)
page.update()
page.add(
ft.Row(
alignment=ft.alignment.center,
controls=[
ft.IconButton(ft.Icons.REMOVE, on_click=minus_click),
input,
ft.IconButton(ft.Icons.ADD, on_click=plus_click),
],
)
)
ft.run(main)
To run the app, install flet
:
pip install 'flet[all]'
then launch the app:
flet run counter.py
This will open the app in a native OS window - what a nice alternative to Electron! 🙂
To run the same app as a web app, update the last line in your script to:
ft.run(main, view=flet.AppView.WEB_BROWSER)
Alternatively, you can use the --web
flag when running the flet run
command:
flet run --web counter.py
Want to help improve Flet? Check out the contribution guide.