Files
seastem-electronjs/apps/desktop/AGENTS.md
imbytecat e171db8196 refactor: simplify compile.ts to single-target and add per-platform compile scripts
- Rewrite compile.ts from 112 to 66 lines: single target with auto-detect host, remove multi-target batch logic
- Add compile:linux/mac/win scripts to server, root, and turbo configs
- Wire desktop dist:* to depend on matching server compile:* (avoid unnecessary cross-platform compilation)
- Update AGENTS.md docs across root, server, and desktop
2026-02-08 22:25:30 +08:00

3.4 KiB

AGENTS.md - Desktop App Guidelines

Thin Electron shell hosting the fullstack server app.

Tech Stack

⚠️ This project uses Bun as the package manager. Runtime is Electron (Node.js). Never use npm, npx, yarn, or pnpm.

  • Type: Electron desktop shell
  • Design: Server-driven desktop (thin native window hosting web app)
  • Runtime: Electron (Main/Renderer) + Sidecar server binary (Bun-compiled)
  • Build Tool: electron-vite (Vite-based, handles main + preload builds)
  • Packager: electron-builder (installers, signing, auto-update)
  • Orchestration: Turborepo

Architecture

  • Server-driven design: The desktop app is a "thin" native shell. It does not contain UI or business logic; it opens a BrowserWindow pointing to the apps/server TanStack Start application.
  • Dev mode: Opens a BrowserWindow pointing to localhost:3000. Requires apps/server to be running separately (Turbo handles this).
  • Production mode: Spawns a compiled server binary (from resources/) as a sidecar process, waits for readiness, then loads its URL.

Commands

bun dev                    # electron-vite dev (requires server dev running)
bun build                  # electron-vite build (main + preload)
bun dist                   # Build + package for current platform
bun dist:linux             # Build + package for Linux
bun dist:mac               # Build + package for macOS
bun dist:win               # Build + package for Windows
bun fix                    # Biome auto-fix
bun typecheck              # TypeScript check

Directory Structure

.
├── src/
│   ├── main/
│   │   └── index.ts       # Main process (server lifecycle + BrowserWindow)
│   └── preload/
│       └── index.ts       # Preload script (security isolation)
├── resources/             # Sidecar binaries (gitignored, copied from server build)
├── out/                   # electron-vite build output (gitignored)
├── electron.vite.config.ts
├── electron-builder.yml   # Packaging configuration
├── package.json
├── turbo.json
└── AGENTS.md

Development Workflow

  1. Start server: bun dev in apps/server (or use root bun dev via Turbo).
  2. Start desktop: bun dev in apps/desktop.
  3. Connection: Main process polls localhost:3000 until responsive, then opens BrowserWindow.

Production Build Workflow

From monorepo root, run bun dist to execute the full pipeline automatically (via Turbo task dependencies):

  1. Build server: apps/servervite build.output/
  2. Compile server: apps/serverbun compile.tsout/server-{os}-{arch}
  3. Package desktop: apps/desktopelectron-vite build + electron-builder → distributable

The electron-builder.yml extraResources config reads binaries directly from ../server/out/, no manual copy needed.

To build for a specific platform explicitly, use bun dist:linux / bun dist:mac / bun dist:win in apps/desktop.

Critical Rules

DO:

  • Use arrow functions for all utility functions.
  • Keep the desktop app as a thin shell — no UI or business logic.
  • Use catalog: for all dependency versions in package.json.

DON'T:

  • Use npm, npx, yarn, or pnpm. Use bun for package management.
  • Include UI components or business logic in the desktop app.
  • Use as any or @ts-ignore.