<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: marimo</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/marimo.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2025-10-31T13:57:51+00:00</updated><author><name>Simon Willison</name></author><entry><title>CoreWeave adds Marimo to their 2025 acquisition spree</title><link href="https://simonwillison.net/2025/Oct/31/coreweave-acquires-marimo/#atom-tag" rel="alternate"/><published>2025-10-31T13:57:51+00:00</published><updated>2025-10-31T13:57:51+00:00</updated><id>https://simonwillison.net/2025/Oct/31/coreweave-acquires-marimo/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://marimo.io/blog/joining-coreweave"&gt;Marimo is Joining CoreWeave&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I don't usually cover startup acquisitions here, but this one feels relevant to several of my interests.&lt;/p&gt;
&lt;p&gt;Marimo (&lt;a href="https://simonwillison.net/tags/marimo/"&gt;previously&lt;/a&gt;) provide an open source (Apache 2 licensed) notebook tool for Python, with first-class support for an additional WebAssembly build plus an optional hosted service. It's effectively a reimagining of Jupyter notebooks as a reactive system, where cells automatically update based on changes to other cells - similar to how &lt;a href="https://observablehq.com/"&gt;Observable&lt;/a&gt; JavaScript notebooks work.&lt;/p&gt;
&lt;p&gt;The first public Marimo release was in January 2024 and the tool has "been in development since 2022" (&lt;a href="https://news.ycombinator.com/item?id=44304607#44330375"&gt;source&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;CoreWeave are a &lt;em&gt;big&lt;/em&gt; player in the AI data center space. They started out as an Ethereum mining company in 2017, then pivoted to cloud computing infrastructure for AI companies after the 2018 cryptocurrency crash. They IPOd in March 2025 and today they operate more than 30 data centers worldwide and have announced a number of eye-wateringly sized deals with companies such as Cohere and OpenAI. I found &lt;a href="https://en.wikipedia.org/wiki/CoreWeave"&gt;their Wikipedia page&lt;/a&gt; very helpful.&lt;/p&gt;
&lt;p&gt;They've also been on an acquisition spree this year, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Weights &amp;amp; Biases &lt;a href="https://www.coreweave.com/blog/coreweave-completes-acquisition-of-weights-biases"&gt;in March 2025&lt;/a&gt; (deal closed in May), the AI training observability platform.&lt;/li&gt;
&lt;li&gt;OpenPipe &lt;a href="https://www.coreweave.com/news/coreweave-to-acquire-openpipe-leader-in-reinforcement-learning"&gt;in September 2025&lt;/a&gt; - a reinforcement learning platform, authors of the &lt;a href="https://github.com/OpenPipe/ART"&gt;Agent Reinforcement Trainer&lt;/a&gt; Apache 2 licensed open source RL framework.&lt;/li&gt;
&lt;li&gt;Monolith AI &lt;a href="https://investors.coreweave.com/news/news-details/2025/CoreWeave-to-Acquire-Monolith-Expanding-AI-Cloud-Platform-into-Industrial-Innovation/default.aspx"&gt;in October 2025&lt;/a&gt;, a UK-based AI model SaaS platform focused on AI for engineering and industrial manufacturing.&lt;/li&gt;
&lt;li&gt;And now Marimo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Marimo's own announcement emphasizes continued investment in that tool:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Marimo is joining CoreWeave. We’re continuing to build the open-source marimo notebook, while also leveling up molab with serious compute. Our long-term mission remains the same: to build the world’s best open-source programming environment for working with data.&lt;/p&gt;
&lt;p&gt;marimo is, and always will be, free, open-source, and permissively licensed.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Give CoreWeave's buying spree only really started this year it's impossible to say how well these acquisitions are likely to play out - they haven't yet established a track record.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://x.com/marimo_io/status/1983916371869364622"&gt;@marimo_io&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/entrepreneurship"&gt;entrepreneurship&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/startups"&gt;startups&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jupyter"&gt;jupyter&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/marimo"&gt;marimo&lt;/a&gt;&lt;/p&gt;



</summary><category term="entrepreneurship"/><category term="open-source"/><category term="python"/><category term="startups"/><category term="ai"/><category term="jupyter"/><category term="marimo"/></entry><entry><title>marimo v0.9.0 with mo.ui.chat</title><link href="https://simonwillison.net/2024/Oct/5/marimo-v090-with-mouichat/#atom-tag" rel="alternate"/><published>2024-10-05T22:59:42+00:00</published><updated>2024-10-05T22:59:42+00:00</updated><id>https://simonwillison.net/2024/Oct/5/marimo-v090-with-mouichat/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://marimo.io/blog/marimo-0-9-0"&gt;marimo v0.9.0 with mo.ui.chat&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The latest release of the Marimo Python reactive notebook project includes a neat new feature: you can now easily embed a custom chat interface directly inside of your notebook.&lt;/p&gt;
&lt;p&gt;Marimo co-founder Myles Scolnick &lt;a href="https://twitter.com/themylesfiles/status/1842278470929318283"&gt;posted this intriguing demo&lt;/a&gt; on Twitter, demonstrating a chat interface to my &lt;a href="https://llm.datasette.io/"&gt;LLM library&lt;/a&gt; “in only 3 lines of code”:&lt;/p&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-s1"&gt;marimo&lt;/span&gt; &lt;span class="pl-k"&gt;as&lt;/span&gt; &lt;span class="pl-s1"&gt;mo&lt;/span&gt;
&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-s1"&gt;llm&lt;/span&gt;

&lt;span class="pl-s1"&gt;model&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-s1"&gt;llm&lt;/span&gt;.&lt;span class="pl-en"&gt;get_model&lt;/span&gt;()
&lt;span class="pl-s1"&gt;conversation&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-s1"&gt;model&lt;/span&gt;.&lt;span class="pl-en"&gt;conversation&lt;/span&gt;()
&lt;span class="pl-s1"&gt;mo&lt;/span&gt;.&lt;span class="pl-s1"&gt;ui&lt;/span&gt;.&lt;span class="pl-en"&gt;chat&lt;/span&gt;(&lt;span class="pl-k"&gt;lambda&lt;/span&gt; &lt;span class="pl-s1"&gt;messages&lt;/span&gt;: &lt;span class="pl-s1"&gt;conversation&lt;/span&gt;.&lt;span class="pl-en"&gt;prompt&lt;/span&gt;(&lt;span class="pl-s1"&gt;messages&lt;/span&gt;[&lt;span class="pl-c1"&gt;-&lt;/span&gt;&lt;span class="pl-c1"&gt;1&lt;/span&gt;].&lt;span class="pl-s1"&gt;content&lt;/span&gt;))&lt;/pre&gt;

&lt;p&gt;I tried that out today - here’s the result:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Screenshot of a Marimo notebook editor, with lines of code and an embedded chat interface. Top: import marimo as mo and import llm. Middle: Chat messages - User: Hi there, Three jokes about pelicans. AI: Hello! How can I assist you today?, Sure! Here are three pelican jokes for you: 1. Why do pelicans always carry a suitcase? Because they have a lot of baggage to handle! 2. What do you call a pelican that can sing? A tune-ican! 3. Why did the pelican break up with his girlfriend? She said he always had his head in the clouds and never winged it! Hope these made you smile! Bottom code: model = llm.get_model(), conversation = model.conversation(), mo.ui.chat(lambda messages:, conversation.prompt(messages[-1].content))" src="https://static.simonwillison.net/static/2024/marimo-pelican-jokes.jpg"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://docs.marimo.io/api/inputs/chat.html"&gt;marimo.ui.chat()&lt;/a&gt; takes a function which is passed a list of Marimo chat messages (representing the current state of that widget) and returns a string - or other type of renderable object - to add as the next message in the chat. This makes it trivial to hook in any custom chat mechanism you like.&lt;/p&gt;
&lt;p&gt;Marimo also ship their own &lt;a href="https://docs.marimo.io/api/inputs/chat.html#using-a-built-in-ai-model"&gt;built-in chat handlers&lt;/a&gt; for OpenAI, Anthropic and Google Gemini which you can use like this:&lt;/p&gt;
&lt;pre&gt;&lt;span class="pl-s1"&gt;mo&lt;/span&gt;.&lt;span class="pl-s1"&gt;ui&lt;/span&gt;.&lt;span class="pl-en"&gt;chat&lt;/span&gt;(
    &lt;span class="pl-s1"&gt;mo&lt;/span&gt;.&lt;span class="pl-s1"&gt;ai&lt;/span&gt;.&lt;span class="pl-s1"&gt;llm&lt;/span&gt;.&lt;span class="pl-en"&gt;anthropic&lt;/span&gt;(
        &lt;span class="pl-s"&gt;"claude-3-5-sonnet-20240620"&lt;/span&gt;,
        &lt;span class="pl-s1"&gt;system_message&lt;/span&gt;&lt;span class="pl-c1"&gt;=&lt;/span&gt;&lt;span class="pl-s"&gt;"You are a helpful assistant."&lt;/span&gt;,
        &lt;span class="pl-s1"&gt;api_key&lt;/span&gt;&lt;span class="pl-c1"&gt;=&lt;/span&gt;&lt;span class="pl-s"&gt;"sk-ant-..."&lt;/span&gt;,
    ),
    &lt;span class="pl-s1"&gt;show_configuration_controls&lt;/span&gt;&lt;span class="pl-c1"&gt;=&lt;/span&gt;&lt;span class="pl-c1"&gt;True&lt;/span&gt;
)&lt;/pre&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm"&gt;llm&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/marimo"&gt;marimo&lt;/a&gt;&lt;/p&gt;



</summary><category term="python"/><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="llm"/><category term="marimo"/></entry><entry><title>Serializing package requirements in marimo notebooks</title><link href="https://simonwillison.net/2024/Sep/17/serializing-package-requirements-in-marimo-notebooks/#atom-tag" rel="alternate"/><published>2024-09-17T18:06:46+00:00</published><updated>2024-09-17T18:06:46+00:00</updated><id>https://simonwillison.net/2024/Sep/17/serializing-package-requirements-in-marimo-notebooks/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://marimo.io/blog/sandboxed-notebooks"&gt;Serializing package requirements in marimo notebooks&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The &lt;a href="https://github.com/marimo-team/marimo/releases/tag/0.8.15"&gt;latest release&lt;/a&gt; of &lt;a href="https://marimo.io/"&gt;Marimo&lt;/a&gt; - a reactive alternative to Jupyter notebooks - has a very neat new feature enabled by its integration with &lt;a href="https://docs.astral.sh/uv/"&gt;uv&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;One of marimo’s goals is to make notebooks reproducible, down to the packages used in them. To that end, it’s now possible to create marimo notebooks that have their package requirements serialized into them as a top-level comment.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This takes advantage of the &lt;a href="https://peps.python.org/pep-0723/"&gt;PEP 723&lt;/a&gt; inline metadata mechanism, where a code comment at the top of a Python file can list package dependencies (and their versions).&lt;/p&gt;
&lt;p&gt;I tried this out by installing &lt;code&gt;marimo&lt;/code&gt; using &lt;code&gt;uv&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;uv tool install --python=3.12 marimo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then grabbing one of &lt;a href="https://github.com/marimo-team/spotlights"&gt;their example notebooks&lt;/a&gt;: &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget 'https://raw.githubusercontent.com/marimo-team/spotlights/main/001-anywidget/tldraw_colorpicker.py'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And running it in a fresh dependency sandbox like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;marimo run --sandbox tldraw_colorpicker.py
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Also neat is that when editing a notebook using &lt;code&gt;marimo edit&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;marimo edit --sandbox notebook.py
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Just importing a missing package is enough for Marimo to prompt to add that to the dependencies - at which point it automatically adds that package to the comment at the top of the file:&lt;/p&gt;
&lt;p&gt;&lt;img class="blogmark-image" style="width: 90%" alt="In the Marimo editor, running import httpx opens a dialog that offers to install that using pip or another chosen package manager" src="https://static.simonwillison.net/static/2024/marimo-httpx.jpg"&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/uv"&gt;uv&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/marimo"&gt;marimo&lt;/a&gt;&lt;/p&gt;



</summary><category term="python"/><category term="uv"/><category term="marimo"/></entry><entry><title>marimo.app</title><link href="https://simonwillison.net/2024/Jun/29/marimo-app/#atom-tag" rel="alternate"/><published>2024-06-29T23:07:42+00:00</published><updated>2024-06-29T23:07:42+00:00</updated><id>https://simonwillison.net/2024/Jun/29/marimo-app/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://marimo.app/"&gt;marimo.app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The Marimo reactive notebook (&lt;a href="https://simonwillison.net/2024/Jan/12/marimo/"&gt;previously&lt;/a&gt;) - a Python notebook that's effectively a cross between Jupyter and Observable - now also has a version that runs entirely in your browser using WebAssembly and Pyodide. Here's &lt;a href="https://docs.marimo.io/guides/wasm.html"&gt;the documentation&lt;/a&gt;.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jupyter"&gt;jupyter&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/observable"&gt;observable&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webassembly"&gt;webassembly&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pyodide"&gt;pyodide&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/marimo"&gt;marimo&lt;/a&gt;&lt;/p&gt;



</summary><category term="python"/><category term="jupyter"/><category term="observable"/><category term="webassembly"/><category term="pyodide"/><category term="marimo"/></entry><entry><title>Marimo</title><link href="https://simonwillison.net/2024/Jan/12/marimo/#atom-tag" rel="alternate"/><published>2024-01-12T21:17:57+00:00</published><updated>2024-01-12T21:17:57+00:00</updated><id>https://simonwillison.net/2024/Jan/12/marimo/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://marimo.io/"&gt;Marimo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
This is a really interesting new twist on Python notebooks.&lt;/p&gt;

&lt;p&gt;The most powerful feature is that these notebooks are reactive: if you change the value or code in a cell (or change the value in an input widget) every other cell that depends on that value will update automatically. It’s the same pattern implemented by Observable JavaScript notebooks, but now it works for Python.&lt;/p&gt;

&lt;p&gt;There are a bunch of other nice touches too. The notebook file format is a regular Python file, and those files can be run as “applications” in addition to being edited in the notebook interface. The interface is very nicely built, especially for such a young project—they even have GitHub Copilot integration for their CodeMirror cell editors.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=38971966"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jupyter"&gt;jupyter&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/observable"&gt;observable&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/github-copilot"&gt;github-copilot&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/marimo"&gt;marimo&lt;/a&gt;&lt;/p&gt;



</summary><category term="open-source"/><category term="python"/><category term="jupyter"/><category term="observable"/><category term="github-copilot"/><category term="marimo"/></entry></feed>