Thank you for contributing! Before you contribute, we ask some things of you:
- Please follow our Code of Conduct, the Contributor Covenant. You can find a copy in this repository or under https://www.contributor-covenant.org/
- All Contributors must agree to a CLA. When opening a PR, the system will guide you through the process. However, if you contribute on behalf of a legal entity, we ask of you to agree to a different CLA. In that case, please contact us.
Before opening an issue or pull request, please start a conversation in GitHub Discussions. This gives maintainers and the community a chance to provide early feedback, avoid duplicate effort, and help shape the direction of proposed changes.
- Bug reports — confirm the behavior and get initial triage before filing an issue.
- Feature ideas — discuss the use case and approach before writing code.
- Questions — ask in Discussions rather than opening an issue.
Once there is agreement on the approach, you can proceed with an issue or PR and link back to the discussion for context.
- Install Rust 1.91.0 or later via rustup
- Clone the repository:
git clone https://github.com/LF-Decentralized-Trust-labs/openvtc.git cd openvtc - Build the workspace:
cargo build
- Run the test suite:
cargo test --workspace
To build without OpenPGP card support (avoids PC/SC dependencies):
cargo build --no-default-featuresAll code must pass formatting and linting checks before merge:
cargo fmt --all --check
cargo clippy --workspace --all-targets -- -D warnings- Use Conventional Commits style:
feat:,fix:,docs:,refactor:,test:,chore: - Keep the subject line under 72 characters
- All commits must be DCO-signed (
git commit -s)
feat/<short-description>— New featuresfix/<short-description>— Bug fixesdocs/<short-description>— Documentation onlyrefactor/<short-description>— Code refactoring
- Fork and branch from
development(ormainfor hotfixes) - Write tests for new functionality — PRs that decrease test coverage will be flagged
- Run the full check suite locally before submitting:
cargo fmt --all --check cargo clippy --workspace --all-targets -- -D warnings cargo test --workspace - Open the PR with a clear title and description summarizing the change
- Link related issues using
Closes #123orFixes #123in the PR body - Respond to review feedback promptly
The workspace is organized as a layered architecture:
openvtc-core— Core library: cryptography, DID management, configuration, protocol logic. No UI dependencies.openvtc— TUI binary that consumesopenvtc-coredid-git-sign— Standalone git signing proxy (intentionally independent fromopenvtc-core)
Key design principles:
- Crypto and protocol logic stays in
openvtc-core— binary crates are pure consumers - Secrets are handled with
secrecy/zeroize— never log, serialize, or expose key material - Error handling uses
thiserrorin the library andanyhowin binaries
If you discover a security vulnerability, please follow the Security Policy. Do not open a public issue.
When writing code that handles sensitive data:
- Use
SecretString/SecretVecfor secret values - Ensure secrets are zeroized on drop
- Never include secret material in error messages or logs
- Use
OsRng(notthread_rng()) for cryptographic randomness