[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-1575":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":25,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":33,"readmeContent":34,"aiSummary":35,"trendingCount":16,"starSnapshotCount":16,"syncStatus":36,"lastSyncTime":37,"discoverSource":38},1575,"textual","Textualize\u002Ftextual","Textualize","The lean application framework for Python.  Build sophisticated user interfaces with a simple Python API. Run your apps in the terminal and a web browser.","https:\u002F\u002Ftextual.textualize.io\u002F",null,"Python",36241,1215,180,208,0,12,93,402,69,44.25,"MIT License",false,"main",true,[27,28,29,30,31,32],"cli","framework","python","rich","terminal","tui","2026-06-12 02:00:29","\n\n[![Discord](https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F1026214085173461072)](https:\u002F\u002Fdiscord.gg\u002FEnf6Z3qhVr)\n[![Supported Python Versions](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fpyversions\u002Ftextual)](https:\u002F\u002Fpypi.org\u002Fproject\u002Ftextual\u002F)\n[![PyPI version](https:\u002F\u002Fbadge.fury.io\u002Fpy\u002Ftextual.svg?)](https:\u002F\u002Fbadge.fury.io\u002Fpy\u002Ftextual)\n![OS support](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FOS-macOS%20Linux%20Windows-red)\n\n\n\n![textual-splash](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F4caeb77e-48c0-4cf7-b14d-c53ded855ffd)\n\n# Textual\n\n\u003Cimg align=\"right\" width=\"250\" alt=\"clock\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F63e839c3-5b8e-478d-b78e-cf7647eb85e8\" \u002F>\n\nBuild cross-platform user interfaces with a simple Python API. Run your apps in the terminal *or* a web browser.\n\nTextual's API combines modern Python with the best of developments from the web world, for a lean app development experience.\nDe-coupled components and an advanced [testing](https:\u002F\u002Ftextual.textualize.io\u002Fguide\u002Ftesting\u002F) framework ensure you can maintain your app for the long-term.\n\nWant some more examples? See the [examples](https:\u002F\u002Fgithub.com\u002FTextualize\u002Ftextual\u002Ftree\u002Fmain\u002Fexamples) directory.\n\n```python\n\"\"\"\nAn App to show the current time.\n\"\"\"\n\nfrom datetime import datetime\n\nfrom textual.app import App, ComposeResult\nfrom textual.widgets import Digits\n\n\nclass ClockApp(App):\n    CSS = \"\"\"\n    Screen { align: center middle; }\n    Digits { width: auto; }\n    \"\"\"\n\n    def compose(self) -> ComposeResult:\n        yield Digits(\"\")\n\n    def on_ready(self) -> None:\n        self.update_clock()\n        self.set_interval(1, self.update_clock)\n\n    def update_clock(self) -> None:\n        clock = datetime.now().time()\n        self.query_one(Digits).update(f\"{clock:%T}\")\n\n\nif __name__ == \"__main__\":\n    app = ClockApp()\n    app.run()\n```\n\n> [!TIP]\n> Textual is an asynchronous framework under the hood. Which means you can integrate your apps with async libraries &mdash; if you want to.\n> If you don't want or need to use async, Textual won't force it on you. \n\n\n\n\u003Cimg src=\"https:\u002F\u002Fimg.spacergif.org\u002Fspacer.gif\" width=\"1\" height=\"64\"\u002F>\n\n## Widgets\n\nTextual's library of [widgets](https:\u002F\u002Ftextual.textualize.io\u002Fwidget_gallery\u002F) covers everything from buttons, tree controls, data tables, inputs, text areas, and more…\nCombined with a flexible [layout](https:\u002F\u002Ftextual.textualize.io\u002Fhow-to\u002Fdesign-a-layout\u002F) system, you can realize any User Interface you need.\n\nPredefined themes ensure your apps will look good out of the box. \n\n\n\u003Ctable>\n\n\u003Ctr>\n\n  \u003Ctd>\n    \n  ![buttons](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F2ac26387-aaa3-41ed-bc00-7d488600343c)\n    \n  \u003C\u002Ftd>\n\n  \u003Ctd>\n    \n![tree](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F61ccd6e9-97ea-4918-8eda-3ee0f0d3770e)\n    \n  \u003C\u002Ftd>\n  \n\u003C\u002Ftr>\n\n\n\u003Ctr>\n\n  \u003Ctd>\n    \n  ![datatables](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F3e1f9f7a-f965-4901-a114-3c188bd17695)\n    \n  \u003C\u002Ftd>\n\n  \u003Ctd>\n    \n![inputs](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fb02aa203-7c37-42da-a1bb-2cb244b7d0d3)\n    \n  \u003C\u002Ftd>\n  \n\u003C\u002Ftr>\n\u003Ctr>\n\n\u003Ctd>\n\n![listview](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F963603bc-aa07-4688-bd24-379962ece871)\n\n\u003C\u002Ftd>\n\n\u003Ctd>\n\n![textarea](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fcd4ba787-5519-40e2-8d86-8224e1b7e506)\n  \n\u003C\u002Ftd>\n\n  \n\u003C\u002Ftr>\n\n\u003C\u002Ftable>\n\n\n\u003Cimg src=\"https:\u002F\u002Fimg.spacergif.org\u002Fspacer.gif\" width=\"1\" height=\"32\"\u002F>\n\n## Installing\n\nInstall Textual via pip:\n\n```\npip install textual textual-dev\n```\n\nSee [getting started](https:\u002F\u002Ftextual.textualize.io\u002Fgetting_started\u002F) for details.\n\n\n\u003Cimg src=\"https:\u002F\u002Fimg.spacergif.org\u002Fspacer.gif\" width=\"1\" height=\"32\"\u002F>\n\n## Demo\n\n\nRun the following command to see a little of what Textual can do:\n\n```\npython -m textual\n```\n\nOr try the [textual demo](https:\u002F\u002Fgithub.com\u002Ftextualize\u002Ftextual-demo) *without* installing (requires [uv](https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002F)):\n\n```bash\nuvx --python 3.12 textual-demo\n```\n\n\u003Cimg src=\"https:\u002F\u002Fimg.spacergif.org\u002Fspacer.gif\" width=\"1\" height=\"32\"\u002F>\n\n## Dev Console\n\n\u003Cimg align=\"right\" width=\"40%\" alt=\"devtools\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F12c60d65-e342-4b2f-9372-bae0459a7552\" \u002F>\n\n\nHow do you debug an app in the terminal that is also running in the terminal?\n\nThe `textual-dev` package supplies a dev console that connects to your application from another terminal.\nIn addition to system messages and events, your logged messages and print statements will appear in the dev console.\n\nSee [the guide](https:\u002F\u002Ftextual.textualize.io\u002Fguide\u002Fdevtools\u002F) for other helpful tools provided by the `textual-dev` package.\n\n\u003Cimg src=\"https:\u002F\u002Fimg.spacergif.org\u002Fspacer.gif\" width=\"1\" height=\"32\"\u002F>\n\n## Command Palette\n\n\nTextual apps have a *fuzzy search* command palette.\nHit `ctrl+p` to open the command palette.\n\nIt is easy to extend the command palette with [custom commands](https:\u002F\u002Ftextual.textualize.io\u002Fguide\u002Fcommand_palette\u002F) for your application.\n\n\n![Command Palette](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F94d8ec5d-b668-4033-a5cb-bf820e1b8d60)\n\n\u003Cimg src=\"https:\u002F\u002Fimg.spacergif.org\u002Fspacer.gif\" width=\"1\" height=\"32\"\u002F>\n\n# Textual ❤️ Web\n\n\u003Cimg align=\"right\" width=\"40%\" alt=\"textual-serve\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fa25820fb-87ae-433a-858b-ac3940169242\">\n\n\nTextual apps are equally at home in the browser as they are the terminal. Any Textual app may be served with `textual serve` &mdash; so you can share your creations on the web.\nHere's how to serve the demo app:\n\n```\ntextual serve \"python -m textual\"\n```\n\nIn addition to serving your apps locally, you can serve apps with [Textual Web](https:\u002F\u002Fgithub.com\u002FTextualize\u002Ftextual-web).\n\nTextual Web's firewall-busting technology can serve an unlimited number of applications.\n\nSince Textual apps have low system requirements, you can install them anywhere Python also runs. Turning any device into a connected device.\nNo desktop required!\n\n\n\u003Cimg src=\"https:\u002F\u002Fimg.spacergif.org\u002Fspacer.gif\" width=\"1\" height=\"32\"\u002F>\n\n\n## Join us on Discord\n\nJoin the Textual developers and community on our [Discord Server](https:\u002F\u002Fdiscord.gg\u002FEnf6Z3qhVr).\n","Textualize\u002Ftextual 是一个用于构建跨平台用户界面的轻量级 Python 框架，支持在终端和网页浏览器中运行应用程序。其核心功能包括简洁的 Python API、丰富的组件库（如按钮、树控件、数据表等）以及灵活的布局系统，这些特性使得开发者能够轻松创建复杂的用户界面。此外，Textual 支持异步编程模式，允许与异步库集成，但不强制使用。该框架特别适合需要快速开发和维护图形化控制台应用或希望通过单一代码库同时支持终端和Web界面的应用场景。",2,"2026-06-11 02:44:47","top_all"]