# Building from source This page covers setting up a development machine, the recipes, the test suites, and what a build you make yourself can and cannot do. Every workflow runs through [`just`](https://github.com/casey/just); `just --list` shows all recipes with a one-line description. ## Prerequisites | Tool | Version | Notes | | --- | --- | --- | | Git | recent | On Windows, Git for Windows (its `sh.exe` runs the recipes) | | Node.js | 24 | `package.json` pins the exact version under `devEngines`; pnpm downloads it when yours differs | | pnpm | 12 | The exact version is the `packageManager` field in `package.json` | | just | 1.58 or newer | The version CI uses | | Python | 3.10 or newer | Helper scripts and the trainer sidecar's unit tests | No global npm packages are needed; every other tool is a workspace dependency. ## Windows 11 (the target platform) Iblis is built for Windows, and only Windows runs the real engine and trainer packs. 1. Install the tools above. Run the recipes from a terminal where Git for Windows' `sh.exe` is on `PATH` (Git Bash works). The `Justfile` uses `sh` on Windows because `bash.exe` on Windows may launch WSL instead. 2. `just install` installs dependencies and downloads the Electron binary. 3. `just dev` opens the app with hot reload. 4. `just dist` builds an unsigned NSIS installer into `apps/shell/release/`. A development run is unpackaged, so Electron names its profile folder after the workspace package rather than the installed app (`%APPDATA%\Iblis\`). Plugins and tracks from an installed copy are therefore not visible to it, and it does not change them. ## Linux (development and CI) Everything except the native engine and trainer runs on Linux: the UI, the plugin host, the library, the test suites, and the production bundle. 1. Install the tools above, plus `xvfb` (for `xvfb-run`) and the usual Chromium runtime libraries so Electron can start. 2. `just install` 3. `just lint`, `just typecheck`, `just test`, `just build` 4. `just dev` needs a desktop session. On a headless machine, use the test recipes, which start Electron under `xvfb-run`. The engine pack's binaries are Windows CUDA builds, so generation with the real engine needs Windows. The E2E suite uses the fixture engine instead, which is plain Node. ## Recipes | Recipe | What it does | | --- | --- | | `just install` | `pnpm install` for the workspace, then the Electron binary | | `just dev` | Build the SDK, then run the app with hot reload | | `just build` | Build the SDK and bundle main, preload, and renderer into `apps/shell/out/` | | `just dist` | `build` plus electron-builder: unsigned installer in `apps/shell/release/` | | `just lint` | CSS style scan, ESLint and Prettier (SDK and shell), emoji scan of tracked files | | `just format` | Prettier over the shell | | `just typecheck` | TypeScript for the SDK; svelte-check and TypeScript for the shell | | `just test` | Vitest in every workspace package, then the trainer's Python `unittest` suite | | `just e2e` | Build, then the renderer E2E suite | | `just media-test` | Real Electron check of the `iblis-track://` media protocol and `