This repo is a kind of mono-repo for BioVault but uses Google's repo tool so the sub repos are still independent.
- Source of truth:
manifest.xmlpins each dependency repo to a commit. - Initialize/sync workspace:
repo init -u <manifest-url> -m manifest.xmlthenrepo sync - Status across repos:
repo status - Branch all repos together:
repo forall -c 'git checkout -B <branch>' - Local helper:
./repo(tree view),./repo --init,./repo sync,./repo pin,./repo ssh
- Preferred layout is sibling repos at the repo root:
biovault/,biovault-beaver/,bioscript/,syftbox/,syftbox-sdk/,syft-crypto-core/,sbenv/ - Scripts and Rust code accept overrides via env vars (examples):
WORKSPACE_ROOT,BIOVAULT_DIR,BIOVAULT_BEAVER_DIR,SYFTBOX_DIR,SYFTBOX_SDK_DIR,SBENV_DIR - Legacy fallback: if a dependency only exists under
biovault/..., most scripts will detect and use it.
- The libsignal repo is checked out under
syft-crypto-core/vendor/libsignal-protocol-syft - It is pinned in
manifest.xmlto avoid submodule workflows.
- Do not use
submodules: recursivein actions/checkout. - Use
./repo --init --https(forces HTTPS for CI) and./repo syncfor retries.
syft-crypto-core (foundational crypto)
↓
syftbox-sdk (depends on syft-crypto-protocol)
↓
biovault CLI (depends on syftbox-sdk)
↓
biovault-desktop/src-tauri (depends on biovault CLI + syftbox-sdk)
biovault-beaver (independent Python, but uses syftbox conventions)
When making changes that span multiple repos, release in this order:
-
syft-crypto-core - Foundational crypto library
- Contains
syft-crypto-protocolcrate - Must be released first if crypto changes
- Contains
-
syftbox-sdk - Rust SDK for SyftBox
- Depends on
syft-crypto-protocol - Update version, release to crates.io
- Depends on
-
biovault (CLI) - BioVault CLI library
- Depends on
syftbox-sdk - Update Cargo.toml version references
- Depends on
-
biovault-desktop - Desktop application (this repo)
- Depends on both
biovaultCLI andsyftbox-sdk - Update Cargo.toml version references
- Tag release triggers CI build
- Depends on both
-
biovault-beaver - Python notebooks/workers
- Independent but should be compatible
- Release after desktop if notebooks change
# Check which repos have changes
./repo branch
# Create branch in all dirty repos
./repo branch feature/my-feature
# Commit in each repo
cd syftbox-sdk && git add -A && git commit -m "feat: add X"
cd ../biovault && git add -A && git commit -m "feat: use X"
cd .. && git add -A && git commit -m "feat: integrate X"
# Push all branches
./repo forall -c 'git push -u origin feature/my-feature'
# Create PRs, merge in dependency order, then releaseWhen releasing, update versions in this order:
syft-crypto-core/protocol/Cargo.toml- bump versionsyftbox-sdk/Cargo.toml- bump version, updatesyft-crypto-protocoldepbiovault/cli/Cargo.toml- bump version, updatesyftbox-sdkdepsrc-tauri/Cargo.toml- bump version (auto-triggers release)biovault-beaver/pyproject.toml- bump version if needed
Each repo has a lint.sh script that runs all checks in parallel:
# Lint all dirty repos (parallel, quiet on success)
./repo lint
# Run fast unit tests in dirty repos (quiet on success)
./repo test
./repo test --force
# Or lint a single repo
./lint.sh # Auto-fix mode (default)
./lint.sh --check # Read-only mode for CI
./lint.sh --test # Also run tests
./lint.sh --check --test # CI mode with tests| Repo | Languages | Checks |
|---|---|---|
| biovault-desktop | Rust + JS/TS | cargo fmt + clippy + prettier + eslint |
| biovault | Rust | cargo fmt + clippy |
| syftbox-sdk | Rust | cargo fmt + clippy |
| syft-crypto-core | Rust | cargo fmt + clippy |
| biovault-beaver | Python | ruff format + ruff check + mypy + vulture |
With --test: adds cargo test (Rust) or pytest (Python)
# Check which repos have changes and lint them
./repo lint
# If lint passes, create branches and commit
./repo branch feature/my-change
# ... commit in each repo ...