{"id":37674880,"url":"https://github.com/alldotpy/fletx","last_synced_at":"2026-04-06T20:03:52.410Z","repository":{"id":297268491,"uuid":"989792521","full_name":"AllDotPy/FletX","owner":"AllDotPy","description":"The open-source GetX-inspired Python Framework for Building Reactive, Cross-Platform Apps with Flet","archived":false,"fork":false,"pushed_at":"2026-01-26T08:08:39.000Z","size":41547,"stargazers_count":70,"open_issues_count":18,"forks_count":33,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-01-29T09:37:30.272Z","etag":null,"topics":["devtools","flet","flet-app","flet-dev","flet-python","flet-routing","gui-framework","gui-programming","multi-platform","open-source","python","python-for-android","python-gui"],"latest_commit_sha":null,"homepage":"https://alldotpy.github.io/FletX/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AllDotPy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":null,"patreon":"alldotpy","open_collective":null,"ko_fi":"alldotpy","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":"alldotpy","thanks_dev":null,"custom":null}},"created_at":"2025-05-24T20:48:40.000Z","updated_at":"2026-01-27T11:29:23.000Z","dependencies_parsed_at":"2025-06-04T22:42:28.463Z","dependency_job_id":"fab15a78-d646-4b50-a861-3d656de9bed9","html_url":"https://github.com/AllDotPy/FletX","commit_stats":null,"previous_names":["alldotpy/fletx"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/AllDotPy/FletX","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllDotPy%2FFletX","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllDotPy%2FFletX/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllDotPy%2FFletX/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllDotPy%2FFletX/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AllDotPy","download_url":"https://codeload.github.com/AllDotPy/FletX/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllDotPy%2FFletX/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28986354,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T18:17:03.387Z","status":"ssl_error","status_checked_at":"2026-02-01T18:16:57.287Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["devtools","flet","flet-app","flet-dev","flet-python","flet-routing","gui-framework","gui-programming","multi-platform","open-source","python","python-for-android","python-gui"],"created_at":"2026-01-16T12:10:32.246Z","updated_at":"2026-04-06T20:03:52.402Z","avatar_url":"https://github.com/AllDotPy.png","language":"Python","readme":"\u003cp align=\"center\"\u003e\n    \u003cimg src=\"fletx_t.png?raw=true\" height=\"140\" alt=\"FletX Logo\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eFletX\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003cstrong\u003eBuild production-ready Python UI apps with architecture patterns inspired by GetX\u003c/strong\u003e\n    \u003cbr/\u003e\n    \u003cem\u003eReactive state • Modular routing • Clean architecture • Developer productivity\u003c/em\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://pypi.org/project/FletXr/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/v/FletXr?style=flat-square\u0026logo=python\" alt=\"PyPI Version\"/\u003e\u003c/a\u003e\n    \u003ca href=\"https://pepy.tech/project/FletXr\"\u003e\u003cimg src=\"https://static.pepy.tech/badge/FletXr?style=flat-square\" alt=\"Downloads\"/\u003e\u003c/a\u003e\n    \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-brightgreen?style=flat-square\" alt=\"License\"/\u003e\u003c/a\u003e\n    \u003ca href=\"https://discord.gg/GRez7BTZVy\"\u003e\u003cimg src=\"https://img.shields.io/discord/1381155066232176670?style=flat-square\u0026logo=discord\" alt=\"Discord\"/\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/AllDotPy/FletX\"\u003e\u003cimg src=\"https://img.shields.io/github/commit-activity/m/AllDotPy/FletX?style=flat-square\" alt=\"Activity\"/\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/AllDotPy/FletX/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/AllDotPy/FletX?style=flat-square\u0026logo=github\" alt=\"Stars\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"#-quick-start\"\u003eQuick Start\u003c/a\u003e •\n    \u003ca href=\"#-features\"\u003eFeatures\u003c/a\u003e •\n    \u003ca href=\"#-showcase\"\u003eShowcase\u003c/a\u003e •\n    \u003ca href=\"https://alldotpy.github.io/FletX/\"\u003eDocs\u003c/a\u003e •\n    \u003ca href=\"https://discord.gg/GRez7BTZVy\"\u003eDiscord\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## 🎯 Transform Your Python UI Development\n\nFletX is an architectural framework that brings **production-grade patterns** to [Flet](https://flet.dev) applications. Built on proven GetX principles, it combines reactive state management, modular routing, and dependency injection—all with zero boilerplate.\n\n---\n\n## ✨ Why Developers Choose FletX\n\n| Problem | Solution |\n|---------|----------|\n| **Spaghetti code** | Pages → Controllers → Services architecture |\n| **Manual state management** | Reactive primitives (`RxInt`, `RxList`, `Computed`) |\n| **Boilerplate routing** | Declarative routing with type safety |\n| **Dependency chaos** | Global DI container with tag-based lookup |\n| **Slow development** | CLI for instant scaffolding \u0026 generation |\n| **Poor dev experience** | Hot reload, testing utilities, lifecycle hooks |\n\n---\n\n## 🎬 Showcase\n\nSee FletX in action across different platforms:\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd align=\"center\" width=\"400\"\u003e\n            \u003cstrong\u003eWeb\u003c/strong\u003e\u003cbr/\u003e\n            \u003cimg src=\"./screeshots/videos/web.gif\" width=\"350\" alt=\"Web Demo\"\u003e\n        \u003c/td\u003e\n        \u003ctd rowspan=\"2\". width=\"350\"\u003e\n            \u003cstrong\u003eMobile\u003c/strong\u003e\u003cbr/\u003e\n            \u003cimg src=\"./screeshots/videos/mobile.gif\" width=\"300\" alt=\"Mobile Demo\"\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr align=\"center\"\u003e\n        \u003ctd width=\"400\"\u003e\n        \u003cstrong\u003eDesktop\u003c/strong\u003e\u003cbr/\u003e\n        \u003cimg src=\"./screeshots/videos/desktop.gif\" width=\"350\" alt=\"Desktop Demo\"\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n---\n\n## 🚀 Why FletX? (The Real Story)\n\n| Feature | Impact |\n|---------|--------|\n| **Reactive state** | Auto UI updates—no manual `page.update()` (`setState`) |\n| **Modular routing** | Deep linking, guards, middlewares, dynamic parameters |\n| **Dependency injection** | Services \u0026 controllers managed elegantly |\n| **Clean architecture** | Scale from MVP to enterprise apps |\n| **Developer CLI** | 10x faster project setup \u0026 component generation |\n| **Type hints** | Full IDE support and runtime safety |\n\n---\n\n## ⚡ Quick Start\n\nGet a production-ready app running in **under 3 minutes**:\n\n```bash\n# 1. Install (Python 3.10+)\npip install FletXr[dev] --pre\n\n# 2. Create new project\nfletx new my_project\ncd my_project\n\n# 3. Run with hot reload\nfletx run --web --watch\n```\n\n**That's it!** Your app is now running in the browser with live reload. Every save triggers instant feedback.\n\n---\n\n## 📋 Project Structure (Auto-Generated)\n\n```\nmy_project/\n├── app/\n│   ├── controllers/        # State \u0026 business logic\n│   ├── services/           # APIs, storage, utilities\n│   ├── pages/              # UI screens\n│   ├── components/         # Reusable widgets\n│   └── routes.py           # All routes in one place\n├── assets/                 # Images, fonts, etc.\n├── tests/                  # Automated tests\n├── pyproject.toml          # Dependencies \u0026 config\n└── main.py                 # Entry point\n```\n\nEvery file generated by `fletx generate` follows FletX conventions—no guessing, no inconsistency.\n\n---\n\n## 💡 Live Example: Counter App\n\n```python\nimport flet as ft\nfrom fletx.app import FletXApp\nfrom fletx.core import FletXPage, FletXController, RxInt\nfrom fletx.navigation import router_config\nfrom fletx.decorators import obx\n\n\nclass CounterController(FletXController):\n    def __init__(self):\n        self.count = RxInt(0)  # Reactive state\n        super().__init__()\n\n    def increment(self):\n        self.count.increment()  # UI auto-updates\n\n\nclass CounterPage(FletXPage):\n    ctrl = CounterController()\n\n    @obx  # 🪄 Magic: auto-tracks reads, rebuilds on change\n    def counter_display(self):\n        return ft.Text(\n            f\"Count: {self.ctrl.count}\",\n            size=50, weight=\"bold\",\n            color = 'red' if not self.ctrl.count.value % 2 == 0 else 'white'\n        )\n\n    def build(self):\n        return ft.Column(controls=[\n            self.counter_display(),\n            ft.ElevatedButton(\n                \"+1\",\n                on_click=lambda _: self.ctrl.increment()\n            ),\n        ])\n\n\nif __name__ == \"__main__\":\n    # Defining route\n    router_config.add_route(\n        path = '/', \n        component = CounterPage\n    )\n\n    app = FletXApp(title=\"Counter\", initial_route=\"/\", debug=True)\n    app.run()\n```\n\n**No boilerplate. No manual rebuilds. Just reactive state.**\n\n---\n\n## 🧠 Core Architecture\n\nBuild scalable apps with separation of concerns:\n\n### Controllers — Reactive State \u0026 Logic\n```python\nclass UserController(FletXController):\n    def __init__(self):\n        self.users = RxList([])\n        self.selected = RxInt(-1)\n        super().__init__()\n\n    def fetch_users(self):\n        # Async-friendly, auto-notifies UI\n        users = api.get_users()\n        self.users.set(users)\n\n    def select(self, index):\n        self.selected.set(index)\n```\n\n### Pages — UI Composition\n```python\nclass UserPage(FletXPage):\n    ctrl = UserController()\n\n    @obx\n    def user_list(self):\n        return ft.Column(controls=[\n            ft.Text(user.name) for user in self.ctrl.users\n        ])\n\n    def build(self):\n        return self.user_list()\n```\n\n### Services — Reusable Utilities\n```python\nclass ApiService(FletXService):\n    def get_users(self):\n        # HTTP calls, caching, error handling\n        pass\n```\n\n### Routing — Type-Safe Navigation\n```python\nfrom fletx.navigation import router_config, navigate\n\nrouter_config.add_route(\"/users/:id\", UserDetailPage)\nnavigate(\"/users/123\")  # Fully type-checked\n```\n\n### Decorators — Execution Control\n```python\nfrom fletx.decorators import reactive_debounce, reactive_memo\n\n@reactive_debounce(0.5)  # Debounce at 500ms\ndef search(query):\n    pass\n\n@reactive_memo(maxsize=100)  # Memoize results\ndef expensive_compute(n):\n    pass\n```\n\n---\n\n## 📊 Real-World Impact\n\nFletX users report:\n\n- **50% faster development** — Scaffold → code → deploy in hours, not days\n- **0 boilerplate** — Pre-built patterns for common patterns\n- **10k+ downloads** — Trusted by developers building production apps\n- **Active community** — Daily updates, responsive maintainers, helpful Discord\n\n---\n\n## 🎓 What You Get\n\n✅ **Full-featured CLI** — `fletx new`, `fletx generate`, `fletx run`, `fletx test`  \n✅ **Reactive primitives** — `RxInt`, `RxStr`, `RxList`, `RxDict`, `Computed`  \n✅ **Smart decorators** — `@obx`, `@reactive_debounce`, `@reactive_memo`, and 10+ more  \n✅ **Built-in DI** — Global service container with tag-based lookup  \n✅ **Testing support** — Built-in utilities for unit \u0026 integration tests  \n✅ **TypeScript-grade IDE support** — Full autocomplete and type hints  \n✅ **Active maintenance** — Bug fixes, features, and community updates  \n\n---\n\n## 🚢 CLI Commands at a Glance\n\n```bash\n# Create \u0026 manage projects\nfletx new my_project --author \"You\"\nfletx generate controller Home --with-test\nfletx generate service Api\nfletx generate page Settings\n\n# Development \u0026 testing\nfletx run --web --watch                    # Browser + hot reload\nfletx run --desktop                        # Desktop window\nfletx run --android                        # Android device\nfletx test --coverage                      # Test with coverage\n\n# Validation\nfletx check --json                         # Verify compatibility\n```\n\n---\n\n## 📚 Documentation \u0026 Resources\n\n| Resource | Link |\n|----------|------|\n| **Full Docs** | [📖 Getting Started Guide](https://alldotpy.github.io/FletX/) |\n| **Examples** | [🎯 Real Projects](https://github.com/AllDotPy/Awsome-FletX-Example-Apps) |\n| **Community** | [💬 Discord Chat](https://discord.gg/GRez7BTZVy) |\n| **Video Tutorials** | [🎥 YouTube Course](https://www.youtube.com/watch?v=BSp7TUu3Dvo) |\n| **Issue Tracker** | [🐛 GitHub Issues](https://github.com/AllDotPy/FletX/issues) |\n\n---\n\n## 🤝 Join the Community\n\nWe're building FletX together. Here's how you can help:\n\n- ⭐ **Star us on GitHub** — Every star helps new developers find us\n- 🐛 **Report issues** — Found a bug? Open an issue (we fix them fast)\n- 💡 **Suggest features** — Have an idea? Discussions are open\n- 📝 **Write docs** — Help improve guides and examples\n- 🔧 **Contribute code** — PRs welcome, see [CONTRIBUTING.md](CONTRIBUTING.md)\n- 💬 **Join Discord** — Chat with maintainers and other developers\n\n---\n\n## 📈 Metrics That Matter\n\n[![GitHub Stars](https://img.shields.io/github/stars/AllDotPy/FletX?style=social)](https://github.com/AllDotPy/FletX)\n[![PyPI Downloads](https://pepy.tech/badge/FletXr/month)](https://pepy.tech/project/FletXr)\n[![Discord Members](https://img.shields.io/discord/1381155066232176670?style=social\u0026logo=discord)](https://discord.gg/GRez7BTZVy)\n\n---\n\n## 🎯 Next Steps\n\n**Ready to build?**\n\n1. [Install FletX](https://alldotpy.github.io/FletX/getting-started/installation/) (2 min)\n2. [Create your first project](https://alldotpy.github.io/FletX/getting-started/fletx-cli/) (3 min)\n3. [Learn the patterns](https://alldotpy.github.io/FletX/getting-started/architecture/) (15 min)\n4. [Build something awesome](https://github.com/AllDotPy/Awsome-FletX-Example-Apps) (∞ min)\n\n---\n\n## 📄 License \u0026 Attribution\n\nMIT © 2026 AllDotPy\n\n\u003cbr/\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eBuilt with ❤️ by \u003ca href=\"https://alldotpy.com\"\u003eAllDotPy\u003c/a\u003e\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/AllDotPy/FletX/stargazers\"\u003e⭐ Star us on GitHub\u003c/a\u003e •\n  \u003ca href=\"https://discord.gg/GRez7BTZVy\"\u003e💬 Join Discord\u003c/a\u003e •\n  \u003ca href=\"https://alldotpy.github.io/FletX/\"\u003e📖 Read Docs\u003c/a\u003e\n\u003c/p\u003e\n","funding_links":["https://patreon.com/alldotpy","https://ko-fi.com/alldotpy","https://buymeacoffee.com/alldotpy"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falldotpy%2Ffletx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falldotpy%2Ffletx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falldotpy%2Ffletx/lists"}