Thanks for helping build BackupForge. A self-hosted backup control plane with support for Convex and designed to grow toward multiple runner types.
- Keep BackupForge self-hosted with SQLite backend and short-lived runners.
- No arbitrary shell commands, Docker image configuration, or privileged containers.
- No secrets exposed in logs or frontend. Sync API changes across backend, frontend, and OpenAPI.
pnpm install
pnpm --dir apps/backend run build:runner
pnpm --dir apps/backend run minio
pnpm run backend:server # http://localhost:18080
pnpm run frontend:dev # http://localhost:3000Good first contributions: docs, setup fixes, UI polish, tests, OpenAPI improvements, deployment examples.
Backend: pnpm run backend:test
Frontend: pnpm run frontend:check && pnpm run frontend:test && pnpm run frontend:build
API changes: Update handlers, client/types, OpenAPI schema, and verify UI matches.
Code guidelines:
- Keep Go in
apps/backendwith versioned migrations. - Keep frontend in
apps/frontendwith TanStack Start, React, TypeScript, Tailwind. - Store sessions in backend HttpOnly cookies, never in localStorage.
- Use Biome for frontend checks:
pnpm run frontend:check.
Testing: For user-visible changes, test admin creation, login/logout, projects, deployments, policies, manual backups, UI updates, artifact metadata, download URLs, and secret exposure. For scheduler changes, test next_run_at, disabled policies, and concurrency limits.
Start with a proposal. Explain: target system and versions, credentials handling, backup command/API flow, artifacts and types, restore process, timeout/concurrency/error behavior, storage type, and security risks.
Implementation: server creates jobs/policies, launches short-lived runners with minimal config, runners report status and upload to S3-compatible storage.
Do not open public issues for vulnerabilities exposing secrets, tokens, URLs, or artifacts. Use the repository's private security channel or contact maintainers privately.
Contributions are licensed under the MIT License.