Installing Sailfin
Just want the binary? Head to the Downloads page for pre-built binaries for every supported platform, or keep reading for the recommended install script.
Requirements
Section titled “Requirements”Sailfin runs on the following platforms:
| Platform | Architectures |
|---|---|
| Linux | x86_64, arm64 |
| macOS | x86_64, arm64 (Apple Silicon) |
| Windows | x86_64 |
WSL (Windows Subsystem for Linux) and Git Bash on Windows are also supported and use the Linux install path.
Compiler and linker tools
Section titled “Compiler and linker tools”The installer only downloads and places the released sfn binary. To compile,
run, or test Sailfin programs, the current backend still needs LLVM tools 17+
or 18+ plus clang and the platform linker. Release binaries do not bundle
LLVM/clang.
The installer script itself also requires curl, tar, uname, mktemp, and
jq on Linux/macOS because it selects release assets through the GitHub API.
If you are building Sailfin itself from source, you also need bash, make,
OpenSSL development libraries, and the source-build dependencies listed in
Building from source.
Quick Install (recommended)
Section titled “Quick Install (recommended)”Linux and macOS
Section titled “Linux and macOS”Paste the following into a terminal:
curl -fsSL https://raw.githubusercontent.com/SailfinIO/sailfin/main/install.sh | bashThe script will:
- Detect your OS and architecture
- Download the latest matching release binary from GitHub Releases
- Install
sailfinandsfnto~/.local/bin - Print confirmation when complete
Example output:
Detected: linux/x86_64Downloading sfn <version>...Installed sailfin -> /home/you/.local/bin/sailfinInstalled sfn -> /home/you/.local/bin/sfnDone. Run 'sfn --version' to verify.Windows (PowerShell)
Section titled “Windows (PowerShell)”Paste the following into a PowerShell terminal (PowerShell 5.1+ or PowerShell 7+):
irm https://raw.githubusercontent.com/SailfinIO/sailfin/main/install.ps1 | iexThe script installs sailfin.exe and sfn.exe to
%LOCALAPPDATA%\sailfin\bin and adds that directory to your user PATH
automatically. You do not need to run PowerShell as Administrator.
Example output:
Detected: windows/x86_64Downloading sfn <version>...Installed sailfin.exe -> C:\Users\you\AppData\Local\sailfin\bin\sailfin.exeInstalled sfn.exe -> C:\Users\you\AppData\Local\sailfin\bin\sfn.exeAdded C:\Users\you\AppData\Local\sailfin\bin to user PATH.Done. Restart your terminal, then run 'sfn --version' to verify.Windows users: Restart your terminal after installation so that the updated
PATHtakes effect. If you use Windows Terminal, close and reopen the window.
Verifying the Installation
Section titled “Verifying the Installation”After installing, run:
sfn --versionExpected output:
sfn <version>If the command is not found, see Troubleshooting below.
Pinning a Version
Section titled “Pinning a Version”Sailfin is pre-1.0, so pin exact release versions in CI and reproducible setup
scripts. Omit VERSION for the latest release asset that matches your platform.
Compiler repository development uses the exact seed version in
bootstrap.toml,
not a hard-coded docs-page version.
Linux and macOS
Section titled “Linux and macOS”Replace the example version with the release you want to pin:
VERSION=0.8.0-alpha.5curl -fsSL https://raw.githubusercontent.com/SailfinIO/sailfin/main/install.sh | VERSION="$VERSION" bashYou can also pass the version as an install-script argument:
VERSION=0.8.0-alpha.5curl -fsSL https://raw.githubusercontent.com/SailfinIO/sailfin/main/install.sh | bash -s -- --version "$VERSION"Windows (PowerShell)
Section titled “Windows (PowerShell)”Replace the example version with the release you want to pin:
$env:VERSION = "0.8.0-alpha.5"irm https://raw.githubusercontent.com/SailfinIO/sailfin/main/install.ps1 | iexSet $env:VERSION before invoking iex so the script reads it.
Why pin? The Sailfin project is marching toward a 1.0 release. Alpha builds may include regressions as large parts of the compiler and runtime are rewritten. Pinning gives CI and onboarding scripts a reproducible toolchain.
What Gets Installed
Section titled “What Gets Installed”The installer places two binaries in the install directory. They are identical —
sfn is a shorter alias for sailfin:
| Binary | Purpose |
|---|---|
sailfin |
The full compiler and toolchain |
sfn |
Alias for sailfin; most examples and docs use sfn |
Default install locations
Section titled “Default install locations”| Platform | Directory |
|---|---|
| Linux / macOS | ~/.local/bin |
| Windows | %LOCALAPPDATA%\sailfin\bin |
You can override the install directory by setting GLOBAL_BIN_DIR before running
the script:
curl -fsSL https://raw.githubusercontent.com/SailfinIO/sailfin/main/install.sh | GLOBAL_BIN_DIR=/usr/local/bin bashConfirming the binaries are on PATH
Section titled “Confirming the binaries are on PATH”which sfnsfn --version# sfn <version>On Windows:
Get-Command sfn# CommandType Name SourceManual Installation
Section titled “Manual Installation”If you cannot run the install script (e.g., in an air-gapped environment), you can download and place the binary manually. The Downloads page lists every platform binary with direct download links.
Step 1: Find the release asset
Section titled “Step 1: Find the release asset”Go to the Downloads page or directly to github.com/SailfinIO/sailfin/releases and locate the release you want to install. Release assets follow this naming convention:
sailfin_<version>_<os>_<arch>.tar.gzExamples:
| Asset name | Platform |
|---|---|
sailfin_${VERSION}_linux_x86_64.tar.gz |
Linux x86_64 |
sailfin_${VERSION}_macos_arm64.tar.gz |
macOS Apple Silicon |
sailfin_${VERSION}_windows_x86_64.tar.gz |
Windows x86_64 |
Step 2: Extract and place the binary
Section titled “Step 2: Extract and place the binary”VERSION=0.8.0-alpha.5
# Download (replace the filename with the one that matches your platform)curl -LO "https://github.com/SailfinIO/sailfin/releases/download/v${VERSION}/sailfin_${VERSION}_linux_x86_64.tar.gz"
# Extracttar -xzf "sailfin_${VERSION}_linux_x86_64.tar.gz"
# The archive contains bin/sailfin and bin/sfn# Move them to a directory on your PATHmkdir -p ~/.local/bincp bin/sailfin ~/.local/bin/sailfincp bin/sfn ~/.local/bin/sfnchmod +x ~/.local/bin/sailfin ~/.local/bin/sfnStep 3: Verify
Section titled “Step 3: Verify”sfn --version# sfn <version>Building from Source
Section titled “Building from Source”Building from source is useful when:
- You are contributing to the compiler
- You need a build for an unsupported platform
- You want to test unreleased changes
Prerequisites
Section titled “Prerequisites”git,bash,makecurl,tar,mktemp,uname,jq- LLVM tools 17+ or 18+ (
llvm-link,llvm-as) clangand the platform linker- OpenSSL development libraries (
libssl-dev,openssl-devel, or Homebrewopenssl@3) shasum -a 256orsha256sum
See the compiler/runtime development setup for per-platform package commands and the complete supported build flag table.
# Clone the repositorygit clone https://github.com/SailfinIO/sailfin.gitcd sailfin
# Build the native compiler by self-hosting from the released seed pinned in bootstrap.tomlmake compile
# Install to ~/.local/bin (or set PREFIX to override)make installAfter make install, verify with:
sfn --versionYou can also run the binary directly without installing:
build/bin/sfn --versionNote:
make compileroutes through<seed> build -p compiler— the Sailfin-native driver — and requiresbash,clang, LLVM tools,jq, and OpenSSL development libraries. The priorscripts/build.shorchestrator is no longer in-tree.
Updating
Section titled “Updating”To update to the latest release, re-run the install script. It overwrites the existing binaries in-place:
# Linux / macOS: update to latestcurl -fsSL https://raw.githubusercontent.com/SailfinIO/sailfin/main/install.sh | bash
# Linux / macOS: update to a specific versionVERSION=0.8.0-alpha.5curl -fsSL https://raw.githubusercontent.com/SailfinIO/sailfin/main/install.sh | VERSION="$VERSION" bash# Windows: update to latestirm https://raw.githubusercontent.com/SailfinIO/sailfin/main/install.ps1 | iexAs with the initial install, pinning to a known release version is recommended for CI and reproducible environments.
Uninstalling
Section titled “Uninstalling”Delete the binaries from the install directory:
# Linux / macOSrm ~/.local/bin/sailfin ~/.local/bin/sfn# WindowsRemove-Item "$env:LOCALAPPDATA\sailfin\bin\sailfin.exe"Remove-Item "$env:LOCALAPPDATA\sailfin\bin\sfn.exe"You may also want to remove %LOCALAPPDATA%\sailfin (Windows) or the now-empty
~/.local/bin entries from your shell profile, if applicable.
Troubleshooting
Section titled “Troubleshooting”sfn: command not found after installation
Section titled “sfn: command not found after installation”The install directory is not on your PATH. Check which shell you are using and
add the directory:
bash (~/.bashrc or ~/.bash_profile):
export PATH="$HOME/.local/bin:$PATH"zsh (~/.zshrc):
export PATH="$HOME/.local/bin:$PATH"After editing the file, reload it:
source ~/.bashrc # or ~/.zshrcOn macOS, if you installed globally to /usr/local/bin, that directory is usually
already on PATH. Confirm with echo $PATH.
Permission denied when running the binary (Linux / macOS)
Section titled “Permission denied when running the binary (Linux / macOS)”The binary may not be marked executable. Fix it:
chmod +x ~/.local/bin/sailfin ~/.local/bin/sfnMissing LLVM, clang, or OpenSSL during a build
Section titled “Missing LLVM, clang, or OpenSSL during a build”Install the source-build dependencies for your platform:
# Ubuntu / Debiansudo apt-get install clang-18 llvm-18 libssl-dev jq
# Fedora / RHELsudo dnf install clang llvm llvm-devel openssl-devel jq
# macOS (Homebrew)brew install jq llvm openssl@3If Homebrew LLVM is installed but llvm-link is not detected, put it on PATH:
export PATH="$(brew --prefix llvm)/bin:$PATH"If macOS cannot find OpenSSL at link time, set:
export SAILFIN_OPENSSL_PREFIX="$(brew --prefix openssl@3)"GitHub API rate limiting during install
Section titled “GitHub API rate limiting during install”The install script calls the GitHub Releases API to find the latest version. If you hit rate limits (common in CI environments), set a GitHub token:
curl -fsSL https://raw.githubusercontent.com/SailfinIO/sailfin/main/install.sh | GITHUB_TOKEN=ghp_your_token_here bashAlternatively, pin the version explicitly with VERSION=<version> — this
constructs the asset name directly and can avoid the release-list lookup.
Windows: script execution policy
Section titled “Windows: script execution policy”If PowerShell refuses to run the install script, you may need to allow remote scripts for the current session:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypassirm https://raw.githubusercontent.com/SailfinIO/sailfin/main/install.ps1 | iexThis change only affects the current PowerShell session and does not persist.
Next Steps
Section titled “Next Steps”- Downloads — Pre-built binaries for every platform
- Editor Setup — Install the Sailfin VS Code extension for syntax highlighting and snippets
- Hello, World! — Write and run your first Sailfin program
- Tour of Sailfin — A guided introduction to the language