Install Netsuke

Updated Aug 05, 2026

Netsuke requires Ninja on PATH. A source build also requires the dated Rust nightly toolchain pinned in rust-toolchain.toml because Netsuke builds with the Polonius borrow checker (-Zpolonius=next).

Inside a checkout both settings are inherited automatically: rustup installs the pinned toolchain, and the repository's .cargo/config.toml supplies RUSTFLAGS=-Zpolonius=next. Neither has to be passed on the command line.

Netsuke v0.1.0-beta1 is available from crates.io. Where cargo binstall is available, prefer it: it fetches a prebuilt release binary and avoids the toolchain requirement below.

cargo binstall netsuke-build

Building from the registry instead runs outside a repository checkout, so neither the pinned toolchain nor the Polonius flag is picked up automatically; supply both explicitly:

rustup toolchain install nightly-2026-06-25
RUSTFLAGS=-Zpolonius=next cargo +nightly-2026-06-25 install netsuke-build

Pre-built installers are available from the v0.1.0-beta1 GitHub release:

Platform Architectures Packages
Linux x86-64 (amd64) and Arm64 (arm64) Debian (.deb) and RPM (.rpm)
macOS Intel x86-64 and Apple silicon Arm64 Installer package (.pkg)
Windows x64 and Arm64 Windows Installer (.msi)

Download the package for the host architecture, then install it with the platform tool. Replace PACKAGE with the downloaded filename:

  • Debian or Ubuntu: sudo apt install ./PACKAGE.deb
  • Fedora, Rocky Linux, or another RPM-based distribution: sudo dnf install ./PACKAGE.rpm
  • macOS: sudo installer -pkg ./PACKAGE.pkg -target /
  • Windows: msiexec.exe /i PACKAGE.msi

The Linux packages install the binary under /usr/bin, add the netsuke.1 manual page and declare ninja-build as a dependency. The macOS packages install the binary under /usr/local/bin, along with the manual page and licence. Ninja must be installed separately when using the macOS or Windows installer. The Windows MSI installs to C:\Program Files\netsuke and does not update PATH.

SHA-256 checksum files accompany standalone binaries and staged help and licence files. Installer packages do not have checksum sidecars in v0.1.0-beta1. Windows PowerShell help files are published beside each MSI as sidecar artefacts rather than embedded in the installer.

Install the current source checkout with Cargo. The clone supplies both the pinned nightly toolchain and RUSTFLAGS=-Zpolonius=next, so neither is given here — unlike the registry install above, which runs outside a checkout:

git clone https://github.com/leynos/netsuke.git
cd netsuke
cargo install --path .

Complete Windows setup

The MSI does not add its installation directory to PATH. Add it to the current user's persistent PATH, update the current PowerShell session, then verify that the command resolves:

$netsukeDirectory = Join-Path $env:ProgramFiles 'netsuke'
$userPath = [Environment]::GetEnvironmentVariable('Path', 'User')
$userEntries = @($userPath -split ';' | Where-Object { $_ })
if ($userEntries -notcontains $netsukeDirectory) {
    $newUserPath = (($userEntries + $netsukeDirectory) -join ';')
    [Environment]::SetEnvironmentVariable('Path', $newUserPath, 'User')
}
if (($env:Path -split ';') -notcontains $netsukeDirectory) {
    $env:Path = "$env:Path;$netsukeDirectory"
}
netsuke --version

The release publishes PowerShell help separately for each Windows architecture. The following script downloads the matching module script, manifest, Microsoft Assistance Markup Language (MAML) help, and about-help file. It then restores the versioned module layout under the current user's standard PowerShell module directory and imports the module. Set $architecture to match the downloaded MSI:

$architecture = 'amd64' # Use 'arm64' for the Arm64 MSI.
$releaseUri = 'https://api.github.com/repos/leynos/netsuke/releases/tags/v0.1.0-beta1'
$release = Invoke-RestMethod -Uri $releaseUri

$documents = [Environment]::GetFolderPath('MyDocuments')
$editionDirectory = if ($PSVersionTable.PSEdition -eq 'Desktop') {
    'WindowsPowerShell'
} else {
    'PowerShell'
}
$moduleRoot = Join-Path $documents "$editionDirectory\Modules"
$moduleDirectory = Join-Path $moduleRoot 'Netsuke\0.1.0-beta1'
$helpDirectory = Join-Path $moduleDirectory 'en-US'
New-Item -ItemType Directory -Path $helpDirectory -Force | Out-Null

$patterns = @{
    'Netsuke.psm1' = '*Netsuke.psm1'
    'Netsuke.psd1' = '*Netsuke.psd1'
    'Netsuke-help.xml' = '*en-US-Netsuke-help.xml'
    'about_Netsuke.help.txt' = '*en-US-about_Netsuke.help.txt'
}
$localizedFiles = @('Netsuke-help.xml', 'about_Netsuke.help.txt')
foreach ($fileName in $patterns.Keys) {
    $pattern = "*windows-$architecture*$($patterns[$fileName])"
    $asset = $release.assets | Where-Object { $_.name -like $pattern } | Select-Object -First 1
    if ($null -eq $asset) {
        throw "Release asset not found: $pattern"
    }
    $destinationDirectory = if ($localizedFiles -contains $fileName) {
        $helpDirectory
    } else {
        $moduleDirectory
    }
    $destination = Join-Path $destinationDirectory $fileName
    Invoke-WebRequest -Uri $asset.browser_download_url -OutFile $destination -UseBasicParsing
}

Import-Module (Join-Path $moduleDirectory 'Netsuke.psd1') -Force

The versioned directory is discoverable in later PowerShell sessions. After the import, inspect the external help with:

Get-Help Netsuke -Full