Thanks for your interest in contributing! This document covers how to get started.
- Fork the repository on GitHub
- Clone your fork and create a branch:
git checkout -b feature/your-feature-name - Make your changes, following the code style below
- Run tests and lint
- Commit with clear messages (e.g.
feat: add X,fix: resolve Y) - Push to your fork and open a Pull Request against
main
npm install
npm run devThis starts the Electron app in development mode with hot reload.
npm run testFor watch mode during development:
npm run test:watch- ESLint: Run
npm run lintbefore committing - Prettier: Run
npm run formatto format code
We use ESLint and Prettier for consistent style. Please ensure both pass before submitting a PR.
npm run buildPlatform-specific builds:
- macOS:
npm run build:mac(produces universal DMG, requires Apple credentials for notarization) - Windows:
npm run build:win(when configured) - Linux:
npm run build:linux(when configured)
Building for macOS with notarization requires Apple Developer credentials. See the README for setup instructions (.env.example, APPLE_ID, APPLE_APP_SPECIFIC_PASSWORD, APPLE_TEAM_ID).
The release workflow (.github/workflows/release.yml) runs on tag push (v*.*.*) and produces a signed, notarized macOS DMG. It requires these GitHub repository secrets:
| Secret | Purpose |
|---|---|
MACOS_CERTIFICATE |
Base64-encoded .p12 code signing certificate (Developer ID Application, not Apple Distribution) |
MACOS_CERTIFICATE_PWD |
Password for the .p12 file |
MACOS_CERTIFICATE_NAME |
Certificate identity, e.g. Developer ID Application: Your Name (TEAM_ID) — from Keychain Access, double-click cert → Details |
APPLE_ID |
Apple ID email |
APPLE_APP_SPECIFIC_PASSWORD |
App-specific password for notarization |
APPLE_TEAM_ID |
Apple Developer Team ID |
src/main/— Electron main process (services, IPC handlers, database)src/preload/— Preload scripts exposing secure APIs via contextBridgesrc/renderer/— Vue 3 frontend (components, stores, views)src/shared/— Shared types and constants