Getting started
Install llamay
Every platform, every package, and what to do after it lands. Pick your row, follow it to the end, and you will have a model answering on your own machine with nothing configured and no account.
Which one do you want?
macOS
The app (easiest)
- Download
llamay_<version>_macos.dmgfrom the download page. - Open it and drag llamay to Applications.
- Launch it. It is signed and notarized, so it opens without a warning.
The app bundles the engine and manages the model store under
~/.llamay. It also puts the llamay command on your
PATH the first time you open a terminal from it, so the CLI and the app share
one set of downloaded models rather than each keeping its own.
The command line
curl -fsSL https://llamay.com/install.sh | sh
The script detects your architecture, downloads the matching build and the
release's SHA256SUMS, and checks the sum before installing
— that check is not optional, and the script refuses rather than skipping it
on a machine with no sha256 tool. The binary goes to
/usr/local/bin, which it will ask for sudo to write.
To avoid the password prompt entirely, install somewhere you already own:
LLAMAY_INSTALL_DIR="$HOME/.local/bin" curl -fsSL https://llamay.com/install.sh | sh
Apple Silicon and the GPU
On an M-series Mac, take the Metal build. It is a separate artifact because it needs cgo and the plain one does not:
| Your Mac | Artifact | Runs on |
|---|---|---|
| M1 / M2 / M3 / M4 | darwin_arm64_metal.tar.gz | The GPU |
| M-series, no GPU wanted | darwin_arm64.tar.gz | CPU only |
| Intel | darwin_amd64.tar.gz | CPU only |
Check which one you are running at any time — the backend field
says device when the GPU is in use and cpu when it
is not:
curl -s localhost:11435/healthz
{"backend":"device","model":"Qwen2.5 7B Instruct","status":"ok","version":"0.1.54"}
From the tarball, by hand
VER=0.1.54
curl -fsSLO https://github.com/AzmxAI/llamay-releases/releases/download/v$VER/llamay_${VER}_darwin_arm64_metal.tar.gz
curl -fsSLO https://github.com/AzmxAI/llamay-releases/releases/download/v$VER/SHA256SUMS
# Verify before you extract, not after.
shasum -a 256 -c SHA256SUMS --ignore-missing
tar xzf llamay_${VER}_darwin_arm64_metal.tar.gz
sudo install -m 0755 llamay /usr/local/bin/llamay
llamay --version
If Gatekeeper complains about a hand-extracted binary, it is because
the quarantine flag came with the download rather than because anything is
wrong with the file. The .dmg and the installers are notarized;
a raw tarball is not the same path. Clear it once you have checked the sum:
xattr -d com.apple.quarantine llamay
Windows
The installer
- Download
llamay_<version>_windows_amd64_setup.exe— or thearm64one on a Snapdragon or Surface Pro X. - Run it. It is signed with Azure Trusted Signing, so SmartScreen lets it through.
- It installs to
%LOCALAPPDATA%\Programs\llamay, adds that to your PATH, and offers to start llamay at logon.
Per-user by default, which is why there is no elevation prompt. For a
machine-wide install into Program Files, run it elevated.
PowerShell, one line
irm https://llamay.com/install.ps1 | iex
Same shape as the shell script: detect, download, verify the checksum,
install, add to PATH. Add -AllUsers to install into
Program Files instead, which needs an elevated shell.
& ([scriptblock]::Create((irm https://llamay.com/install.ps1))) -AllUsers
Open a new terminal after installing. A PATH change does not reach a shell that was already running.
The portable zip
No installer, no PATH change, nothing written outside the folder — useful on a locked-down machine or a USB stick.
$ver = "0.1.54"
Invoke-WebRequest "https://github.com/AzmxAI/llamay-releases/releases/download/v$ver/llamay_${ver}_windows_amd64.zip" -OutFile llamay.zip
Expand-Archive llamay.zip -DestinationPath .\llamay
.\llamay\llamay.exe --version
Running it at logon
A scheduled task rather than a Windows service, and deliberately: llamay wants a user's model store and a desktop session, which a service running as SYSTEM has neither of.
schtasks /Query /TN llamay # the installer creates this
schtasks /End /TN llamay # stop it now
schtasks /Delete /TN llamay /F # stop it starting at logon
Linux
Debian, Ubuntu, Mint, Pop!_OS
VER=0.1.54
curl -fsSLO https://github.com/AzmxAI/llamay-releases/releases/download/v$VER/llamay_${VER}_amd64.deb
sudo apt install ./llamay_${VER}_amd64.deb
Use arm64.deb on a Raspberry Pi 5, an Ampere box or Graviton.
Fedora, RHEL, Rocky, Alma, openSUSE
VER=0.1.54
sudo dnf install https://github.com/AzmxAI/llamay-releases/releases/download/v$VER/llamay-${VER}-1.x86_64.rpm
Use aarch64.rpm on ARM. On openSUSE, zypper install takes the same URL.
The service the packages install
Both packages ship a systemd unit that runs as its own llamay
user with a store at /var/lib/llamay/models. It is not started
automatically — a service that begins downloading models the moment a package
lands is not a good guest.
sudo systemctl enable --now llamay
systemctl status llamay
journalctl -u llamay -f
It listens on loopback. To change the address, the model or anything else, override rather than editing the unit — a package upgrade replaces the unit and would take your edit with it:
sudo systemctl edit llamay
[Service]
ExecStart=
ExecStart=/usr/bin/llamay serve -m /var/lib/llamay/models/qwen.gguf -conc 4
The empty ExecStart= is required. Without it systemd appends to
the existing one and the service tries to start twice.
Any distribution, from the tarball
curl -fsSL https://llamay.com/install.sh | sh
Works on anything with a shell and curl: Arch, Alpine, NixOS,
a container, a CI runner. No package manager involved, and no root needed if
you set LLAMAY_INSTALL_DIR to somewhere you own.
NVIDIA and AMD
Take linux_amd64_gpu.tar.gz. It carries both the CUDA and Vulkan
backends in one binary, and the loader is dlopened at first use —
so there is no CUDA toolkit to install, no libvulkan-dev, and
the same file runs on a machine with no GPU at all.
llamay serve -m model.gguf
# then, in another terminal
curl -s localhost:11435/healthz | grep -o '"backend":"[a-z]*"'
"device" means a GPU is doing the work. "cpu" means
the driver was not found or declined, and the server says which in its first
log line rather than quietly running slowly.
Docker
The image is built FROM scratch — the binary and a CA bundle,
nothing else. There is no shell in it, which is a feature and also means
docker exec will not give you one.
The image listens on 8081, not 11435. Its default command is
serve -addr 0.0.0.0:8081, spelled out rather than left to the
default because serve binds to loopback and loopback inside a
container is reachable by nothing.
docker run --rm -p 8081:8081 \
-v llamay-models:/models \
ghcr.io/azmxai/llamay:latest
The volume is where models live: LLAMAY_MODELS=/models is set in
the image because the container runs as uid 65532 with no home directory to
fall back to. Pull into it once and the models survive the container.
docker run --rm -v llamay-models:/models \
ghcr.io/azmxai/llamay:latest \
pull hf:Qwen/Qwen2.5-7B-Instruct-GGUF/qwen2.5-7b-instruct-q4_k_m.gguf
Publishing that port puts the server on your network, so set a key before you do:
docker run --rm -p 8081:8081 \
-e LLAMAY_API_KEY=$(openssl rand -hex 32) \
-v llamay-models:/models \
ghcr.io/azmxai/llamay:latest
For NVIDIA, use Dockerfile.cuda and pass
--gpus all.
Verifying what you downloaded
Every release publishes SHA256SUMS over the artifacts as they
were uploaded. The installers check it for you; if you download by hand, check
it yourself.
| Platform | Command |
|---|---|
| macOS | shasum -a 256 -c SHA256SUMS --ignore-missing |
| Linux | sha256sum -c SHA256SUMS --ignore-missing |
| Windows | Get-FileHash .\llamay.zip -Algorithm SHA256 |
--ignore-missing matters: the file covers every artifact in the
release and you downloaded one of them. Without it the check reports fourteen
missing files and one OK, which reads like a failure.
Your first five minutes
Identical on every platform once llamay is on your PATH.
# 1. Get a model. A 7B is a good first choice; a 3B is fine on 8 GB.
llamay pull hf:Qwen/Qwen2.5-7B-Instruct-GGUF/qwen2.5-7b-instruct-q4_k_m.gguf
# 2. Ask it something, with no server involved.
llamay run -m qwen2.5-7b-instruct-q4_k_m.gguf -p "why is the sky blue?"
# 3. Start the server.
llamay serve
# 4. Use it from anything that speaks OpenAI.
curl -s localhost:11435/v1/chat/completions \
-H 'content-type: application/json' \
-d '{"model":"","messages":[{"role":"user","content":"hello"}]}'
Already have Ollama? llamay reads its store, so every model you have pulled is
available with no re-download: llamay run -m llama3.2:3b.
Which model fits your machine
| Memory | Comfortable | Notes |
|---|---|---|
| 8 GB | 3B at q4_k_m | About 2 GB of weights; leaves room for the cache |
| 16 GB | 7B–8B at q4_k_m | About 4.5 GB; the common choice |
| 32 GB | 14B, or 7B at q8_0 | Quality per gigabyte favours a bigger model at lower precision |
| 64 GB+ | 32B–70B | Watch the KV cache, not the weights |
The weights are the number people plan for and the KV cache is the one that
surprises them: it grows with context length times concurrency.
-kv vq8 roughly halves it, at a cost the
verifier measures rather than asserts.
Upgrading
| Installed with | Upgrade with |
|---|---|
| The macOS app | It checks on launch and updates itself |
install.sh / install.ps1 | Run the same line again; it replaces the binary |
.deb | sudo apt install ./llamay_<new>_amd64.deb |
.rpm | sudo dnf upgrade <url> |
| Docker | docker pull ghcr.io/azmxai/llamay:latest |
Your models are not touched by an upgrade — they live in the store, not beside the binary. Restart the server afterwards; a running process keeps the old binary mapped.
Uninstalling
# macOS or Linux, installed by the script or a tarball
sudo rm /usr/local/bin/llamay
# Debian / Ubuntu
sudo apt remove llamay
# Fedora / RHEL
sudo dnf remove llamay
# the models, which no uninstall removes for you
rm -rf ~/.llamay # or /var/lib/llamay for a packaged service
On Windows, use Add or Remove Programs, or delete the folder if you took the zip. The model store is left alone on purpose: it is often tens of gigabytes somebody spent an evening downloading, and an uninstaller that deletes it without asking is one people only forgive once.
When it does not work
command not found
The install directory is not on your PATH, or the shell predates the
change. Open a new terminal. On Linux, check
/usr/local/bin is in $PATH.
It runs on the CPU and you wanted the GPU
The plain macOS build has no Metal; take the _metal
artifact. On Linux take _gpu. /healthz reports
backend, and the first log line says why a device was
declined.
Address already in use
Something already holds 11435 — often another llamay, or the desktop app.
llamay serve -addr 127.0.0.1:11436, or stop the other one.
no llamay store
There is no home directory to fall back to, which happens under systemd
and in containers. Set LLAMAY_MODELS to a directory the
process can write.
It is slower than you expected
Check backend first, then the quantisation. A
q8_0 of a 7B is twice the memory traffic of
q4_k_m for a difference most tasks cannot see.
The checksum does not match
Do not run it. Download again; if it still differs, say so on the repository rather than working around it.
Where to go next
Quickstart is the same first session in fewer words. The live playground runs against the server you just started. Recipes is what to build with it, and Serving is what to do when it is not only your machine calling.