cargo-appraiser is an LSP server for your Cargo.toml files. It helps you understand the relationship between your declared dependencies (the desired state in Cargo.toml) and what cargo has actually resolved and put into your Cargo.lock file (the actual state). This insight allows you to quickly see if your dependencies are up-to-date, identify potential version conflicts, and navigate complex workspaces with greater clarity.
- Workspace
- hover on members will show the list of members
- go to definition on single non-glob member
- Dependencies
- version decorations

- hover on version will show the available versions

- hover on git dependency will show the git reference and commit

- hover on
featureswill show available features, hover on a feature name will show its values

- code action on dependency's
version
cargo updatecode action on dependency'sversionandworkspace- goto definition on workspace dependency
- version decorations
- Audit
- Show warning and vulnerability information on dependencies.

- This feature is enabled by default. To disable it, check the
audit.disabledconfig. - Requires the
cargo auditcommand. Install it by running:cargo install cargo-audit --locked. - For more details, see cargo-audit.
- Show warning and vulnerability information on dependencies.
To apply these config, you need to restart the lsp.
- VSCode
{
"cargo-appraiser.decorationFormatter": {}, //see below
"cargo-appraiser.audit": {}, //see below
"cargo-appraiser.cratesIo": {} //see below
}- Zed
{
"lsp": {
"cargo-appraiser": {
"initialization_options": {
"decorationFormatter": {}, //see below
"audit": {}, //see below
"cratesIo": {} //see below
},
//you need to set both path and arguments if you want to use a custom binary. https://github.com/zed-industries/zed/issues/22775
"binary": {
//path take precedence over settings.version
"path": "/path/to/cargo-appraiser",
"arguments": ["--renderer", "inlayHint"]
},
"settings":{
//specify the version of cargo-appraiser server to use
"version": "=0.3.0"
}
}
}
}
{
/// the formatter has 7 fields:
/// latest: the dependency has the latest version installed
/// local: the dependency is a local path dependency
/// not_resolved: the dependency is not resolved (platform mismatch or not used by any member)
/// loading: the dependency is loading
/// mixed_upgradeable: the installed version has an compatible upgrade, but the latest version is not compatible with the current version requirement
/// compatible_latest: the installed version can update to latest version
/// noncompatible_latest: the installed version can't upate to latest version and there is no compatible upgrade
/// yanked: the installed version is yanked
/// git: the dependency is a git dependency, support {{ref}}, {{commit}} template strings
///
/// a dependency is in `waiting` state for 2 possible reasons:
/// 1. wait for `cargo` to run. `Cargo.toml` is not saved, so `cargo` haven't picked up the change.
/// 2. wait for `cargo` to finish. `cargo` is running in process to resolve the dependency.
///
/// each field's value may has 3 template strings:
/// - installed: the installed version
/// - latest_matched: the latest compatible version
/// - latest: the latest version, the latest version may or may not be compatilbe with the version requirement
///
/// the default formatter is:
"decorationFormatter": {
"latest": "β
{{installed}}",
"local": "Local",
"not_resolved": "Not Resolved",
"waiting": "Waiting...",
"mixed_upgradeable": "ππ {{installed}} -> {{latest_matched}}, {{latest}}",
"compatible_latest": "π {{installed}} -> {{latest}}",
"noncompatible_latest": "π {{installed}}, {{latest}}",
"yanked": "β yanked {{installed}}, {{latest_matched}}",
"git": "π {{commit}}"
},
"audit":{
"disabled": false,
// "warning" will show warning and vulnerability
// "vulnerability" will only show vulnerability
"level": "warning"
},
// crates.io URL configuration
// - not provided: use default URL
// - empty string "": disable the feature
// - non-empty string: use custom URL (trailing slash will be removed)
"cratesIo": {
"sparseIndexUrl": "https://index.crates.io",
"apiUrl": "https://crates.io/api/v1/crates"
}
}VSCode is the main supported editor.
Enable inlay_hints in settings.
"inlay_hints": {
"enabled": true
}Vim has minimal support for now.
If you manually downloaded the LSP binary (e.g., from GitHub releases via a browser), macOS Gatekeeper may block it, causing a SIGKILL error.
To fix this, remove the quarantine attribute from the binary:
xattr -d com.apple.quarantine <path-to-binary>VS Code:
~/Library/Application Support/Code/User/globalStorage/washan.cargo-appraiser/cargo-appraiser-v<version>/cargo-appraiser
Zed:
~/Library/Application Support/Zed/extensions/work/cargo-appraiser/cargo-appraiser-<version>/cargo-appraiser
{ // the default for light and highContrastLight "cargo-appraiser.decorationColor.light": { "notParsed": "#808080", "latest": "#006400", "local": "#00008B", "notInstalled": "#808080", "mixedUpgradeable": "#B8860B", "compatibleLatest": "#B8860B", "nonCompatibleLatest": "#B8860B", "yanked": "#FF0000", "git": "#800080" }, // the default for dark and highContrast "cargo-appraiser.decorationColor.dark": { "notParsed": "#808080", "latest": "#006400", "local": "#00008B", "notInstalled": "#808080", "mixedUpgradeable": "#FF8C00", "compatibleLatest": "#FF8C00", "nonCompatibleLatest": "#FF8C00", "yanked": "#FF0000", "git": "#800080" }, "cargo-appraiser.decorationColor.highContrastLight": { //same as light }, "cargo-appraiser.decorationColor.highContrast": { //same as dark }, // extra environment variables to pass to the cargo-appraiser server "cargo-appraiser.extraEnv": { "RUST_LOG": "info" }, // custom path to the cargo-appraiser server binary. If set, this will be used instead of downloading from GitHub. "cargo-appraiser.serverPath": "", // specific version of cargo-appraiser server to use. Ignored if serverPath is set. "cargo-appraiser.serverVersion": "" }