Flet Visual Builder (FVB) is a drag-and-drop UI builder for Flet apps.
⚠️ Disclaimer: This project is currently experimental and can be very buggy.
Some widgets and preview behavior may break depending on the installed Flet version.⚠️ Vibe Code Alert: This project was 99% vibe coded as a fun long weekend hack.
This repository includes the core architecture required by the TDD:
WidgetNode) with slot-aware childrenWidgetNode → runnable Flet Python)pip install -r requirements.txt
python main.py
pytest -q



on_click='handler' now correctly renders as on_click=handler (bare function reference)main() so names are in scope when the control tree is builtisinstance(True, int) is True in Python; bool check now runs before int checkslot="controls" under Container) now raise ValidationErrorclone() now generates fresh unique IDs by default for copy-paste safety; clone(deep_new_ids=False) preserves IDs for undo snapshotsgetattr chain on the flet modulehasattr heuristicsnode_to_dict now builds dicts manually instead of calling dataclasses.asdict then overwriting childrenDropZone enum (BEFORE/INSIDE/AFTER) based on TDD spec (top 25%/middle 50%/bottom 25%)Python
100.0%
Flet Visual Builder (FVB) is a drag-and-drop UI builder for Flet apps.
⚠️ Disclaimer: This project is currently experimental and can be very buggy.
Some widgets and preview behavior may break depending on the installed Flet version.⚠️ Vibe Code Alert: This project was 99% vibe coded as a fun long weekend hack.
This repository includes the core architecture required by the TDD:
WidgetNode) with slot-aware childrenWidgetNode → runnable Flet Python)pip install -r requirements.txt
python main.py
pytest -q



on_click='handler' now correctly renders as on_click=handler (bare function reference)main() so names are in scope when the control tree is builtisinstance(True, int) is True in Python; bool check now runs before int checkslot="controls" under Container) now raise ValidationErrorclone() now generates fresh unique IDs by default for copy-paste safety; clone(deep_new_ids=False) preserves IDs for undo snapshotsgetattr chain on the flet modulehasattr heuristicsnode_to_dict now builds dicts manually instead of calling dataclasses.asdict then overwriting childrenDropZone enum (BEFORE/INSIDE/AFTER) based on TDD spec (top 25%/middle 50%/bottom 25%)Python
100.0%