Install
Run your first local AI model with Nodeau.
Turn a Linux/NVIDIA PC or an Apple Silicon Mac into a private, OpenAI-compatible local AI endpoint. Three commands, then a request.
Current build · free · no account needed
Full documentation · Linux install in detail · macOS install in detail
Before you start
What you need
- Linux: Ubuntu 24.04 LTS on x86_64, installed normally (not in a virtual machine without GPU passthrough), with an NVIDIA GPU and a working driver already installed
- macOS: an Apple Silicon Mac (M-series). No driver to install, and no password needed. Tested on macOS 26.5, and earlier versions are untested rather than unsupported, so the installer leaves the choice to you
- About 20 GB free disk, since Nodeau is under 100 MB and the starter model is 2.6 GB. On Linux the container images add about 3 GB
- An internet connection during installation and the model download
- sudo on Linux for the setup step only. A Mac install needs no password at all
Current limits
- Apple Silicon Macs run standalone, working happily on their own
- Batch inference is Linux-only, and on a Mac it says so clearly
- On a Mac, whether a model fits depends on what else is running, so the same request can be admitted today and correctly refused tomorrow
- AMD and Intel GPUs are unsupported
- Several GPUs per machine on Linux/NVIDIA, and a single model can be split across them when one card needs a hand. A Mac uses its one integrated GPU
- The installer sets up one machine
- llama.cpp runtime
- No Windows, and no WSL yet
Nodeau has been run on an RTX 5070 Ti, an RTX 3080, an RTX 5060 Ti and an RTX 2080 under Ubuntu 24.04, and on an M3 Pro under macOS. On a card it has not measured directly it works out a cautious estimate and tells you that is what it did, instead of guessing quietly. Other NVIDIA cards are expected to work well. They simply have not been measured yet. See the roadmap.
What runs where
Four levels, and we use them literally. Recommended is what we run every day and measure against. Qualified means a real machine has been through the whole customer path and the exclusions below are known and listed. Experimental would mean it runs but we would rather you did not rely on it. Everything we ship has moved past that. Unsupported means Nodeau refuses rather than half-works.
| Platform | Level | What that rests on |
|---|---|---|
| Linux · NVIDIA Ubuntu 24.04, x86_64 |
Recommended | Several machines and four NVIDIA cards, through reboots, a power cut and a GPU swap. |
| Apple Silicon M-series, macOS |
Qualified | One machine, an M3 Pro on macOS 26.5, installed from the public path and serving on Metal. Earlier macOS versions are untested rather than unsupported. |
| One model across several GPUs Linux · NVIDIA, same machine |
Qualified | One heterogeneous pair, an RTX 3080 and an RTX 5060 Ti, running a model whose weights fit on neither card alone. Other combinations are untested. It buys capacity, not speed. Not available on Apple Silicon, which uses its one integrated GPU. |
| Independent batch workers across several GPUs Linux · NVIDIA, same machine |
Qualified | The same heterogeneous pair, with both cards observed running a model server at once and every record accounted for exactly once. A worker count is a request: workers that cannot get a card wait, and the job still completes. Not available on Apple Silicon, where batch inference is absent rather than untested. |
| Windows via WSL | Unsupported | The GPU path through WSL is genuinely different, and is refused rather than half-supported. Native Windows is not planned. |
| AMD and Intel GPUs | Unsupported | A different runtime and memory story, not a configuration flag. |
| Capability | Linux · NVIDIA | Apple Silicon |
|---|---|---|
| The same on both | ||
| Local inference on your own GPU | Included | Included |
| Model catalog, download and verified cache | Included | Included |
| Will it fit? Admission runs before anything starts | Included | Included |
| OpenAI-compatible API | Included | Included |
run · ps · stop · logs · doctor | Included | Included |
| Local dashboard | Included | Included |
| Accounts, plans and offline entitlements | Included | Included |
| Works with no internet once installed | Included | Included |
| Clean uninstall | Included | Included |
| Where the two differ | ||
| Several GPUs in one machine | Included | Not applicable one integrated GPU |
| Choosing where work runs Efficiency, Balanced or Performance, and why it chose |
Included | Not available one GPU, nothing to choose |
| Power budgets and per-GPU limits a ceiling Nodeau will not schedule past, and a cap a card will not draw past |
Included | Not available no equivalent control |
| Several machines as one fleet | Included | Not available runs standalone |
| Batch inference chat or embeddings, a file of requests at a time |
Included | Not available Linux only, and says so clearly |
| Embeddings vectors for search and retrieval |
Included | Not available not yet measured on a Mac |
| Reranking scoring documents against a query |
Included | Not available not yet measured on a Mac |
| Structured output and tool calling JSON constrained to your schema |
Included | Not available not yet measured on a Mac |
| Image understanding send a picture with your prompt |
Included | Not available not yet measured on a Mac |
| Speech to text | Not available Linux only |
Not available Linux only |
On Apple Silicon the GPU shares one pool of memory with everything else, so whether a model fits depends on what else is running. The same request can be admitted today and correctly refused tomorrow. Nodeau shows you the arithmetic either way rather than leaving you to guess.
Check your graphics driver
Open a terminal and run this. It is the one thing Nodeau needs you to have working already.
nvidia-smi
If you see a table with your graphics card in it, you are ready.
Install the Nodeau CLI
This downloads one small program, verifies its checksum, and puts it in a directory you own. It does not use sudo and changes nothing else.
curl -fsSL https://get.nodeau.ai/install.sh | bash
Want to read the installer first?
A good habit, and the script is short enough to make it practical.
curl -fsSL https://get.nodeau.ai/install.sh -o install-nodeau.sh
less install-nodeau.sh
bash install-nodeau.sh
If your shell then says nodeau: command not found, close
the terminal, open a new one, and carry on.
Prepare the machine
Nodeau checks the computer and sets up the local infrastructure it needs to run models.
nodeau install
It shows you what it found and what it plans to do, lists every command that needs your password, and waits for you to agree. Ubuntu will ask for your password once or twice. This part can take several minutes.
Want to see the plan without doing anything? Run
nodeau install --dry-run.
Download a model and start it
nodeau quickstart
Nodeau will:
- offer the starter model, Qwen3.5-4B, Apache-2.0, about a 2.6 GB download
- tell you the size and licence, and ask before downloading anything
- verify the file against a known SHA-256
- check the model fits safely in your GPU’s memory
- start it, and bring up the local API
On a slow connection, the download is the long part.
Talk to it
Nodeau prints a working command when it finishes. It looks like this, and the key is unique to your machine.
export NODEAU_API_KEY="$(nodeau auth show --quiet)"
curl http://127.0.0.1:8080/v1/chat/completions \
-H "Authorization: Bearer $NODEAU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.5-4b-q4km",
"messages": [{"role": "user", "content": "Say hello from my local GPU."}],
"max_tokens": 2048
}'
If text comes back, it worked. Your own graphics card
generated it. The first reply can take a few seconds while the
model warms up. Streaming works too: add "stream": true
and use curl -N.
Use it from Python
It is an ordinary OpenAI-compatible endpoint, so the official client works by changing the base URL.
import os
from openai import OpenAI
client = OpenAI(
base_url="http://127.0.0.1:8080/v1",
api_key=os.environ["NODEAU_API_KEY"],
)
reply = client.chat.completions.create(
model="qwen3.5-4b-q4km",
messages=[{"role": "user", "content": "Say hello from my local GPU."}],
max_tokens=2048,
)
print(reply.choices[0].message.content)
Set NODEAU_API_KEY first, as in the step above.
Afterwards
Day-to-day commands
nodeau status
What is running, and whether the endpoint is answering.
nodeau doctor
Read-only check of the machine and the installation. Changes nothing.
nodeau stop qwen-local
Stop the endpoint. Your downloaded model stays. Add --workload to free the GPU as well.
nodeau run qwen-local
Start it again.
nodeau model list
Which models Nodeau can serve, and what you have downloaded.
nodeau uninstall
Shows an uninstall plan and asks before changing anything. Keeps your models, your driver, and what was on the machine before Nodeau.
Every command takes --json if you are scripting it, and the
exit code tells you which kind of answer you got: a refusal is not the
same as a failure, and neither is “not yet”.
Every command, with its flags, and
the exit-code contract.
More than one machine
This guide sets up one machine, on purpose.
Nodeau’s control plane spans more than one GPU machine, on mixed NVIDIA hardware. Each machine reports what it has, checks its own copy of the model, and gets considered on its own merits when Nodeau decides where something should run.
This guide covers one machine because that is what the installer sets up today, and because it is the right place to start even if you have three. Several machines is a Home Pro and Business capability, and the single command that adds one is what we are working on now.
If you already have the hardware, we would like to talk to you while that is being finished.
Across several machines
- More than one GPU machine under one control plane
- Mixed NVIDIA generations, judged individually
- Every machine considered, and the reasoning kept
- Each machine verifies its own copy of the model
One thing Nodeau does not do anywhere: fail over on its own. It decides where a workload runs and leaves it there. See the roadmap.
If something goes wrong
Send us one file. Please don’t repair it by hand.
If you have to fix something manually, that is a bug we need to know about, and patching it up by hand hides it from us. We would much rather have the report.
If the CLI works
nodeau support bundle
Writes one .tar.gz into the current folder. It contains
no API keys, no credentials, no prompts and no model output, and it is sent nowhere, so you attach it yourself. It is an ordinary archive,
so you are very welcome to open it and look first.
If it failed before that
~/.local/state/nodeau/install.log
Everything nodeau install prints is also written there.
Send that file, or simply copy and paste whatever the terminal showed. Anything is better than nothing.
Before that, it is worth a look at troubleshooting, which is organised by what you are seeing, and what a support bundle contains.
Either way: founders@nodeau.ai, or use the contact form.
Ready?
Start at the driver check, then work down. It should take about ten minutes plus the download.