Richly display objects¶
marimo has built-in rich representations of many objects, including native
Python objects like lists and dicts as well as marimo objects like UI
elements and libraries, including matplotlib,
seaborn, Plotly, altair pandas, and more. These rich representations are
displayed for the last expression of a cell, or when using
mo.output.append
.
You can register rich displays with marimo for your own objects.
Option 1: Implement an IPython _repr_*_()
method¶
marimo can render objects that implement
IPython’s _repr_*_()
protocol
for rich display. Here is an example of implementing _repr_html_
, borrowed
from IPython’s documentation:
class Shout:
def __init__(self, text):
self.text = text
def _repr_html_(self):
return "<h1>" + self.text + "</h1>"
We support the following methods:
_repr_html_
_repr_mimebundle_
_repr_svg_
_repr_json_
_repr_png_
_repr_jpeg_
_repr_markdown_
_repr_latex_
_repr_text_
Option 2: Implement a _mime_
method¶
When displaying an object, marimo’s media viewer checks for the presence of a
method called _mime_
. This method should take no arguments and return
a tuple of two strings, the mime type and data to be displayed as a string.
Examples.
Option 3: Add a formatter to the marimo repo¶
The recommended way to render rich displays of objects in marimo is to
implement either the IPython _repr_*_()_
protocol or marimo’s _mime_()
protocol. If you are a a user of a library that does not render properly in
marimo, consider asking the library maintainers to implement one of these
protocols.
If it is not possible to implement a renderer protocol on the type you want displayed, we will consider contributions to add formatters to the marimo codebase. Look at our codebase for examples, then open a pull request.