packages/shared-skills/skills/ast-grep/references/install.md
The skill ships an install.sh (POSIX) and install.ps1 (Windows) that try every reasonable method in priority order and fall back to a GitHub release download as a last resort. You usually do not need to read this page. Run the installer:
bash install.sh # macOS / Linux / WSL / Git Bash
pwsh -File install.ps1 # Windows PowerShell
This page exists for the (rare) case the installer cannot find a working method, or you want to install ast-grep manually.
brew install ast-grep # Homebrew - the primary path
sudo port install ast-grep # MacPorts
npm install -g @ast-grep/cli # if you have Node already
cargo install ast-grep --locked # if you have Rust already
# Universal (works on every distro)
npm install -g @ast-grep/cli
cargo install ast-grep --locked
pip install ast-grep-cli
# Distro-specific
nix-env -iA nixpkgs.ast-grep # NixOS / Nix
brew install ast-grep # Linuxbrew
# NixOS shell.nix
nix-shell -p ast-grep
Linux gotcha: the binary is named
sg, but on most Linux systemssgis also thesetgroupscommand fromutil-linux. The shell seessetgroupsfirst and ignores ast-grep. Two options:
- Always invoke
ast-grep(full name).- Add an alias:
alias sg=ast-grepin your~/.bashrc/~/.zshrc.The
ast_grep_helper.pyscript inscripts/already handles this — when it seessgon PATH on Linux, it runs--versionand rejects the binary if it isn't ast-grep.
scoop install main/ast-grep # Scoop (most common on dev machines)
winget install --id ast-grep.ast-grep # Winget (Microsoft built-in)
choco install ast-grep # Chocolatey
npm install -g @ast-grep/cli # any OS with Node
cargo install ast-grep --locked # any OS with Rust
Treat as Linux. Use npm, cargo, pip, or bash install.sh.
These work on every OS:
| Method | Command | Pros | Cons |
|---|---|---|---|
| npm | npm install -g @ast-grep/cli | Fast, prebuilt platform binaries | Needs Node 18+ |
| cargo | cargo install ast-grep --locked | Always builds latest from source | Slow (~3-5 min compile) |
| cargo binstall | cargo binstall ast-grep | Fast (downloads release binary) | Needs cargo-binstall first |
| pip | pip install ast-grep-cli | Works in any Python venv | Needs Python 3.8+ |
| pipx | pipx install ast-grep-cli | Isolated install | Needs pipx |
| mise | mise use -g ast-grep | asdf successor, version-pinning | Needs mise |
| GitHub release | manual download | Pure binary, no toolchain | Manual PATH setup |
If every package manager fails:
# 1. Pick the right asset for your OS+arch from the latest release:
# https://github.com/ast-grep/ast-grep/releases/latest
#
# Naming pattern:
# app-aarch64-apple-darwin.zip macOS Apple Silicon
# app-x86_64-apple-darwin.zip macOS Intel
# app-aarch64-unknown-linux-gnu.zip Linux ARM64 (glibc)
# app-x86_64-unknown-linux-gnu.zip Linux x86_64 (glibc)
# app-x86_64-pc-windows-msvc.zip Windows x86_64
# app-aarch64-pc-windows-msvc.zip Windows ARM64
# 2. Download and extract:
VERSION=0.43.0
TRIPLE=aarch64-apple-darwin
curl -fsSL "https://github.com/ast-grep/ast-grep/releases/download/${VERSION}/app-${TRIPLE}.zip" -o /tmp/ast-grep.zip
unzip /tmp/ast-grep.zip -d /tmp/ast-grep
sudo mv /tmp/ast-grep/ast-grep /usr/local/bin/sg
sudo chmod +x /usr/local/bin/sg
# 3. Verify:
sg --version
The skill's install.sh does steps 1-3 automatically and drops the binary in <skill_root>/bin/sg so you can use it without sudo.
git clone https://github.com/ast-grep/ast-grep.git
cd ast-grep
cargo install --path ./crates/cli --locked
Requires Rust 1.74+. Slowest path; only useful when you need a specific commit or unreleased fix.
ast-grep --version # or `sg --version`
# ast-grep 0.43.0
Then sanity-check a real query:
echo 'console.log("hello")' | sg run -p 'console.log($MSG)' --lang js --stdin
Expected: a single match with the console.log("hello") call highlighted.
After installing the CLI, set up your editor:
ast-grep extension. Requires sgconfig.yml in workspace root for live diagnostics.nvim-lspconfig with ast_grep server, or install telescope-ast-grep.nvim.ast-grep lsp as a language server in languages.toml.ast-grep.el.See references/cli.md for ast-grep lsp flags.
| Method | Command |
|---|---|
| brew | brew uninstall ast-grep |
| npm | npm uninstall -g @ast-grep/cli |
| cargo | cargo uninstall ast-grep |
| pip | pip uninstall ast-grep-cli |
| pipx | pipx uninstall ast-grep-cli |
| scoop | scoop uninstall ast-grep |
| winget | winget uninstall --id ast-grep.ast-grep |
| choco | choco uninstall ast-grep |
| GitHub binary | rm <skill_root>/bin/sg |