Skip to content

Latest commit

 

History

History
49 lines (32 loc) · 2.2 KB

File metadata and controls

49 lines (32 loc) · 2.2 KB

Contributing to BackupForge

Thanks for helping build BackupForge. A self-hosted backup control plane with support for Convex and designed to grow toward multiple runner types.

Core Principles

  • 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.

Getting Started

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:3000

Good first contributions: docs, setup fixes, UI polish, tests, OpenAPI improvements, deployment examples.

Before Submitting a PR

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/backend with versioned migrations.
  • Keep frontend in apps/frontend with 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.

Adding a Backup Runner

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.

Security

Do not open public issues for vulnerabilities exposing secrets, tokens, URLs, or artifacts. Use the repository's private security channel or contact maintainers privately.

License

Contributions are licensed under the MIT License.