Skip to content
/ FletX Public

The open-source GetX-inspired Python Framework for Building Reactive, Cross-Platform Apps with Flet.

License

Notifications You must be signed in to change notification settings

AllDotPy/FletX

FletX Logo

FletX

Build production-ready Python UI apps with architecture patterns inspired by GetX
Reactive state β€’ Modular routing β€’ Clean architecture β€’ Developer productivity

PyPI Version Downloads License Discord Activity Stars

Quick Start β€’ Features β€’ Showcase β€’ Docs β€’ Discord


🎯 Transform Your Python UI Development

FletX is an architectural framework that brings production-grade patterns to Flet applications. Built on proven GetX principles, it combines reactive state management, modular routing, and dependency injectionβ€”all with zero boilerplate.


✨ Why Developers Choose FletX

Problem Solution
Spaghetti code Pages β†’ Controllers β†’ Services architecture
Manual state management Reactive primitives (RxInt, RxList, Computed)
Boilerplate routing Declarative routing with type safety
Dependency chaos Global DI container with tag-based lookup
Slow development CLI for instant scaffolding & generation
Poor dev experience Hot reload, testing utilities, lifecycle hooks

🎬 Showcase

See FletX in action across different platforms:

Web
Web Demo
Mobile
Mobile Demo
Desktop
Desktop Demo

πŸš€ Why FletX? (The Real Story)

Feature Impact
Reactive state Auto UI updatesβ€”no manual page.update() (setState)
Modular routing Deep linking, guards, middlewares, dynamic parameters
Dependency injection Services & controllers managed elegantly
Clean architecture Scale from MVP to enterprise apps
Developer CLI 10x faster project setup & component generation
Type hints Full IDE support and runtime safety

⚑ Quick Start

Get a production-ready app running in under 3 minutes:

# 1. Install (Python 3.10+)
pip install FletXr[dev] --pre

# 2. Create new project
fletx new my_project
cd my_project

# 3. Run with hot reload
fletx run --web --watch

That's it! Your app is now running in the browser with live reload. Every save triggers instant feedback.


πŸ“‹ Project Structure (Auto-Generated)

my_project/
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ controllers/        # State & business logic
β”‚   β”œβ”€β”€ services/           # APIs, storage, utilities
β”‚   β”œβ”€β”€ pages/              # UI screens
β”‚   β”œβ”€β”€ components/         # Reusable widgets
β”‚   └── routes.py           # All routes in one place
β”œβ”€β”€ assets/                 # Images, fonts, etc.
β”œβ”€β”€ tests/                  # Automated tests
β”œβ”€β”€ pyproject.toml          # Dependencies & config
└── main.py                 # Entry point

Every file generated by fletx generate follows FletX conventionsβ€”no guessing, no inconsistency.


πŸ’‘ Live Example: Counter App

import flet as ft
from fletx.app import FletXApp
from fletx.core import FletXPage, FletXController, RxInt
from fletx.navigation import router_config
from fletx.decorators import obx


class CounterController(FletXController):
    def __init__(self):
        self.count = RxInt(0)  # Reactive state
        super().__init__()

    def increment(self):
        self.count.increment()  # UI auto-updates


class CounterPage(FletXPage):
    ctrl = CounterController()

    @obx  # πŸͺ„ Magic: auto-tracks reads, rebuilds on change
    def counter_display(self):
        return ft.Text(
            f"Count: {self.ctrl.count}",
            size=50, weight="bold",
            color = 'red' if not self.ctrl.count.value % 2 == 0 else 'white'
        )

    def build(self):
        return ft.Column(controls=[
            self.counter_display(),
            ft.ElevatedButton(
                "+1",
                on_click=lambda _: self.ctrl.increment()
            ),
        ])


if __name__ == "__main__":
    # Defining route
    router_config.add_route(
        path = '/', 
        component = CounterPage
    )

    app = FletXApp(title="Counter", initial_route="/", debug=True)
    app.run()

No boilerplate. No manual rebuilds. Just reactive state.


🧠 Core Architecture

Build scalable apps with separation of concerns:

Controllers β€” Reactive State & Logic

class UserController(FletXController):
    def __init__(self):
        self.users = RxList([])
        self.selected = RxInt(-1)
        super().__init__()

    def fetch_users(self):
        # Async-friendly, auto-notifies UI
        users = api.get_users()
        self.users.set(users)

    def select(self, index):
        self.selected.set(index)

Pages β€” UI Composition

class UserPage(FletXPage):
    ctrl = UserController()

    @obx
    def user_list(self):
        return ft.Column(controls=[
            ft.Text(user.name) for user in self.ctrl.users
        ])

    def build(self):
        return self.user_list()

Services β€” Reusable Utilities

class ApiService(FletXService):
    def get_users(self):
        # HTTP calls, caching, error handling
        pass

Routing β€” Type-Safe Navigation

from fletx.navigation import router_config, navigate

router_config.add_route("/users/:id", UserDetailPage)
navigate("/users/123")  # Fully type-checked

Decorators β€” Execution Control

from fletx.decorators import reactive_debounce, reactive_memo

@reactive_debounce(0.5)  # Debounce at 500ms
def search(query):
    pass

@reactive_memo(maxsize=100)  # Memoize results
def expensive_compute(n):
    pass

πŸ“Š Real-World Impact

FletX users report:

  • 50% faster development β€” Scaffold β†’ code β†’ deploy in hours, not days
  • 0 boilerplate β€” Pre-built patterns for common patterns
  • 10k+ downloads β€” Trusted by developers building production apps
  • Active community β€” Daily updates, responsive maintainers, helpful Discord

πŸŽ“ What You Get

βœ… Full-featured CLI β€” fletx new, fletx generate, fletx run, fletx test
βœ… Reactive primitives β€” RxInt, RxStr, RxList, RxDict, Computed
βœ… Smart decorators β€” @obx, @reactive_debounce, @reactive_memo, and 10+ more
βœ… Built-in DI β€” Global service container with tag-based lookup
βœ… Testing support β€” Built-in utilities for unit & integration tests
βœ… TypeScript-grade IDE support β€” Full autocomplete and type hints
βœ… Active maintenance β€” Bug fixes, features, and community updates


🚒 CLI Commands at a Glance

# Create & manage projects
fletx new my_project --author "You"
fletx generate controller Home --with-test
fletx generate service Api
fletx generate page Settings

# Development & testing
fletx run --web --watch                    # Browser + hot reload
fletx run --desktop                        # Desktop window
fletx run --android                        # Android device
fletx test --coverage                      # Test with coverage

# Validation
fletx check --json                         # Verify compatibility

πŸ“š Documentation & Resources

Resource Link
Full Docs πŸ“– Getting Started Guide
Examples 🎯 Real Projects
Community πŸ’¬ Discord Chat
Video Tutorials πŸŽ₯ YouTube Course
Issue Tracker πŸ› GitHub Issues

🀝 Join the Community

We're building FletX together. Here's how you can help:

  • ⭐ Star us on GitHub β€” Every star helps new developers find us
  • πŸ› Report issues β€” Found a bug? Open an issue (we fix them fast)
  • πŸ’‘ Suggest features β€” Have an idea? Discussions are open
  • πŸ“ Write docs β€” Help improve guides and examples
  • πŸ”§ Contribute code β€” PRs welcome, see CONTRIBUTING.md
  • πŸ’¬ Join Discord β€” Chat with maintainers and other developers

πŸ“ˆ Metrics That Matter

GitHub Stars PyPI Downloads Discord Members


🎯 Next Steps

Ready to build?

  1. Install FletX (2 min)
  2. Create your first project (3 min)
  3. Learn the patterns (15 min)
  4. Build something awesome (∞ min)

πŸ“„ License & Attribution

MIT Β© 2026 AllDotPy


Built with ❀️ by AllDotPy

⭐ Star us on GitHub β€’ πŸ’¬ Join Discord β€’ πŸ“– Read Docs

Sponsor this project

Packages

No packages published

Contributors 12