Metadata-Version: 2.4
Name: Moho
Version: 0.2.14
Summary: Python framework for Rich Internet Applications (Tornado + Bootstrap + .mh UI language)
Author-email: "Denis Korolkov, Stepan Rakhimov" <escape.app.net@gmail.com>
License-Expression: AGPL-3.0-or-later
Project-URL: Homepage, https://escape-projects.gitlab.io/moho-framework/
Project-URL: Documentation, https://escape-projects.gitlab.io/moho-framework/
Project-URL: Repository, https://gitlab.com/escape-projects/moho-framework
Project-URL: Issues, https://gitlab.com/escape-projects/moho-framework/-/issues
Keywords: ria,web,tornado,bootstrap,widgets
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Education
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Topic :: Utilities
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy>2.0.0
Requires-Dist: tornado>=6.5.6
Requires-Dist: matplotlib>=3.10.9
Requires-Dist: plotly>=6.9.0
Requires-Dist: Pygments>=2.20.0
Requires-Dist: docutils>=0.21.2
Provides-Extra: lint
Requires-Dist: ruff==0.16.4; extra == "lint"
Requires-Dist: black==26.5.1; extra == "lint"
Provides-Extra: test
Requires-Dist: playwright>=1.40.0; extra == "test"
Provides-Extra: webview
Requires-Dist: pywebview>=5.0; extra == "webview"
Requires-Dist: PyQt6>=6.0; platform_system == "Linux" and extra == "webview"
Requires-Dist: PyQt6-WebEngine>=6.0; platform_system == "Linux" and extra == "webview"
Requires-Dist: QtPy>=2.0; platform_system == "Linux" and extra == "webview"
Dynamic: license-file

# Moho

Python framework for network and local applications with server-side state
(not in the browser). The programming model is Kivy-like (widgets,
properties, `.mh` layout files); the runtime is a Tornado server plus
Bootstrap in the browser.

Documentation, getting started, and the live showcase:

https://escape-projects.gitlab.io/moho-framework/

## Screenshots

![Moho logo](https://escape-projects.gitlab.io/moho-framework/_static/images/moho-logo.png)

![Kitchen sink](https://escape-projects.gitlab.io/moho-framework/_static/images/showcase_kitchensink.png)

![Cards](https://escape-projects.gitlab.io/moho-framework/_static/images/showcase_cards.png)

![Matplotlib](https://escape-projects.gitlab.io/moho-framework/_static/images/showcase_matplotlib.png)

![Plotly](https://escape-projects.gitlab.io/moho-framework/_static/images/showcase_plotly.png)

![Node graph](https://escape-projects.gitlab.io/moho-framework/_static/images/showcase_nodegraph.png)

![Docking](https://escape-projects.gitlab.io/moho-framework/_static/images/showcase_docking.png)

More screens: [showcase gallery](https://escape-projects.gitlab.io/moho-framework/showcase_gallery.html).

## Install

```bash
pip install moho
```

Requires Python 3.9+. Linux and Windows wheels are on PyPI. From a source
checkout (C compiler, Cython, numpy): `pip install -e .`
After install, `moho-showcase` starts the full widget demo.

## Examples

```bash
moho-showcase                                      # full widget demo (http://localhost:8888/)
moho-showcase --webview                            # desktop app (needs: pip install -e ".[webview]")
cd examples/showcase && python app.py              # same app, from the examples tree
cd examples/showcase && python app.py --webview    # same desktop window from the examples tree
cd examples/tutorials/first_app && python app.py   # Hello World
cd examples/physics && python app.py               # thin lens, Snell, pendulum
```

Desktop chrome-less start: ``run(webview=True)`` (or ``--webview``) opens a frameless
pywebview window and injects Moho's TitleBar. The HTTP server binds localhost only
and picks the next free port from 8888 if the requested port is busy. Install the
optional extra with ``pip install moho[webview]``. On Linux that is not
enough: install **Qt6** (Qt WebEngine) in the same environment,
``pip install PyQt6 PyQt6-WebEngine QtPy``. Moho forces ``gui='qt'`` so
layout matches Windows Edge/Chromium (GTK/WebKit is not used).
