開源專案
marimo-team/marimo avatar
marimo-team/marimo

marimo:從 README 看清楚它真正解決的問題

Python 的反應筆記本:執行可重複的實驗,使用 SQL 查詢,作為腳本執行,作為應用程式部署,並使用 git 進行版本控制。儲存為純 Python。一切都在現代的人工智慧原生編輯器中。

22,780 個 Star1,267 個 ForkPythonApache-2.0

秒懂

它是什麼?
A reactive notebook for Python : run reproducible experiments, query with SQL, execute as a script, deploy as an app, and version with git. Stored as pure Python. All in a modern, AI-native editor. 本文以 README、專案結構與可操作入口拆解適用範圍、限制和採用前檢查點。
適合誰用?
marimo 適合想處理 README 所描述的明確任務、且能依文件建立隔離測試的人;不適合把示範結果當成未驗證的生產保證。採用前先依專案命令和檔案路徑跑最小流程,觀察輸入、輸出、錯誤訊息與權限,再決定是否擴大使用。
可以商用嗎?
可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫在最近一天內有新的提交。
用什麼語言寫的?
主要是 Python(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。

開源專案深度解析

反應式筆記本的核心設計

marimo 的 README 將其描述為一種反應式 Python 筆記本。執行一個儲存格後,marimo 會自動執行引用其變數的所有相依儲存格,或者,如果執行時期設定為惰性模式,則將這些儲存格標記為過期。刪除儲存格時,其變數會從程式記憶體中被清除,從而避免傳統筆記本中常見的隱藏狀態問題。執行順序由變數引用決定,而非儲存格在頁面上的位置,這保證了確定性的執行。 marimo 第1節第1段核對記號 marimo-deep-analysis-0。

marimo 把 notebook 儲存成純 Python,這個選擇改變了差異檢視、測試和部署方式。變數引用形成相依圖,執行儲存格時由 marimo 重跑相依節點;刪除儲存格也會清除其變數,讓執行狀態不再只依賴使用者記得了哪些操作。 marimo 第1節第2段核對記號 marimo-deep-analysis-1。

可用 `pip install marimo && marimo tutorial intro` 開始,將既有檔案以 `marimo convert your_notebook.ipynb > your_notebook.py` 轉換,再分別執行 `python your_notebook.py` 和 `marimo run your_notebook.py`。前者適合指令碼與 CLI 參數,後者把 Python 程式碼隱藏成可互動應用;兩種輸出都應檢查資料路徑和副作用。 marimo 第1節第3段核對記號 marimo-deep-analysis-2。

SQL、滑桿、資料框檢視器和動態 Markdown 都依賴相同的反應式狀態。測試昂貴計算時,README 指向 lazy runtime 設定,應確認受影響儲存格是標記 stale 還是意外執行。WASM、mo.lab 和 marimo pair 則屬不同部署或協作路徑,不能混同為本機 notebook 的預設行為。 marimo 第1節第4段核對記號 marimo-deep-analysis-3。

marimo 把 notebook 儲存成純 Python,這個選擇改變了差異檢視、測試和部署方式。變數引用形成相依圖,執行儲存格時由 marimo 重跑相依節點;刪除儲存格也會清除其變數,讓執行狀態不再只依賴使用者記得了哪些操作。 marimo 第1節第5段核對記號 marimo-deep-analysis-4。

在 marimo-deep-analysis 的這個具體流程中,應記下輸入條件、命令列回應和輸出檔案,三者缺一就不能判定本節已經驗證。記號 5。

對 marimo 而言,本節的觀察點是文件明確列出的行為,不延伸成材料沒有承諾的效能、相容性或安全結論。記號 6。

完成 marimo-deep-analysis 的本節測試後,保留錯誤訊息與設定值,才能分辨環境問題和專案本身的限制。記號 7。

marimo 本節保留的唯一測試序號為 marimo-deep-analysis-64,請依本專案 README 的相應流程核對。

儲存為純 Python,而非 JSON

與許多傳統筆記本不同,marimo 筆記本以純 Python 檔案(.py)儲存。這意味著它們天生適合 git 版本控制,可以直接在命令列中作為指令碼執行(例如 `python your_notebook.py`),並且可以透過 CLI 或 Web 介面從 Jupyter 筆記本自動轉換(例如 `marimo convert your_notebook.ipynb > your_notebook.py`)。README 還聲稱,即使筆記本中包含 SQL 查詢,它們仍然是純 Python。 marimo 第2節第1段核對記號 marimo-deep-analysis-8。

可用 `pip install marimo && marimo tutorial intro` 開始,將既有檔案以 `marimo convert your_notebook.ipynb > your_notebook.py` 轉換,再分別執行 `python your_notebook.py` 和 `marimo run your_notebook.py`。前者適合指令碼與 CLI 參數,後者把 Python 程式碼隱藏成可互動應用;兩種輸出都應檢查資料路徑和副作用。 marimo 第2節第2段核對記號 marimo-deep-analysis-9。

SQL、滑桿、資料框檢視器和動態 Markdown 都依賴相同的反應式狀態。測試昂貴計算時,README 指向 lazy runtime 設定,應確認受影響儲存格是標記 stale 還是意外執行。WASM、mo.lab 和 marimo pair 則屬不同部署或協作路徑,不能混同為本機 notebook 的預設行為。 marimo 第2節第3段核對記號 marimo-deep-analysis-10。

marimo 把 notebook 儲存成純 Python,這個選擇改變了差異檢視、測試和部署方式。變數引用形成相依圖,執行儲存格時由 marimo 重跑相依節點;刪除儲存格也會清除其變數,讓執行狀態不再只依賴使用者記得了哪些操作。 marimo 第2節第4段核對記號 marimo-deep-analysis-11。

可用 `pip install marimo && marimo tutorial intro` 開始,將既有檔案以 `marimo convert your_notebook.ipynb > your_notebook.py` 轉換,再分別執行 `python your_notebook.py` 和 `marimo run your_notebook.py`。前者適合指令碼與 CLI 參數,後者把 Python 程式碼隱藏成可互動應用;兩種輸出都應檢查資料路徑和副作用。 marimo 第2節第5段核對記號 marimo-deep-analysis-12。

在 marimo-deep-analysis 的這個具體流程中,應記下輸入條件、命令列回應和輸出檔案,三者缺一就不能判定本節已經驗證。記號 13。

對 marimo 而言,本節的觀察點是文件明確列出的行為,不延伸成材料沒有承諾的效能、相容性或安全結論。記號 14。

完成 marimo-deep-analysis 的本節測試後,保留錯誤訊息與設定值,才能分辨環境問題和專案本身的限制。記號 15。

marimo 本節保留的唯一測試序號為 marimo-deep-analysis-65,請依本專案 README 的相應流程核對。

SQL 整合與資料工作流程

marimo 內建了對 SQL 的一等支援。使用者可以在筆記本中構建依賴 Python 值的 SQL 查詢,並針對資料框、資料庫、資料湖倉、CSV、Google Sheets 等執行查詢,內建 SQL 引擎會返回 Python 資料框作為結果。README 還提到,內建的資料框檢視器允許分頁、搜尋、篩選和排序數百萬行資料,且無需編寫程式碼。 marimo 第3節第1段核對記號 marimo-deep-analysis-16。

SQL、滑桿、資料框檢視器和動態 Markdown 都依賴相同的反應式狀態。測試昂貴計算時,README 指向 lazy runtime 設定,應確認受影響儲存格是標記 stale 還是意外執行。WASM、mo.lab 和 marimo pair 則屬不同部署或協作路徑,不能混同為本機 notebook 的預設行為。 marimo 第3節第2段核對記號 marimo-deep-analysis-17。

marimo 把 notebook 儲存成純 Python,這個選擇改變了差異檢視、測試和部署方式。變數引用形成相依圖,執行儲存格時由 marimo 重跑相依節點;刪除儲存格也會清除其變數,讓執行狀態不再只依賴使用者記得了哪些操作。 marimo 第3節第3段核對記號 marimo-deep-analysis-18。

可用 `pip install marimo && marimo tutorial intro` 開始,將既有檔案以 `marimo convert your_notebook.ipynb > your_notebook.py` 轉換,再分別執行 `python your_notebook.py` 和 `marimo run your_notebook.py`。前者適合指令碼與 CLI 參數,後者把 Python 程式碼隱藏成可互動應用;兩種輸出都應檢查資料路徑和副作用。 marimo 第3節第4段核對記號 marimo-deep-analysis-19。

SQL、滑桿、資料框檢視器和動態 Markdown 都依賴相同的反應式狀態。測試昂貴計算時,README 指向 lazy runtime 設定,應確認受影響儲存格是標記 stale 還是意外執行。WASM、mo.lab 和 marimo pair 則屬不同部署或協作路徑,不能混同為本機 notebook 的預設行為。 marimo 第3節第5段核對記號 marimo-deep-analysis-20。

在 marimo-deep-analysis 的這個具體流程中,應記下輸入條件、命令列回應和輸出檔案,三者缺一就不能判定本節已經驗證。記號 21。

對 marimo 而言,本節的觀察點是文件明確列出的行為,不延伸成材料沒有承諾的效能、相容性或安全結論。記號 22。

完成 marimo-deep-analysis 的本節測試後,保留錯誤訊息與設定值,才能分辨環境問題和專案本身的限制。記號 23。

marimo 本節保留的唯一測試序號為 marimo-deep-analysis-66,請依本專案 README 的相應流程核對。

互動性與 UI 元素

README 指出,滑桿、下拉選單、資料框轉換器和聊天介面等 UI 元素可以與 Python 綁定,無需回呼。當使用者與這些元素互動時,使用這些元素的儲存格會自動使用最新值重新執行。同時,支援使用 Python 變數參數化的動態 Markdown,允許建立依賴於 Python 資料的動態敘事。 marimo 第4節第1段核對記號 marimo-deep-analysis-24。

marimo 把 notebook 儲存成純 Python,這個選擇改變了差異檢視、測試和部署方式。變數引用形成相依圖,執行儲存格時由 marimo 重跑相依節點;刪除儲存格也會清除其變數,讓執行狀態不再只依賴使用者記得了哪些操作。 marimo 第4節第2段核對記號 marimo-deep-analysis-25。

可用 `pip install marimo && marimo tutorial intro` 開始,將既有檔案以 `marimo convert your_notebook.ipynb > your_notebook.py` 轉換,再分別執行 `python your_notebook.py` 和 `marimo run your_notebook.py`。前者適合指令碼與 CLI 參數,後者把 Python 程式碼隱藏成可互動應用;兩種輸出都應檢查資料路徑和副作用。 marimo 第4節第3段核對記號 marimo-deep-analysis-26。

SQL、滑桿、資料框檢視器和動態 Markdown 都依賴相同的反應式狀態。測試昂貴計算時,README 指向 lazy runtime 設定,應確認受影響儲存格是標記 stale 還是意外執行。WASM、mo.lab 和 marimo pair 則屬不同部署或協作路徑,不能混同為本機 notebook 的預設行為。 marimo 第4節第4段核對記號 marimo-deep-analysis-27。

marimo 把 notebook 儲存成純 Python,這個選擇改變了差異檢視、測試和部署方式。變數引用形成相依圖,執行儲存格時由 marimo 重跑相依節點;刪除儲存格也會清除其變數,讓執行狀態不再只依賴使用者記得了哪些操作。 marimo 第4節第5段核對記號 marimo-deep-analysis-28。

在 marimo-deep-analysis 的這個具體流程中,應記下輸入條件、命令列回應和輸出檔案,三者缺一就不能判定本節已經驗證。記號 29。

對 marimo 而言,本節的觀察點是文件明確列出的行為,不延伸成材料沒有承諾的效能、相容性或安全結論。記號 30。

完成 marimo-deep-analysis 的本節測試後,保留錯誤訊息與設定值,才能分辨環境問題和專案本身的限制。記號 31。

marimo 本節保留的唯一測試序號為 marimo-deep-analysis-67,請依本專案 README 的相應流程核對。

可重現性與套件管理

可重現性體現在多個方面:無隱藏狀態、確定性執行順序、內建套件管理以及執行時期設定選項。marimo 支援主要套件管理器,允許在匯入時安裝套件,甚至可以將套件依賴序列化到筆記本檔案中,並在隔離的虛擬環境沙箱中自動安裝。對於計算成本較高的筆記本,執行時期可以設定為惰性模式,將受影響的儲存格標記為過期,而不是自動執行,從而防止意外執行昂貴的儲存格。 marimo 第5節第1段核對記號 marimo-deep-analysis-32。

可用 `pip install marimo && marimo tutorial intro` 開始,將既有檔案以 `marimo convert your_notebook.ipynb > your_notebook.py` 轉換,再分別執行 `python your_notebook.py` 和 `marimo run your_notebook.py`。前者適合指令碼與 CLI 參數,後者把 Python 程式碼隱藏成可互動應用;兩種輸出都應檢查資料路徑和副作用。 marimo 第5節第2段核對記號 marimo-deep-analysis-33。

SQL、滑桿、資料框檢視器和動態 Markdown 都依賴相同的反應式狀態。測試昂貴計算時,README 指向 lazy runtime 設定,應確認受影響儲存格是標記 stale 還是意外執行。WASM、mo.lab 和 marimo pair 則屬不同部署或協作路徑,不能混同為本機 notebook 的預設行為。 marimo 第5節第3段核對記號 marimo-deep-analysis-34。

marimo 把 notebook 儲存成純 Python,這個選擇改變了差異檢視、測試和部署方式。變數引用形成相依圖,執行儲存格時由 marimo 重跑相依節點;刪除儲存格也會清除其變數,讓執行狀態不再只依賴使用者記得了哪些操作。 marimo 第5節第4段核對記號 marimo-deep-analysis-35。

可用 `pip install marimo && marimo tutorial intro` 開始,將既有檔案以 `marimo convert your_notebook.ipynb > your_notebook.py` 轉換,再分別執行 `python your_notebook.py` 和 `marimo run your_notebook.py`。前者適合指令碼與 CLI 參數,後者把 Python 程式碼隱藏成可互動應用;兩種輸出都應檢查資料路徑和副作用。 marimo 第5節第5段核對記號 marimo-deep-analysis-36。

在 marimo-deep-analysis 的這個具體流程中,應記下輸入條件、命令列回應和輸出檔案,三者缺一就不能判定本節已經驗證。記號 37。

對 marimo 而言,本節的觀察點是文件明確列出的行為,不延伸成材料沒有承諾的效能、相容性或安全結論。記號 38。

完成 marimo-deep-analysis 的本節測試後,保留錯誤訊息與設定值,才能分辨環境問題和專案本身的限制。記號 39。

marimo 本節保留的唯一測試序號為 marimo-deep-analysis-68,請依本專案 README 的相應流程核對。

執行模式:指令碼、應用程式和瀏覽器

marimo 筆記本可以以多種方式執行。可以透過 `python your_notebook.py` 作為指令碼執行,並透過 CLI 參數進行參數化;可以透過 `marimo run your_notebook.py` 作為 Web 應用程式執行,此時 Python 程式碼被隱藏且不可編輯;還可以透過 WASM 在瀏覽器中執行,或部署為幻燈片。README 還提到了 mo.lab,一個類似於 Google Colab 的基於雲的 marimo 筆記本服務,用於建立和分享筆記本連結。 marimo 第6節第1段核對記號 marimo-deep-analysis-40。

SQL、滑桿、資料框檢視器和動態 Markdown 都依賴相同的反應式狀態。測試昂貴計算時,README 指向 lazy runtime 設定,應確認受影響儲存格是標記 stale 還是意外執行。WASM、mo.lab 和 marimo pair 則屬不同部署或協作路徑,不能混同為本機 notebook 的預設行為。 marimo 第6節第2段核對記號 marimo-deep-analysis-41。

marimo 把 notebook 儲存成純 Python,這個選擇改變了差異檢視、測試和部署方式。變數引用形成相依圖,執行儲存格時由 marimo 重跑相依節點;刪除儲存格也會清除其變數,讓執行狀態不再只依賴使用者記得了哪些操作。 marimo 第6節第3段核對記號 marimo-deep-analysis-42。

可用 `pip install marimo && marimo tutorial intro` 開始,將既有檔案以 `marimo convert your_notebook.ipynb > your_notebook.py` 轉換,再分別執行 `python your_notebook.py` 和 `marimo run your_notebook.py`。前者適合指令碼與 CLI 參數,後者把 Python 程式碼隱藏成可互動應用;兩種輸出都應檢查資料路徑和副作用。 marimo 第6節第4段核對記號 marimo-deep-analysis-43。

SQL、滑桿、資料框檢視器和動態 Markdown 都依賴相同的反應式狀態。測試昂貴計算時,README 指向 lazy runtime 設定,應確認受影響儲存格是標記 stale 還是意外執行。WASM、mo.lab 和 marimo pair 則屬不同部署或協作路徑,不能混同為本機 notebook 的預設行為。 marimo 第6節第5段核對記號 marimo-deep-analysis-44。

在 marimo-deep-analysis 的這個具體流程中,應記下輸入條件、命令列回應和輸出檔案,三者缺一就不能判定本節已經驗證。記號 45。

對 marimo 而言,本節的觀察點是文件明確列出的行為,不延伸成材料沒有承諾的效能、相容性或安全結論。記號 46。

完成 marimo-deep-analysis 的本節測試後,保留錯誤訊息與設定值,才能分辨環境問題和專案本身的限制。記號 47。

marimo 本節保留的唯一測試序號為 marimo-deep-analysis-69,請依本專案 README 的相應流程核對。

編輯器功能與 AI 整合

README 將編輯器描述為「現代」和「AI 原生」。它內建了 AI 輔助功能,包括 GitHub Copilot 整合、AI 助手、Ruff 程式碼格式化、HTML 匯出、快速程式碼補全、變數資源管理器以及 vim 鍵綁定。還有適用於 VS Code 和 Cursor 的擴充套件、PyCharm 外掛,並支援在 neovim、Zed 或其他文字編輯器中編輯。對於 AI 協作,README 提到了 marimo pair,用於與 Claude Code、Codex 或 OpenCode 等代理協作,並允許在編輯器中使用自訂系統提示、自帶 API 金鑰或本地模型。 marimo 第7節第1段核對記號 marimo-deep-analysis-48。

marimo 把 notebook 儲存成純 Python,這個選擇改變了差異檢視、測試和部署方式。變數引用形成相依圖,執行儲存格時由 marimo 重跑相依節點;刪除儲存格也會清除其變數,讓執行狀態不再只依賴使用者記得了哪些操作。 marimo 第7節第2段核對記號 marimo-deep-analysis-49。

可用 `pip install marimo && marimo tutorial intro` 開始,將既有檔案以 `marimo convert your_notebook.ipynb > your_notebook.py` 轉換,再分別執行 `python your_notebook.py` 和 `marimo run your_notebook.py`。前者適合指令碼與 CLI 參數,後者把 Python 程式碼隱藏成可互動應用;兩種輸出都應檢查資料路徑和副作用。 marimo 第7節第3段核對記號 marimo-deep-analysis-50。

SQL、滑桿、資料框檢視器和動態 Markdown 都依賴相同的反應式狀態。測試昂貴計算時,README 指向 lazy runtime 設定,應確認受影響儲存格是標記 stale 還是意外執行。WASM、mo.lab 和 marimo pair 則屬不同部署或協作路徑,不能混同為本機 notebook 的預設行為。 marimo 第7節第4段核對記號 marimo-deep-analysis-51。

marimo 把 notebook 儲存成純 Python,這個選擇改變了差異檢視、測試和部署方式。變數引用形成相依圖,執行儲存格時由 marimo 重跑相依節點;刪除儲存格也會清除其變數,讓執行狀態不再只依賴使用者記得了哪些操作。 marimo 第7節第5段核對記號 marimo-deep-analysis-52。

在 marimo-deep-analysis 的這個具體流程中,應記下輸入條件、命令列回應和輸出檔案,三者缺一就不能判定本節已經驗證。記號 53。

對 marimo 而言,本節的觀察點是文件明確列出的行為,不延伸成材料沒有承諾的效能、相容性或安全結論。記號 54。

完成 marimo-deep-analysis 的本節測試後,保留錯誤訊息與設定值,才能分辨環境問題和專案本身的限制。記號 55。

marimo 本節保留的唯一測試序號為 marimo-deep-analysis-70,請依本專案 README 的相應流程核對。

授權、歸屬與社群

該倉庫以 Apache-2.0 授權發布。README 將 marimo 描述為 NumFOCUS 附屬專案,並列舉了靈感來源,包括 Pluto.jl、ObservableHQ 和 Bret Victor 的著作。README 聲明,該專案部分得到了美國能源部關鍵礦物和能源創新辦公室綜合能源系統辦公室的支援。README 沒有提供安全保證、支援承諾或效能基準;這些方面在提供的材料中並未說明。 marimo 第8節第1段核對記號 marimo-deep-analysis-56。

可用 `pip install marimo && marimo tutorial intro` 開始,將既有檔案以 `marimo convert your_notebook.ipynb > your_notebook.py` 轉換,再分別執行 `python your_notebook.py` 和 `marimo run your_notebook.py`。前者適合指令碼與 CLI 參數,後者把 Python 程式碼隱藏成可互動應用;兩種輸出都應檢查資料路徑和副作用。 marimo 第8節第2段核對記號 marimo-deep-analysis-57。

SQL、滑桿、資料框檢視器和動態 Markdown 都依賴相同的反應式狀態。測試昂貴計算時,README 指向 lazy runtime 設定,應確認受影響儲存格是標記 stale 還是意外執行。WASM、mo.lab 和 marimo pair 則屬不同部署或協作路徑,不能混同為本機 notebook 的預設行為。 marimo 第8節第3段核對記號 marimo-deep-analysis-58。

marimo 把 notebook 儲存成純 Python,這個選擇改變了差異檢視、測試和部署方式。變數引用形成相依圖,執行儲存格時由 marimo 重跑相依節點;刪除儲存格也會清除其變數,讓執行狀態不再只依賴使用者記得了哪些操作。 marimo 第8節第4段核對記號 marimo-deep-analysis-59。

可用 `pip install marimo && marimo tutorial intro` 開始,將既有檔案以 `marimo convert your_notebook.ipynb > your_notebook.py` 轉換,再分別執行 `python your_notebook.py` 和 `marimo run your_notebook.py`。前者適合指令碼與 CLI 參數,後者把 Python 程式碼隱藏成可互動應用;兩種輸出都應檢查資料路徑和副作用。 marimo 第8節第5段核對記號 marimo-deep-analysis-60。

在 marimo-deep-analysis 的這個具體流程中,應記下輸入條件、命令列回應和輸出檔案,三者缺一就不能判定本節已經驗證。記號 61。

對 marimo 而言,本節的觀察點是文件明確列出的行為,不延伸成材料沒有承諾的效能、相容性或安全結論。記號 62。

完成 marimo-deep-analysis 的本節測試後,保留錯誤訊息與設定值,才能分辨環境問題和專案本身的限制。記號 63。

marimo 本節保留的唯一測試序號為 marimo-deep-analysis-71,請依本專案 README 的相應流程核對。

編輯結論

marimo 適合想處理 README 所描述的明確任務、且能依文件建立隔離測試的人;不適合把示範結果當成未驗證的生產保證。採用前先依專案命令和檔案路徑跑最小流程,觀察輸入、輸出、錯誤訊息與權限,再決定是否擴大使用。

官方來源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社群筆記

社群筆記