pywry-orientation
When to reach for PyWry MCP tools (native webview rendering, Plotly, TradingView, AgGrid, chat) instead of writing Flask/Streamlit/Dash/Electron code. Use at…
**STOP. THIS IS THE AUTHORITATIVE REFERENCE FOR ALL COMPONENTS.** **YOU MUST USE THE EXACT EVENT SIGNATURES DOCUMENTED HERE.** **THERE ARE NO EXCEPTIONS. NO WORKAROUNDS. NO DEVIATIONS.**
$ npx -y skills add deeleeramone/PyWry --skill component_reference --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/component_referenceContext preview
The summary Claude sees to decide when to auto-load this skill.
**STOP. THIS IS THE AUTHORITATIVE REFERENCE FOR ALL COMPONENTS.** **YOU MUST USE THE EXACT EVENT SIGNATURES DOCUMENTED HERE.** **THERE ARE NO EXCEPTIONS. NO WORKAROUNDS. NO DEVIATIONS.**
> **STOP. THIS IS THE AUTHORITATIVE REFERENCE FOR ALL COMPONENTS.** > **YOU MUST USE THE EXACT EVENT SIGNATURES DOCUMENTED HERE.** > **THERE ARE NO EXCEPTIONS. NO WORKAROUNDS. NO DEVIATIONS.**
---
These are the ONLY events that work for updating widgets. Use `send_event` tool with these event types:
| Event Type | Payload | Description | |------------|---------|-------------| | `grid:update-data` | `{"data": [...rows...], "strategy": "set"}` | Replace all rows | | `grid:update-data` | `{"data": [...rows...], "strategy": "append"}` | Append rows | | `grid:update-data` | `{"data": [...rows...], "strategy": "update"}` | Update existing rows | | `grid:update-columns` | `{"columnDefs": [...]}` | Update column definitions | | `grid:update-cell` | `{"rowId": "row-1", "colId": "price", "value": 99.50}` | Update single cell |
| Event Type | Payload | Description | |------------|---------|-------------| | `grid:request-state` | `{}` | Request current grid state | | `grid:request-state` | `{"gridId": "my-grid"}` | Request specific grid's state | | `grid:restore-state` | `{"state": {...savedState...}}` | Restore saved grid state | | `grid:reset-state` | `{"hard": false}` | Soft reset (keeps column order) | | `grid:reset-state` | `{"hard": true}` | Hard reset (full reset) |
**Response Event:** `grid:state-response` with `{"gridId": "...", "state": {...}}`
**State Object Contents:**
| Event Type | Payload | Description | |------------|---------|-------------| | `plotly:update-figure` | `{"data": [...], "layout": {...}}` | Full figure update | | `plotly:update-layout` | `{"layout": {...}}` | Layout only update | | `plotly:reset-zoom` | `{}` | Reset chart zoom to original |
| Event Type | Payload | Description | |------------|---------|-------------| | `plotly:request-state` | `{}` | Request current chart state | | `plotly:request-state` | `{"chartId": "my-chart"}` | Request specific chart's state |
**Response Event:** `plotly:state-response` with `{"chartId": "...", "data": [...], "layout": {...}}`
| Event Type | Payload | Description | |------------|---------|-------------| | `plotly:export-data` | `{}` | Export chart data | | `plotly:export-data` | `{"chartId": "my-chart"}` | Export specific chart's data |
**Response Event:** `plotly:export-response` with `{"data": [{"traceIndex": 0, "name": "...", "x": [...], "y": [...], "type": "..."}]}`
| Event Type | Payload | Description | |------------|---------|-------------| | `pywry:set-content` | `{"id": "elementId", "text": "..."}` | Set text content | | `pywry:set-content` | `{"id": "elementId", "html": "..."}` | Set HTML content | | `pywry:set-style` | `{"id": "elementId", "styles": {"color": "red"}}` | Update CSS styles |
| Event Type | Payload | Description | |------------|---------|-------------| | `pywry:update-theme` | `{"theme": "dark"}` | Switch theme (dark/light/system) | | `pywry:update-theme` | `{"theme": "ag-theme-alpine-dark"}` | AG Grid theme | | `pywry:update-theme` | `{"theme": "plotly_dark"}` | Plotly template |
Use `show_toast` tool instead, or:
| Event Type | Payload | Description | |------------|---------|-------------| | `pywry:alert` | `{"message": "...", "type": "info"}` | info, success, warning, error |
| Event Type | Payload | Description | |------------|---------|-------------| | `toolbar:set-value` | `{"componentId": "my-select", "value": "option2"}` | Set single component value | | `toolbar:set-values` | `{"values": {"select-1": "A", "toggle-1": true}}` | Set multiple values at once | | `toolbar:request-state` | `{"componentId": "my-input"}` | Request single component value | | `toolbar:request-state` | `{"toolbarId": "top-toolbar"}` | Request all values in toolbar | | `toolbar:request-state` | `{}` | Request all toolbar values |
**Response Event:** `toolbar:state-response` with `{"componentId": "...", "value": ...}` or `{"values": {...}}`
**Supported Components for set-value:**
**Note:** `secret` inputs cannot be set via toolbar:set-value for security.
---
1. [Button](#button) 2. [Select](#select) 3. [MultiSelect](#multiselect) 4. [Toggle](#toggle) 5. [Checkbox](#checkbox) 6. [RadioGroup](#radiogroup) 7. [TabGroup](#tabgroup) 8. [TextInput](#textinput) 9. [TextArea](#textarea) 10. [SearchInput](#searchinput) 11. [NumberInput](#numberinput) 12. [DateInput](#dateinput) 13. [SliderInput](#sliderinput) 14. [RangeInput](#rangeinput) 15. [SecretInput](#secretinput) 16. [Div](#div) 17. [Marquee](#marquee) 18. [TickerItem](#tickeritem)
---
A clickable button that emits an event.
| Property | Type | Required | Default | Description | |----------|------|----------|---------|-------------| | `type` | `"button"` | ✅ YES | - | Component type identifier | | `label` | `string` | ✅ YES | - | Button text | | `event` | `string` | ✅ YES | - | Event name (format: `namespace:action`) | | `variant` | `string` | ❌ | `"primary"` | Style: `primary`, `secondary`, `neutral`, `ghost`, `ou
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.
Repo: deeleeramone/PyWry
When to reach for PyWry MCP tools (native webview rendering, Plotly, TradingView, AgGrid, chat) instead of writing Flask/Streamlit/Dash/Electron code. Use at…
Add OAuth2 authentication to PyWry apps — Google, GitHub, Microsoft, or any OIDC provider.
Autonomous PyWry application building using LLM sampling, elicitation, and progress reporting.
How an agent operates inside a PyWry chat widget — reading user messages, attachments, @-context, tool-call result cards, edit/resend, settings changes.
Target elements for `set_content` and `set_style` updates using CSS selectors or component IDs.