# What's in your @?

**URL:** https://discourse.julialang.org/t/whats-in-your/129530
**Category:** General Usage
**Tags:** package, environment
**Created:** [June 1, 2025, 4:00pm UTC](https://discourse.julialang.org/t/whats-in-your/129530 "2025-06-01T16:00:04Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![NonDairyNeutrino](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nondairyneutrino/32/221496_2.png) [@NonDairyNeutrino](https://discourse.julialang.org/u/NonDairyNeutrino)
#### Post date: [June 1, 2025, 4:00pm UTC](https://discourse.julialang.org/t/whats-in-your/129530/1 "2025-06-01T16:00:04Z")

</div>

Simple enough, what’s in your default environment? Could be fun to guess what everyone primarily does based only on their @s. What do you think I do?

```bash
julia -e "Pkg.status()"

```

```julia
Status `~/.julia/environments/v1.11/Project.toml`
  [28312eec] Alert v1.2.0
  [6e4b80f9] BenchmarkTools v1.6.0
  [052768ef] CUDA v5.8.2
  [e30172f5] Documenter v1.11.4
  [35a29f4d] DocumenterTools v0.1.20
  [bdcacae8] LoopVectorization v0.12.172
  [5fb14364] OhMyREPL v0.5.31
  [14b8a8f1] PkgTemplates v0.7.55
  [91a5bcdd] Plots v1.40.13
  [27ebfcd6] Primes v0.5.7
  [295af30f] Revise v3.8.0
  [5e0ebb24] Strided v2.3.0
  [ac1d9e8a] ThreadsX v0.1.12

```

---

<div class="post-metadata">

### Author: ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)
#### Post date: [June 1, 2025, 4:01pm UTC](https://discourse.julialang.org/t/whats-in-your/129530/2 "2025-06-01T16:01:32Z")

</div>

```julia
Status `~/.julia/environments/v1.11/Project.toml`
  [16fef848] LiveServer v1.5.0
  [1e6cf692] TestEnv v1.102.1

```

If I need BenchmarkTools or Documenter or ControlPlots I put them into the test environment of my project.

---

<div class="post-metadata">

### Author: ![NonDairyNeutrino](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nondairyneutrino/32/221496_2.png) [@NonDairyNeutrino](https://discourse.julialang.org/u/NonDairyNeutrino)
#### Post date: [June 1, 2025, 4:03pm UTC](https://discourse.julialang.org/t/whats-in-your/129530/3 "2025-06-01T16:03:13Z")

</div>

So minimal! I take it you do a lot of web dev then?

---

<div class="post-metadata">

### Author: ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)
#### Post date: [June 1, 2025, 4:06pm UTC](https://discourse.julialang.org/t/whats-in-your/129530/4 "2025-06-01T16:06:13Z")

</div>

> [@NonDairyNeutrino](#):
>
> I take it you do a lot of web dev then?

No. I need LiveServer to view the documentation of my own packages. Like this:

Script `build_docu.jl`in the scripts folder of my packages:

```julia-auto
# build and display the html documentation locally
# you must have installed the package LiveServer in your global environment

using Pkg

function globaldependencies()
    projectpath = Pkg.project().path
    basepath, _ = splitdir(projectpath)
    Pkg.activate()
    Pkg.update()
    globaldependencies = keys(Pkg.project().dependencies)
    Pkg.activate(basepath)
    globaldependencies
end

if !("LiveServer" in globaldependencies())
    println("Installing LiveServer globally!")
    run(`julia -e 'using Pkg; Pkg.add("LiveServer")'`)
end

if !("Documenter" ∈ keys(Pkg.project().dependencies))
    using TestEnv
    TestEnv.activate()
end
using LiveServer; servedocs(launch_browser=true)

```

---

<div class="post-metadata">

### Author: ![Eben60](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/eben60/32/13475_2.png) [@Eben60](https://discourse.julialang.org/u/Eben60)
#### Post date: [June 1, 2025, 4:17pm UTC](https://discourse.julialang.org/t/whats-in-your/129530/5 "2025-06-01T16:17:45Z")

</div>

```julia
(@v1.11) pkg> st
Status `~/.julia/environments/v1.11/Project.toml`
  [09cdc199] BasicAutoloads v1.0.4
  [295af30f] Revise v3.8.0
  [27c01619] ShareAdd v2.2.0

```

For everything else there is ShareAdd.jl:

```julia
julia> ShareAdd.info()
  @About
   => ["About"]
  @BenchmarkTools
   => ["BenchmarkTools"]
  @DataFrames
   => ["CSV", "DataFrames", "Missings", "StringEncodings"]
  @DefaultApplication
   => ["DefaultApplication"]
  @DocumenterTools
   => ["DocumenterTools"]
  @Makie
   => ["Bonito", "CairoMakie", "GLMakie", "Makie", "Observables", "WGLMakie"]
  @Math
   => ["SpecialFunctions", "StatsBase"]
  @Mendeleev
   => ["Mendeleev"]
  @PackageMaker
   => ["Blink", "PackageMaker"]
  @Plots
   => ["Plots", "StatsPlots"]
  @Serializations
   => ["JLD2", "JSON3"]
  @StaticArrays
   => ["StaticArrays"]
  @TestEnv
   => ["TestEnv"]
  @TestingTools
   => ["Coverage", "ReTest", "TestItemRunner", "TestItems", "TestSetExtensions", "WhyNotEqual"]
  @ThisNThan
   => ["AutoHashEquals", "Chevrons", "FilePathsBase", "FloatingTableView", "OhMyREPL", "QML", "TableView"]
  @Unitful
   => ["Unitful"]
  @v1.11
   => ["BasicAutoloads", "Revise", "ShareAdd"]

```

---

<div class="post-metadata">

### Author: ![Satvik](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/satvik/32/20486_2.png) [@Satvik](https://discourse.julialang.org/u/Satvik)
#### Post date: [June 1, 2025, 4:22pm UTC](https://discourse.julialang.org/t/whats-in-your/129530/6 "2025-06-01T16:22:17Z")

</div>

Up until a week ago, literally nothing – I only used project environments.

Recently, I started keeping DaemonMode.jl in my default environment, which I stack on top of project environments, for use with Claude Code.

---

<div class="post-metadata">

### Author: ![NonDairyNeutrino](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nondairyneutrino/32/221496_2.png) [@NonDairyNeutrino](https://discourse.julialang.org/u/NonDairyNeutrino)
#### Post date: [June 1, 2025, 4:39pm UTC](https://discourse.julialang.org/t/whats-in-your/129530/7 "2025-06-01T16:39:59Z")

</div>

Oh interesting I’ve never heard of your ShareAdd.jl. I’ve tried multiple shared environments before but exactly found it to be more of a hassle than it benefitted. I’ll have to check this out!

---

<div class="post-metadata">

### Author: ![NonDairyNeutrino](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nondairyneutrino/32/221496_2.png) [@NonDairyNeutrino](https://discourse.julialang.org/u/NonDairyNeutrino)
#### Post date: [June 1, 2025, 4:42pm UTC](https://discourse.julialang.org/t/whats-in-your/129530/8 "2025-06-01T16:42:52Z")

</div>

DaemonMode.jl looks pretty cool! My first thought it that it’s kind of a non-trivial “hello world” of multiprocessing. Now that I think about it, it could also be useful for tmux-like persistent computations after you leave ssh?

---

<div class="post-metadata">

### Author: ![Satvik](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/satvik/32/20486_2.png) [@Satvik](https://discourse.julialang.org/u/Satvik)
#### Post date: [June 1, 2025, 5:07pm UTC](https://discourse.julialang.org/t/whats-in-your/129530/9 "2025-06-01T17:07:55Z")

</div>

Yeah – just keep DaemonMode.jl running in the background, and then you can execute scripts against it without having to go through standard/first time compilation all over again.

I find it particularly helpful with other programs that want to call Julia – DaemonMode makes it pretty easy to just keep a single Julia process rather than restarting it every time.

I was initially worried about the fact that it hasn’t had releases in a while, but it works just fine.

---

<div class="post-metadata">

### Author: ![digital\_carver](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/digital_carver/32/33818_2.png) [@digital\_carver](https://discourse.julialang.org/u/digital_carver)
#### Post date: [June 1, 2025, 5:45pm UTC](https://discourse.julialang.org/t/whats-in-your/129530/10 "2025-06-01T17:45:46Z")

</div>

> [@Satvik](#):
>
> I find it particularly helpful with other programs that want to call Julia

What kind of programs do you mean?

---

<div class="post-metadata">

### Author: ![Satvik](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/satvik/32/20486_2.png) [@Satvik](https://discourse.julialang.org/u/Satvik)
#### Post date: [June 1, 2025, 6:16pm UTC](https://discourse.julialang.org/t/whats-in-your/129530/11 "2025-06-01T18:16:49Z")

</div>

Agentic LLMs, like Claude Code.

By default, an agent will run a script as `julia my_script.jl`, see what’s broken, and then try to fix it. This is slow because of startup time + recompiling functions. By starting a Daemon and then running scripts, the test feedback loop is much faster.

```julia
nohup julia --startup-file=no -e "using Revise; using DaemonMode; serve(;shared=true)" > daemon.log 2>&1 &
julia --startup-file=no -e "using DaemonMode; runargs()" script.jl

```

---

<div class="post-metadata">

### Author: ![jakobjpeters](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jakobjpeters/32/207797_2.png) [@jakobjpeters](https://discourse.julialang.org/u/jakobjpeters)
#### Post date: [June 2, 2025, 5:39am UTC](https://discourse.julialang.org/t/whats-in-your/129530/12 "2025-06-02T05:39:58Z")

</div>

```julia-repl
(@v1.11) pkg> st
Status `~/.julia/environments/v1.11/Project.toml`
  [5fb14364] OhMyREPL v0.5.31
  [21216c6a] Preferences v1.4.3
  [295af30f] Revise v3.8.0
  [ac92255e] Speculator v0.2.0
  [0c614874] TerminalPager v0.6.2
  [3fa0cd96] REPL v1.11.0

```

I need to get around to making a system image for these 😛

---

<div class="post-metadata">

### Author: ![sijo](https://avatars.discourse-cdn.com/v4/letter/s/da6949/32.png) [@sijo](https://discourse.julialang.org/u/sijo)
#### Post date: [June 2, 2025, 9:09am UTC](https://discourse.julialang.org/t/whats-in-your/129530/13 "2025-06-02T09:09:02Z")

</div>

```julia
pkg> st
ERROR: no active project

```

because I disable this feature in my `startup.jl`:

```julia
# Remove global environment from load path
let
    i = findfirst(==("@v#.#"), LOAD_PATH)
    if !isnothing(i)
        deleteat!(LOAD_PATH, i)
    end
end

```

Too many times I have added packages in the global environment by mistake, and then I forgot to add them in the local environment (because it was working!), resulting in non-reproducible projects and possibly corrupted state where incompatible packages where used together. Because as the [documentation says](https://docs.julialang.org/en/v1/manual/code-loading/#Environment-stacks):

> Packages in non-primary environments can end up using incompatible versions of their dependencies even if their own environments are entirely compatible. This can happen when one of their dependencies is shadowed by a version in an earlier environment in the stack (either by graph or path, or both).

I’ve ranted about this before (a bit too vehemently) [here](https://discourse.julialang.org/t/general-environment-creating-issues-for-local-ones/74327/4). The gist of it is that I don’t understand why Julia would use incompatible package versions by default, instead of showing an error and maybe having an opt-in setting to allow it (suggested name: `yolo=yes`).

---

<div class="post-metadata">

### Author: ![NonDairyNeutrino](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nondairyneutrino/32/221496_2.png) [@NonDairyNeutrino](https://discourse.julialang.org/u/NonDairyNeutrino)
#### Post date: [June 2, 2025, 4:17pm UTC](https://discourse.julialang.org/t/whats-in-your/129530/14 "2025-06-02T16:17:06Z")

</div>

> [@jakobjpeters](#):
>
> ```julia
> [ac92255e] Speculator v0.2.0
> [0c614874] TerminalPager v0.6.2
> 
> ```

I’ve never heard of either of these. What do you do with them?

---

<div class="post-metadata">

### Author: ![NonDairyNeutrino](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nondairyneutrino/32/221496_2.png) [@NonDairyNeutrino](https://discourse.julialang.org/u/NonDairyNeutrino)
#### Post date: [June 2, 2025, 4:20pm UTC](https://discourse.julialang.org/t/whats-in-your/129530/15 "2025-06-02T16:20:01Z")

</div>

That definitely makes sense. Though the biggest one on the other side for me is Plots.jl. I usually want to plot stuff when I’m testing functionality/making examples/actually doing something with it, but don’t want the package itself to directly depend on Plots.

---

<div class="post-metadata">

### Author: ![digital\_carver](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/digital_carver/32/33818_2.png) [@digital\_carver](https://discourse.julialang.org/u/digital_carver)
#### Post date: [June 2, 2025, 5:22pm UTC](https://discourse.julialang.org/t/whats-in-your/129530/16 "2025-06-02T17:22:33Z")

</div>

TerminalPager.jl is invaluable for reading long docstrings or outputs, it’s practically the first package I install in any new Julia version. A lot of people also use it for viewing tabular data (eg. DataFrames), though I generally go straight to Jupyter or Pluto for those.

My preferred way of using TerminalPager is to use the `|` key to change the REPL mode: it shifts into `pager>` mode after that, and any output that occurs in that mode, if it’s longer than one screen length, gets displayed in pager interface i.e. like `less` on Linux where you can scroll up and down, search, etc. If you press `?` when you’re in pager mode, you get to pager-help mode where the docstrings are displayed the same way. Because Julia’s functions often have many methods, there ends up being screenfuls of docstrings even if each individual doc is pretty short. So TerminalPager makes those docs a lot more manageable and easier to parse.

(Speculator seems to be Jakob’s own package, that I also learnt about from this thread, so I’ll just link to [its announcement post](https://discourse.julialang.org/t/speculator-jl-reduce-latency-through-speculative-compilation/124344/) that I found today.)

---

<div class="post-metadata">

### Author: ![jakobjpeters](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jakobjpeters/32/207797_2.png) [@jakobjpeters](https://discourse.julialang.org/u/jakobjpeters)
#### Post date: [June 2, 2025, 5:27pm UTC](https://discourse.julialang.org/t/whats-in-your/129530/17 "2025-06-02T17:27:57Z")

</div>

@digital_carver’s description of TerminalPager.jl is excellent and much better than I could give!

Speculator.jl is indeed one of my own packages. It has a feature where it tries to precompile methods in a background thread of your REPL. I’m not sure to what extent this feature is actually useful, but I’m at least using it to ensure it doesn’t break.

---

<div class="post-metadata">

### Author: ![Nathan\_Boyer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nathan_boyer/32/14825_2.png) [@Nathan\_Boyer](https://discourse.julialang.org/u/Nathan_Boyer)
#### Post date: [June 2, 2025, 5:42pm UTC](https://discourse.julialang.org/t/whats-in-your/129530/18 "2025-06-02T17:42:47Z")

</div>

@Eben60 I’m curious about the combination of BasicAutoloads.jl and ShareAdd.jl here. Is your setup such that typing `DataFrame()` will automatically load your `@DataFrames` shared environment and work?

* * *

EDIT: Found the answer (yes!):

> [@\[ANN\] ShareAdd.jl - making easy to import packages from multiple environments](https://discourse.julialang.org/t/ann-shareadd-jl-making-easy-to-import-packages-from-multiple-environments/121261/3):
>
> ShareAdd.jl can be combined nicely with BasicAutoloads.jl by @Lilith . Here is my current startup.jl: if VERSION \>= v"1.11" && isinteractive() using ShareAdd import BasicAutoloads BasicAutoloads.register\_autoloads([["plot", "scatter"] =\> :(isdefined(Main, :plot) || @usingany Plots), ["DataFrame", "combine", "transform!", "transform", "select!", "select", "groupby"] =\> :(@usingany DataFrames), ["CSV"] =\> :(@usingany CSV, StringEncodings, DataFrames), ["Date…

---

<div class="post-metadata">

### Author: ![DNF](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dnf/32/10191_2.png) [@DNF](https://discourse.julialang.org/u/DNF)
#### Post date: [June 2, 2025, 6:11pm UTC](https://discourse.julialang.org/t/whats-in-your/129530/19 "2025-06-02T18:11:31Z")

</div>

> [@digital\_carver](#):
>
> [TerminalPager.jl](https://juliaregistries.github.io/General/packages/redirect_to_repo/TerminalPager) is invaluable for reading long docstrings or outputs,

This sounds really nice, but I wish I didn’t need to enter a special mode to get this, which imo should be default behavior.

Is it theoretically possible for a package to override the default behavior and enable this instead?

---

<div class="post-metadata">

### Author: ![eyxl](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/eyxl/32/217676_2.png) [@eyxl](https://discourse.julialang.org/u/eyxl)
#### Post date: [July 11, 2025, 2:01pm UTC](https://discourse.julialang.org/t/whats-in-your/129530/20 "2025-07-11T14:01:43Z")

</div>

Hi, how do you tell claude code to automatically use that daemon client in its agentic terminal commands? Do you specify in claude.md that the agent should use  
`julia --startup-file=no -e "using DaemonMode; runargs()"` instead of `julia` ?
