--- title: "Install rust-analyzer on OpenBSD -current" description: "How to install the language server for Rust from source without rustup." published: 2022-01-04 updated: 2022-04-28 --- The Rust Programming Language is anything but small. One thing that helped me find my way through the language and its libraries is the language server [rust-analyzer](https://rust-analyzer.github.io/). The [manual](https://rust-analyzer.github.io/manual.html) lists numerous compatible editor integrations. For example, I'm happy with using Vim with [vim-lsp](https://github.com/prabirshrestha/vim-lsp) and [asyncomplete.vim](https://github.com/prabirshrestha/asyncomplete.vim). The project provides [pre-compiled binaries](https://github.com/rust-lang/rust-analyzer/releases) for Linux, macOS, and Windows. However, installation from source was slightly trickier than expected. So here's how I installed rust-analyzer from source on OpenBSD -current. The process should work on other platforms alike, especially without `rustup`. First, install `rustc` and `cargo` from the `lang/rust` port. You might also want to install `rust-clippy` and `rust-rustfmt` while you're at it. $ doas pkg_add rust rust-clippy rust-rustfmt Second, compile and install the rust-analyzer binary from source. See errata below if the the command fails. $ cargo install \ --git https://github.com/rust-lang/rust-analyzer.git \ --branch release \ --force \ --bin rust-analyzer \ --target-dir "$HOME/.cache/rust-analyzer" \ --locked \ rust-analyzer This will install the latest release of rust-analyzer to `~/.cargo/bin/`. Remember to add this location to your `PATH`. $ export PATH="$HOME/.cargo/bin:$PATH" Finally, rust-analyzer needs a local copy of Rust's source code. The following commands fetch the source code matching the version of the currently installed Rust compiler. $ [ -d "$HOME/.cache/rust-src" ] || git clone https://github.com/rust-lang/rust.git "$HOME/.cache/rust-src" $ cd "$HOME/.cache/rust-src" && git fetch --tags && git checkout "$( rustc --version | sed 's/^rustc[[:space:]]*//' )" Lastly, tell rust-analyzer where to find the source code. $ export RUST_SRC_PATH="$HOME/.cache/rust-src/library" With this, your favorite editor should be able to talk to rust-analyzer and help you find your way. Of course, you better add the above exports to your `~/.profile`. I've also added the above commands to my local update script to keep rustc, rust-analyzer, and the sources in sync. ## Errata 8 April 2022: Sometimes Cargo fails to install crates from Git repositories due to an incompatible version of libgit2. If so, you can install the latest weekly release of rust-analyzer from [crates.io](https://crates.io/crates/ra_ap_rust-analyzer) as follows: $ cargo install \ --force \ --bin rust-analyzer \ --target-dir "$HOME/.cache/rust-analyzer" \ --locked \ ra_ap_rust-analyzer 28 April 2022: The Git repository has moved to . The build is broken on OpenBSD until [notify](https://github.com/notify-rs/notify) releases commit [41a74f0](https://github.com/notify-rs/notify/commit/41a74f0e98a1af386749ad3be4a197865054f17f). In the meantime, you can build rust-analyzer by overriding this dependency locally.