Thanks for helping improve StashBase. Small focused PRs are easiest to review. For larger changes, please open or comment on an issue first so the scope and design direction can be discussed.
Good places to start:
git clone https://github.com/liliu-z/stashbase
cd stashbase
pnpm install
pnpm setup:python
# Build the renderer and run Electron
pnpm build:web
pnpm electron
# Development mode
pnpm devRun the same source checks used by CI:
pnpm checkThe check builds the renderer before launching the real Electron lifecycle
smoke. Headless Linux environments need Xvfb; CI supplies it automatically.
The isolated Linux source smoke also passes Chromium's --no-sandbox flag
because hosted runners cannot install Electron's SUID sandbox helper as root.
Packaged applications and macOS/Windows smoke launches retain their normal
sandbox behavior.
For Markdown renderer changes:
pnpm test:renderer
pnpm typecheck
pnpm build:web- Renderer logs: View -> Toggle Developer Tools
- Packaged-app server logs:
~/Library/Logs/StashBase/ - Useful env vars:
STASHBASE_LOG=debug,STASHBASE_PYTHON=/path/to/python,STASHBASE_BUILD_EXTRACT=1
API keys are configured in Settings, not environment variables.
Packaging is release-only. GitHub Actions builds and uploads macOS, Linux, and Windows installers from a release tag.
Release workflow:
- Commit the code and version bump.
- Push
mainand wait forCIto succeed for the version-bump commit. - Create and push the matching
vX.Y.Ztag, then publish the GitHub Release for that tag. - Let the macOS, Linux, and Windows release workflows verify that exact tag commit and attach installers.
Release packaging fails closed when the tag commit has no successful ci.yml push run. If CI is still running, the release gate waits for it before packaging starts.
Local macOS fallback:
pnpm release:verify:mac
pnpm dist:brewDo not commit packaged artifacts. Release outputs belong in release.nosync/.