Pluto installation fails

Installing pluto faills.

I just installed julia Version 1.12.7 (2026-08-15), on Linux antarctic 6.12.101+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.101-1 (2026-08-05) x86_64 GNU/Linux.
That works fine.

The first step of the julia install seems to work:

julia> import Pkg; Pkg.add("Pluto")
    Updating registry at `~/.julia/registries/General.toml`
     Project No packages added to or removed from `~/.julia/environments/v1.12/Project.toml`
    Manifest No packages added to or removed from `~/.julia/environments/v1.12/Manifest.toml`

But the following step gives errors, see below.
How can this be resolved?

Regards,
Jacques

julia> import Pluto; Pluto.run()
[ Info: Precompiling Pluto [c3e4b0f8-55cb-11ea-2926-15256bba5781]
Info Given Pluto was explicitly requested, output will be shown live 
ERROR: LoadError: BoundsError: attempt to access 0-element Vector{Symbol} at index [1]
Stacktrace:
  [1] throw_boundserror(A::Vector{Symbol}, I::Tuple{Int64})
    @ Base ./essentials.jl:15
  [2] getindex
    @ ./essentials.jl:919 [inlined]
  [3] first
    @ ./abstractarray.jl:452 [inlined]
  [4] |>(x::Vector{Symbol}, f::typeof(first))
    @ Base ./operators.jl:972
  [5] top-level scope
    @ ~/.julia/packages/Pluto/NOYC1/src/runner/PlutoRunner.jl:372
  [6] include(mapexpr::Function, mod::Module, _path::String)
    @ Base ./Base.jl:307
  [7] top-level scope
    @ ~/.julia/packages/Pluto/NOYC1/src/Pluto.jl:26
  [8] include(mod::Module, _path::String)
    @ Base ./Base.jl:306
  [9] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)
    @ Base ./loading.jl:3106
 [10] top-level scope
    @ stdin:5
 [11] eval(m::Module, e::Any)
    @ Core ./boot.jl:489
 [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)
    @ Base ./loading.jl:2952
 [13] include_string
    @ ./loading.jl:2962 [inlined]
 [14] exec_options(opts::Base.JLOptions)
    @ Base ./client.jl:315
 [15] _start()
    @ Base ./client.jl:550
in expression starting at /home/jacques/.julia/packages/Pluto/NOYC1/src/runner/PlutoRunner.jl:8
in expression starting at /home/jacques/.julia/packages/Pluto/NOYC1/src/Pluto.jl:1
in expression starting at stdin:5
  ✗ Pluto
Precompiling Pluto finished.
  0 dependencies successfully precompiled in 2 seconds. 47 already precompiled.
  20 dependencies precompiled but different versions are currently loaded (ArgTools, Dates, Downloads, LibCURL, LibCURL_jll, LibGit2, LibGit2_jll, LibSSH2_jll, Logging, MozillaCACerts_jll, NetworkOptions, OpenSSL_jll, Pkg, Printf, TOML, Tar, UUIDs, Zlib_jll, nghttp2_jll and p7zip_jll). Restart julia to access the new versions. Otherwise, 7 dependents of these packages may trigger further precompilation to work with the unexpected versions.

ERROR: The following 1 direct dependency failed to precompile:

Pluto 

Failed to precompile Pluto [c3e4b0f8-55cb-11ea-2926-15256bba5781] to "/home/jacques/.julia/compiled/v1.12/Pluto/jl_ubvrk7".
ERROR: LoadError: BoundsError: attempt to access 0-element Vector{Symbol} at index [1]
Stacktrace:
  [1] throw_boundserror(A::Vector{Symbol}, I::Tuple{Int64})
    @ Base ./essentials.jl:15
  [2] getindex
    @ ./essentials.jl:919 [inlined]
  [3] first
    @ ./abstractarray.jl:452 [inlined]
  [4] |>(x::Vector{Symbol}, f::typeof(first))
    @ Base ./operators.jl:972
  [5] top-level scope
    @ ~/.julia/packages/Pluto/NOYC1/src/runner/PlutoRunner.jl:372
  [6] include(mapexpr::Function, mod::Module, _path::String)
    @ Base ./Base.jl:307
  [7] top-level scope
    @ ~/.julia/packages/Pluto/NOYC1/src/Pluto.jl:26
  [8] include(mod::Module, _path::String)
    @ Base ./Base.jl:306
  [9] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)
    @ Base ./loading.jl:3106
 [10] top-level scope
    @ stdin:5
 [11] eval(m::Module, e::Any)
    @ Core ./boot.jl:489
 [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)
    @ Base ./loading.jl:2952
 [13] include_string
    @ ./loading.jl:2962 [inlined]
 [14] exec_options(opts::Base.JLOptions)
    @ Base ./client.jl:315
 [15] _start()
    @ Base ./client.jl:550
in expression starting at /home/jacques/.julia/packages/Pluto/NOYC1/src/runner/PlutoRunner.jl:8
in expression starting at /home/jacques/.julia/packages/Pluto/NOYC1/src/Pluto.jl:1
in expression starting at stdin:

That says nothing was added at this time, and the error message naming Pluto files also implies it was already installed. Can you provide your Pkg.status() to confirm it’s in the environment, and do you know anything more about how it got there if it is?

Thanks for the quick response, it helped!
Short answer is: after I fully reinstalled julia: pluto works. :grinning_face:

Long answer:
I did the following steps:

  1. I installed julia using:
curl -fsSL https://install.julialang.org | sh
  1. I went through a getting started tutorial, which included
julia> using Pkg
julia> Pkg.add("DataFrames")
julia> Pkg.add("CSV")
  1. I installed pluto
julia> import Pkg; Pkg.add("Pluto")
julia> import Pluto; Pluto.run()

which failed

  1. I tried to completely remove julia using:
juliaup self uninstall

Note: this seems not to delete all files in .julia :neutral_face:

  1. I reinstalled julia
  2. I installed pluto, which failed again.
  3. I wrote the previous post
  4. I got the comment that implied that the responses were not correct for a fresh install.

Second attempt to completely remove julia and get a fresh install:

  1. I uninstalled julia
  2. I deleted .julia and all files in it
  3. I installed julia
  4. I installed pluto - now it worked!

Good to hear that it got working. I’ll add a few comments to clear a few things up, but I actually ended up with a question I’ll have to figure out as well.

  • The Julia install/uninstall is completely separate from the .julia folder, a global depot of packages, binaries, package registries, shared environments, and logs. That’s by design so you don’t have to redo everything just to upgrade base Julia.
  • Pkg API like add or rm are operations on your project and manifest files, which are lightweight environment specifications. The bulk of what makes environments actually work, like package installations, are in the .julia depot, and there actually isn’t an official API for directly reinstalling a package. Pkg does periodically uninstall (gc) packages that are not referenced by any active environments (according to .julia logs, not whether they’re activated in a Julia process), so a manual rm then gc of a package you’ve installing for the first time on the system could work as an uninstall. Not so much when it’s in so many active environments that it’s no longer worth manually tweaking all of them.
  • Nuking the .julia folder along with reinstalling Julia worked because you really did redo everything. But this isn’t great in the long run when you accumulated more things. It is possible to delete package-specific folders, but a proper reinstall would involve clearing all the dependencies and binaries as well. I wouldn’t attempt that manually, an official API would be nice.

I had issues with Pluto.jl in the past. Solution was to activate a new environment and install it there.

Another user ran into the same error message on v1.13, and while impossible to confirm if it’s the same cause without knowing the (now deleted) Pluto version here, it’s worth looking out for similar problems in the future. In that user’s case, they installed a Pluto version from 2021, and it tried to look for internal Julia variables that no longer exists on 1.12 or 1.13. The error message narrows your initial install down to roughly the same period, and we can rule out 2024 onwards, but I have no idea why your unversioned adds reached so far back. Pluto heavily relies on Julia internals but opted not to strictly constrain Julia versions for each release, so be careful to match Pluto and Julia releases closely by release date. At the very least, I think a glitched install was unlikely here, and simpler updates would have worked.