4.6 KiB
4.6 KiB
Copilot Instructions — electron-svelte (SveltronKit)
This repo is an Electron + SvelteKit app (SveltronKit). The goal of this document is to give an AI coding agent immediate, actionable knowledge about architecture, conventions, and common tasks so suggestions and changes are correct and context-aware.
Big picture
- App = Electron main + SvelteKit renderer. See electron/main.ts and renderer sources under
src/. - Renderer is a normal SvelteKit app but configured to use the hash router — all routed links expected in the app should begin with
#/when constructing absolute links for the packaged Electron app (see README). - Electron main process loads the Vite dev server when
MAIN_WINDOW_VITE_DEV_SERVER_URLis set; otherwise loads the built renderer. See electron/main.ts.
How to run & build (developer workflows)
- Uses pnpm. Always use
pnpm installfirst. - Dev (runs Electron + Vite via Electron Forge):
pnpm run start(invokeselectron-forge start). - Build & package:
pnpm run package(builds renderer withvite buildthen runselectron-forge package). - Create distributable:
pnpm run make. - Tests: unit tests via
vitestand e2e via Playwright.pnpm run testruns both (test:unitandtest:e2e). Seepackage.jsonscripts.
Key files & patterns to reference
- Electron bootstrap: electron/main.ts — env vars used:
MAIN_WINDOW_VITE_DEV_SERVER_URL,MAIN_WINDOW_VITE_NAME. - Preload bridge: electron/preload.ts (currently empty) — add safe, whitelisted APIs here when exposing functionality to the renderer.
- SvelteKit entry routes:
src/routes/(examples: src/routes/+page.svelte, src/routes/companies/+page.svelte). - API client: src/lib/axios.ts —
apiis created fromPUBLIC_API_URL($env/static/public). - Auth helper: src/lib/authUri.ts — example of calling backend
/v1/auth/uri. - Data access: src/lib/companies.ts —
fetchMany(accessToken)demonstrates header usageAuthorization: Bearer <token>. - Global styles:
src/app.css(Tailwind is present in the project). - Patches:
patches/contains@sveltejs__kit.patchand is referenced inpackage.jsonviapatchedDependencies— don't remove or ignore without verifying its purpose.
Project-specific conventions and examples
- Router: Because of the hash-router configuration, when constructing absolute links in a packaged app prefer
#/path(README highlights this). For client navigation within components prefergoto()from$app/navigation(see src/routes/+page.svelte). - Env & API: Use
PUBLIC_API_URL(imported from$env/static/public) as the renderer-side base URL. For backend calls that require auth, passAuthorization: Bearer <token>headers (seesrc/lib/companies.ts). - IPC surface: The preload file is where to expose limited, safe APIs to the renderer. The main process defines windows and startup behavior — avoid adding unsafe globals to the renderer.
- TypeScript & Svelte: The project uses TypeScript + Svelte 5 — keep code consistent with existing component patterns (script blocks,
$:reactivity,svelte:head, named +page routes).
Tests & tooling
- Unit tests:
vitest(runpnpm run test:unit). Look atdemo.spec.tsandsrc/routes/page.svelte.test.tsfor existing examples. - E2E: Playwright tests live under
e2e/and are run withpnpm run test:e2e. - Sync:
preparescript runssvelte-kit sync. Runningpnpm run checkrunssvelte-checktoo; use it when editing routes/type-heavy code.
When making changes, be conservative
- Changing build or packaging behavior affects developers' ability to run the app locally. Prefer edits to renderer code (under
src/) unless the user asked to adjust packaging. - If adding new native electron APIs, update
electron/preload.tsto expose a minimal API surface and document it.
Useful snippets / concrete examples
- Navigate programmatically:
import { goto } from "$app/navigation"; goto('/logout');(see src/routes/+page.svelte). - API client usage:
import { api } from 'src/lib/axios'; const res = await api.get('/v1/...'); - Auth redirect fetch:
const { uri, callbackKey } = await fetchAuthRedirectUri(apiUrl);(see src/lib/authUri.ts).
If anything is ambiguous or you need additional examples (tests, CI, or a missing preload implementation), ask the maintainer which behavior they want (safe IPC surface, packaging targets, or CI test matrix) before making large changes.
-- End