Give coding agents access to any package's source code. Resolves packages from registry APIs, shallow-clones at the correct version tag, and caches globally at ~/.opensrc/.
npm install -g opensrcInstalling globally gives you the native Rust binary directly — no Node.js overhead on each run.
opensrc path prints the absolute path to a package's source, fetching on cache miss. Compose it with any tool:
rg "parse" $(opensrc path zod)
cat $(opensrc path zod)/src/types.ts
find $(opensrc path pypi:requests) -name "*.py"
ls $(opensrc path crates:serde)/src/
grep -r "Router" $(opensrc path vercel/next.js)/packages/next/src/Multiple packages at once:
rg "parse" $(opensrc path zod react next)Specific versions:
rg "ZodError" $(opensrc path zod@3.22.0)
cat $(opensrc path pypi:flask@3.0.0)/src/flask/app.pyOptions:
--cwd <path>— working directory for lockfile version resolution--verbose— show progress during fetch
opensrc list # human-readable
opensrc list --json # JSON outputopensrc remove zod
opensrc remove vercel/next.js
opensrc rm pypi:requestsopensrc clean # remove everything
opensrc clean --packages # only packages
opensrc clean --repos # only repos
opensrc clean --npm # only npm packages
opensrc clean --pypi # only PyPI packages
opensrc clean --crates # only crates.io packages| Registry | Prefix | Example |
|---|---|---|
| npm | (default) or npm: |
opensrc path zod |
| PyPI | pypi:, pip:, python: |
opensrc path pypi:requests |
| crates.io | crates:, cargo:, rust: |
opensrc path crates:serde |
| GitHub | owner/repo or URL |
opensrc path vercel/next.js |
| GitLab | gitlab: or URL |
opensrc path gitlab:owner/repo |
| Bitbucket | bitbucket: or URL |
opensrc path bitbucket:owner/repo |
- Resolves the package to a git repository URL via registry APIs
- Detects the installed version from lockfiles (npm only) or uses latest
- Shallow-clones the repo at the matching version tag
- Caches in
~/.opensrc/repos/<host>/<owner>/<repo>/<version>/ - Tracks metadata in
~/.opensrc/sources.json
The OPENSRC_HOME environment variable overrides the default cache location.
Requires Rust and Node.js 18+.
# Build
cargo build --manifest-path cli/Cargo.toml
# Run tests
cargo test --manifest-path cli/Cargo.toml
# Build release + copy to bin/
npm run build:native
# Format
cargo fmt --manifest-path cli/Cargo.toml
# Lint
cargo clippy --manifest-path cli/Cargo.toml -- -D warningsApache-2.0