Skip to content

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.json

Install command taken from the project's README or registry entry. Always review code before running it.

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

Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

Java 面试 & 后端通用面试指南,覆盖计算机基础、数据库、分布式、高并发、系统设计与 AI 应用开发

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…