Thank you for your interest in contributing to vx! π
# Clone and build
git clone https://github.com/loonghao/vx.git
cd vx
vx cargo build
# Run tests
vx just test
# Quick pre-commit cycle (format β lint β test β build)
vx just quick- Rust 1.93+ (managed by vx itself:
vx cargo --version) - Git
- just (task runner, managed by vx:
vx just --list)
- Fork and clone the repository
- Create a branch:
vx git checkout -b feature/my-feature - Set up pre-commit hooks:
vx prek install - Make changes and add tests
- Run quality checks:
vx just quick - Submit a pull request
- Tests go in
tests/directories β Never write inline#[cfg(test)]modules - Use
rstestfor parameterized tests - Use correct terminology: Runtime (not Tool), Provider (not Plugin)
- New providers use Starlark DSL only β Create
crates/vx-providers/<name>/provider.star - Layer dependencies go downward only β See architecture overview
Most new tools only need a provider.star file (no Rust code):
# crates/vx-providers/mytool/provider.star
load("@vx//stdlib:provider.star", "runtime_def", "github_permissions")
load("@vx//stdlib:provider_templates.star", "github_rust_provider")
name = "mytool"
description = "My awesome tool"
ecosystem = "custom"
runtimes = [runtime_def("mytool")]
permissions = github_permissions()
_p = github_rust_provider("owner", "repo",
asset = "mytool-{vversion}-{triple}.{ext}")
fetch_versions = _p["fetch_versions"]
download_url = _p["download_url"]
install_layout = _p["install_layout"]
store_root = _p["store_root"]
get_execute_path = _p["get_execute_path"]
environment = _p["environment"]Test it: vx mytool --version
For the complete contributing guide including CI pipeline details, dependency constraints, and code style guidelines, see:
- GitHub Issues β Bug reports
- GitHub Discussions β Feature requests and questions
- Contact: hal.long@outlook.com
By contributing, you agree that your contributions will be licensed under the MIT License.