{"id":46371291,"url":"https://github.com/ebaad-foundation/winup","last_synced_at":"2026-05-25T18:03:20.458Z","repository":{"id":299588496,"uuid":"1003513786","full_name":"ebaad-foundation/winup","owner":"ebaad-foundation","description":"The repo for the WinUp Library Project.","archived":false,"fork":false,"pushed_at":"2025-08-31T07:41:16.000Z","size":382,"stargazers_count":200,"open_issues_count":0,"forks_count":9,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-04-14T00:42:27.347Z","etag":null,"topics":["desktop","desktop-library","developer-tools","development","devtool","devtools","gui","lib","library","python","qt"],"latest_commit_sha":null,"homepage":"","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/ebaad-foundation.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"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}},"created_at":"2025-06-17T09:04:48.000Z","updated_at":"2026-04-13T16:01:19.000Z","dependencies_parsed_at":null,"dependency_job_id":"771f62a6-ec33-4eed-adc0-951901517617","html_url":"https://github.com/ebaad-foundation/winup","commit_stats":null,"previous_names":["mebaadwaheed/winup","ebaad-foundation/winup"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/ebaad-foundation/winup","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ebaad-foundation%2Fwinup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ebaad-foundation%2Fwinup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ebaad-foundation%2Fwinup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ebaad-foundation%2Fwinup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ebaad-foundation","download_url":"https://codeload.github.com/ebaad-foundation/winup/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ebaad-foundation%2Fwinup/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33486787,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-25T14:31:05.219Z","status":"ssl_error","status_checked_at":"2026-05-25T14:31:02.878Z","response_time":57,"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":["desktop","desktop-library","developer-tools","development","devtool","devtools","gui","lib","library","python","qt"],"created_at":"2026-03-05T04:02:03.475Z","updated_at":"2026-05-25T18:03:20.452Z","avatar_url":"https://github.com/ebaad-foundation.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen)\n![Python 3.9+](https://img.shields.io/badge/python-3.9%2B-blue)\n![Component Driven](https://img.shields.io/badge/architecture-component--driven-orange)\n![Desktop App](https://img.shields.io/badge/platform-desktop-lightgrey)\n![CLI Support](https://img.shields.io/badge/CLI-supported-critical)\n![Live Reload](https://img.shields.io/badge/live--reload-enabled-blue)\n\n## Image Examples\n\n![image](https://github.com/user-attachments/assets/81d016e9-e10a-4438-ab94-99b6d76b8efe)\n\n![image](https://github.com/user-attachments/assets/154dc3f4-ea8c-4f6f-84d3-88c7ab74a46f)\n\n![image](https://github.com/user-attachments/assets/2318f701-6ec8-4402-abcc-40c879bf1a10)\n\n# WinUp 🚀\n\n## Make sure to download the Latest Stable Release (LSR) and not the latest/LFR! Current LSR: 2.5.7\n\n`pip install winup==2.5.7`\n\n### For the old way which doesn't use component based platform rendering see [here](tests), for the new component based rendering way see [here](examples).\n\n**A ridiculously Pythonic and powerful framework for building beautiful desktop applications.**\n\nWinUp is a modern UI framework for Python that wraps the power of PySide6 (Qt) in a simple, declarative, and developer-friendly API. It's designed to let you build applications faster, write cleaner code, and enjoy the development process.\n\n### ✨ Now with Web Support!\nWinUp now also supports building fully interactive, stateful web applications using the same Python-centric, component-based approach. The web module uses FastAPI and WebSockets under the hood to bring the simplicity of WinUp to the browser.\n\n[Web Documentation](docs/web/README.md)\n\n\u003e **Disclaimer:** Web support is an optional feature. To use it, you must install the web dependencies:\n\u003e ```bash\n\u003e pip install winup[web]\n\u003e ```\n\n[Contributing](CONTRIBUTING.md)\n[Changelog](CHANGELOG.md)\n[License](LICENSE)\n\n---\n\n## Why WinUp? (Instead of raw PySide6 or Tkinter)\n\nDesktop development in Python can feel clunky. WinUp was built to fix that.\n\n| Feature                 | WinUp Way ✨                                                                   | Raw PySide6 / Tkinter Way 😟                                                                |\n| ----------------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- |\n| **Layouts**             | `ui.Column(children=[...])`, `ui.Row(children=[...])`                          | `QVBoxLayout()`, `QHBoxLayout()`, `layout.addWidget()`, `pack()`, `grid()`                  |\n| **Styling**             | `props={\"background-color\": \"blue\", \"font-size\": \"16px\"}`                      | Manual QSS strings, `widget.setStyleSheet(...)`, complex style objects.                     |\n| **State Management**    | `state.bind(widget, \"prop\", \"key\")`                                            | Manual callback functions, getters/setters, `StringVar()`, boilerplate everywhere.          |\n| **Two-Way Binding**     | `state.bind_two_way(input_widget, \"key\")`                                      | Non-existent. Requires manual `on_change` handlers to update state and UI.                  |\n| **Developer Tools**     | **Built-in Hot Reloading**, code profiler, and window tools out of the box.    | Non-existent. Restart the entire app for every single UI change.                            |\n| **Code Structure**      | Reusable, self-contained components with `@component`.                         | Often leads to large, monolithic classes or procedural scripts.                             |\n\n**In short, WinUp provides the \"killer features\" of modern web frameworks (like React or Vue) for the desktop, saving you time and letting you focus on what matters: your application's logic.**\n\n# 🧊 WinUp vs 🧱 PyEdifice (Reddit User Request)\n\n| Feature                          | WinUp      | PyEdifice                        |\n|----------------------------------|--------------------------------------|----------------------------------|\n| 🧱 Architecture                  | React-style + state       | React-style + state              |\n| 🌐 Built-in Routing              | ✅ Yes (`Router(routes={...})`)      | ❌ No built-in routing            |\n| ♻️ Lifecycle Hooks               | ✅ `on_mount`, `on_unmount`, etc.    | ⚠️ Limited (`did_mount`, etc.)   |\n| 🎨 Theming / Styling System     | ✅ Global \u0026 Scoped themes             | ❌ Manual CSS injection           |\n| 🔲 Layout Options                | ✅ Row, Column, Grid, Stack, Flexbox | ⚠️ Mostly Box \u0026 HBox/VBox         |\n| 🎞️ Animations                   | ✅ Built-in (fade, scale, etc.)      | ❌ None built-in                  |\n| 🔁 Hot Reloading (LHR)          | ✅ Stable + fast (`loadup dev`)      | ⚠️ Experimental, limited support  |\n| 📦 Packaging                    | ✅ With LoadUp (PyInstaller-based)   | ❌ Must integrate PyInstaller manually |\n| 🧩 Component Reusability        | ✅ High, declarative                 | ✅ High                           |\n| 🛠 Developer Tooling            | ✅ DevTools planned, Inspector soon  | ❌ None yet                       |\n| 📱 Mobile Support               | ❌ Not yet                           | ❌ Not supported                  |\n| 🧠 Learning Curve               | ✅ Easy for Python+React users       | ✅ Easy but less tooling          |\n\n\u003e ✅ = Built-in or robust  \n\u003e ⚠️ = Partial or limited  \n\u003e ❌ = Missing entirely\n---\n\n## Core Features\n\n*   **Declarative \u0026 Pythonic UI:** Build complex layouts with simple `Row` and `Column` objects instead of clunky box layouts.\n*   **Component-Based Architecture:** Use the `@component` decorator to create modular and reusable UI widgets from simple functions.\n*   **Powerful Styling System:** Style your widgets with simple Python dictionaries using `props`. Create global \"CSS-like\" classes with `style.add_style_dict`.\n*   **Full Application Shell:** Build professional applications with a declarative API for `MenuBar`, `ToolBar`, `StatusBar`, and `SystemTrayIcon`.\n*   **Asynchronous Task Runner:** Run long-running operations in the background without freezing your UI using the simple `@tasks.run` decorator.\n*   **Performance by Default:** Includes an opt-in `@memo` decorator to cache component renders and prevent needless re-computation.\n*   **Advanced Extensibility:**\n    *   **Widget Factory:** Replace any default widget with your own custom implementation (e.g., C++ based) using `ui.register_widget()`.\n    *   **Multiple Windows:** Create and manage multiple independent windows for complex applications like tool palettes or music players.\n*   **Reactive State Management:**\n    *   **One-Way Binding:** Automatically update your UI when your data changes with `state.bind()`.\n    *   **Two-Way Binding:** Effortlessly sync input widgets with your state using `state.bind_two_way()`.\n    *   **Subscriptions:** Trigger any function in response to state changes with `state.subscribe()`.\n*   **Developer-Friendly Tooling:**\n    *   **Hot Reloading:** See your UI changes instantly without restarting your app.\n    *   **Profiler:** Easily measure the performance of any function with the `@profiler.measure()` decorator.\n    *   **Window Tools:** Center, flash, or manage your application window with ease.\n*   **Built-in Routing:** Easily create multi-page applications with an intuitive, state-driven router.\n*   **Flexible Data Layer:** Includes simple, consistent connectors for SQLite, PostgreSQL, MySQL, MongoDB, and Firebase.\n\n---\n\n# Documentation\n\nDive deeper into the features of WinUp:\n\n## Core Concepts\n- [**Getting Started**](docs/gettingstarted.md)\n- [**Component Model \u0026 Styling**](docs/concepts.md)\n- [**Cross-Platform Component Decorator**](docs/component-decorator.md)\n- [**State Management**](docs/state.md)\n- [**Routing**](docs/routing.md)\n- [**Absolute Positioning (Advanced)**](docs/absolute-layout.md)\n\n## Developer Tools\n- [**CLI Commands Reference**](docs/cli-commands.md)\n- [**Live Hot Reload (LHR)**](docs/live-hot-reload.md)\n- [**Performance Profiler**](docs/profiler.md)\n- [**Memoization**](docs/memoization.md)\n- [**Async Task Runner**](docs/tasks.md)\n- [**Tailwind Support**](docs/tailwindstyling.md)\n\n## UI Components\n- [**Full Component Library**](docs/components/README.md)\n- [**Props Reference Guide**](docs/props-reference.md)\n\n---\n\n## Contributing\n\nWinUp is an open-source project. Contributions are welcome!\n\n## License\n\nThis project is licensed under the MIT License. See **LICENSE** for more information.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Febaad-foundation%2Fwinup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Febaad-foundation%2Fwinup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Febaad-foundation%2Fwinup/lists"}