Flet
Flet is a framework that enables you to easily build realtime web, mobile and desktop apps in your favorite language and securely share them with your team. No frontend experience required.
⚡From idea to app in minutes
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 a great-looking interactive apps to serve a group of users.
📐 Simple architecture
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, realtime Single-Page Application (SPA).
🔋Batteries included
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 built-in web server with assets hosting and desktop clients.
Powered by Flutter
Flet UI is built with Flutter , so your app looks professional and could be delivered to any platform. Flet simplifies Flutter model by combining smaller “widgets” to ready-to-use “controls” with imperative programming model.
🌐 Speaks your language
Flet is language-agnostic, so anyone on your team could develop Flet apps in their favorite language. Python is already supported, Go, C# and others are coming next .
📱 Deliver to any device
Deploy Flet app as a web app and view it in a browser. Package it as a standalone desktop app for Windows, macOS and Linux. Install it on mobile as PWA or view via Flet app for iOS and Android.
Flet app example
At the moment you can write Flet apps in Python and other languages will be added soon.
Here is a sample “Counter” app:
import flet
from flet import IconButton, Page, Row, TextField, icons
def main(page: Page):
page.title = "Flet counter example"
page.vertical_alignment = "center"
txt_number = TextField(value="0", text_align="right", width=100)
def minus_click(e):
txt_number.value = int(txt_number.value) - 1
page.update()
def plus_click(e):
txt_number.value = int(txt_number.value) + 1
page.update()
page.add(
Row(
[
IconButton(icons.REMOVE, on_click=minus_click),
txt_number,
IconButton(icons.ADD, on_click=plus_click),
],
alignment="center",
)
)
flet.app(target=main)
To run the app install flet
module:
pip install flet
and run the program:
python counter.py
The app will be started in a native OS window – what a nice alternative to Electron!
Now, if you want to run the app as a web app, just replace the last line with:
flet.app(target=main, view=flet.WEB_BROWSER)
run again and now you instantly get a web app:
Getting started
Sample apps in Python
Contribute or download this package source code on GitHub
Flet enables developers to easily build realtime web, mobile and desktop apps in Python. No frontend experience required. https://github.com/flet-dev/flet 480 forks. 12,090 stars. 403 open issues. Recent commits: flet build: package Python app before creating Flutter project (#4686) , GitHub Fix failing build.register_flutter_extensions() , Feodor Fitsner Merge `0.25.2` into `main` (#4672)* Add `flet` if no dependencies provided for `flet publish` command (#4508)Fix #4493* Update project_dependencies.py (#4459)# `Fixed` when I get no markers key in the version_value variable.“`bashTraceback (most recent call last): File "/opt/hostedtoolcache/Python/3.12.5/x64/bin/flet", line 8, in <module> sys.exit(main()) ^^^^^^ File "/opt/hostedtoolcache/Python/3.12.5/x64/lib/python3.12/site-packages/flet/cli.py", line 12, in main flet_cli.cli.main() File "/opt/hostedtoolcache/Python/3.12.5/x64/lib/python3.12/site-packages/flet_cli/cli.py", line 89, in main args.handler(args) File "/opt/hostedtoolcache/Python/3.12.5/x64/lib/python3.12/site-packages/flet_cli/commands/build.py", line 557, in handle self.package_python_app() File "/opt/hostedtoolcache/Python/3.12.5/x64/lib/python3.12/site-packages/flet_cli/commands/build.py", line 1303, in package_python_app toml_dependencies = get_poetry_dependencies( ^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/hostedtoolcache/Python/3.12.5/x64/lib/python3.12/site-packages/flet_cli/utils/project_dependencies.py", line 41, in get_poetry_dependencies format_dependency_version(dependency, version) File "/opt/hostedtoolcache/Python/3.12.5/x64/lib/python3.12/site-packages/flet_cli/utils/project_dependencies.py", line 21, in format_dependency_version if version_value["markers"]: ~~~~~~~~~~~~~^^^^^^^^^^^KeyError: 'markers'“`* Fix PyInstaller hook to avoid download Flet app bundle on first run (#4552)* Fix PyInstaller hook to avoid download Flet app bundle on first runFix #4549* Fix web job* Support `git`, `path`, `url` Poetry-style dependencies in pyproject.toml (#4554)Fix #4547* Prepare Flet 0.25.2 (#4541)* feat: implement `Window.ignore_mouse_events` (#4465)* Update project_dependencies.py (#4459)# `Fixed` when I get no markers key in the version_value variable.“`bashTraceback (most recent call last): File "/opt/hostedtoolcache/Python/3.12.5/x64/bin/flet", line 8, in <module> sys.exit(main()) ^^^^^^ File "/opt/hostedtoolcache/Python/3.12.5/x64/lib/python3.12/site-packages/flet/cli.py", line 12, in main flet_cli.cli.main() File "/opt/hostedtoolcache/Python/3.12.5/x64/lib/python3.12/site-packages/flet_cli/cli.py", line 89, in main args.handler(args) File "/opt/hostedtoolcache/Python/3.12.5/x64/lib/python3.12/site-packages/flet_cli/commands/build.py", line 557, in handle self.package_python_app() File "/opt/hostedtoolcache/Python/3.12.5/x64/lib/python3.12/site-packages/flet_cli/commands/build.py", line 1303, in package_python_app toml_dependencies = get_poetry_dependencies( ^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/hostedtoolcache/Python/3.12.5/x64/lib/python3.12/site-packages/flet_cli/utils/project_dependencies.py", line 41, in get_poetry_dependencies format_dependency_version(dependency, version) File "/opt/hostedtoolcache/Python/3.12.5/x64/lib/python3.12/site-packages/flet_cli/utils/project_dependencies.py", line 21, in format_dependency_version if version_value["markers"]: ~~~~~~~~~~~~~^^^^^^^^^^^KeyError: 'markers'“`* Remove `v0.26.0` deprecations (#4479)* delete deprecations on py end* delete deprecations on dart end* fix: `SafeArea` object has no attribute `_SafeArea__minimum` (#4500)* remove minimum from SafeArea* remove deprecated props* Changelog updated* Fix publishing flet-windows.zip to releases* Revert "Merge branch 'main' into feodor/prepare-0-25-2"This reverts commit 32a734345dce51adeaa31088b506e39a5c02bdf2, reversingchanges made to 3dc01e1aa14929ebce0bdf28f9aa5257a49c319b.* Changelog updated* Update changelog.* Changelog updated with cherry-picked bug fixes* fix broken `Map.center_on()` and default animations (#4519)* fix center_on* get default animation duration and curve* fix: Tooltip corruption in `Segment` and `BarChartRod` on `update()` (#4525)* avoid jsonDecoding `Segment` and `BarChartRod` tooltips* avoid jsonEncoding `Segment` and `BarChartRod` tooltips* Unset theme visual density default* Unset `SegmentedButton` border side default* `TextField.hint_text` should be displayed if `label` is not specified* fix: Setting `CheckBox.border_side.stroke_align` to an Enum fails (#4526)* `BorderSideStrokeAlign` should inherit from float* properly parse `Chip.border_side`* fix:`ControlState` should be resolved based on user-defined order (#4556)* ControlState: rename "" to "default"* resolve ControlState on user-defined order* fix failing tests* remove breaking line* fix wrong attribute name (#4557)* Publish flet wheels to GitHub releases* remove redeclared `MapPointerDeviceType`———Co-authored-by: TheEthicalBoy <98978078+ndonkoHenri@users.noreply.github.com>Co-authored-by: Osama Mohammed Al-zabidi <57198110+omamkaz@users.noreply.github.com>Co-authored-by: ndonkoHenri <robotcoder4@protonmail.com>* restore `AudioRecorder.start_recording_async`* clean imports———Co-authored-by: Osama Mohammed Al-zabidi <57198110+omamkaz@users.noreply.github.com>Co-authored-by: TheEthicalBoy <98978078+ndonkoHenri@users.noreply.github.com>Co-authored-by: ndonkoHenri <robotcoder4@protonmail.com> , GitHub `flet build` command: Copy `flutter-packages`, support for platform-specific dependencies (#4667)* Automatic registration of custom Flutter extensions* platform-specific dependencies in `tool.flet.{platform}.dependencies` , GitHub Fix CI jobs with Poetry (#4663)* Install Poetry 1.8.5* Fix Python tests* Fix tool.poetry.urls, use the latest Poetry* package-mode = false , GitHub
Provides the list of the opensource Flutter apps collection with GitHub repository.