# Installing
## Releases
The main channel to compile **Pijul** from source is the Rust Language
package manager: **cargo**. You'll need to download **rustup** from [here](https://www.rust-lang.org/tools/install) to install **cargo**.
After installing **cargo**, there are also three different channels to choose from: stable, beta, and nightly. If you're unsure of which channel to choose, go with *stable* as your default rust toolchain:
```
rustup default stable
```
You can find more information about channels [here](https://rust-lang.github.io/rustup/concepts/channels.html).
If you've already installed **rustup** before, make sure to *update* it.
Next, you'll need the necessary **libraries and header files** installed on your computer and clang compiler:
<br />
**On Debian:**
```
sudo apt install make libsodium-dev libclang-dev pkg-config libssl-dev libxxhash-dev libzstd-dev clang
```
**On OSX:**
```
brew install llvm libsodium openssl xxhash zstd
```
**On Arch Linux:**
```
sudo pacman -S clang libsodium gcc-libs rustup pkgconf diffutils make xxhash
```
**On openSUSE Tumbleweed:**
```
sudo zypper in clang-devel libopenssl-devel libsodium-devel libzstd-devel pkgconfig xxhash-devel
```
**On Void (Linux):**
```
sudo xbps-install libgcc-devel libressl-devel libsodium-devel libzstd-devel xxHash-devel
```
**On Fedora Linux**
```
sudo dnf install clang-devel openssl-devel libsodium-devel libzstd-devel pkgconfig xxhash-devel
```
<br />
After installing the necessary libraries and header files, it's time to install **Pijul**!
Run the following command in your terminal:
```
cargo install pijul --version "~1.0.0-beta"
```
You might need to add the install directory to your \$PATH environment
variable. For example: adding the following to your
`~/.config/environment.d/envvars.conf`:
```
export PATH="\$PATH:$HOME/.cargo/bin/"
```
## Distribution packages
### Nix and NixOS
Nix is a package manager that can be installed on any Linux distribution and OSX.
```
nix-env --upgrade
nix-env -iA pijul
```
### Debian
```
curl https://nixos.org/nix/install | sh
```
If it fails with the following error:
```
nix error: cloning builder process: Operation not permitted
```
Then create a file as root:
```
sudo su root -c 'echo "kernel.unprivileged_userns_clone=1" >> /etc/sysctl.d/nix.conf'
```
### Arch Linux
Pijul is packaged in [AUR](https://aur.archlinux.org/packages/pijul/). It should be up-to-date or at least close.
### openSUSE
For the development version (`1.0.0-beta.X`) of Pijul,
[a package](https://build.opensuse.org/package/show/devel:tools:scm/pijul) for
openSUSE Tumbleweed in the openSUSE Build Service:
```
sudo zypper addrepo -f -r https://download.opensuse.org/repositories/devel:/tools:/scm/openSUSE_Tumbleweed/devel:tools:scm.repo
sudo zypper install --allow-vendor-change pijul
```
Use the development version at your own risk. As soon as Pijul 1.0.0 is
published, the package will be updated and submitted to openSUSE Tumbleweed.
### Void (Linux)
```
xbps-install pijul
```
### FreeBSD
```
pkg install pijul
```
Alternatively, you can install the [port](https://www.freshports.org/devel/pijul), which is more likely to be up-to-date but means you have to wait for `rust` and `pijul` to build from scratch:
```
cd /usr/ports/devel/pijul/ && make install clean
```
### Windows
We do not provide official Windows binaries at the moment, but
[community-provided binaries are available](https://github.com/boringcactus/pijul-windows-builds/releases/latest).