LWN: Comments on "An introduction to Pluto" https://lwn.net/Articles/835930/ This is a special feed containing comments posted to the individual LWN article titled "An introduction to Pluto". en-us Wed, 12 Nov 2025 16:08:32 +0000 Wed, 12 Nov 2025 16:08:32 +0000 https://www.rssboard.org/rss-specification lwn@lwn.net Deploying software used by the notebook https://lwn.net/Articles/861312/ https://lwn.net/Articles/861312/ fonsp <div class="FormattedComment"> Hi civodul!<br> <p> This is indeed a major limitation of current systems, and I have been working hard on embedding the Julia package environment (Project.toml and Manifest.toml) directly into the notebook file: <a rel="nofollow" href="https://github.com/fonsp/Pluto.jl/pull/844">https://github.com/fonsp/Pluto.jl/pull/844</a> This means that packages will be installed or removed automatically as you use them in code, and others can exactly reproduce your package environment. Currently in beta, will be released in the next month!<br> - fons (author of Pluto 🎈)<br> </div> Tue, 29 Jun 2021 17:12:16 +0000 Online hosting service https://lwn.net/Articles/845307/ https://lwn.net/Articles/845307/ EPo <div class="FormattedComment"> What could help wider adoption is some online service that rendering Pluto notebooks. This probably requires a lot of resources and some corporate support, but would be very welcome. I think of Observanke and many Jupyter-based or similar dervices like Deepnote, Cocalc, Google Colab. Also would binder render a Pluto notebook? If notebook result ifs HTML maybe there can be a clever Github Actions pipeline to show it as well?<br> </div> Sun, 07 Feb 2021 00:13:51 +0000 Deploying software used by the notebook https://lwn.net/Articles/838411/ https://lwn.net/Articles/838411/ civodul <div class="FormattedComment"> Another limitation of Jupyter (and of Pluto, as I understand it) is that it does not take software deployment into account, although software used by the notebook obviously influences the end result — starting with the Python/Julia version being used.<br> <p> We proposed a way to annotate a Jupyter notebook with reproducible &quot;deployment info&quot; here: <a href="https://hpc.guix.info/blog/2019/10/towards-reproducible-jupyter-notebooks/">https://hpc.guix.info/blog/2019/10/towards-reproducible-j...</a> .<br> <p> Is the Pluto project considering ways to address this issue?<br> </div> Fri, 27 Nov 2020 14:25:29 +0000 An introduction to Pluto https://lwn.net/Articles/836588/ https://lwn.net/Articles/836588/ ballombe <div class="FormattedComment"> <font class="QuotedText">&gt; the hidden global state is a fundamental flaw in the Jupyter execution model.</font><br> <p> Agreed. This makes Jupyter (and maple, etc.) problematic for teaching mathematics because students will invariably manage to put<br> the worksheet in an inconsistent state and will accept the incorrect result as true &#x27;since the computer says it&#x27;.<br> Then follows an awkward discussion with the teacher.<br> </div> Mon, 09 Nov 2020 14:41:54 +0000 An introduction to Pluto https://lwn.net/Articles/836530/ https://lwn.net/Articles/836530/ osma <div class="FormattedComment"> Software engineer here. I use Jupyter notebooks a lot for data analysis, exploration and prototyping. Eventually I might turn some of the code in the notebooks into &quot;proper&quot; code such as Python modules. But it&#x27;s just so much easier to do the prototyping in an environment where you can load stuff into memory, try many different ways of exploring it (without having to load it again!), test different variations of an algorithm etc. without having to start your program from scratch all the time and have it fail after 15 minutes of number-crunching due to an edge case you forgot to consider.<br> <p> Notebooks are also good for explaining algorithms, since you can intermix runnable code with structured documentation, figures etc.<br> </div> Sat, 07 Nov 2020 10:55:48 +0000 An introduction to Pluto https://lwn.net/Articles/836278/ https://lwn.net/Articles/836278/ jezuch <div class="FormattedComment"> Well, I&#x27;ve never been a lab scientist and nevertheless I don&#x27;t share the confusion. But I also find the concept enticing and I&#x27;ve been previously exposed to Stephen Wolfram&#x27;s writing, so...<br> <p> Here&#x27;s one data point :)<br> </div> Thu, 05 Nov 2020 17:55:37 +0000 How is the dependency graph constructed? https://lwn.net/Articles/836203/ https://lwn.net/Articles/836203/ leephillips <div class="FormattedComment"> Recalculation through the dependency graph is not triggered by mutation of existing objects, so a running a cell that has a[3] = 17 will not have any effect on other cells. One is obligated to, as you say, explicitly assign to an object. This may require additional expressions in the code that would not be present in “normal” code, but those would not change the computation, but only exist to trigger recalculation through the graph. It’s kind of an awkward aspect of the dependency graph model, but easy to get around. It’s the way this type of reactivity works. When using JavaScript reactive libraries, you sometimes have to put things like a = a in your (JavaScript) code after mutating a, to force a recalculation by explicitly having the variable on the LHS of an assignment.<br> <p> The computational model does not depend on Julia, and in fact is similar to Observable, a notebook for JavaScript that uses the same type of dependency graph analysis. But other aspects, especially, apparently, in the future, may depend more closely on Julia and further ways the developers find to integrate it with JavaScript to evolve the interface.<br> <p> Oh, and you’re most welcome.<br> <p> </div> Thu, 05 Nov 2020 13:29:28 +0000 How is the dependency graph constructed? https://lwn.net/Articles/836201/ https://lwn.net/Articles/836201/ marcel.oliver First, thanks for the article. The hidden state problem as well as compatibility with version control are huge issues for current notebook interfaces. (In my opinion, poor compatibility with version control is the bigger one - I know there are workarounds, but getting project members to use version control is often already an uphill battle, so any additional hoops that one has to jump through are typically not practical.) <p> With regards to Pluto, I am still puzzled how the dependency graph is constructed. If order of cells does not matter, that would mean either that changes to a data structure in a different cell need to be done via creation of a new object, or that the dependencies would need to be declared explicitly. From the article ("Therefore one is not allowed to define a global variable in more than one cell"), it seems that it is the former. But it's not only "defining a global variable", any write access to an object would need to be confined to a single cell. So that seems far from being able to write a generic program in Pluto notebook style, or am I missing something? It would also seem to constrain what can be done in interactive exploration. Here I am not sure what the real impact would be, but it certainly requires a change of mindset compared to working in other notebook-style interfaces. <p> I also wonder how much conceptually depends on specific features of the Julia language, or whether it could be implemented in just the same way for other languages (Scientific Python user here...) Thu, 05 Nov 2020 13:01:49 +0000 An introduction to Pluto https://lwn.net/Articles/836198/ https://lwn.net/Articles/836198/ wjt <p>Another implementation of this spreadsheet-style notebook-with-dependency-graph concept is <a href="https://observablehq.com/">Observable</a>, by the authors of the popular <a href="https://d3js.org/">D3.js</a> data visualisation library. JavaScript's not my particular cup of tea, but spending a little time with Observable last year convinced me that the Pluto authors are right: the hidden global state is a fundamental flaw in the Jupyter execution model.</p> <p>Spreadsheets are probably the most widely-used programming environment, despite their own flaws, so tools which bridge the gap between that and "real" structured programming environments are (IMO) important.</p> Thu, 05 Nov 2020 11:08:36 +0000 An introduction to Pluto https://lwn.net/Articles/836192/ https://lwn.net/Articles/836192/ spacefrogg <div class="FormattedComment"> None of this if true, obviously. I now need a ridiculously large code stack, reading input, converting into JS/HTML, sending it over network (!), receiving, maintaining a secure session to the frontend (!), storing in my own data format, maintaining / communicating state between frontend and backend... to implement an editor.<br> <p> Yes, you seriously, seriously want to have the renderer of the web browser, but that&#x27;s it. You don&#x27;t want to have any of the other parts.<br> <p> Web browsers are notoriously bad at text entry. They are worse than 80&#x27;s GUIs. And Chrome will never be good at text entry because they lock most of the interesting keyboard shortcuts and text buffer management actions.<br> <p> Standards-based: Well the author of the article is not and maybe will never be able to use his favorite standards-compliant browser. So, no. It&#x27;s not standards-based.<br> <p> Everyone has a web browser: First, as per the article&#x27;s author, it was easy to beat to not have the right one. Second, try sending your notebook to your colleague and see if they can open it. They shall be able to play with the data, right? They can&#x27;t, because they still need Pluto (and start it as an extra step) next to the humongous piece of the &quot;right&quot; web browser just to look at your stuff (let alone playing around). How can this be progress?<br> <p> Cross-platform: Well, it&#x27;s only as cross-platform as Pluto, because you still need it. Unless you seriously want to work over network. In which case you (aka. someone who likes you enough) still need the second system running Pluto. So, no, the frontend has nothing to do with platform independence.<br> </div> Thu, 05 Nov 2020 09:59:16 +0000 The 'final form' https://lwn.net/Articles/836195/ https://lwn.net/Articles/836195/ epa <div class="FormattedComment"> I think it&#x27;s just the meaning of the word &#x27;final&#x27;. I was interpreting it that if the final form is a PDF, you publish the PDF, your work is finished, and you can now delete the notebook. (And that means that if there are any corrections or retractions, those would be published as errata to the PDF rather than as changes to the original notebook.) Whereas I would see the PDF as ephemeral, published so that people can read it easily as you say, but the final record for posterity needs to include the original notebook. Because archaeologists in the future might not have Pluto installed, it makes sense to include a PDF in the final result too, I&#x27;ll grant you that.<br> </div> Thu, 05 Nov 2020 09:56:37 +0000 An introduction to Pluto https://lwn.net/Articles/836168/ https://lwn.net/Articles/836168/ Paf <div class="FormattedComment"> Think of this as a way to produce a scientific paper where someone else can reach in and immediately explore and change the data processing.<br> <p> A step towards a sort of WYSIWYG editor for scientific papers *including the data processing steps within the scope of the editor*. So I can try a new fit function for the data in a plot and it’s just immediately there in its full context. Or something close to that. And I can do it with *your* paper that you sent me.<br> </div> Thu, 05 Nov 2020 01:13:28 +0000 An introduction to Pluto https://lwn.net/Articles/836167/ https://lwn.net/Articles/836167/ Paf <div class="FormattedComment"> Excuse me, *text* document.<br> </div> Thu, 05 Nov 2020 01:04:10 +0000 An introduction to Pluto https://lwn.net/Articles/836166/ https://lwn.net/Articles/836166/ Paf <div class="FormattedComment"> It’s not an ugly substitute. This is fundamentally a tool for dynamic, on the fly, data analysis and visualization. It’s a tool for supporting scientific research and especially for generating scientific papers in a way that others can interact with the results.<br> <p> Nuggets of random code stuck to spreadsheets and separate data visualizations with the results pasted in to an eventual test document are in fact an ugly substitue for this, for the job this is intended to do.<br> <p> It’s like, a “light” scientific computation tool. It’s not for heavy duty number crunching in the sense of high performance computation (often simulation) and “big data”. It’s for light to medium weight computational work and presenting data to people.<br> <p> If it helps, most of these started as tools for biologists. They need to do a *lot* of data manipulation but most of their stuff isn’t heavyweight physical simulation. It’s data processing, and the data sets aren’t necessarily that large. (Though some are.)<br> </div> Thu, 05 Nov 2020 01:03:38 +0000 An introduction to Pluto https://lwn.net/Articles/836165/ https://lwn.net/Articles/836165/ Paf <div class="FormattedComment"> I think this indicates you’ve never been a working scientist (no offense is intended). This is like a *lab* notebook, and as someone who used to be a working scientist, a sort of programmable lab notebook, with calculations included, is an *incredibly* enticing concept.<br> </div> Thu, 05 Nov 2020 00:56:27 +0000 An introduction to Pluto https://lwn.net/Articles/836162/ https://lwn.net/Articles/836162/ Cyberax <div class="FormattedComment"> Spreadsheets don&#x27;t really support scientific visualizations, graphing libraries and TeX rendering.<br> </div> Wed, 04 Nov 2020 22:09:09 +0000 An introduction to Pluto https://lwn.net/Articles/836161/ https://lwn.net/Articles/836161/ khim <div class="FormattedComment"> But you can use &quot;real&quot; programming language with &quot;real&quot; spreadsheet (I know that because I often do that)… so why the ugly substitute?<br> </div> Wed, 04 Nov 2020 21:56:39 +0000 An introduction to Pluto https://lwn.net/Articles/836151/ https://lwn.net/Articles/836151/ otaylor <blockquote>The problem disappears of you always run all cells from top to bottom, which is not hard to do, but Jupyter makes it even more easy to run selected cells one by one as users see fit. It's one of the main criticisms of Jupyter.</blockquote> <p> It's worth noting that (especially for scientific computations) some of the initial steps in your notebook might be very slow, so not always running from the top makes work much faster. Reinteract (https://www.reinteract.org/) tried to achieve stateless notebooks with partial re-execution for Python, but I abandoned it, among other reasons, because it was really hard to get things to work sensibly with the full Python ecosystem. (If a user changes <code>f.write('foo')</code> to <code>f.write('bar')</code> then you have to go back and replay things from the point where you opened a file for writing.) </p> <p> Julia is likely easier to build this type of system on top of - I'll have to look at the implementation of Pluto one day. </p> Wed, 04 Nov 2020 20:15:15 +0000 An introduction to Pluto https://lwn.net/Articles/836149/ https://lwn.net/Articles/836149/ NYKevin <div class="FormattedComment"> <font class="QuotedText">&gt; Why would anyone in their senses resort to a web browser to do their coding?</font><br> <p> This is not targeted at software engineers. It&#x27;s targeted at data scientists, statisticians, and other scientific types who need to do a lot of number crunching. They don&#x27;t want to spend three hours configuring Emacs, and then another three hours un-learning all the standard keyboard shortcuts used by every text editing program created within the past ~20 years. But it gets worse than that. If you ask them about design patterns (or higher-order functions, or polymorphism, or... insert your favorite concept here), many will have no idea what you&#x27;re talking about, and those that are familiar with such concepts tend not to use them much in practice. Their code tends to be highly procedural and ugly, so much so that many are too embarrassed to publish it. Switching editors is not going to change that.<br> <p> Basically, what these people really want is a spreadsheet. Spreadsheets are much more forgiving of weird or irregular organization of program logic, and make it simple and intuitive to reason about how data flows through the system. But regular spreadsheet software isn&#x27;t powerful enough for their needs, in multiple senses of the word &quot;powerful&quot; (i.e. flexible, computationally efficient, &quot;there isn&#x27;t a function for that,&quot; etc.). So what you end up with is a custom spreadsheet-like-thing that lets you use one or more &quot;real&quot; programming languages. I really don&#x27;t see anything wrong with that.<br> </div> Wed, 04 Nov 2020 19:35:58 +0000 The 'final form' https://lwn.net/Articles/836140/ https://lwn.net/Articles/836140/ rgmoore <p>I think the final form should depend on who it's being prepared for. It's great to share a notebook with another data analyst, and the notebook should be included as part of any paper that's published based on it. But a lot of the work in data analysis is performed by analysis specialists for people who don't know enough about programming to make use of a notebook if they had it; most of my- admittedly limited- use has fallen into that category. People like that want a finished product like a PDF or HTML format notebook rather than instructions on how to generate that product. <p>To use an analogy, the notebook is like a recipe, and the PDF or HTML format is like a prepared dish. It's great that some people are good enough cooks to be able to prepare the dish themselves when presented with ingredients and a recipe, but not everyone is like that. Plenty of people aren't great cooks and just want to eat the dish. A well designed system should be able to accommodate both types. Wed, 04 Nov 2020 17:56:57 +0000 Notebook diffs https://lwn.net/Articles/836138/ https://lwn.net/Articles/836138/ fghorow <div class="FormattedComment"> +1 for Jupytext. It allows a style of programming in Jupyter that I&#x27;ve wanted for years -- where I can fluidly move between a browser based notebook and the editor/IDE of my choice for actually _working_ on the code in a reasonable environment.<br> <p> Pluto sounds pretty good from that viewpoint also. However, Pluto&#x27;s &quot;single backend&quot; (i.e. Jupyter kernel) is a dealbreaker for me.<br> </div> Wed, 04 Nov 2020 16:55:13 +0000 An introduction to Pluto https://lwn.net/Articles/836018/ https://lwn.net/Articles/836018/ leephillips <blockquote>"The Pluto authors claim, we'd have to leave a polyglot environment behind us just to describe their support for JS and HTML next to Julia. How is that not polyglot?"</blockquote> <p> HTML and JS are already running in the browser. The idea is to use them to further elaborate the interface. They are not back-end languages. </p> Wed, 04 Nov 2020 14:11:54 +0000 An introduction to Pluto https://lwn.net/Articles/836017/ https://lwn.net/Articles/836017/ leephillips <div class="FormattedComment"> Pluto&#x27;s reactive model is similar to a spreadsheet.<br> </div> Wed, 04 Nov 2020 13:46:35 +0000 An introduction to Pluto https://lwn.net/Articles/836016/ https://lwn.net/Articles/836016/ leephillips <div class="FormattedComment"> You seem to be equating &quot;state&quot; and &quot;hidden state&quot;. <br> </div> Wed, 04 Nov 2020 13:43:16 +0000 An introduction to Pluto https://lwn.net/Articles/836014/ https://lwn.net/Articles/836014/ clugstj <div class="FormattedComment"> &quot;In Jupyter, when a cell is executed, the result appears, and nothing else happens. Any global variables defined in the cell are available for subsequent execution of other cells. The variables can be redefined freely. The upshot is that the output of any particular cell execution depends on a hidden global state: which cells were previously executed and in what order.<br> <p> Pluto, instead, analyzes the code in all of the cells and constructs a dependency graph, so that it knows the order in which the cells must be executed; this is based on which cells use which variables. Cells can be grabbed with the mouse and arranged in any order and this has no effect on the results. When the code in a cell is changed, the cell is run; all of the cells that depend on it, and only those cells, are also run, in dependency order. Therefore one is not allowed to define a global variable in more than one cell; an attempt to do so results in an error message.&quot;<br> <p> So, Pluto is a spreadsheet and Jupyter is a broken spreadsheet?<br> </div> Wed, 04 Nov 2020 13:29:38 +0000 An introduction to Pluto https://lwn.net/Articles/836013/ https://lwn.net/Articles/836013/ rschroev <div class="FormattedComment"> By hidden state, they mean something else. I think I can best explain it with an example.<br> <p> In a Jupyter notebook, make a cell containing &quot;a = 0&quot; and run that cell.<br> Then make a cell containing &quot;print(a)&quot;, and run it. It will output &quot;0&quot;;<br> Make a third cell containing &quot;a = 1&quot; and run it.<br> Now run the second cell again. It will now output &quot;1&quot;.<br> <p> You now have a notebook looking like this:<br> <p> a = 0<br> <p> print(a)<br> -&gt; 1<br> <p> a = 1<br> <p> You can now delete the third cell, making it even more confusing. In this example it&#x27;s obvious that a might have an unexpected value, but in real notebooks the value of a often just used in calculations, not printed, making it unclear on exactly which values the calculation is based. <br> <p> The problem disappears of you always run all cells from top to bottom, which is not hard to do, but Jupyter makes it even more easy to run selected cells one by one as users see fit. It&#x27;s one of the main criticisms of Jupyter. I haven&#x27;t read the article, but it looks like the Pluto authors have managed to avoid the problem altogether in Pluto.<br> </div> Wed, 04 Nov 2020 13:19:48 +0000 An introduction to Pluto https://lwn.net/Articles/836008/ https://lwn.net/Articles/836008/ roc <div class="FormattedComment"> Web browsers give you a cross-platform, standards-based implementation of scriptable, editable documents that support mixing text, graphics, video and more, with extremely well optimized and robust implementations. Also, everyone has a web browser preinstalled. That&#x27;s hard to beat.<br> </div> Wed, 04 Nov 2020 11:38:17 +0000 An introduction to Pluto https://lwn.net/Articles/836007/ https://lwn.net/Articles/836007/ roc <div class="FormattedComment"> &quot;Notebook&quot; as the name for a ... book of notes ... long predates and is much more common than its use as &quot;small laptop&quot;.<br> </div> Wed, 04 Nov 2020 11:33:43 +0000 The 'final form' https://lwn.net/Articles/835999/ https://lwn.net/Articles/835999/ gdt <div class="FormattedComment"> The motivation for PDF is the ability to read it in the future. A reference which is a DOI to a PDF is a far more likely to be found and read than a hyperlink to some ancient software&#x27;s savefile. Of course, why not both?<br> </div> Wed, 04 Nov 2020 10:40:13 +0000 Notebook diffs https://lwn.net/Articles/835998/ https://lwn.net/Articles/835998/ lobachevsky <div class="FormattedComment"> There is also Jupytext (<a href="https://github.com/mwouts/jupytext">https://github.com/mwouts/jupytext</a>) for having Jupyter notebooks in plain text format.<br> </div> Wed, 04 Nov 2020 10:23:26 +0000 An introduction to Pluto https://lwn.net/Articles/835997/ https://lwn.net/Articles/835997/ spacefrogg <div class="FormattedComment"> A lot of things don&#x27;t make sense to me in this article:<br> <p> The Pluto authors claim, we&#x27;d have to leave a polyglot environment behind us just to describe their support for JS and HTML next to Julia. How is that not polyglot?<br> <p> The Pluto authors claim that the notebook won&#x27;t have hidden state just to describe that they can keep state in the DOM between notebook updates. How is that stateless? Nobody, who is serious about programming, wants a stateless program. We need obvious (impossible) and precise (hard but achievable) control of the state, not statelessness. So, having stateful program and keeping the program and its results in the same notebook, must result in a stateful notebook. State must be made _manageable_.<br> <p> Emacs features org-mode and org-babel. They can at least do what Pluto is able to do. (Not to brag but as a reference.) So, there may be no need to change the environment when to change the mode of work.<br> <p> Why would anyone in their senses resort to a web browser to do their coding? This is why editors actually have the interface they do. Because it&#x27;s a _good_ interface for coding. Why throw all this work away? What is the gain in the Pluto (or Jupyter) approach? I don&#x27;t get it.<br> </div> Wed, 04 Nov 2020 10:13:22 +0000 An introduction to Pluto https://lwn.net/Articles/835995/ https://lwn.net/Articles/835995/ NAR <div class="FormattedComment"> The English word &quot;notebook&quot; is seriously overloaded... Every time I read about this stuff on LWN, my first thought is that this is some kind of physical device, a laptop. The &quot;computational&quot; prefix doesn&#x27;t really help. Maybe it&#x27;s not that confusing for native speakers.<br> </div> Wed, 04 Nov 2020 09:24:52 +0000 The 'final form' https://lwn.net/Articles/835993/ https://lwn.net/Articles/835993/ epa <blockquote>before the notebook is exported into the final HTML or PDF form</blockquote> Perhaps we need to get away from that? The final published form should be the notebook itself, since from the notebook you can generate printed text but the reverse is not true. <p> I would expect a dead-tree book to include a link to download the notebook, and if reading in electronic form, the best reading interface is the Pluto notebook interface itself, perhaps with a style sheet for prettier display and a read-only mode to avoid accidental changes. Wed, 04 Nov 2020 09:22:49 +0000 Notebook diffs https://lwn.net/Articles/835987/ https://lwn.net/Articles/835987/ boog <div class="FormattedComment"> The nbdime package helps in using version control with Jupyter notebooks.<br> <p> <a href="https://nbdime.readthedocs.io/en/latest/">https://nbdime.readthedocs.io/en/latest/</a><br> </div> Wed, 04 Nov 2020 00:28:38 +0000