Skip to main content

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 as MetaframeWidget. Both names still work — metaframe-widget now installs this package, and MetaframeWidget is an alias of Frame — but new code should use framejs and Frame.

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 inputs
  • set_input(key, value) — set a single input key
  • on_outputs_change(callback) — register a callback for output changes
  • on_saved_url_change(callback) — register a callback for when the user creates an expiring snapshot (/j/<sha256>) inside the widget
  • pipe_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.

Metadata

Release files for framejs 0.5.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for framejs 0.5.3
File Size Uploaded
framejs-0.5.3.tar.gz 9.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for framejs 0.5.3
File Interpreter ABI Platform
framejs-0.5.3-py3-none-any.whl Python 3 none any Details

Total release size: 19.4 kB

Release files / framejs-0.5.3.tar.gz

Download URL framejs-0.5.3.tar.gz
Size 9.9 kB
Tags Source
SHA-256 checksum
How to use checksums
ee33ce7be7e7c3b3f2e47eb5644b5a98b4b56b654faf292a2f7ab73916b9cdda
BLAKE2b-256 checksum
How to use checksums
ab9aad189cdc7f722537dcab50ae41a753e8d6200d7f1cecefaf44fd75a87b57
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

Release files / framejs-0.5.3-py3-none-any.whl

Download URL framejs-0.5.3-py3-none-any.whl
Size 9.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c2464de46722c81333e3ab8d51d23c562f1d85a19f99819260bf106894bcab1a
BLAKE2b-256 checksum
How to use checksums
e804572de333fd05b42b31d19df10cc907c9920e0f9852c93fd3e854881e1d8b
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

Release history Release notifications | RSS feed

This release

0.5.3 This release

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.4.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page