Thank you for your interest in contributing to ZeroLink! This guide will help you get started.
git clone https://github.com/yclgkd/ZeroLink.git
cd ZeroLink
pnpm install
pnpm dev- Frontend: http://localhost:5173
- Backend (Cloudflare Workers dev): http://localhost:8787
packages/
shared/ — Types, schemas, crypto helpers (@zerolink/shared)
frontend/ — React web app (@zerolink/frontend)
backend/ — Cloudflare Workers + Durable Objects (@zerolink/backend)
services/
selfhost-api/ — Go self-hosted backend
All commands run from the repository root:
pnpm dev # Start all packages in dev mode
pnpm build # Build all packages
pnpm test # Run all unit/integration tests
pnpm test:e2e # Run Playwright E2E tests
pnpm typecheck # TypeScript type checking
pnpm lint # Biome lint + format checkFilter to a specific package:
pnpm --filter @zerolink/frontend <command>
pnpm --filter @zerolink/backend <command>
pnpm --filter @zerolink/shared <command>Self-hosted Go backend:
cd services/selfhost-api
make run # Start API server
make test # Run Go tests
make migrate # Run DB migrations- Linter: Biome (not ESLint/Prettier)
- Quotes: Single quotes
- Formatting: Enforced by Biome — run
pnpm lintto check - Pre-commit hook: Automatically runs Biome check + TypeScript type check on staged files
Do not add ESLint, Prettier, or other formatting tool configurations.
<type>/<short-description>
- Types:
feat,fix,refactor,docs,test,chore,perf,ci,security,style,revert - Use kebab-case for the description
- Examples:
feat/totp-support,fix/lock-race-condition,docs/update-readme
Follow Conventional Commits:
<type>: <description>
<optional body>
- Types:
feat,fix,refactor,docs,test,chore,perf,ci,security - Keep the subject line under 72 characters
- Use imperative mood ("add feature" not "added feature")
- One logical change per PR
- Target the
mainbranch - Fill in the PR template completely
- All CI checks must pass (typecheck, lint, tests, build)
- PRs with unchecked checklist items cannot be merged (enforced by CI)
- Unit / Integration: Vitest —
pnpm test - E2E: Playwright —
pnpm test:e2e
Write tests for new features and bug fixes. Maintain existing test coverage.
ZeroLink is a security-focused project. When contributing:
- Never log, store, or transmit plaintext secrets or private keys in code
- Keep key material in URL fragments, not query parameters
- Validate all inputs at system boundaries
- If you discover a security vulnerability, see SECURITY.md — do NOT open a public issue
By contributing to ZeroLink, you agree that your contributions will be licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).