To get updates like this one delivered to your inbox, subscribe to our newsletter.
Hi! 👋 You’re reading the seventh marimo newsletter.
This is your monthly reminder that at marimo, we’re on a mission to make the
world’s best programming environment for working with data, and it’s all free
and open source. Just pip install marimo
or uv add marimo
to get started!
Since the last newsletter was mailed three weeks ago, we’ve had 12 new releases, including one very big one: 0.9.0.
In this newsletter, we’ll highlight a few updates and new features we’re particularly excited about, as well as some amazing content from our community ❤️
New features
💾 Smart Caching
Contributed by Dylan Madisetti,
mo.persistent_cache
makes it possible for you to open a notebook and pick up where you
left off, with variables automatically loaded in memory. With persistent
caching, your notebook can start instantly, skipping expensive computations
that you’ve already completed and letting you manipulate variables you computed
in previous sessions. This feature has the potential to transform the way you
work with expensive notebooks.
Opting in to smart caching is as easy as:
mo.persistent_cache
is also accompanied by mo.cache
, a more robust
and capable variant of the well-known functools.cache
. Check out our
documentation to learn more.
💬 mo.ui.chat
v0.9.0 ships with a powerful new element: mo.ui.chat
. This element lets you
create a chat interface powered by custom logic or off-the-shelf models from
OpenAI, Anthropic, or Google. Because it’s reactive, the chatbot’s responses
are automatically made available in Python, letting you perform downstream
tasks with the model’s response.
Making a custom model is easy: just define a function that maps a list of chat messages and a config to the chat response.
For an advanced example, see how we built a chatbot that lets you ask questions about any GitHub repo, powered by the open-source project Sage.
We’re excited to see what you build!
📦 Package manager panel
marimo now ships with a package manager panel. From this panel, you can view
all packages installed in your environment, as well as add and remove packages.
When running with --sandbox
(sandboxed notebooks encapsulate their package dependencies, and marimo runs
them in an isolated venv
), adding and removing packages also updates your
notebook’s inline script metadata.
➡️ 🍃 From Jupyter to marimo
We’ve substantially improved marimo convert
, our conversion tool that
translates Jupyter notebooks to marimo notebooks. You no longer have to
resolve multiple definition errors on your own, and some popular magic commands
are replaced with marimo equivalents.
Try it at the command-line: marimo convert nb.ipynb -o nb.py
.
Converting from Jupyter to marimo gets you freebies like a much more powerful dataframe viewer and editor (including GitHub copilot, AI completion, and data source panels), with zero effort required on your part.
For those curious about internals: marimo convert
makes heavy use of marimo’s
internal static analysis module, the same module we use to parse marimo
notebooks into dataflow graphs.
Community
We have 59 contributors pushing code to marimo, up from 50 last month, and many more contributors reporting bugs, sharing feedback, and hanging with us on Discord — come chat with us!
Roundup
Here’s a roundup of cool things the marimo community has been up to in the past few weeks:
- 🎥 Engineering prompt libraries with marimo: In this YouTube video, IndyDevDan dives into using marimo for building reusable, interactive prompt libraries.
- 🎥 The next generation of Python notebooks: Learn why marimo is the first tool to make data analytics professional Jie Jenn excited about notebooks.
- 📝 Serializing package requirements in marimo notebooks: Simon Willison explains how marimo lets you save package requirements in the notebook file itself, and run notebooks with their environments automatically installed in a temporary venv --- a step change in notebook reusability.
- 📝 Creating interactive flow diagrams: In this post, Jan-Hendrik Müller shows how to create interactive flow diagrams with values synchronized to Python, using marimo and anywidget.
- ⌨️ Dylan Madisetti contributed smart caching, a set of new caching features that are transformative for working with expensive computations.
- ⌨️ Wasim Sandhu contributed many quality of life improvements as well as an exciting experimental feature that lets you lay out notebooks in multiple columns (stay tuned!).
- ⌨️ Alexander Kislukhin improved our support for the uv package manager
🌟 Spotlight on Mustjaab!
Each week on our socials and Discord, we put the spotlight on a member of the marimo community.
This week, we’re putting the spotlight on marimo community member
Muhammad Mustjaab. Mustjaab has been a member of our Discord for as long as we can
remember, and he’s shared over a dozen notebooks in our Share Your Notebook
channel, ranging from analyses of greenhouse gas emissions to an exploration
of Perplexity using mo.ui.chat
. Join our
Discord to check out these and other
notebooks that Mustjaab has contributed, and feel free to contribute your
own.
Thanks Mustjaab for building with us! 🙏
See the spotlights repo for previous weeks’ spotlights.
Examples
Finally, a small update: We’re building out examples in our GitHub repo; some examples are bite-sized tutorials, showing you how to use features like SQL or UI elements, while others illustrate the kinds of things you can build in marimo, like function-calling chatbots or data labelers. Every example is a sandboxed notebook, encapsulating its package requirements.
If you have an example to contribute, please file a pull request!
-Akshay & Myles