mikiui 0.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. mikiui-0.0.1/PKG-INFO +161 -0
  2. mikiui-0.0.1/README.md +132 -0
  3. mikiui-0.0.1/mikiui/__init__.py +44 -0
  4. mikiui-0.0.1/mikiui/app/__init__.py +64 -0
  5. mikiui-0.0.1/mikiui/app/app.py +789 -0
  6. mikiui-0.0.1/mikiui/app/marketplace.py +486 -0
  7. mikiui-0.0.1/mikiui/app/plugin_discovery.py +519 -0
  8. mikiui-0.0.1/mikiui/app/plugin_security.py +633 -0
  9. mikiui-0.0.1/mikiui/app/plugins.py +273 -0
  10. mikiui-0.0.1/mikiui/app/routes.py +253 -0
  11. mikiui-0.0.1/mikiui/app/state.py +25 -0
  12. mikiui-0.0.1/mikiui/app/static_assets.py +332 -0
  13. mikiui-0.0.1/mikiui/app/theme_registry.py +210 -0
  14. mikiui-0.0.1/mikiui/app/widget_registry.py +197 -0
  15. mikiui-0.0.1/mikiui/backend/__init__.py +17 -0
  16. mikiui-0.0.1/mikiui/backend/api_routes.py +29 -0
  17. mikiui-0.0.1/mikiui/backend/server.py +398 -0
  18. mikiui-0.0.1/mikiui/backend/sse.py +116 -0
  19. mikiui-0.0.1/mikiui/backend/websocket.py +217 -0
  20. mikiui-0.0.1/mikiui/build/__init__.py +29 -0
  21. mikiui-0.0.1/mikiui/build/desktop_build.py +676 -0
  22. mikiui-0.0.1/mikiui/build/optimizer.py +63 -0
  23. mikiui-0.0.1/mikiui/build/tailwind/__init__.py +487 -0
  24. mikiui-0.0.1/mikiui/build/web_build.py +707 -0
  25. mikiui-0.0.1/mikiui/cli/__init__.py +10 -0
  26. mikiui-0.0.1/mikiui/cli/__main__.py +8 -0
  27. mikiui-0.0.1/mikiui/cli/_dev_support.py +34 -0
  28. mikiui-0.0.1/mikiui/cli/app_discovery.py +285 -0
  29. mikiui-0.0.1/mikiui/cli/commands.py +518 -0
  30. mikiui-0.0.1/mikiui/cli/scaffolding.py +301 -0
  31. mikiui-0.0.1/mikiui/components/__init__.py +241 -0
  32. mikiui-0.0.1/mikiui/components/accordion.py +32 -0
  33. mikiui-0.0.1/mikiui/components/badge.py +37 -0
  34. mikiui-0.0.1/mikiui/components/base.py +40 -0
  35. mikiui-0.0.1/mikiui/components/breadcrumbs.py +27 -0
  36. mikiui-0.0.1/mikiui/components/button.py +247 -0
  37. mikiui-0.0.1/mikiui/components/calendar.py +57 -0
  38. mikiui-0.0.1/mikiui/components/chart.py +102 -0
  39. mikiui-0.0.1/mikiui/components/collection.py +190 -0
  40. mikiui-0.0.1/mikiui/components/dialog.py +162 -0
  41. mikiui-0.0.1/mikiui/components/feedback.py +106 -0
  42. mikiui-0.0.1/mikiui/components/filepicker.py +45 -0
  43. mikiui-0.0.1/mikiui/components/form.py +59 -0
  44. mikiui-0.0.1/mikiui/components/html.py +291 -0
  45. mikiui-0.0.1/mikiui/components/input.py +539 -0
  46. mikiui-0.0.1/mikiui/components/layout_primitives.py +242 -0
  47. mikiui-0.0.1/mikiui/components/listview.py +44 -0
  48. mikiui-0.0.1/mikiui/components/menuitem.py +27 -0
  49. mikiui-0.0.1/mikiui/components/modal.py +113 -0
  50. mikiui-0.0.1/mikiui/components/navbar.py +118 -0
  51. mikiui-0.0.1/mikiui/components/picture.py +28 -0
  52. mikiui-0.0.1/mikiui/components/progressbar.py +76 -0
  53. mikiui-0.0.1/mikiui/components/slider.py +8 -0
  54. mikiui-0.0.1/mikiui/components/splitview/__init__.py +17 -0
  55. mikiui-0.0.1/mikiui/components/splitview/splitview.py +371 -0
  56. mikiui-0.0.1/mikiui/components/surfaces.py +220 -0
  57. mikiui-0.0.1/mikiui/components/table.py +76 -0
  58. mikiui-0.0.1/mikiui/components/tabs.py +193 -0
  59. mikiui-0.0.1/mikiui/components/tooltip.py +20 -0
  60. mikiui-0.0.1/mikiui/components/treeview.py +43 -0
  61. mikiui-0.0.1/mikiui/engine/__init__.py +48 -0
  62. mikiui-0.0.1/mikiui/engine/bridge.py +222 -0
  63. mikiui-0.0.1/mikiui/engine/diff.py +64 -0
  64. mikiui-0.0.1/mikiui/engine/dom.py +264 -0
  65. mikiui-0.0.1/mikiui/engine/renderer.py +374 -0
  66. mikiui-0.0.1/mikiui/engine/updater.py +31 -0
  67. mikiui-0.0.1/mikiui/errors.py +158 -0
  68. mikiui-0.0.1/mikiui/examples/01_hello_world.py +104 -0
  69. mikiui-0.0.1/mikiui/examples/02_basic_components.py +300 -0
  70. mikiui-0.0.1/mikiui/examples/03_forms_validation.py +248 -0
  71. mikiui-0.0.1/mikiui/examples/04_routing.py +214 -0
  72. mikiui-0.0.1/mikiui/examples/05_widgets_gallery.py +291 -0
  73. mikiui-0.0.1/mikiui/examples/06_layouts.py +147 -0
  74. mikiui-0.0.1/mikiui/examples/07_themes.py +208 -0
  75. mikiui-0.0.1/mikiui/examples/08_plugins.py +241 -0
  76. mikiui-0.0.1/mikiui/examples/09_auth_sessions.py +226 -0
  77. mikiui-0.0.1/mikiui/examples/10_notifications.py +213 -0
  78. mikiui-0.0.1/mikiui/examples/11_websocket_chat.py +209 -0
  79. mikiui-0.0.1/mikiui/examples/12_api_backend.py +162 -0
  80. mikiui-0.0.1/mikiui/examples/13_dashboard.py +149 -0
  81. mikiui-0.0.1/mikiui/examples/14_desktop_app.py +150 -0
  82. mikiui-0.0.1/mikiui/examples/15_fullstack_app.py +399 -0
  83. mikiui-0.0.1/mikiui/examples/__init__.py +33 -0
  84. mikiui-0.0.1/mikiui/examples/components.py +182 -0
  85. mikiui-0.0.1/mikiui/examples/demo.py +7 -0
  86. mikiui-0.0.1/mikiui/examples/demo1.py +512 -0
  87. mikiui-0.0.1/mikiui/examples/kitchen_sink.py +1381 -0
  88. mikiui-0.0.1/mikiui/examples/layouts.py +172 -0
  89. mikiui-0.0.1/mikiui/examples/splitview_demo.py +455 -0
  90. mikiui-0.0.1/mikiui/examples/widgets.py +212 -0
  91. mikiui-0.0.1/mikiui/media/__init__.py +18 -0
  92. mikiui-0.0.1/mikiui/media/equalizer.py +62 -0
  93. mikiui-0.0.1/mikiui/media/filters.py +93 -0
  94. mikiui-0.0.1/mikiui/media/recorder.py +70 -0
  95. mikiui-0.0.1/mikiui/media/streaming.py +84 -0
  96. mikiui-0.0.1/mikiui/middleware/__init__.py +5 -0
  97. mikiui-0.0.1/mikiui/middleware/error_handler.py +177 -0
  98. mikiui-0.0.1/mikiui/router/__init__.py +30 -0
  99. mikiui-0.0.1/mikiui/router/auth.py +99 -0
  100. mikiui-0.0.1/mikiui/router/auth_middleware.py +134 -0
  101. mikiui-0.0.1/mikiui/router/csrf.py +79 -0
  102. mikiui-0.0.1/mikiui/router/group.py +194 -0
  103. mikiui-0.0.1/mikiui/router/middleware.py +138 -0
  104. mikiui-0.0.1/mikiui/router/rate_limit.py +164 -0
  105. mikiui-0.0.1/mikiui/router/router.py +306 -0
  106. mikiui-0.0.1/mikiui/runtime/__init__.py +7 -0
  107. mikiui-0.0.1/mikiui/runtime/alpine.min.js +5 -0
  108. mikiui-0.0.1/mikiui/runtime/alpine_runtime.js +38 -0
  109. mikiui-0.0.1/mikiui/runtime/history_router.js +109 -0
  110. mikiui-0.0.1/mikiui/runtime/htmx.min.js +1 -0
  111. mikiui-0.0.1/mikiui/runtime/htmx_runtime.js +23 -0
  112. mikiui-0.0.1/mikiui/runtime/js/core.js +215 -0
  113. mikiui-0.0.1/mikiui/runtime/js/init.js +119 -0
  114. mikiui-0.0.1/mikiui/runtime/js/miki_bridge.js +315 -0
  115. mikiui-0.0.1/mikiui/runtime/js/mikiaccordion.js +32 -0
  116. mikiui-0.0.1/mikiui/runtime/js/mikibottomnav.js +53 -0
  117. mikiui-0.0.1/mikiui/runtime/js/mikibottomsheet.js +152 -0
  118. mikiui-0.0.1/mikiui/runtime/js/mikicarousel.js +175 -0
  119. mikiui-0.0.1/mikiui/runtime/js/mikichat.js +175 -0
  120. mikiui-0.0.1/mikiui/runtime/js/mikichip.js +47 -0
  121. mikiui-0.0.1/mikiui/runtime/js/mikicollapsible.js +100 -0
  122. mikiui-0.0.1/mikiui/runtime/js/mikicontextwindow.js +105 -0
  123. mikiui-0.0.1/mikiui/runtime/js/mikidatagrid.js +319 -0
  124. mikiui-0.0.1/mikiui/runtime/js/mikidial.js +206 -0
  125. mikiui-0.0.1/mikiui/runtime/js/mikidialog.js +132 -0
  126. mikiui-0.0.1/mikiui/runtime/js/mikidockablepanel.js +476 -0
  127. mikiui-0.0.1/mikiui/runtime/js/mikidrawer.js +102 -0
  128. mikiui-0.0.1/mikiui/runtime/js/mikidropzone.js +89 -0
  129. mikiui-0.0.1/mikiui/runtime/js/mikieditorarea.js +221 -0
  130. mikiui-0.0.1/mikiui/runtime/js/mikiide.js +184 -0
  131. mikiui-0.0.1/mikiui/runtime/js/mikikanban.js +143 -0
  132. mikiui-0.0.1/mikiui/runtime/js/mikilazygrid.js +48 -0
  133. mikiui-0.0.1/mikiui/runtime/js/mikimdi.js +340 -0
  134. mikiui-0.0.1/mikiui/runtime/js/mikimenubar.js +225 -0
  135. mikiui-0.0.1/mikiui/runtime/js/mikimessagebox.js +67 -0
  136. mikiui-0.0.1/mikiui/runtime/js/mikimodal.js +96 -0
  137. mikiui-0.0.1/mikiui/runtime/js/mikipressable.js +30 -0
  138. mikiui-0.0.1/mikiui/runtime/js/mikiprogress.js +55 -0
  139. mikiui-0.0.1/mikiui/runtime/js/mikiprogressdialog.js +52 -0
  140. mikiui-0.0.1/mikiui/runtime/js/mikiscrollview.js +38 -0
  141. mikiui-0.0.1/mikiui/runtime/js/mikisearchableselect.js +46 -0
  142. mikiui-0.0.1/mikiui/runtime/js/mikislider.js +88 -0
  143. mikiui-0.0.1/mikiui/runtime/js/mikisplitview.js +320 -0
  144. mikiui-0.0.1/mikiui/runtime/js/mikistackedpanel.js +114 -0
  145. mikiui-0.0.1/mikiui/runtime/js/mikitabs.js +165 -0
  146. mikiui-0.0.1/mikiui/runtime/js/mikitoggle.js +60 -0
  147. mikiui-0.0.1/mikiui/runtime/js/mikivirtuallist.js +54 -0
  148. mikiui-0.0.1/mikiui/runtime/miki.css +4381 -0
  149. mikiui-0.0.1/mikiui/runtime/miki_components.css +255 -0
  150. mikiui-0.0.1/mikiui/runtime/miki_ui.js +2887 -0
  151. mikiui-0.0.1/mikiui/runtime/miki_utilities.css +70 -0
  152. mikiui-0.0.1/mikiui/runtime/runtime_loader.py +77 -0
  153. mikiui-0.0.1/mikiui/runtime/tailwind.css +22 -0
  154. mikiui-0.0.1/mikiui/runtime/themes/aqua.css +35 -0
  155. mikiui-0.0.1/mikiui/runtime/themes/bumblebee.css +35 -0
  156. mikiui-0.0.1/mikiui/runtime/themes/coporate.css +35 -0
  157. mikiui-0.0.1/mikiui/runtime/themes/cupcake.css +35 -0
  158. mikiui-0.0.1/mikiui/runtime/themes/cyberpunk.css +35 -0
  159. mikiui-0.0.1/mikiui/runtime/themes/dark.css +35 -0
  160. mikiui-0.0.1/mikiui/runtime/themes/dracula.css +35 -0
  161. mikiui-0.0.1/mikiui/runtime/themes/emerald.css +35 -0
  162. mikiui-0.0.1/mikiui/runtime/themes/forest.css +35 -0
  163. mikiui-0.0.1/mikiui/runtime/themes/garden.css +35 -0
  164. mikiui-0.0.1/mikiui/runtime/themes/halloween.css +35 -0
  165. mikiui-0.0.1/mikiui/runtime/themes/light.css +35 -0
  166. mikiui-0.0.1/mikiui/runtime/themes/pastel.css +35 -0
  167. mikiui-0.0.1/mikiui/runtime/themes/ratro.css +35 -0
  168. mikiui-0.0.1/mikiui/runtime/themes/solarized-dark.css +35 -0
  169. mikiui-0.0.1/mikiui/runtime/themes/synthwave.css +35 -0
  170. mikiui-0.0.1/mikiui/runtime/themes/tailwind.css +1188 -0
  171. mikiui-0.0.1/mikiui/runtime/themes/valentine.css +35 -0
  172. mikiui-0.0.1/mikiui/styling/__init__.py +64 -0
  173. mikiui-0.0.1/mikiui/styling/plain_css.py +169 -0
  174. mikiui-0.0.1/mikiui/styling/runtime.py +155 -0
  175. mikiui-0.0.1/mikiui/styling/system.py +530 -0
  176. mikiui-0.0.1/mikiui/styling/tailwind.py +220 -0
  177. mikiui-0.0.1/mikiui/themes/__init__.py +178 -0
  178. mikiui-0.0.1/mikiui/validation/__init__.py +248 -0
  179. mikiui-0.0.1/mikiui/validation/exceptions.py +11 -0
  180. mikiui-0.0.1/mikiui/validation/form.py +133 -0
  181. mikiui-0.0.1/mikiui/widgets/__init__.py +117 -0
  182. mikiui-0.0.1/mikiui/widgets/advanced.py +184 -0
  183. mikiui-0.0.1/mikiui/widgets/advanced_widgets.py +383 -0
  184. mikiui-0.0.1/mikiui/widgets/auth.py +117 -0
  185. mikiui-0.0.1/mikiui/widgets/chatui.py +108 -0
  186. mikiui-0.0.1/mikiui/widgets/dashboard.py +38 -0
  187. mikiui-0.0.1/mikiui/widgets/datagrid.py +252 -0
  188. mikiui-0.0.1/mikiui/widgets/dockable_panel.py +277 -0
  189. mikiui-0.0.1/mikiui/widgets/icon.py +233 -0
  190. mikiui-0.0.1/mikiui/widgets/ide_editor.py +63 -0
  191. mikiui-0.0.1/mikiui/widgets/inspector_panel.py +31 -0
  192. mikiui-0.0.1/mikiui/widgets/kanbanboard.py +48 -0
  193. mikiui-0.0.1/mikiui/widgets/layout_widgets.py +176 -0
  194. mikiui-0.0.1/mikiui/widgets/mediaplayer.py +46 -0
  195. mikiui-0.0.1/mikiui/widgets/navigation_widgets.py +342 -0
  196. mikiui-0.0.1/mikiui/widgets/panels.py +1107 -0
  197. mikiui-0.0.1/mikiui/widgets/property_grid.py +32 -0
  198. mikiui-0.0.1/mikiui/widgets/splitview.py +185 -0
  199. mikiui-0.0.1/mikiui/widgets/terminal_widget.py +30 -0
  200. mikiui-0.0.1/mikiui/widgets/theme_switcher.py +161 -0
  201. mikiui-0.0.1/mikiui.egg-info/PKG-INFO +161 -0
  202. mikiui-0.0.1/mikiui.egg-info/SOURCES.txt +244 -0
  203. mikiui-0.0.1/mikiui.egg-info/dependency_links.txt +1 -0
  204. mikiui-0.0.1/mikiui.egg-info/entry_points.txt +2 -0
  205. mikiui-0.0.1/mikiui.egg-info/requires.txt +26 -0
  206. mikiui-0.0.1/mikiui.egg-info/top_level.txt +2 -0
  207. mikiui-0.0.1/mikiui_app_plugins/__init__.py +36 -0
  208. mikiui-0.0.1/mikiui_app_plugins/api.py +284 -0
  209. mikiui-0.0.1/mikiui_app_plugins/demo.py +136 -0
  210. mikiui-0.0.1/mikiui_app_plugins/notifications.py +487 -0
  211. mikiui-0.0.1/mikiui_app_plugins/session.py +415 -0
  212. mikiui-0.0.1/pyproject.toml +121 -0
  213. mikiui-0.0.1/setup.cfg +4 -0
  214. mikiui-0.0.1/tests/test_advanced_widgets.py +384 -0
  215. mikiui-0.0.1/tests/test_advanced_widgets_v3.py +190 -0
  216. mikiui-0.0.1/tests/test_app.py +137 -0
  217. mikiui-0.0.1/tests/test_app_run.py +74 -0
  218. mikiui-0.0.1/tests/test_auth_middleware_fail_closed.py +66 -0
  219. mikiui-0.0.1/tests/test_base_components.py +73 -0
  220. mikiui-0.0.1/tests/test_bridge.py +165 -0
  221. mikiui-0.0.1/tests/test_components.py +109 -0
  222. mikiui-0.0.1/tests/test_desktop.py +250 -0
  223. mikiui-0.0.1/tests/test_dom_sanitization.py +76 -0
  224. mikiui-0.0.1/tests/test_engine.py +104 -0
  225. mikiui-0.0.1/tests/test_engine_diff.py +87 -0
  226. mikiui-0.0.1/tests/test_error_handler.py +75 -0
  227. mikiui-0.0.1/tests/test_errors.py +132 -0
  228. mikiui-0.0.1/tests/test_layout_widgets.py +156 -0
  229. mikiui-0.0.1/tests/test_marketplace.py +188 -0
  230. mikiui-0.0.1/tests/test_modal_and_layout.py +118 -0
  231. mikiui-0.0.1/tests/test_plugin_security.py +282 -0
  232. mikiui-0.0.1/tests/test_realtime.py +354 -0
  233. mikiui-0.0.1/tests/test_route_group.py +90 -0
  234. mikiui-0.0.1/tests/test_router.py +555 -0
  235. mikiui-0.0.1/tests/test_scaffolding.py +102 -0
  236. mikiui-0.0.1/tests/test_security.py +734 -0
  237. mikiui-0.0.1/tests/test_splitview.py +64 -0
  238. mikiui-0.0.1/tests/test_static_assets_security.py +40 -0
  239. mikiui-0.0.1/tests/test_static_coverage.py +185 -0
  240. mikiui-0.0.1/tests/test_styling_plain.py +42 -0
  241. mikiui-0.0.1/tests/test_surfaces.py +78 -0
  242. mikiui-0.0.1/tests/test_theme_switcher.py +118 -0
  243. mikiui-0.0.1/tests/test_themes.py +798 -0
  244. mikiui-0.0.1/tests/test_validation.py +154 -0
  245. mikiui-0.0.1/tests/test_validation_form.py +79 -0
  246. mikiui-0.0.1/tests/test_widgets.py +613 -0
mikiui-0.0.1/PKG-INFO ADDED
@@ -0,0 +1,161 @@
1
+ Metadata-Version: 2.4
2
+ Name: mikiui
3
+ Version: 0.0.1
4
+ Summary: Python-first UI framework that renders UIs as standalone desktops or websites.
5
+ Requires-Python: >=3.14
6
+ Description-Content-Type: text/markdown
7
+ Requires-Dist: fastapi>=0.115
8
+ Requires-Dist: uvicorn[standard]>=0.30
9
+ Requires-Dist: click>=8.1
10
+ Requires-Dist: typer>=0.12
11
+ Provides-Extra: dev
12
+ Requires-Dist: pytest>=8.0; extra == "dev"
13
+ Requires-Dist: pytest-cov>=6.0; extra == "dev"
14
+ Requires-Dist: pytest-asyncio>=0.24; extra == "dev"
15
+ Requires-Dist: mypy>=1.13; extra == "dev"
16
+ Requires-Dist: ruff>=0.8; extra == "dev"
17
+ Requires-Dist: httpx>=0.28; extra == "dev"
18
+ Requires-Dist: playwright>=1.40; extra == "dev"
19
+ Provides-Extra: build
20
+ Requires-Dist: setuptools>=68; extra == "build"
21
+ Requires-Dist: wheel>=0.42; extra == "build"
22
+ Requires-Dist: build>=1.2; extra == "build"
23
+ Provides-Extra: desktop
24
+ Requires-Dist: pywebview>=5.0; extra == "desktop"
25
+ Requires-Dist: pyinstaller>=6.0; extra == "desktop"
26
+ Requires-Dist: watchfiles>=0.21; extra == "desktop"
27
+ Provides-Extra: tailwind
28
+ Requires-Dist: watchfiles>=0.21; extra == "tailwind"
29
+
30
+ # MikiUI
31
+
32
+ A Python-first UI framework that renders UIs as standalone desktops or websites.
33
+
34
+ ## Quick Start
35
+
36
+ ```bash
37
+ pip install -e .
38
+ mikiui new myapp
39
+ cd myapp
40
+ mikiui dev # development server
41
+ # or
42
+ mikiui desktop # native desktop window
43
+ ```
44
+
45
+ ## Styling
46
+
47
+ MikiUI supports two styling frameworks. Choose one during project creation:
48
+
49
+ ```bash
50
+ mikiui new myapp
51
+ # Follow the prompts to choose Tailwind or plain CSS
52
+ ```
53
+
54
+ | Framework | Description | Node.js Required |
55
+ |-----------|-------------|-----------------|
56
+ | `tailwind` | Tailwind CSS + optional DaisyUI | Yes |
57
+ | `plain` | Plain CSS, no framework | No |
58
+
59
+ ### Tailwind CSS
60
+
61
+ ```bash
62
+ cd myapp
63
+ npm install # Install Node.js dependencies
64
+ mikiui dev # Start dev server
65
+ mikiui tailwind dev # Watch & rebuild CSS (second terminal)
66
+ ```
67
+
68
+ Production build:
69
+
70
+ ```bash
71
+ mikiui build --target web --theme tailwind
72
+ ```
73
+
74
+ Add DaisyUI:
75
+
76
+ ```bash
77
+ mikiui install tailwind daisyui
78
+ ```
79
+
80
+ ### Plain CSS
81
+
82
+ ```bash
83
+ cd myapp
84
+ mikiui dev # No extra setup needed
85
+ ```
86
+
87
+ ## What's Available
88
+
89
+ - **Components** — all HTML elements as Python classes (Button, Input, Form, Table, Dialog, Tabs, etc.)
90
+ - **Widgets** — high-level composite UI (DataGrid, MediaPlayer, DockablePanel, IDE Editor, ThemeSwitcher, etc.)
91
+ - **Themes** — 4 built-in themes (light, dark, solarized-dark, dracula) with custom theme support
92
+ - **Styling** — Tailwind CSS or plain CSS
93
+ - **Plugins** — extend with custom themes, components, and widgets
94
+ - **Desktop** — native pywebview window or system browser fallback
95
+ - **Full-stack** — FastAPI backend with HTMX + Alpine.js runtime
96
+
97
+ ## Commands
98
+
99
+ | Command | Description |
100
+ |---------|-------------|
101
+ | `mikiui new <name>` | Scaffold a new project (prompts for framework) |
102
+ | `mikiui dev` | Development server (auto-discovers `app.py`) |
103
+ | `mikiui desktop` | Native desktop window (pywebview) |
104
+ | `mikiui desktop --reload` | Desktop with auto-reload |
105
+ | `mikiui desktop --browser` | Force system browser |
106
+ | `mikiui build --target web` | Static web build |
107
+ | `mikiui build --target desktop` | Desktop package build |
108
+ | `mikiui tailwind dev` | Watch and rebuild Tailwind CSS |
109
+ | `mikiui tailwind build` | Production Tailwind build |
110
+ | `mikiui install tailwind` | Install Tailwind + npm deps |
111
+
112
+ ## Running Your App
113
+
114
+ ```python
115
+ # app.py
116
+ from mikiui import MikiApp, Div, H1, Button
117
+
118
+ app = MikiApp(title="My App")
119
+ app.set_theme("dark")
120
+
121
+ @app.route("/", title="Home")
122
+ def home():
123
+ return Div(H1("Welcome to MikiUI!"), Button("Click me"))
124
+
125
+ if __name__ == "__main__":
126
+ app.run() # python app.py
127
+ # or: app.run(desktop=True) for native window
128
+ ```
129
+
130
+ ## Documentation
131
+
132
+ - [Getting Started](docs/getting-started.md)
133
+ - [Styling Guide](docs/styling.md)
134
+ - [Theme Reference](docs/theme-reference.md)
135
+ - [Theming Guide](docs/themes.md)
136
+ - [App Discovery & Running](docs/app-discovery.md)
137
+ - [Plugin System](docs/plugins.md)
138
+ - [Full Spec](context/plan.md)
139
+
140
+ ## Production readiness
141
+
142
+ Use the following commands to validate the package and production build flow before shipping a release:
143
+
144
+ ```bash
145
+ pip install -e .
146
+ python -m build
147
+ mikiui build --target web
148
+ mikiui build --target desktop
149
+ pytest
150
+ ```
151
+
152
+ The framework is intended to support:
153
+
154
+ - web deployment via static HTML/HTMX + FastAPI
155
+ - desktop deployment via pywebview or browser fallback
156
+ - a single Python codebase for component and widget reuse
157
+ - Tailwind or plain CSS styling without changing app logic
158
+
159
+ ## License
160
+
161
+ MIT
mikiui-0.0.1/README.md ADDED
@@ -0,0 +1,132 @@
1
+ # MikiUI
2
+
3
+ A Python-first UI framework that renders UIs as standalone desktops or websites.
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ pip install -e .
9
+ mikiui new myapp
10
+ cd myapp
11
+ mikiui dev # development server
12
+ # or
13
+ mikiui desktop # native desktop window
14
+ ```
15
+
16
+ ## Styling
17
+
18
+ MikiUI supports two styling frameworks. Choose one during project creation:
19
+
20
+ ```bash
21
+ mikiui new myapp
22
+ # Follow the prompts to choose Tailwind or plain CSS
23
+ ```
24
+
25
+ | Framework | Description | Node.js Required |
26
+ |-----------|-------------|-----------------|
27
+ | `tailwind` | Tailwind CSS + optional DaisyUI | Yes |
28
+ | `plain` | Plain CSS, no framework | No |
29
+
30
+ ### Tailwind CSS
31
+
32
+ ```bash
33
+ cd myapp
34
+ npm install # Install Node.js dependencies
35
+ mikiui dev # Start dev server
36
+ mikiui tailwind dev # Watch & rebuild CSS (second terminal)
37
+ ```
38
+
39
+ Production build:
40
+
41
+ ```bash
42
+ mikiui build --target web --theme tailwind
43
+ ```
44
+
45
+ Add DaisyUI:
46
+
47
+ ```bash
48
+ mikiui install tailwind daisyui
49
+ ```
50
+
51
+ ### Plain CSS
52
+
53
+ ```bash
54
+ cd myapp
55
+ mikiui dev # No extra setup needed
56
+ ```
57
+
58
+ ## What's Available
59
+
60
+ - **Components** — all HTML elements as Python classes (Button, Input, Form, Table, Dialog, Tabs, etc.)
61
+ - **Widgets** — high-level composite UI (DataGrid, MediaPlayer, DockablePanel, IDE Editor, ThemeSwitcher, etc.)
62
+ - **Themes** — 4 built-in themes (light, dark, solarized-dark, dracula) with custom theme support
63
+ - **Styling** — Tailwind CSS or plain CSS
64
+ - **Plugins** — extend with custom themes, components, and widgets
65
+ - **Desktop** — native pywebview window or system browser fallback
66
+ - **Full-stack** — FastAPI backend with HTMX + Alpine.js runtime
67
+
68
+ ## Commands
69
+
70
+ | Command | Description |
71
+ |---------|-------------|
72
+ | `mikiui new <name>` | Scaffold a new project (prompts for framework) |
73
+ | `mikiui dev` | Development server (auto-discovers `app.py`) |
74
+ | `mikiui desktop` | Native desktop window (pywebview) |
75
+ | `mikiui desktop --reload` | Desktop with auto-reload |
76
+ | `mikiui desktop --browser` | Force system browser |
77
+ | `mikiui build --target web` | Static web build |
78
+ | `mikiui build --target desktop` | Desktop package build |
79
+ | `mikiui tailwind dev` | Watch and rebuild Tailwind CSS |
80
+ | `mikiui tailwind build` | Production Tailwind build |
81
+ | `mikiui install tailwind` | Install Tailwind + npm deps |
82
+
83
+ ## Running Your App
84
+
85
+ ```python
86
+ # app.py
87
+ from mikiui import MikiApp, Div, H1, Button
88
+
89
+ app = MikiApp(title="My App")
90
+ app.set_theme("dark")
91
+
92
+ @app.route("/", title="Home")
93
+ def home():
94
+ return Div(H1("Welcome to MikiUI!"), Button("Click me"))
95
+
96
+ if __name__ == "__main__":
97
+ app.run() # python app.py
98
+ # or: app.run(desktop=True) for native window
99
+ ```
100
+
101
+ ## Documentation
102
+
103
+ - [Getting Started](docs/getting-started.md)
104
+ - [Styling Guide](docs/styling.md)
105
+ - [Theme Reference](docs/theme-reference.md)
106
+ - [Theming Guide](docs/themes.md)
107
+ - [App Discovery & Running](docs/app-discovery.md)
108
+ - [Plugin System](docs/plugins.md)
109
+ - [Full Spec](context/plan.md)
110
+
111
+ ## Production readiness
112
+
113
+ Use the following commands to validate the package and production build flow before shipping a release:
114
+
115
+ ```bash
116
+ pip install -e .
117
+ python -m build
118
+ mikiui build --target web
119
+ mikiui build --target desktop
120
+ pytest
121
+ ```
122
+
123
+ The framework is intended to support:
124
+
125
+ - web deployment via static HTML/HTMX + FastAPI
126
+ - desktop deployment via pywebview or browser fallback
127
+ - a single Python codebase for component and widget reuse
128
+ - Tailwind or plain CSS styling without changing app logic
129
+
130
+ ## License
131
+
132
+ MIT
@@ -0,0 +1,44 @@
1
+ """MikiUI - Python-first UI framework.
2
+
3
+ Render UIs as standalone desktops or websites from Python component trees.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ from . import components
9
+ from .app import AppState, ComponentPlugin, Ctx, MikiApp, Plugin, RouteDef, ThemePlugin, WidgetPlugin
10
+ from .backend import create_app
11
+
12
+ # Re-export every public component at the top level so apps can do
13
+ # `from mikiui import Div, Button` (see context/plan.md API examples).
14
+ from .components import * # noqa: F401,F403
15
+ from .engine import RawHtml, _, render, render_fragment, render_page, set_translator
16
+ from .router import Router
17
+ from .themes import Theme, get_theme, list_themes, register_theme
18
+
19
+ __version__ = "0.0.1"
20
+
21
+ __all__ = [
22
+ "MikiApp",
23
+ "Ctx",
24
+ "AppState",
25
+ "Plugin",
26
+ "ThemePlugin",
27
+ "ComponentPlugin",
28
+ "WidgetPlugin",
29
+ "RouteDef",
30
+ "render",
31
+ "render_page",
32
+ "render_fragment",
33
+ "_",
34
+ "RawHtml",
35
+ "set_translator",
36
+ "create_app",
37
+ "components",
38
+ "Router",
39
+ "Theme",
40
+ "register_theme",
41
+ "get_theme",
42
+ "list_themes",
43
+ "__version__",
44
+ ]
@@ -0,0 +1,64 @@
1
+ """MikiUI application package."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from .app import MikiApp
6
+ from .marketplace import (
7
+ DirectoryIndexSource,
8
+ MarketplaceSource,
9
+ PluginInfo,
10
+ PluginMarketplace,
11
+ PyPIIndexSource,
12
+ )
13
+ from .plugin_discovery import (
14
+ PluginMetadata,
15
+ auto_load,
16
+ discover_plugins,
17
+ load_plugin,
18
+ )
19
+ from .plugin_security import (
20
+ PluginManifest,
21
+ PluginSecurityConfig,
22
+ PluginSecurityViolation,
23
+ PluginValidator,
24
+ load_manifest,
25
+ validate_plugin,
26
+ )
27
+ from .plugins import ComponentPlugin, Plugin, ThemePlugin, WidgetPlugin
28
+ from .routes import Ctx, RouteDef, invoke_route, resolve_title
29
+ from .state import AppState
30
+ from .theme_registry import ThemeRegistry
31
+ from .widget_registry import WidgetRegistry
32
+
33
+ __all__ = [
34
+ "MikiApp",
35
+ "Ctx",
36
+ "RouteDef",
37
+ "AppState",
38
+ "Plugin",
39
+ "ThemePlugin",
40
+ "ComponentPlugin",
41
+ "WidgetPlugin",
42
+ "WidgetRegistry",
43
+ "ThemeRegistry",
44
+ "PluginMetadata",
45
+ "discover_plugins",
46
+ "load_plugin",
47
+ "auto_load",
48
+ "resolve_title",
49
+ "invoke_route",
50
+ # Security
51
+ "PluginManifest",
52
+ "PluginSecurityConfig",
53
+ "PluginSecurityViolation",
54
+ "PluginValidator",
55
+ "validate_plugin",
56
+ "load_manifest",
57
+ # Marketplace
58
+ "PluginInfo",
59
+ "MarketplaceSource",
60
+ "DirectoryIndexSource",
61
+ "PyPIIndexSource",
62
+ "PluginMarketplace",
63
+ ]
64
+