Local development on macOS and Windows
Translation of a guide from the project repository; the Czech original is authoritative. The project's documentation, task files, issues and commits are in Czech — Claude Code reads them for you, and you can ask it in English. Discord is Czech-speaking too, but English works as well. The installation scripts print their messages in Czech; this guide quotes them verbatim with the meaning in brackets.
A guide for someone who wants to get Shipard running on their own computer and has never administered a Linux server. At the end you have a running Shipard and its developer dashboard in your browser.
Shipard runs on Ubuntu. On a Mac you therefore run it in a virtual machine
(Multipass), on Windows in WSL — in both cases it is Ubuntu inside
your computer. The installation is done by one script,
scripts/dev-bootstrap.sh.
Do you have a Linux server, or Ubuntu directly on your computer? You don't need this guide — the Linux procedure is in
linux-install.md. The bootstrap just runs its steps one after another.
1. What you will need
- a Mac (Apple silicon or Intel), or Windows 10 (version 21H2 or later) or Windows 11
- about 20 GB of disk space and 4 GB of memory for Ubuntu
- an internet connection — the installation downloads packages and takes a while
- a GitHub account only if you want to contribute; you don't need one to try it out
The source code lives inside Ubuntu in the directory ~/sw/shpd, not on
the Mac or Windows disk. Files shared from the host are slow and break the
permissions the installation relies on.
2. macOS — Multipass
1. Install Multipass following the official page.
2. Download the configuration — in the Terminal app:
curl -fsSLO https://raw.githubusercontent.com/shipard/shipard/stable/scripts/multipass/shipard-dev.yaml
3. Insert your public SSH key (only if you want to connect Claude in chat
— chapter 5; otherwise skip this step). Create a separate key for the
development machine and just press Enter when asked for a passphrase —
remote-dev-bridge can't use a key with a passphrase:
ssh-keygen -t ed25519 -f ~/.ssh/shipard_dev
If you already have the key ~/.ssh/shipard_dev, ssh-keygen asks whether
to overwrite it — answer n, the existing key is enough.
Then put the key into shipard-dev.yaml — this command replaces the
placeholder line with the contents of the public key, and the second one
prints the result:
sed -i '' "s|ssh-ed25519 AAAA_NAHRAD_TENTO_RADEK_SVYM_VEREJNYM_KLICEM|$(cat ~/.ssh/shipard_dev.pub)|" shipard-dev.yaml
grep -A1 'ssh_authorized_keys:' shipard-dev.yaml
Under ssh_authorized_keys: there should be - ssh-ed25519 AAAA… with your
key, not the placeholder text AAAA_NAHRAD_… ("replace this line with your
public key").
If you want to edit the file by hand: open -e shipard-dev.yaml (TextEdit).
On the line - ssh-ed25519 AAAA_NAHRAD_TENTO_RADEK_SVYM_VEREJNYM_KLICEM
replace everything after the dash with the contents of the file
~/.ssh/shipard_dev.pub; keep the dash and the indentation. It is always the
.pub file that goes in — the file without an extension is the private
key and is never copied anywhere.
4. Launch the virtual machine:
multipass launch 26.04 --name shipard --cpus 2 --memory 4G --disk 20G \
--timeout 1800 --cloud-init shipard-dev.yaml
The command waits until the installation inside finishes. The --timeout
option is needed: the installation takes longer than the default 5 minutes,
after which Multipass would report an error even though the machine keeps
working.
Leave the network at the default. Don't add
--networkor--bridged. The developer dashboard has no sign-in — on Multipass's default network it is reachable only from your computer; on the local network anyone could see it.
5. Watch the progress — in a second Terminal window:
multipass exec shipard -- tail -f shipard-bootstrap.log
It is done when the output ends with the summary
==> Hotovo — vývojové prostředí Shipardu běží. ("Done — Shipard's
development environment is running") and the dashboard address (Ctrl+C
stops watching). The same is reported by
multipass exec shipard -- cloud-init status --wait — it prints
status: done.
6. Open the dashboard. The machine's address is on the IPv4 line:
multipass info shipard
In your browser open http://<IPv4>/_dev/.
Commands that will come in handy:
| Command | What for |
|---|---|
multipass shell shipard |
a terminal inside Ubuntu |
multipass stop shipard / multipass start shipard |
shutting the machine down and starting it |
multipass info shipard |
state and address (check it after a restart, it may change) |
multipass delete --purge shipard |
deleting the machine including its data |
3. Windows — WSL
1. Install Ubuntu. Open PowerShell as administrator:
wsl --install Ubuntu-26.04
If the installation asks for a Windows restart, restart; if Ubuntu then
doesn't open on its own, run the command again. Available distributions are
listed by wsl --list --online.
2. First start. Ubuntu asks for the name and password of a new user.
Remember the password — sudo will want it.
3. Run the bootstrap — in the Ubuntu window:
curl -fsSL https://raw.githubusercontent.com/shipard/shipard/stable/scripts/dev-bootstrap.sh | bash
The script asks for the password once at the start and then runs on its
own. It ends with the summary
==> Hotovo — vývojové prostředí Shipardu běží. ("Done — Shipard's
development environment is running").
If Ubuntu reports curl: command not found, install it
(sudo apt update && sudo apt install -y curl) and repeat the command.
4. Open the dashboard in a browser on Windows: http://localhost/_dev/.
5. Optional: SSH for Claude in chat (chapter 5). Create the key on Windows — in PowerShell, just press Enter when asked for a passphrase:
ssh-keygen -t ed25519
Then, in the Ubuntu window, run the bootstrap again with the --with-ssh
option (put your Windows user name in place of <user>):
bash ~/sw/shpd/scripts/dev-bootstrap.sh --with-ssh \
--ssh-pubkey-file /mnt/c/Users/<user>/.ssh/id_ed25519.pub
SSH then listens on port 2222 and lets in only the holder of the key;
signing in with a password is not possible. Both can be done at once during
the first installation:
curl -fsSL … | bash -s -- --with-ssh --ssh-pubkey-file ….
Things to watch out for:
- Keep the checkout in Ubuntu (
~/sw/shpd), never in/mnt/c/…. - Keep the Ubuntu window open while you work. WSL may stop a distribution with no open terminal after a while — the dashboard and SSH then stop responding until you open Ubuntu again.
- The bootstrap needs WSL 2 with systemd. New Ubuntu installations have it enabled; if the script reports that systemd isn't running, it also says what to set.
4. First data source
A data source is one company — its own database and files. You create it in
the dashboard with the + New DS button; tick Seed test data so you
have something to work with right away. The individual steps and what to do
next: dev-daily.md (section 2).
5. Connecting to Claude
The project works with the AI assistant in two roles — described in
ai-workflow.md.
Claude Code runs directly inside Ubuntu, in the directory ~/sw/shpd.
For everyday work (implementation, tests) it is all you need. The bootstrap
doesn't install it — installation, sign-in and first steps are in
claude-code-intro.md.
Claude in chat (design, assignments, verification) connects to Ubuntu
over SSH through the remote-dev-bridge
application on your computer — installation and connecting it to the Claude
desktop app are in
ai-workflow.md §7. In
the bridge's settings add a server and a project with the ID shipard:
| Multipass | WSL | |
|---|---|---|
| host | the address from multipass info shipard |
localhost |
| port | 22 |
2222 |
| user | ubuntu |
your user in Ubuntu |
| key | the private key matching the one you put into shipard-dev.yaml |
the private key from Windows (C:\Users\<user>\.ssh\id_ed25519) |
| project root | /home/ubuntu/sw/shpd |
/home/<user>/sw/shpd |
At the end of a bootstrap with --with-ssh these values are printed in the
summary. After saving, ask Claude in chat for the machine's hostname — that
verifies the project points at the right machine.
On macOS use a signed release from the Releases page. A custom unsigned build ends with the error "No route to host" — macOS doesn't give it the Local Network permission, without which it can't reach the virtual machine.
6. Daily work
A terminal in Ubuntu: on a Mac multipass shell shipard, on Windows the
Ubuntu window. The code is in ~/sw/shpd.
What to do after git pull, when to run ds-upgrade-all and where the
command overview is, is in dev-daily.md — the same for
Multipass, WSL and a Linux server. The bootstrap enabled git hooks, so
dependencies and the frontend update themselves after git pull.
The bootstrap can be run again at any time — it only verifies the finished steps. The optional parts are added the same way:
| Option | What it adds |
|---|---|
--with-render |
the PDF rendering service (document printouts) — see operations/render-service.md |
--with-ssh |
an SSH server on port 2222, key-only sign-in |
--ssh-pubkey-file <path> |
the public key allowed to sign in over SSH |
--branch <branch> |
the branch for a new checkout (default stable) |
--dir <path> |
the checkout directory (default ~/sw/shpd) |
bash ~/sw/shpd/scripts/dev-bootstrap.sh --with-render
The checkout is cloned over HTTPS. Once you want to send changes, switch it
as described in dev-daily.md
(section 5).
7. Something not working?
The bootstrap ended with an error. The last lines say in which step
(==> Bootstrap selhal v kroku: …, "Bootstrap failed in step: …"); the cause
is above them. On a Mac the output is in a file:
multipass exec shipard -- tail -n 50 shipard-bootstrap.log
After removing the cause, run the bootstrap again — in a terminal inside
Ubuntu bash ~/sw/shpd/scripts/dev-bootstrap.sh, and if the checkout
doesn't exist yet, with the curl … | bash command from chapter 3 (step 3).
multipass launch reports "timed out". The machine is running and the
installation continues — watch it as in step 5 of chapter 2.
The dashboard won't open. On a Mac check the machine's address and state
(multipass info shipard); on Windows keep the Ubuntu window open.
The application reports an error, or it still doesn't work? The health
check shpd-server doctor, fixing permissions, logs and where to turn —
dev-daily.md (section 7). Attach
the last lines of the bootstrap output to a report about it.