Skill: Adding a New Pane Type
When to Use
Use this skill when adding a new visualization type (e.g., a new chart, widget, or media pane) to Visdom.
Core Workflow
Python Client (
py/visdom/__init__.py):- Add a new method to the
Visdomclass with@pytorch_wrap - Format data as
{"data": [{"type": "my_type", "content": ...}], ...} - Call
self._send(msg)to POST to/events
- Add a new method to the
Server (
py/visdom/utils/server_utils.py):- Add a new
elif ptype == "my_type":branch in thewindow()function (around line 202) - Define what fields are stored in the window dict
- Add a new
Frontend (
js/panes/):- Create
MyPane.jsfollowing the pattern inTextPane.jsorImagePane.js - Use
forwardRef+React.memopattern fromPane.js
- Create
Registration (
js/settings.js):- Add
my_type: MyPaneto thePANESobject - Add default size to
PANE_SIZE:my_type: [width, height]
- Add
Type stubs (
py/visdom/__init__.pyi):- Add the method signature for type checking
Demo (
example/components/):- Create a demo script exercising the new pane type
- Import it in
example/demo.py
Tests (
playwright/tests/):- Add a Playwright spec for the new pane type, following existing patterns
Guardrails
- Always use the
@pytorch_wrapdecorator on new client methods - Follow the
forwardRef+React.memopattern for pane components - Import and register new panes in
js/settings.js - Never manually edit compiled files in
py/visdom/static/
Documentation
- Skill reference
py/visdom/__init__.pypy/visdom/utils/server_utils.pyjs/settings.jsjs/panes/AGENTS.mdCONTRIBUTING.md
Assets
- See
assets/README.mdand store templates/resources inassets/.
Tests
- Follow the default flow in
references/TESTS.md.