Building from source
Zephyr is a Tauri 2 + Svelte 5 app. Building it locally takes about 5 minutes the first time, ~30 seconds for subsequent rebuilds.
Prerequisites
- Rust stable toolchain - install via rustup.
- Node.js 18+ - nodejs.org or via your package manager.
- pnpm -
npm i -g pnpmonce Node is installed. - Platform-specific deps for Tauri - see Tauri's prerequisites for your OS.
On Linux you'll typically need:
sudo apt install libwebkit2gtk-4.1-dev libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-devOn Windows you need the Microsoft C++ Build Tools + WebView2 runtime (the latter usually pre-installed on Win10/11).
On macOS, Xcode Command Line Tools (xcode-select --install) is enough.
Clone
git clone https://github.com/Prismo-Studio/Zephyr.git
cd ZephyrInstall JS deps
pnpm installThis pulls Svelte, Tauri's JS bindings, and dev tools. ~30 seconds on a normal connection.
Run in dev mode
pnpm tauri devCompiles the Rust side (slow first time, fast on subsequent runs thanks to cargo cache) and launches Zephyr with HMR - frontend changes hot-reload, Rust changes trigger a recompile + restart.
Build a release binary
pnpm tauri buildOutput:
| OS | Output |
|---|---|
| Windows | src-tauri/target/release/bundle/nsis/Zephyr_x.y.z_x64-setup.exe |
| macOS | src-tauri/target/release/bundle/dmg/Zephyr_x.y.z_x64.dmg |
| Linux | src-tauri/target/release/bundle/appimage/zephyr_x.y.z_amd64.AppImage and bundle/deb/zephyr_x.y.z_amd64.deb |
Release builds take 3-5 minutes on a modern machine.
Project layout
Zephyr/
├── src/ # Svelte 5 frontend
│ ├── lib/
│ │ ├── components/ # reusable UI components
│ │ ├── features/ # feature-specific code (randomizer, console, etc.)
│ │ ├── state/ # Svelte 5 runes-based stores
│ │ └── api/ # thin wrappers around Tauri invoke()
│ └── routes/ # SvelteKit routing
├── src-tauri/ # Rust backend
│ ├── src/
│ │ ├── randomizer/ # Archipelago integration
│ │ ├── profile/ # mod profiles, install, sync
│ │ └── ...
│ ├── Cargo.toml
│ └── tauri.conf.json # app metadata, build config
├── messages/ # i18n translations (Inlang Paraglide)
├── data/randomizer/schemas/ # bundled Archipelago option schemas
└── scripts/ # Python helpers (schema extractor, patcher, etc.)Common tasks
| Task | Command |
|---|---|
| Run frontend type-check | pnpm check |
| Run formatter check | pnpm lint (Prettier in --check mode) |
| Format | pnpm format |
| Run Rust tests | cargo test --manifest-path src-tauri/Cargo.toml |
| Regenerate translations | pnpm machine-translate (best-effort, review before committing) |
| Bump version | edit src-tauri/tauri.conf.json + src-tauri/Cargo.toml + package.json |
Debugging
The dev build opens with the WebView devtools accessible via right-click → Inspect Element. Console output, network panel, all standard browser tools.
For Rust-side logs, set RUST_LOG:
RUST_LOG=zephyr=debug pnpm tauri devLogs go to stdout in dev, and to the data dir's latest.log in release builds.
Cross-compiling
Tauri can cross-compile in some cases but it's painful. The release pipeline builds each OS on its own runner - see .github/workflows/release.yml. For local cross-compilation, use a VM or wait for the CI build.
Contributing
PRs welcome. Please:
- Run
pnpm check,pnpm lint, andcargo testbefore submitting. - Add tests for non-trivial backend logic.
- For UI changes, attach before/after screenshots in the PR description.
- One feature/fix per PR - easier to review.
Issues to start with are tagged good first issue.
License
Zephyr is GPL-3.0. Forks and modified versions must keep the same license. The bundled Archipelago runtime is MIT-licensed independently.