marimo
21K Star 的响应式 Python 笔记本,.py 文件存储 + DAG 自动依赖管理 + 一
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
21K Star 的响应式 Python 笔记本,.py 文件存储 + DAG 自动依赖管理 + 一
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你是否有过这样的经历:Jupyter Notebook 跑了一半,想改个参数重新跑,结果发现某个单元格的状态和预期不一致——变量还残留着之前的值,输出和代码对不上,整个人都懵了。这种"隐式状态"问题在数据探索时极其恼人,也是 Jupyter 最被诟病的痛点之一。
marimo 正是为解决这个根本性问题而生的。2026年5月最新版本 0.23.8,GitHub Star 突破 21,000,Fork 数超过 1,100,已经成为 Python 数据科学社区中最具影响力的新一代交互计算工具之一。它将"响应式编程"(Reactive Programming)引入 Python 笔记本,用 DAG(有向无环图)自动管理单元格之间的依赖关系,每次操作后自动重新运行所有受影响的单元格,从根本上消除了隐式状态带来的混乱。
图1:marimo 品牌标识
marimo 由前 Google 研究员创立,项目于 2023 年正式开源。其核心理念是"笔记本应该是可重现的、可版本控制的、可部署的"。与传统 Jupyter Notebook 的 .ipynb JSON 格式不同,marimo 笔记本直接存储为 .py 纯 Python 文件,天然兼容 Git diff,可以像普通代码一样进行代码审查和合并冲突。这解决了数据科学团队协作中最大的痛点——Notebook 合并冲突几乎不可维护的困境。
项目当前采用 monorepo 架构,核心代码在 marimo/ 目录下,包含 _server(Web 服务器)、_runtime(响应式执行引擎)、_ast(抽象语法树处理)、_plugins(UI 插件系统)等关键模块;前端使用 React + Tailwind CSS 构建在 frontend/ 中;同时维护了 packages/ 下的独立工具包:LSP(Language Server Protocol)、OpenAPI 代码生成、pytest_changed(仅测试已修改代码)等,形成了一个完整的开发者生态。
图2:marimo 响应式数据流依赖图,单元格之间的依赖关系清晰可见
可以把 marimo 想象成一个自带条件反射的笔记本。在 Jupyter 里,笔记本像一张白纸——每次运行什么、保留什么状态,全凭你手动管理;而 marimo 则像一本有"智能大脑"的笔记本——当你修改了一个单元格,它会自动判断哪些地方依赖了这个变化,然后精准地重新计算,就像身体的免疫系统一样自动响应外部刺激,而不需要你每次手动重启整个内核。
这种响应式模型在 UI 交互上体现得尤为优雅:滑块(slider)、下拉框(dropdown)、表格等 UI 控件直接绑定到 Python 变量,拖动滑块时依赖它的图表、计算结果会自动刷新,整个过程无需写任何回调函数——这在传统 Jupyter 生态中需要 ipywidgets + 复杂回调才能实现。
图3:marimo Web UI 界面,支持实时滑块绑定和响应式图表刷新
响应式执行引擎是 marimo 的技术核心。marimo/_runtime/ 目录下的执行器维护了一个 DAG 拓扑结构,每个单元格的执行结果缓存在内存中。当单元格发生变化时,运行时通过拓扑排序确定所有受影响的下游单元格,然后按依赖顺序重新执行。这个设计与 Vue/React 的响应式系统一脉相承,但针对 Python 语义(变量作用域、副作用控制)做了专门适配。
SQL 一流支持是另一个亮点。marimo 支持直接在笔记本中编写 SQL 查询语句,数据源涵盖 Pandas DataFrame、SQLite、PostgreSQL、BigQuery、Snowflake 等主流数据库。查询结果直接转化为 DataFrame 可视化,SQL 编辑器内置语法高亮和 lint,功能完整度堪比专业 SQL IDE。
部署能力:marimo 笔记本可以直接导出为 Python 脚本(marimo run script.py),也可以部署为独立的 Web 应用(marimo deploy app.py),后者内置 uvicorn + Starlette 服务器,支持多用户会话管理俨然一个小型的数据应用平台。
图4:marimo 的 SQL 单元格功能,支持多种数据库并内置语法检查
Python >= 3.10 是最低门槛要求。核心依赖精简克制:Starlette(Web 框架)、uvicorn(ASGI 服务器)、narwhals(统一 DataFrame API)、msgspec(高性能序列化)、pyzmq(进程间通信,用于沙箱和并行执行)。项目大量使用类型注解,代码质量较高。
图5:DataFrame 交互式表格,支持列排序、过滤和内联编辑
marimo 的响应式模型虽然优雅,但也有其约束:每个单元格必须是纯函数或对外部状态的无副作用操作,复杂的状态管理可能需要额外设计模式。此外,作为一个相对年轻的项目(2023年起步),其生态丰富度(如插件市场)相比 Jupyter 仍有差距。项目团队规模较小,某些前沿 AI 框架的适配可能存在延迟。
marimo 的出现代表了 Python 交互计算工具的一次范式升级:从"记录执行过程"到"声明响应关系"。随着 AI 编程工具(如 Cursor、Claude Code)的普及,纯文本 .py 笔记本格式的 git 友好特性显得愈发重要——AI agent 可以像处理普通代码一样对 marimo 笔记本进行 diff、merge 和重构,这为 AI 原生化的工作流打开了新的可能性。
截至 2026年5月,marimo 已进入快速发展期,活跃 commit 保持在每周多次迭代,Cloud 部署和企业功能正在推进中。如果你厌烦了 Jupyter 的状态混乱,或正在寻找一个更适合 AI 协作的交互计算工具,marimo 值得认真关注。
图6:marimo 团队