Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
PyWry
PyWry is a cross-platform app factory, rendering engine and UI toolkit for Python that produces native desktop, web, and notebook experiences from a single API.
Install
/plugin marketplace add deeleeramone/PyWry --path claude/.claude-plugin/marketplace.jsonInstall command taken from the project's README or registry entry. Always review code before running it.
README excerpt
Read full README on GitHub →PyWry is a cross-platform rendering engine and desktop UI toolkit for Python. One API, three output targets:
- Native window — OS webview via PyTauri. Not Qt, not Electron. Use unrestricted HTML/CSS/JS.
- Jupyter widget — anywidget + FastAPI + WebSocket, works in JupyterLab, VS Code, and Colab.
- Browser tab — FastAPI server with Redis state backend for horizontal scaling.
Build Once, Render Anywhere: Prototype interactive data apps in a Jupyter Notebook, easily deploy them as web apps, and seamlessly compile them into secure, lightweight standalone desktop executables via pywry[freeze].
Installation
Python 3.10–3.14, virtual environment recommended.
pip install pywry
Core extras:
| Extra | When to use |
|---|---|
pip install 'pywry[notebook]' |
Jupyter / anywidget integration |
pip install 'pywry[auth]' |
OAuth2 and keyring-backed auth support |
pip install 'pywry[freeze]' |
PyInstaller hook for standalone executables |
pip install 'pywry[mcp]' |
Model Context Protocol server support |
pip install 'pywry[sqlite]' |
Encrypted SQLite state backend (SQLCipher) |
pip install 'pywry[all]' |
Everything above |
Chat provider extras:
| Extra | When to use |
|---|---|
pip install 'pywry[openai]' |
OpenAIProvider (OpenAI SDK) |
pip install 'pywry[anthropic]' |
AnthropicProvider (Anthropic SDK) |
pip install 'pywry[magentic]' |
MagenticProvider (any magentic-supported LLM) |
pip install 'pywry[acp]' |
StdioProvider (Agent Client Protocol subprocess) |
pip install 'pywry[deepagent]' |
DeepagentProvider (LangChain Deep Agents — includes MCP adapters and ACP) |
The chat UI itself is included in the base package. Provider extras only install the matching third-party SDK.
Linux only — install system webview dependencies first:
sudo apt-get install libwebkit2gtk-4.1-dev libgtk-3-dev libglib2.0-dev \
libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 \
libxcb-randr0 libxcb-render-util0 libxcb-xinerama0 libxcb-xfixes0 \
libxcb-shape0 libgl1 libegl1
Quick Start
from pywry import PyWry
app = PyWry()
app.show("Hello World!")
app.block()
Toolbar + callbacks
from pywry import PyWry, Toolbar, Button
app = PyWry()
def on_click(data, event_type, label):
app.emit("pywry:set-content", {"selector": "h1", "text": "Clicked!"}, label)
app.show(
"Hello",
toolbars=[Toolbar(position="top", items=[Button(label="Click me", event="app:click")])],
callbacks={"app:click": on_click},
)
app.block()
Pandas DataFrame → AgGrid
from pywry import PyWry
import pandas as pd
app = PyWry()
df = pd.DataFrame({"name": ["Alice", "Bob", "Carol"], "age": [30, 25, 35]})
def on_select(data, event_type, label):
names = ", ".join(row["name"] for row in data["rows"])
app.emit("pywry:alert", {"message": f"Selected: {names}"}, label)
app.show_dataframe(df, callbacks={"grid:row-selected": on_select})
app.block()
Plotly chart
from pywry import PyWry
import plotly.express as px
app = PyWry(theme="light")
fig = px.scatter(px.data.iris(), x="sepal_width", y="sepal_length", color="species")
app.show_plotly(fig)
app.block()
Features
Similar plugs
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here…