# Is Pluto not (yet?) supported by Julia v1.9?

**URL:** <https://discourse.julialang.org/t/is-pluto-not-yet-supported-by-julia-v1-9/99548>\
**Category:** Pluto\
**Tags:** question\
**Created:** [May 29, 2023, 10:18am UTC](https://discourse.julialang.org/t/is-pluto-not-yet-supported-by-julia-v1-9/99548 "2023-05-29T10:18:14Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![apaoluzzi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/apaoluzzi/32/36467_2.png) [@apaoluzzi](https://discourse.julialang.org/u/apaoluzzi)\
**Post date:** [May 29, 2023, 10:18am UTC](https://discourse.julialang.org/t/is-pluto-not-yet-supported-by-julia-v1-9/99548/1 "2023-05-29T10:18:15Z")

</div>

Hi guys, for many reasons I need Julia v1.9 for my project, but I get the errors below.  
Any cue?

```julia
Julia Version 1.9.0 (2023-05-07)
Official https://julialang.org/ release

julia> using Pluto

julia> Pluto.run()

Opening http://localhost:1234/?secret=WFDFZ6QF in your default browser... ~ have fun!

Press Ctrl+C in this terminal to stop Pluto

WARNING: both IOExtras and Base export "closewrite"; uses of it in module ConnectionPool must be qualified
WARNING: both IOExtras and Base export "closewrite"; uses of it in module Servers must be qualified
WARNING: both IOExtras and Base export "closewrite"; uses of it in module WebSockets must be qualified
WARNING: both IOExtras and Base export "closewrite"; uses of it in module HTTP must be qualified
┌ Error: error handling request
│ exception =
│ UndefVarError: `closewrite` not defined
│ Stacktrace:
│ [1] (::Pluto.var"#233#243"{Pluto.ServerSession, Base.RefValue{Function}, HTTP.Handlers.Router{Symbol("##292")}})(http::HTTP.Streams.Stream{HTTP.Messages.Request, HTTP.ConnectionPool.Transaction{Sockets.TCPSocket}})
│ @ Pluto ~/.julia/packages/Pluto/D9HrI/src/webserver/WebServer.jl:235
│ [2] handle
│ @ ~/.julia/packages/HTTP/RwjlP/src/Handlers.jl:270 [inlined]
│ [3] #4
│ @ ~/.julia/packages/HTTP/RwjlP/src/Handlers.jl:346 [inlined]
│ [4] macro expansion
│ @ ~/.julia/packages/HTTP/RwjlP/src/Servers.jl:399 [inlined]
│ [5] (::HTTP.Servers.var"#13#14"{HTTP.Handlers.var"#4#5"{HTTP.Handlers.StreamHandlerFunction{Pluto.var"#233#243"{Pluto.ServerSession, Base.RefValue{Function}, HTTP.Handlers.Router{Symbol("##292")}}}}, HTTP.ConnectionPool.Transaction{Sockets.TCPSocket}, HTTP.Streams.Stream{HTTP.Messages.Request, HTTP.ConnectionPool.Transaction{Sockets.TCPSocket}}})()
│ @ HTTP.Servers ./task.jl:514
└ @ HTTP.Servers ~/.julia/packages/HTTP/RwjlP/src/Servers.jl:405

```

---

<div class="post-metadata">

**Author:** ![cormullion](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cormullion/32/49131_2.png) [@cormullion](https://discourse.julialang.org/u/cormullion)\
**Post date:** [May 29, 2023, 10:55am UTC](https://discourse.julialang.org/t/is-pluto-not-yet-supported-by-julia-v1-9/99548/2 "2023-05-29T10:55:31Z")

</div>

It’s working OK for me here, using `[c3e4b0f8] Pluto v0.19.26`.

As a first step, create a new temporary environment/project and see how it runs.

---

<div class="post-metadata">

**Author:** ![atiyabzafar](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/atiyabzafar/32/50322_2.png) [@atiyabzafar](https://discourse.julialang.org/u/atiyabzafar)\
**Post date:** [May 29, 2023, 11:03am UTC](https://discourse.julialang.org/t/is-pluto-not-yet-supported-by-julia-v1-9/99548/3 "2023-05-29T11:03:32Z")

</div>

`Pluto v0.19.26` Works Okay for me  
Can you check if your Manifest has updated Pluto?

---

<div class="post-metadata">

**Author:** ![apaoluzzi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/apaoluzzi/32/36467_2.png) [@apaoluzzi](https://discourse.julialang.org/u/apaoluzzi)\
**Post date:** [May 30, 2023, 5:14am UTC](https://discourse.julialang.org/t/is-pluto-not-yet-supported-by-julia-v1-9/99548/4 "2023-05-30T05:14:04Z")

</div>

I try tu update Pluto:

**julia\>** import Pkg

**julia\>** Pkg.update(“Pluto”)

**Updating** registry at `~/.julia/registries/General.toml`

**No Changes** to `~/.julia/environments/v1.9/Project.toml`

**No Changes** to `~/.julia/environments/v1.9/Manifest.toml`

**julia\>** using Pluto

but the version is not changed:

**(@v1.9) pkg\>** st

**Status** `~/.julia/environments/v1.9/Project.toml`

[8f4d0f93] Conda v1.8.0

⌅ [864edb3b] DataStructures v0.17.20

[f7f18e0c] GLFW v3.4.1

[7073ff75] IJulia v1.24.0

[524e6230] IntervalTrees v1.1.0

[95167b0c] LinearAlgebraicRepresentation v1.0.0 `~/Documents/dev/LinearAlgebraicRepresentation`

[66fc600b] ModernGL v1.1.7

[b8a86587] NearestNeighbors v0.4.13

[e701d7ec] Plasm v0.6.0 `https://github.com/cvdlab/Plasm.jl#master`

⌃ [c3e4b0f8] Pluto v0.14.7

[438e738f] PyCall v1.95.1

[295af30f] Revise v3.5.2

[56f361f5] Triangle v0.3.2 `https://github.com/cvdlab/Triangle.jl#master`

[f7e6ffb2] Triangulate v2.2.0

[32496ab8] ViewerGL v0.1.0 `/Users/paoluzzi/Documents/dev/ViewerGL.jl#master`

[37e2e46d] LinearAlgebra

[2f01184e] SparseArrays

**Info** Packages marked with ⌃ and ⌅ have new versions available, but those with ⌅ are restricted by compatibility constraints from upgrading. To see why use `status --outdated`

same in .julia/environments/v1.9/Manifest.toml

How to update Pluto versio?  
Thanks for help …

---

<div class="post-metadata">

**Author:** ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)\
**Post date:** [May 30, 2023, 5:23am UTC](https://discourse.julialang.org/t/is-pluto-not-yet-supported-by-julia-v1-9/99548/5 "2023-05-30T05:23:36Z")

</div>

You probably have too many packages loaded into your current environment. My v1.9 environment is almost completely empty. You should probably just created a special environment just for Pluto. There is very little reason to have any other package in the same environment since each notebook creates it’s own environment anyways.

Below I demonstrate how to create a global shared environment called “plutoenv”. You can access this from any directory by activating `@plutoenv`.

```julia
using Pkg
Pkg.activate("plutoenv"; shared = true)
Pkg.add("Pluto")
using Pluto
Pluto.run()

```

Alternatively,

```julia
using Pkg
pkg"activate @plutoenv"
pkg"add Pluto"
using Pluto
Pluto.run()

```

---

<div class="post-metadata">

**Author:** ![albheim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/albheim/32/34660_2.png) [@albheim](https://discourse.julialang.org/u/albheim)\
**Post date:** [May 30, 2023, 6:43am UTC](https://discourse.julialang.org/t/is-pluto-not-yet-supported-by-julia-v1-9/99548/6 "2023-05-30T06:43:41Z")

</div>

> [@apaoluzzi](#):
>
> ⌃ [c3e4b0f8] Pluto v0.14.7

But isn’t this a bit strange? Shouldn’t `^` indicate that there is a newer version and that it can be updated?

---

<div class="post-metadata">

**Author:** ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)\
**Post date:** [May 30, 2023, 6:48am UTC](https://discourse.julialang.org/t/is-pluto-not-yet-supported-by-julia-v1-9/99548/7 "2023-05-30T06:48:23Z")

</div>

> [@albheim](#):
>
> But isn’t this a bit strange? Shouldn’t `^` indicate that there is a newer version and that it can be updated?

That’s correct. The current version of Pluto is v0.19.26. What I don’t know and do not care about is what else is in the environment that is preventing Pluto from being upgraded.

---

<div class="post-metadata">

**Author:** ![apaoluzzi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/apaoluzzi/32/36467_2.png) [@apaoluzzi](https://discourse.julialang.org/u/apaoluzzi)\
**Post date:** [May 30, 2023, 7:00am UTC](https://discourse.julialang.org/t/is-pluto-not-yet-supported-by-julia-v1-9/99548/8 "2023-05-30T07:00:10Z")

</div>

> [@mkitti](#):
>
> ```julia
> using Pkg
> Pkg.activate("plutoenv"; shared = true)
> Pkg.add("Pluto")
> using Pluto
> Pluto.run()
> 
> ```

Done the above suggestion. Now it seems to work

---

<div class="post-metadata">

**Author:** ![apaoluzzi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/apaoluzzi/32/36467_2.png) [@apaoluzzi](https://discourse.julialang.org/u/apaoluzzi)\
**Post date:** [May 30, 2023, 7:03am UTC](https://discourse.julialang.org/t/is-pluto-not-yet-supported-by-julia-v1-9/99548/9 "2023-05-30T07:03:41Z")

</div>

using `Pluto v0.19.26` . Thank you all

---

<div class="post-metadata">

**Author:** ![albheim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/albheim/32/34660_2.png) [@albheim](https://discourse.julialang.org/u/albheim)\
**Post date:** [May 30, 2023, 7:45am UTC](https://discourse.julialang.org/t/is-pluto-not-yet-supported-by-julia-v1-9/99548/10 "2023-05-30T07:45:05Z")

</div>

> [@mkitti](#):
>
> That’s correct. The current version of Pluto is v0.19.26. What I don’t know and do not care about is what else is in the environment that is preventing Pluto from being upgraded.

Yeah, I know there is a newer version. I was more thinking of the

> can be updated

part.

My understanding was that if there is anything preventing it from updating it should be `⌅` instead of `^`, but maybe that is not required, we just know that if there is a `⌅` there is something stopping it?

---

<div class="post-metadata">

**Author:** ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)\
**Post date:** [May 30, 2023, 7:53am UTC](https://discourse.julialang.org/t/is-pluto-not-yet-supported-by-julia-v1-9/99548/11 "2023-05-30T07:53:19Z")

</div>

To start Pluto from the command line, I would just do the following.

```julia
julia --project=@plutoenv -e "using Pluto; Pluto.run()"

```

Alternatively, I also have an executable script in my `~/bin` that looks like this:

```julia
#!/bin/env julia
using Pkg
Pkg.activate("plutoenv"; shared = true)

using Pluto
Pluto.run()

```

---

<div class="post-metadata">

**Author:** ![cormullion](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cormullion/32/49131_2.png) [@cormullion](https://discourse.julialang.org/u/cormullion)\
**Post date:** [May 30, 2023, 9:45am UTC](https://discourse.julialang.org/t/is-pluto-not-yet-supported-by-julia-v1-9/99548/12 "2023-05-30T09:45:09Z")

</div>

> [@albheim](#):
>
> I was more thinking of the
> 
> > can be updated
> 
> part.

“_can_” is a bit of a weasel word in documentation, particularly when combined with the passive voice. It implies possibility and permission, but not necessarily a promise or guarantee of a successful outcome.

Consider:

“the `.julia` directory can be deleted at any time”

This is either reassuring or worrying, depending on your point of view, and how you interpret the word “can”.

I think that the “_can_” in “the package can be updated” is more about the fact that there’s a possibility of it being updated, because there’s a new version available. Pkg’s `up` won’t break your project, so it won’t necessarily attempt an update, even if it’s possible.

Documentation can be difficult… 🙂

---

<div class="post-metadata">

**Author:** ![albheim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/albheim/32/34660_2.png) [@albheim](https://discourse.julialang.org/u/albheim)\
**Post date:** [May 30, 2023, 10:54am UTC](https://discourse.julialang.org/t/is-pluto-not-yet-supported-by-julia-v1-9/99548/13 "2023-05-30T10:54:51Z")

</div>

Haha, sorry if I’m making this confusing, I don’t seem to be able to convey what I’m actually wondering here.

The sentence

> [@albheim](#):
>
> Shouldn’t `^` indicate that there is a newer version and that it can be updated?

was from me, maybe that is how it is worded in the documentation (though I can’t find it there), but I was just assuming things based on this sentence from OP

> [@apaoluzzi](#):
>
> **Info** Packages marked with ⌃ and ⌅ have new versions available, but those with ⌅ are restricted by compatibility constraints from upgrading. To see why use `status --outdated`

together with the fact that a package that was marked with `^` did not seem to want to update for OP.

So my question should maybe have been: shouldn’t a package that can’t update be marked with `⌅` instead of `^`?

---

<div class="post-metadata">

**Author:** ![nilshg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nilshg/32/2283_2.png) [@nilshg](https://discourse.julialang.org/u/nilshg)\
**Post date:** [May 30, 2023, 10:59am UTC](https://discourse.julialang.org/t/is-pluto-not-yet-supported-by-julia-v1-9/99548/14 "2023-05-30T10:59:22Z")

</div>

I’m not 100% sure as I can’t find an MWE currently but I think `^` is for multiple possible resolver states where not all packages can be at the latest version but you could update the one marked `^` which will trigger a downgrade of some other package, while `⌅` means you couldn’t update it at all without removing some other package from the environment.
