We are on a mission to make scientific computing more accessible and fun.

Simple, reactive programming environment for Julia

Reactivity

Interactivity as a fundamental principle

Just like a spreadsheet, Pluto understands variable links between code cells, and will re-run a cell when a dependency changes.

Reactivity means interactivity

Your programming environment becomes interactive by splitting your code into multiple cells! Changing one cell instantly shows effects on all other cells, giving you a fast and fun way to experiment with your model.

In this example, changing the parameter A and running the first cell will directly re-evaluate the second cell and display the new plot.

interactivity screencap Learn more

Sliders, buttons and more!

Pluto lets you bind a Julia variable to an GUI element. Moving a slider from 0 to 100 will actually change one of your variables from 0 to 100! Combined with reactivity, this is a very powerful tool!

@bind macro screencap

It's that simple to make your Julia code come to life! That's because reactivity and widget interactivity are the same concept! Less to learn, more to discover.

The package PlutoUI.jl contains lots of common widgets like sliders, textfields and buttons. Need something different? PlutoUI.jl was made by us, but anyone can create their own special widgets! We give you full control over HTML, CSS and JS, with powerful API to connect a web component to Julia.

Learn more
Reproducibility

Pluto notebooks are reproducible by default

From package management to execution order, Pluto goes to great lengths to make sure that someone else will be able to run your notebook when you're done!

Built-in package manager

Pluto uses code analysis to understand which packages are being used in a notebook, and it automatically manages a package environment for your notebook. You no longer need to install packages, you can directly import any registered package like Plots or DataFrames and use it.

To ensure reproducibility, the information to exactly reproduce the package environment is stored in your notebook file. When someone else opens your notebook with Pluto, the exact same package environment will be used, and packages will work on their computer, automatically!

Learn more
package manager screencap

Workspace variables

Pluto offers an environment where changed code takes effect instantly and where deleted code leaves no trace. Unlike Jupyter or Matlab, there is no mutable workspace, but rather, an important guarantee:

At any instant, the program state is completely described by the code you see.

No hidden state, no hidden bugs.

Learn more
Julia programming

A fresh approach to scientific computing

Pluto is an environment to work with the Julia programming language. Easy to use like Python, fast like C. (We think it's the future!)

Fast

Julia was designed from the beginning for high performance. Julia programs compile to efficient native code for multiple platforms via LLVM.

Dynamic

Julia is dynamically typed, feels like a scripting language, and has good support for interactive use.

Reproducible

Reproducible environments make it possible to recreate the same Julia environment every time, across platforms, with pre-built binaries.

Composable

Julia uses multiple dispatch as a paradigm, making it easy to express many object-oriented and functional programming patterns. The talk on the Unreasonable Effectiveness of Multiple Dispatch explains why it works so well.

General

Julia provides asynchronous I/O, metaprogramming, debugging, logging, profiling, a package manager, and more. One can build entire Applications and Microservices in Julia.

Open source

Julia is an open source project with over 1,000 contributors. It is made available under the MIT license. The source code is available on GitHub.

Education

A programming environment designed for learning and teaching

We designed Pluto to teach our own course: Computational Thinking at MIT. The result is a programming environment that prioritizes beginners over advanced users!

Computational Thinking at MIT

Pluto was developed alongside the free online course Introduction to Computational Thinking at MIT, with the goal of creating a programming environment that is powerful, helpful and interactive, without being too intimidating for students and teachers.

Are you interested in using Pluto for your class? Here are some presentations by people who are using it already: the MIT team, Gerhard Dorn, Daniel Molina, Henki W. Ashadi and Max Köhler.

Learn more
(video) Grant Sanderson (3Blue1Brown) using Pluto's interactivity to teach Computational Thinking at MIT!

Try Pluto in your browser

Online editor

Go to binder.plutojl.org to use Pluto in your browser, powered by mybinder.org.

Try Pluto online
binder logo

Featured notebooks

We have a collection of featured notebooks that showcase what you can do. Every featured notebook has a button to run the notebook in your browser.

Go to featured.plutojl.org
Let's go!

Let's install Pluto!

Pluto can be installed and updated using Julia's package manager.

Step 1: Install Julia 1.10.0

Go to https://julialang.org/downloads and download the current stable release.

Step 2: Run Julia

After installing, make sure that you can run Julia. On some systems, this means searching for the “Julia 1.10” program installed on your computer; in others, it means running the command julia in a terminal.

Make sure that you can execute 1 + 1.

screenshot of the Julia REPL with 1+1 executed

Step 3: Install Pluto

In the Julia terminal, type:

import Pkg; Pkg.add("Pluto")

This will use Julia's package manager to install the Pluto package.

This might take a couple of minutes, so you can go get yourself a cup of tea!

Video instructions
screenshot of the Julia REPL running the command import Pkg; Pkg.add("Pluto")

Step 4: Run Pluto

In the Julia terminal, type:

import Pluto; Pluto.run()

Pluto will automatically open your browser when it's ready. 🎉