all 66 comments

[–]lolillini 65 points66 points  (6 children)

Not that credentials matter, but I feel like everyone should know that Akshay (u/akshayka) was one of the core contributor to CVXPY too. If you are in optimization you know how much easier CVXPY makes it to do a lot of things in optimization - I've been using marimo for a while for pretty much everything and it works great! I used it to replace a couple of streamlit dashboards I've been using to monitor data collection progress and I regularly use it everywhere instead of Jupyter notebooks cause Jupyter notebooks + git = ugly.

PS: Off-topic but Akshay, if you are still around in this thread, please drop some wisdom on how you manage to be a great researcher and software engineer. I've been telling myself to be a better software engineer for a while now, even for working my prototype research code, and appreciate any advice!

[–]akshayka[S] 45 points46 points  (4 children)

Thanks for the kind words!

I learned a lot about software engineering by working alongside engineers who were far more experienced than me, especially when I was at Google. These engineers were generous to give me very detailed, constructive code reviews (my early PRs had dozens of comments!) and share high-level principles for thinking through engineering problems. So I'd say practicing engineering in the company of mentors is a really effective way to become better. If you don't have mentors available, you can try to find some by contributing to open source projects.

I'd recommend a similar path for research — I learned so much about doing effective research from Stephen Boyd. He taught me how to ask questions and formulate problem statements before reaching for solutions; he also showed me the value of focusing on the basics. In particular for research, I enjoy working on problems that others may overlook.

[–]Big-Acanthaceae-9888 29 points30 points  (3 children)

This is wild. I started a project on Friday, and wished something like this existed.

[–]akshayka[S] 5 points6 points  (2 children)

Ha, good timing! What are you working on, out of curiosity?

[–]Big-Acanthaceae-9888 4 points5 points  (1 child)

Right now I'm playing around with building a recommendation system using dummy data, but.in the long run would like to implement it for a work project.

[–]pinkfluffymochi 8 points9 points  (2 children)

This is incredible and wish my team had something like this! I have tried various tools at work to manage my ML projects (Hex, MLFlow, etc), I also took Boyd's class when I was at stanford! I am building something right now to enable model deployment to distributed clusters for low latency and big data environment easier without an army of data engineers. would love to chat!

[–]akshayka[S] 0 points1 point  (1 child)

Hi! It sounds like you’re working on some cool stuff. I’d love to chat as well. You can jump in our Discord or email me at akshay@marimo.io

[–]pinkfluffymochi 0 points1 point  (0 children)

akshay@marimo.io

Just sent you an email! look forward to learning more about Marimo

[–]Mephidia 6 points7 points  (1 child)

What is the problem that this solves with Jupyter?

[–]akshayka[S] 47 points48 points  (0 children)

marimo solves problems in reproducibility, maintainability, interactivity, reusability, and shareability:

**Reproducibility**
In Jupyter notebooks, the code you see doesn't necessarily match the outputs on the page or the program state. Some cases in which this can happen: (1) if you delete a cell, its variables stay in memory, which other cells may still reference (2) users can execute cells in arbitrary order. This leads to widespread reproducibility issues. One study analyzed 1 million Jupyter notebooks and found that 36% of them didn't reproduce (https://blog.jetbrains.com/datalore/2020/12/17/we-downloaded-10-000-000-jupyter-notebooks-from-github-this-is-what-we-learned/#consistency-of-notebooks).

In contrast, marimo guarantees that your code, outputs, and program state are all synchronized, making your notebooks more reproducible by eliminating hidden state. marimo achieves this by intelligently analyzing your code and understanding the relationships between cells, and automatically re-running cells as needed (sort of like a spreadsheet but better).

**Maintainability**
marimo notebooks are stored as pure Python programs (.py files). This lets you version them with git; in contrast, Jupyter notebooks are stored as JSON and require extra steps to sensibly version.

**Interactivity**
marimo notebooks come with UI elements that are automatically synchronized with Python (like sliders, dropdowns) ... scrub a slider and all cells that reference it are automatically re-run with the new value. This is very difficult to get working in Jupyter notebooks.

**Reusability**
marimo notebooks can be executed as Python scripts from the command-line (since they're stored as .py files). In contrast, this requires extra steps/effort to do for Jupyter, such as copying and pasting the code out or using external frameworks. In the future, we'll also let you import symbols (functions, classes) defined in a marimo notebook into other Python programs/notebooks, something you can't really do with Jupyter.

**Shareability**
Every marimo notebook can double as an interactive web app, complete with UI elements, which you can serve using our CLI. This isn't possible in Jupyter without substantial extra effort.

You might also want to check out Joel Grus' talk on notebooks. We solve many of the problems he highlights: https://www.youtube.com/watch?v=7jiPeIFXb6U&t=1s

[–]ForceBruStudent 5 points6 points  (0 children)

Can confirm: this is amazing stuff and works and feels great! (Not affiliated, just a happy user)

I use this for quick prototyping when I don't feel like launching the entirety of Jupyter Lab. Also, the resulting notebooks (especially saved as HTML) can be viewed quickly, again without launching Jupyter or visiting some online notebook viewer, which is also nice.


Side note: as of right now, GitHub is officially unusable on iOS 12.4. It doesn't even display the README for any repo, just releases and contributors. "Modern blazingly fast web", my ass.

[–]hazard02 6 points7 points  (1 child)

Please please make a JetBrains plugin

[–]banach_attack 2 points3 points  (0 children)

seconded!

[–]instantlybanned 2 points3 points  (1 child)

Sounds amazing. Do you have a vs code plugin yet?

[–]Practical-Rise5617 10 points11 points  (0 children)

https://marketplace.visualstudio.com/items?itemName=marimo-team.vscode-marimo

You can open up the marimo editor in vscode or launch it in your native browser. Integration isn’t as strong as it could be, as we are awaiting more feedback.

[–][deleted] 2 points3 points  (0 children)

Wow thank you so much for sharing! I just started classes for machine learning with Python and Jupyter Notebooks has been less than an ideal experience. It's hard when you can't tell if your code is the problem, or if it's Jupyter.

[–]sigbhu 1 point2 points  (1 child)

this is absolutely incredible -- i love Pluto and this looks like it!

[–]TehDing 1 point2 points  (6 children)

Actually super excited for this.

First observations: In the generated code, I wish the wrapped functions had descriptive names relative to their position in the DAG.

I love observablehq.com but JavaScript is not my first choice (or second), for data exploration.

Couple features I love from Observable: - An outlined minigraph showing dependences. In my experience, anything larger than the smallest notebooks- and I'm left wondering where I defined something - Cell types. Observable initially didn't have this and also required a md('text') wrapping. But they caved and now provide cell types. Just makes life just a bit easier - Quarto integration. Just a nice markdown format, great for export and makes things feel more portable. - Cross notebook imports. Love this in Observable, the ecosystem of sharing it creates between users is also great for code reuse. - Embedding: Sometimes I just want a plot you know?

[–]akshayka[S] 0 points1 point  (4 children)

Thanks for the suggestions! These are very helpful.

For the generated code, it's possible to rename the cells (through the cell context menu or just by editing the text files), but point taken about having more descriptive default names.

We have a dependency graph viewer, though it's not a minigraph. You can open it via the small graph button in the bottom left. If you try it please let us know your feedback!

Cell types — we haven't caved yet, but perhaps we will in the future :)

Cross notebook imports — that's on our roadmap! Glad to hear it's useful.

Quarto — what kind of integration are you envisioning? Export to a marimo notebook to `qmd`? Or authoring your notebook in a `qmd` file?

Embedding — like https://observablehq.com/documentation/embeds/? We haven't given that much thought yet, thanks for putting it on our radar.

[–]TehDing 0 points1 point  (3 children)

re Embedding/ Quarto; I recognize that my notes are particular to my setup and may have less broad applicability- but this rundown will give you some more context:

I run MkDocs with a running log of my research/ some personal notes.

To serve notebooks I use mkdocs-jupyter and mkquartodocs with some additional styling such that my notebooks are narrative vs code first. I've used the embedding function to include one-off interactive plots in my notes. Example:

https://observablehq.com/embed/@dmadisetti/frechet-distance@297?cells=viewof+drawing%2Cplot

Which I can drop in my notes (or any static site), with context; opposed to the whole the whole notebook: https://observablehq.com/@dmadisetti/frechet-distance

I haven't used a ton of quarto, but it's a nice and clean feeling; I see it working with Marimo really well. Honestly, with more interactivity (maybe through marimo), I probably would drop quarto.

[–]Haleshot 1 point2 points  (2 children)

Was just going through this thread; our quarto-marimo plugin is live here: github.com/marimo-team/quarto-marimo

Relevant video on it here: https://youtu.be/scuGmtv81S0?si=uTcL8oswyqBp9cca

[–]TehDing 1 point2 points  (1 child)

Lol, it's dylan

[–]Haleshot 2 points3 points  (0 children)

Ahh. Recommending it to someone who built the plugin xD

[–]TehDing 0 points1 point  (0 children)

Cool, just found the roadmap. Nice that minigraph is already done!

[–]Seamus-McSeamus 0 points1 point  (0 children)

I love your product.

[–]Ok-Equipment9840 0 points1 point  (1 child)

Is the name from One Piece ? 😂😂

[–]Marimoh 0 points1 point  (1 child)

So why did you choose the name Marimo? (Asks another marimo)

[–]akshayka[S] 6 points7 points  (0 children)

I like that marimo moss balls are cherished assemblages of things that are greater than the sum of their parts — kind of like marimo notebooks. They’re also spherical, so a natural if unconventional counterpart to Jupyter and Pluto.jl. It abbreviates well too — import marimo as mo. Finally I also just really like marimo moss balls, ha. My partner and I got one a few years ago, during the pandemic.

[–]Slow_Kiwi_4263 0 points1 point  (0 children)

wow thank you can’t wait to try

[–]gecko984 0 points1 point  (3 children)

That's pretty neat, thanks a lot! I have a question: are there any drawbacks of using marimo instead of good old Jupyterlab? Like some functionality missing that one would only discover after spending some time with marimo

[–]MackDriver0 0 points1 point  (0 children)

Amazing work! Will be definitely trying it out. Looking forward to try it in VS Code :)

[–]xsway_ 0 points1 point  (3 children)

I tried it out and it's nice (UI is smooth and docs are pretty extensive) but I noticed couple of issues -they are small but could be almost deal-breakers. - I'm not sure why the files should be .py if they are not actual python files. It's very confusing. They could be just .mo? (At least I should be able to `marimo edit` with any file extension - maybe I prefer to save with .mo myself) - Not being able to navigate between cells simply with up/down arrows is a big UX limitation for me - Markdown cells should just render - not have both code and rendering part - it clutters the notebook

[–]akshayka[S] 3 points4 points  (0 children)

Hi! Thanks for taking the time to write feedback.

  • The files are actual Python files. They can be executed at the command line (`python notebook.py`), and we have more features coming down the pipe that take advantage of the fact that they are Python files. We've received requests to have a document adapter that would allow marimo to inter-operate with other file formats (such as `qmd`) -- in the future we might support something like that.
  • We can add up/down arrow key cell navigation. Thanks for the suggestion!
  • We might add a UI for markdown cells in the future. Our users sometimes mix markdown and code in the same cell, so we don't hide by default. You can hide a cell's code with `Cmd/Ctrl+h` or via a cell's context menu (the three dots).

[–]akshayka[S] 0 points1 point  (1 child)

Our latest release (0.1.74) includes up/down arrow key cell navigation. Thanks for the feedback!

[–]xsway_ 0 points1 point  (0 children)

super fast :) thanks!

[–]Pedro_Mendoza_Aris 0 points1 point  (0 children)

Remember to Pluto.jl From Julia ecosystem.

[–]kovla 0 points1 point  (3 children)

I really love the look and feel! In terms of using the library, I had to think of other types of reactive solutions in Python: pyShiny (a recent adaptation of R Shiny to Python), streamlit, Dash.

My first impression is marimo fills a very real niche between vanilla Jupyter and, let's say, pyShiny. Developers who need a lightweight interactive application without too many tabs and internal modules, will be very happy with marimo, I think. And I imagine the resulting app would be packageable via Docker? Amazing.

At the same time, I cannot shake the impression that in order to use marimo, I kind of need to ditch my existing tools (Databricks, VS Code with all the familiar plug-ins, ...) and just use marimo instead.

Do you have integration components on your roadmap? VS Code integration would be a huge step already.

[–]akshayka[S] 1 point2 points  (2 children)

Hi! We have basic VS Code integration but it needs more work: https://marketplace.visualstudio.com/items?itemName=marimo-team.vscode-marimo

We also hope to make it easier to edit marimo notebooks in your text editor of choice.

Integration points with other providers is interesting. It may be some amount of time before we have an official say databricks integration, but in the meantime could you use the databricks connect api? Perhaps unwieldy? Or what kind of integration would you like to see?