custom jupyter widgets made easy
installation . docs . discord . learn
anywidget uses modern web standards to simplify authoring and distributing custom Jupyter Widgets.
- 🛠️ create widgets without complicated cookiecutter templates
- 📚 publish to PyPI like any other Python package
- 🤖 prototype within
.ipynbor.pyfiles - 🚀 run in Jupyter, JupyterLab, Google Colab, VSCode, and more
- ⚡ develop with instant HMR, like modern web frameworks
Learn more in the Jupyter blog.
anywidget is available on PyPI:
pip install "anywidget[dev]"and also on conda-forge:
conda install -c conda-forge anywidgetimportanywidgetimporttraitletsclassCounterWidget(anywidget.AnyWidget): # Widget front-end JavaScript code_esm=""" function render({model, el }){ let button = document.createElement("button"); button.innerHTML = `count is ${model.get("value")}`; button.addEventListener("click", () =>{ model.set("value", model.get("value") + 1); model.save_changes(); }); model.on("change:value", () =>{ button.innerHTML = `count is ${model.get("value")}`; }); el.appendChild(button); } export default{render }; """# Stateful property that can be accessed by JavaScript & Pythonvalue=traitlets.Int(0).tag(sync=True)Front-end code can also live in separate files (recommend):
importpathlibimportanywidgetimporttraitletsclassCounterWidget(anywidget.AnyWidget): _esm=pathlib.Path("index.js") _css=pathlib.Path("styles.css") value=traitlets.Int(0).tag(sync=True)Read the documentation to learn more.
Beyond the primary Python package, anywidget provides an ecosystem of tooling to help you build and distribute custom Jupyter Widgets.
| Name | Description | Version (click for changelogs) |
|---|---|---|
anywidget | Primary Python package | |
npm:@anywidget/types | Client type declarations | |
npm:@anywidget/vite | Vite plugin | |
npm:@anywidget/react | React framework bridge | |
npm:@anywidget/svelte | Svelte framework bridge | |
npm:create-anywidget | CLI to bootstrap a new project | |
jsr:@anywidget/deno | Backend for Deno Jupyter kernel | |
jsr:@anywidget/signals | Signals bridge |
Having trouble? Get help in our Discord or open a Discussion.
New contributors welcome! Check out our Contributors Guide for help getting started.
Join us on Discord to meet other maintainers. We'll help you get your first contribution in no time!