Development Workflow¶
Everything is driven by a self-documenting Makefile — run make (or
make help) to list every target. The full local guide is in
CONTRIBUTING.md.
Prerequisites¶
- macOS — Sillview is macOS-first and the makers produce macOS artifacts.
- Node.js 22+ — CI runs on Node 22. The lockfile (
package-lock.json) is committed. - GitHub CLI (
gh) — used bymake kasasto download the backend binary. - Optional: Go 1.25 + a checkout of
../kasas— only if you want to build the backend from source (make sync-kasas) instead of downloading a prebuilt binary.
Common targets¶
| Command | What it does |
|---|---|
make install |
Install npm dependencies |
make dev |
Run against a real (bundled/managed) kasas backend |
make mock |
Run on offline fixtures — no backend, no real data |
make kasas |
Download the prebuilt kasas binary into resources/bin |
make sync-kasas |
Build the kasas binary from ../kasas source |
make lint / make lint-fix |
Run ESLint (optionally with --fix) |
make typecheck |
Type-check with tsc --noEmit |
make test |
Lint + typecheck — the same gate CI enforces |
make review |
Run test, then summarize the diff vs origin/main |
make package |
Build the unpackaged .app into out/ |
make dist / make build |
Build the .dmg + .zip into out/make/ |
make clean / make clean-all |
Remove build output (and deps/binary) |
make auto-installs dependencies when they're missing or stale, and fetches the
kasas binary only if resources/bin/kasas is absent — so you can jump straight to
make mock or make dist on a fresh checkout.
The quality gate¶
make test runs ESLint + tsc --noEmit — exactly what CI enforces on every
push and PR. Run it before you push.
For a quick pre-PR pass, make review runs test and prints a diffstat against
origin/main.
Two ways to run¶
make mock—KASAS_MOCK=1, the whole UI on in-memory fixtures. Best for widget and layout work. See Offline Mock Mode.make dev— the real, managed backend: Sillview spawns and supervises kasas, generates its config, and connects. Needsresources/bin/kasas(viamake kasasormake sync-kasas).
Toolchain notes¶
A few non-obvious choices worth knowing before you touch the build:
- Tailwind v4 (CSS-first,
@tailwindcss/vite) — there is notailwind.config.js. - Tremor is used in its copy-paste/Recharts form, not the frozen
@tremor/reactpackage (which needs Tailwind v3 and renders nothing under v4). Components incomponents/tremor/follow Tremor's API. vite.renderer.config.mtsmust be.mts. Forge loads Vite configs as CommonJS, but@tailwindcss/viteand@vitejs/plugin-reactare ESM-only.
Conventions¶
- The renderer never touches the network directly — all kasas traffic goes through the main-process broker. See kasas Integration.
- Money is always a decimal string, never a number.
- Commits follow Conventional Commits, and releases are automated — see Releases & CI.