Windows developer setup · Desktop

Build Holder Desktop

Build and test the Holder windowed app, then run it with your local backend.

Install the tools

As explained in the Windows developer setup, you need to install Git and create $HOME\projects\holderteam.

Holder Desktop needs Holder Daemon, the local backend, to read and save your data.

If you only want to change the desktop app, get the backend from the Windows installer. If you want to change the backend too, build your own Holder Daemon. You do not need Visual Studio or a separate Core checkout just to build Desktop.

Install MSYS2

The desktop uses GTK, a set of tools for making application windows. MSYS2 supplies GTK and the tools needed to build the desktop app.

  1. Install MSYS2 to its default location.
  2. From the Start menu, open MSYS2 UCRT64, not MSYS, MINGW64, or CLANG64.
pacman -Syu

Copy that command into the UCRT64 window and press Enter. It updates MSYS2 itself. If it asks you to close the window, do so, reopen MSYS2 UCRT64, and run the same command again until it no longer asks for a core update.

Download Desktop

The desktop app is in the holder repository, in apps\desktop\gtk. If you followed the Core or Daemon guide, you already have it. Otherwise, open PowerShell and run these commands to download Holder into the workspace you made in the Windows developer setup.

cd $HOME\projects\holderteam
git clone --recurse-submodules https://github.com/HolderTeam/holder.git

Build and test Desktop

Open a new MSYS2 UCRT64 window. This kind of command window is often called a shell. Your source files stay in the same Windows folder, but MSYS2 writes paths differently: for example, C:\Users\pigeonwrath becomes /c/Users/pigeonwrath.

MSYS2 normally has its own home folder, so ~ may not point to the Windows user folder you used in PowerShell. The command below uses USERPROFILE to find your Windows user folder and cygpath to convert its path for MSYS2. You can copy it as written if you used the suggested workspace:

cd "$(cygpath -u "$USERPROFILE")/projects/holderteam/holder/apps/desktop/gtk"

If you chose a different workspace, use its path instead. For example, a checkout at D:\projects\holderteam\holder would use cd /d/projects/holderteam/holder/apps/desktop/gtk. See MSYS2's path guide for more examples.

Once you are in the Desktop folder, run these commands one at a time:

./make-win.sh deps
./make-win.sh test

The first command installs the MSYS2 tools and libraries the desktop needs. The second uses Meson, the desktop's build tool, to prepare the build-win folder, build the app, and run its automated checks. Wait for it to finish and confirm that tests ran with no failures.

Run Desktop and Daemon together

Daemon is a local service: it keeps running in one command window while the desktop app talks to it in another. Keep both under the same Windows user account. First, start the backend using the instructions for the route you chose.

If a backend is already running, you can use it and skip starting another copy. Close any open Desktop window before starting the app you just built.

If you installed the backend

Open PowerShell and run this command for the default installation folder:

& "$env:LOCALAPPDATA\Programs\Holder\bin\holderd.exe"

If you chose another installation folder, replace the path with the location of bin\holderd.exe inside that folder. The & tells PowerShell to run the program at the quoted path.

If you built the backend

Open PowerShell and run:

cd $HOME\projects\holderteam\holder\daemon
.\out\build\windows-vcpkg-debug\holderd.exe

Daemon should say that it is listening on 127.0.0.1:11499 and print a local documentation address. That address works only on your own PC. Leave the backend window open.

Start your Desktop build in UCRT64

In an MSYS2 UCRT64 window, run:

cd "$(cygpath -u "$USERPROFILE")/projects/holderteam/holder/apps/desktop/gtk"
./make-win.sh run

Holder should open with your projects, or a Home project if this is your first run. Create a test card. If it appears, Desktop and Daemon are talking to each other.

For another check, open the local API documentation while Daemon is running. An API is a way for programs to ask another program to do something; this page describes Holder's local API. Stop Daemon with Ctrl+C when you have finished.

Common first-machine problems

Meson cannot find GTK, Vala, or pkg-config

Close the window, reopen MSYS2 UCRT64, and use the cd command above to return to your Desktop folder. Run ./make-win.sh deps, then ./make-win.sh test again. Packages installed for a different kind of MSYS2 window are not available to UCRT64.

Desktop says Holder is not running

Start holderd.exe first, from PowerShell under the same Windows account. Do not change HOME or XDG_DATA_HOME in either window; they are advanced settings that tell programs where to look for their files.

A step fails

Ask for help on GitHub. Include the step you followed, the command and its output, your Windows version, and the versions of the tools you used.

You are ready

You can now change code, rebuild the part you changed, and run your local Holder app to see the result. Each project keeps its detailed and up-to-date development notes in its own README: Core, Daemon, and Desktop.

When you are happy with your change and the tests pass, follow Share your first change to submit it for review.