framejs
An anywidget for embedding framejs frames (and metapage URLs) in Jupyter and marimo notebooks.
Renamed in 0.4.0. This package was published as
metaframe-widget, and the class asMetaframeWidget. Both names still work —metaframe-widgetnow installs this package, andMetaframeWidgetis an alias ofFrame— but new code should useframejsandFrame.
Install
pip install framejs
With environment extras:
pip install "framejs[jupyter]" # includes jupyterlab
pip install "framejs[marimo]" # includes marimo
Quick start
Jupyter
from framejs import Frame
w = Frame(url="https://framejs.app/j/f14d583125634c23851453c8038ddb7c", height="300px")
w
marimo
import marimo as mo
from framejs import Frame
w = Frame(url="https://framejs.app/j/f14d583125634c23851453c8038ddb7c", height="300px")
mo.ui.anywidget(w)
A widget is always created from a URL, editable at the URL.
URL forms
Any of these work as url=:
# Expiring snapshot — content-addressed, kept ~30 days, then garbage-collected
# (editor: "Create expiring snapshot")
Frame(url="https://framejs.io/j/<sha256>")
# Durable, editable frame — permanent, tied to your account (editor: "Save")
# Paste either host: a framejs.app/j/<uuid> URL is loaded from framejs.io, the
# runtime that serves frames with CORS headers (a notebook cannot load the
# framejs.app one directly). `w.url` still reads back what you passed.
Frame(url="https://framejs.app/j/<uuid>")
Prefer the durable /j/<uuid> form in notebooks you keep. See
Short URLs for the full comparison.
API reference
| Parameter | Type | Default | Description |
|---|---|---|---|
url |
str |
"" |
Full frame URL (including hash params) |
inputs |
dict |
{} |
Dict of inputs to push to the frame |
outputs |
dict |
{} |
Dict of outputs received from the frame (read-only) |
width |
str |
"100%" |
CSS width for the widget container |
height |
str |
"400px" |
CSS height for the widget container |
allow |
str |
"" |
iframe allow attribute (e.g. "camera; microphone") |
Methods
set_inputs(d)— merge a dict into current inputsset_input(key, value)— set a single input keyon_outputs_change(callback)— register a callback for output changeson_saved_url_change(callback)— register a callback for when the user creates an expiring snapshot (/j/<sha256>) inside the widgetpipe_to(target, output_key, input_key=None)— connect an output to another widget's input
Piping widgets
source = Frame(url="...")
sink = Frame(url="...")
source.pipe_to(sink, output_key="result", input_key="data")
No anywidget? Use a plain iframe
To send data into a frame and nothing more, you need no package at all —
encode the inputs into the URL and show it with IPython.display.IFrame. See
the Jupyter guide.
Links
Metadata
Release files for framejs 0.5.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| framejs-0.5.2.tar.gz | 9.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| framejs-0.5.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 19.4 kB
Release files / framejs-0.5.2.tar.gz
| Download URL | framejs-0.5.2.tar.gz |
|---|---|
| Size | 9.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
99b38177b8d47ca4ad59d6201b05da4e5f2043a92e9f1f25373247565a86f34a
|
|
BLAKE2b-256 checksum How to use checksums |
07b70b6516f3ad107d0d358cde6641fbcd80dd165357553392bd478d34ba6a67
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.
Transparency logRelease files / framejs-0.5.2-py3-none-any.whl
| Download URL | framejs-0.5.2-py3-none-any.whl |
|---|---|
| Size | 9.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cb89d268144237785033002720554bad0df3fa86009ec32eba88dd34486d16ce
|
|
BLAKE2b-256 checksum How to use checksums |
cb4cf347a28bcbf35f4b6263fe47814177fcc1decb51685973bd67ba5f393666
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.
Transparency log