marimo: Notebook Reactive Cho Python
marimo là một notebook Python reactive, tự động chạy lại các cell phụ thuộc và lưu toàn bộ dưới dạng file .py thuần thay vì JSON. Hãy dùng marimo nếu bạn chán cảnh biến bị stale và thứ tự thực thi lộn xộn phá hỏng phiên làm việc trên Jupyter, hoặc muốn triển khai cùng một notebook thành script hay web app mà không phải viết lại. Bỏ qua nó nếu team bạn đang gắn chặt với hệ sinh thái công cụ và extension của .ipynb mà marimo chưa hỗ trợ.
Hiểu Về Mục Đích Cốt Lõi Của marimo
marimo là một notebook Python mã nguồn mở, trong đó mỗi cell là một node trong đồ thị phụ thuộc: chạy hoặc xóa một cell sẽ tự động chạy lại hoặc dọn sạch mọi cell phụ thuộc vào nó. Notebook được lưu dưới dạng file .py thuần, nên diff sạch trong git và có thể chạy như script, làm target cho pytest, hoặc khởi chạy như web app bằng marimo run. marimo còn có sẵn cell SQL trả về dataframe Python và trình soạn thảo AI-native để pair cùng các agent lập trình.
Giải Quyết Những Vấn Đề Của Notebook Truyền Thống
Trong Jupyter, bạn có thể chạy cell theo bất kỳ thứ tự nào, nên các biến đang nằm trong bộ nhớ có thể âm thầm lệch khỏi những gì hiển thị trên trang. Xóa một cell định nghĩa df, biến df vẫn còn sống trong kernel. Mọi cell phía sau vẫn chạy được — cho đến khi không còn chạy được nữa. Jupyter cũng lưu notebook dưới dạng JSON, nên chỉ một dòng code thay đổi cũng tạo ra diff đầy nhiễu execution-count và output, rất khó review trong một pull request. Runtime dựa trên đồ thị phụ thuộc và định dạng file .py của marimo nhắm thẳng vào hai vấn đề đó, chứ không chỉ là lời phàn nàn chung chung rằng notebook lộn xộn.
Các Tính Năng Chính Của marimo
- ✓Runtime reactive: sửa một cell sẽ tự động chạy lại mọi cell tham chiếu đến biến của nó, và xóa một cell sẽ dọn sạch biến của nó khỏi bộ nhớ thay vì để lại state ẩn.
- ✓Notebook được lưu dưới dạng file .py Python thuần, nên diff sạch trong git và có thể import như một module bình thường.
- ✓Cell SQL tích hợp sẵn có thể truy vấn dataframe, database, warehouse, lakehouse, file CSV, hoặc Google Sheets và trả kết quả về dưới dạng dataframe Python — vẫn là Python thuần bên dưới.
- ✓Các UI element như slider, dropdown, bộ chuyển đổi dataframe, và giao diện chat được gắn trực tiếp vào giá trị Python mà không cần viết callback.
- ✓Chế độ runtime lazy đánh dấu các cell bị ảnh hưởng là stale thay vì tự động chạy lại, giúp bạn không vô tình kích hoạt một cell tốn nhiều tài nguyên.
- ✓Quản lý package tích hợp sẵn có thể cài package ngay khi import và lưu requirements trong chính file notebook, tự cài vào một venv sandbox cô lập.
- ✓Trình soạn thảo AI-native: pair cùng các coding agent như Claude Code, Codex, hoặc OpenCode qua marimo pair, hoặc dùng AI assistant tích hợp sẵn với API key riêng hoặc model chạy local.
- ✓Notebook chạy được như target pytest, export ra HTML, và chạy trong trình duyệt qua WASM.
Ứng Dụng Thực Tế Của marimo
- •Phân tích dữ liệu khám phá (EDA), nơi bạn phân trang, tìm kiếm, lọc, và sắp xếp dataframe hàng triệu dòng mà không cần viết thêm code.
- •Biến một notebook nghiên cứu thành app có thể triển khai bằng marimo run, ẩn source code và chỉ hiển thị các UI element.
- •Các thử nghiệm cần khả năng tái lập, muốn version bằng git và review như diff Python bình thường thay vì blob JSON.
- •Các workflow AI cần nhận biết dữ liệu, nơi agent cần thấy các biến đang có trong bộ nhớ để sinh ra cell tiếp theo.
- •Notebook giảng dạy hoặc tài liệu, kết hợp markdown động được tham số hóa bằng biến Python thực với code có thể chạy.
Bắt Đầu Với marimo
Cài bằng `pip install marimo` hoặc `conda install -c conda-forge marimo`, sau đó chạy `marimo tutorial intro` để mở phần hướng dẫn tích hợp sẵn. Nếu muốn có sẵn cell SQL và AI completion ngay từ đầu, cài thêm phần mở rộng bằng `pip install "marimo[recommended]"` thay vì gói cơ bản. Ngoài ra còn có molab, một notebook được host miễn phí mà README so sánh với Google Colab, nếu bạn muốn bỏ qua việc cài đặt local.
Làm Việc Với Notebook marimo
Chạy `marimo edit` để tạo hoặc chỉnh sửa notebook trong trình soạn thảo reactive. Khi notebook đã sẵn sàng chia sẻ, `marimo run your_notebook.py` sẽ phục vụ nó như một web app với code Python bị ẩn và không thể chỉnh sửa, còn `python your_notebook.py` thực thi cùng file đó như một script bình thường từ command line. Để chuyển notebook cũ sang, `marimo convert your_notebook.ipynb > your_notebook.py` chuyển một notebook Jupyter thành notebook marimo, hoặc bạn có thể dùng bộ chuyển đổi trên web thay vì CLI.
Điểm Mạnh
- ✓Bạn không còn phải tự theo dõi thứ tự thực thi — đồ thị phụ thuộc làm việc đó thay bạn, và đây là cải thiện lớn nhất trong việc dùng hàng ngày so với Jupyter.
- ✓Review code trên notebook cuối cùng cũng giống review code bình thường, vì file là Python chứ không phải blob JSON kèm output nhúng bên trong.
- ✓Chạy cùng một file như app, như script, và như notebook có thể chỉnh sửa nghĩa là bạn không phải duy trì ba phiên bản khác nhau của cùng một phân tích.
- ✓Chế độ runtime lazy là một van an toàn thực sự cho notebook có cell tốn tài nguyên — bạn vẫn có đảm bảo về tính đúng đắn mà không vô tình chạy lại một truy vấn chậm.
Những Điều Cần Cân Nhắc Khi Dùng marimo
- △Thứ tự cell trong file không quyết định thứ tự thực thi — tham chiếu biến mới quyết định — nên notebook convert từ Jupyter hoặc do người mới làm quen với mô hình reactive viết có thể chạy khác ý muốn cho đến khi bạn nắm được quy tắc này.
- △Cell SQL và tính năng AI completion nằm trong phần mở rộng `marimo[recommended]` chứ không phải bản cài đặt cơ bản, nên chỉ chạy `pip install marimo` sẽ không có đầy đủ tính năng mà README nhắc tới ngay từ đầu.
- △Thực thi reactive là một mô hình tư duy khác hẳn cách chạy-cell-bất-kỳ-lúc-nào của Jupyter, và các extension hay workflow riêng của Jupyter dựa trên sự linh hoạt đó sẽ không mang sang được trực tiếp.
So Sánh marimo Với Các Công Cụ Khác
Câu Hỏi Thường Gặp Về marimo
marimo loại bỏ state ẩn thường gặp ở các công cụ như Jupyter: runtime reactive của nó chạy lại hoặc xóa sạch mọi cell phía sau một thay đổi, và vì notebook được lưu dưới dạng file .py thay vì JSON nên diff trong git rất sạch và dễ review.
marimo thực thi cell theo thứ tự xác định bởi tham chiếu biến chứ không phải vị trí trên trang, và xóa một cell sẽ xóa ngay biến của nó khỏi bộ nhớ, nên chạy lại notebook từ đầu đến cuối luôn cho ra cùng một trạng thái chương trình.
Notebook marimo triển khai được thành web app tương tác: chạy `marimo run your_notebook.py` sẽ phục vụ notebook với code Python bị ẩn và không thể chỉnh sửa, chỉ hiển thị các UI element như slider và bộ lọc dataframe.
marimo được phát hành theo giấy phép Apache-2.0, theo thông tin trên repository GitHub của dự án.
marimo pair trực tiếp với các coding agent như Claude Code, Codex, hoặc OpenCode qua marimo pair, và trình soạn thảo của nó có AI assistant tích hợp sẵn có thể thấy các biến đang có trong bộ nhớ, hỗ trợ tùy chỉnh system prompt, dùng API key riêng, hoặc model chạy local.
marimo có thể tự động chuyển đổi notebook Jupyter bằng `marimo convert your_notebook.ipynb > your_notebook.py`, hoặc qua bộ chuyển đổi trên web tại marimo.io/convert nếu bạn không muốn dùng CLI.
Nên Dùng marimo Khi Nào — Và Khi Nào Nên Bỏ Qua
Hãy dùng marimo nếu bạn là developer Python làm việc dữ liệu theo kiểu lặp đi lặp lại — EDA, thử nghiệm model, hay một app nội bộ nhỏ — và bạn thấy khó chịu với lỗi thứ tự thực thi của Jupyter hoặc việc review diff notebook trong pull request. Bỏ qua nó nếu workflow của bạn phụ thuộc vào một extension cụ thể của Jupyter, một kho file .ipynb lớn bạn không muốn chuyển đổi, hoặc một team đã chuẩn hóa trên Jupyter và không muốn học lại mô hình thực thi reactive chỉ để đổi lấy diff git sạch hơn.
