# \[ANN\] DistSSHKit.jl: run a Julia project on multiple machines over SSH

**URL:** <https://discourse.julialang.org/t/ann-distsshkit-jl-run-a-julia-project-on-multiple-machines-over-ssh/138960>\
**Category:** Package Announcements\
**Tags:** package, announcement, distributed, ssh, cli\
**Created:** [August 21, 2026, 2:13am UTC](https://discourse.julialang.org/t/ann-distsshkit-jl-run-a-julia-project-on-multiple-machines-over-ssh/138960 "2026-08-21T02:13:36Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![yamanori99](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yamanori99/32/223465_2.png) [@yamanori99](https://discourse.julialang.org/u/yamanori99)\
**Post date:** [August 21, 2026, 2:13am UTC](https://discourse.julialang.org/t/ann-distsshkit-jl-run-a-julia-project-on-multiple-machines-over-ssh/138960/1 "2026-08-21T02:13:36Z")

</div>

Hi everyone,

I’d like to announce [DistSSHKit.jl](https://github.com/yamanori99/DistSSHKit.jl), recently added to the General registry.

```julia
 pkg> add DistSSHKit

```

DistSSHKit runs the same Julia project locally and over SSH, then collects the results. Uses [Distributed.jl](https://github.com/JuliaLang/Distributed.jl) processes, not threads. Supported on macOS, Linux, and WSL2 Ubuntu (not native Windows), Julia 1.12+.

It handles the whole loop: deploys your project to each remote (via `--rsync` or `--git`), installs dependencies, runs your script, and collects the results — no scheduler and no manual per-machine setup. Two ways to run: `go` treats each machine as an independent, complete job; `drive` has a single master farm work out to all of them.

 ![DistSSHKit topology](https://global.discourse-cdn.com/julialang/original/3X/9/e/9eb37a5ae30d1b0840529272b7841ce8e3b11a8d.png)

```bash
# Prepare a remote
julia --project=. -m DistSSHKit setup --rsync user@host1
julia --project=. -m DistSSHKit setup --instantiate user@host1

# go: run script.jl as-is on each host
julia --project=. -m DistSSHKit go user@host1:1 path/to/script.jl

# drive: one master farms work to local and remote workers
julia --project=. -m DistSSHKit drive local:2 user@host1:4 path/to/driver.jl

```

Assumes SSH access to each remote is already set up, and that Julia is installed on every machine (local and remote) beforehand — DistSSHKit deploys your project and dependencies, not Julia itself. Also needs ssh, rsync, and (git deploy only) git — `pkg>` add won’t install these.

Docs: [Introduction · DistSSHKit.jl](https://yamanori99.github.io/DistSSHKit.jl/stable/)

The v0.3 CLI and API aren’t changing for now — we’re just fixing bugs. Separately, we’re also working on `DistSSHKitQueue.jl` (not yet in General), a lightweight scheduler that should make your SSH machines feel even more like real compute nodes.

Built this to make use of our lab’s Mini PCs that sit idle most of the time, and more broadly, to make Julia’s computing environment feel more integrated and approachable for small labs.

We’re also looking for help with maintenance — feedback and contributions welcome.

---

<div class="post-metadata">

**Author:** ![yamanori99](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yamanori99/32/223465_2.png) [@yamanori99](https://discourse.julialang.org/u/yamanori99)\
**Post date:** [August 25, 2026, 7:27am UTC](https://discourse.julialang.org/t/ann-distsshkit-jl-run-a-julia-project-on-multiple-machines-over-ssh/138960/2 "2026-08-25T07:27:48Z")

</div>

Update: **0.4** (2026-08-24) broke the examples above. The lightweight scheduler from the original post (`DistSSHKitQueue.jl`, still not in General) needed the same placement vocabulary as the kit, so we cut 0.4 instead of keeping the v0.3 freeze. Sorry for the churn.

`go` / `drive` tokens are now `parent[:N]` and `child:NAME[:N]`. `local:2` / bare `user@host` are gone. `setup` still takes a bare SSH name.

```bash
julia --project=. -m DistSSHKit go child:user@host1:1 path/to/script.jl
julia --project=. -m DistSSHKit drive parent:2 child:user@host1:4 path/to/driver.jl

```

[docs](https://yamanori99.github.io/DistSSHKit.jl/stable/) · [NEWS](https://github.com/yamanori99/DistSSHKit.jl/blob/main/NEWS.md)
