Pluto: A Julia Notebook That Won't Let You Lie to Yourself
You've been there. You run a notebook cell, tweak a variable three cells up, and suddenly nothing makes sense anymore. The state you're looking at isn't the state your code describes—it's some accumulated mess of half-executed cells and forgotten assignments. Pluto is a Julia notebook built specifically to kill that problem, and it does it by refusing to keep a hidden workspace at all.
What It Does
Pluto is a reactive notebook for Julia, written in pure Julia, that you install and run from within Julia itself. A notebook is made up of cells containing arbitrary Julia code, and those cells form a dependency graph. When you change a variable or a function, Pluto automatically re-runs every cell that refers to it. Cells can sit in any order you like—Pluto's syntax analysis figures out the dependencies and handles execution for you. There are no code rewrites and no wrappers; Pluto just looks at your code once before evaluation.
The output side is where it gets interesting. Notebooks are saved as pure Julia files, so you can import them like any other script you'd write in a regular editor. You can also export notebooks with cell outputs as HTML and PDF documents, reorder cells, and hide code to control how you present your work. Package management is built in: Pluto reads your syntax to figure out which packages a notebook uses and manages a package environment for it automatically, so you don't have to install things manually before you start typing.
Why It's Cool
-
The no-hidden-state guarantee is the whole point. Pluto's README states it plainly: at any instant, the program state is completely described by the code you see. That's not a nice-to-have—it's a different mental model from Jupyter or Matlab, where you can carry a mutable workspace around and never quite know what's in it. If you've ever spent twenty minutes debugging a notebook only to realize you forgot to re-run a cell, this is the fix.
-
Reactivity makes experimentation fast. Split your code into cells and changing one cell instantly shows effects on all the others. The README's example is a small ODE model: change a parameter in the first cell and the second cell re-evaluates and redraws the plot. That loop—tweak, see, tweak—is what makes a notebook worth using in the first place.
-
Your notebooks are just Julia files. This is a quietly big deal. Because Pluto saves plain
.jlfiles, your notebook isn't trapped in a bespoke format you'll have to convert later. You can import it as if you'd been programming in a regular editor all along. When you're done experimenting, there's an obvious path out. -
It's lightweight and easy to install. Pluto is pure Julia, which means there's no separate runtime to manage and no heavyweight server stack to stand up. You install it the same way you install any other Julia package.
-
Presentation is a first-class concern. The README frames the whole thing around a simple idea: writing a notebook isn't just about the final document, it's about the experiments and discoveries along the way. Reordering cells, hiding code, and exporting to HTML or PDF mean you can move from messy exploration to something shareable without switching tools.
How to Try It
- Make sure you have Julia installed. The complete guide for installing Julia and Pluto lives at plutojl.org/#install.
- Start Julia and run two lines:
import Pluto
Pluto.run()
That's it—Pluto opens in your browser and you can start writing cells. There's also a demo you can run in your browser via Binder if you want to poke at it before installing anything.
For a deeper look, the README points to a 20-minute introduction from Juliacon 2020, a one-year-later talk from Juliacon 2021, a talk on reactivity and reproducibility from JupyterCon 2023, and a Pluto 1.0 release announcement on the Julia Discourse. The repository itself is at github.com/JuliaPluto/Pluto.jl.
Final Thoughts
Pluto is best suited to anyone doing exploratory work in Julia—data analysis, modeling, teaching, or just working through a problem where you need to iterate quickly and trust what you're looking at. If you're coming from Jupyter and you've made peace with hidden state, Pluto will feel restrictive for about an hour and then you probably won't want to go back. The reactive model isn't for every workflow (long-running computations will re-run more than you'd like), but the guarantee it buys you is worth the trade. The 1.0 release suggests the project has settled into something stable, which makes now a reasonable time to give it a shot.
Follow @githubprojects for more developer tools and open source projects.