Skip to content
Pages of the documentation

Install

The server with uv, pip or Docker; where each keeps its configuration, and how to upgrade.

The server is the Python package nestor-home (Python 3.12 or later), also published as the image ghcr.io/nestor-home/nestor (amd64, arm64). The three ways run the same server:

Install with uv pip Docker
What you get nestor on your PATH, in its own environment nestor in a virtual environment you manage the image, with docker run or Compose
Python uv fetches it if needed yours, 3.12 or later inside the image
Configuration, .env, state the folder where you ran nestor init the folder where you ran nestor init the folder mounted on /data
Upgrade uv tool upgrade nestor-home pip install -U nestor-home docker pull, then a new container
Good for a development machine, trying it out, writing satellites an environment you already run a server at home that stays on

The package alone runs Nestor in text: the admin, Telegram, connectors, any OpenAI-compatible model, and satellites in writing. Their realtime voice is the voice extra: install 'nestor-home[voice]' to add it. The image has every extra. A configuration that gives satellites a voice without the extra fails at start and names the command to run.

With uv

uv installs nestor as a tool: an isolated environment, the command on your PATH, nothing to activate.

uv tool install nestor-home
mkdir nestor && cd nestor
nestor init

With the satellites’ voice, the first line is uv tool install 'nestor-home[voice]', and nestor init asks whether to use it. Fill the keys left empty in .env (see Providers), then:

nestor check
nestor run

nestor reads nestor.yaml in the current folder; nestor -c <file> reads another, from anywhere. It also reads the .env next to that file at each start, so there is nothing to source. A variable already set in the environment (the shell, a service manager) wins over the file.

To upgrade, extras included:

uv tool upgrade nestor-home

With pip

In a virtual environment you create and keep:

python3 -m venv ~/.venvs/nestor
~/.venvs/nestor/bin/pip install nestor-home
mkdir nestor && cd nestor
~/.venvs/nestor/bin/nestor init

Then nestor check and nestor run as above, from the environment (activate it, or call ~/.venvs/nestor/bin/nestor). For the satellites’ voice, install 'nestor-home[voice]' instead. Upgrade with the same command and -U.

With Docker

The image ghcr.io/nestor-home/nestor keeps everything in /data. Mount a folder there, write a first configuration, fill the keys, then start it:

docker run -it --rm -v ./nestor:/data ghcr.io/nestor-home/nestor init
$EDITOR nestor/.env
docker run -d --name nestor --restart unless-stopped -v ./nestor:/data -p 8470:8470 -p 8471:8471 ghcr.io/nestor-home/nestor

nestor/ holds nestor.yaml, its .env and state/. The container starts as root only to give /data to its user (uid 1000), then runs as that user. It publishes two ports: 8470 for the admin (http://<the machine’s address>:8470) and 8471 for satellites, which pair and talk there. To change them, set admin.port and the satellites channel’s port in nestor.yaml, and the matching -p options.

Every nestor command runs through the image, which reads /data/nestor.yaml:

docker run --rm -v ./nestor:/data ghcr.io/nestor-home/nestor check
docker run --rm -it -v ./nestor:/data ghcr.io/nestor-home/nestor secrets list

Nestor reads nestor/.env itself, at each start: after editing it, docker restart nestor. A model server on the same machine (Ollama, LM Studio) is http://host.docker.internal:<port>/v1 from the container; on Linux, add --add-host host.docker.internal:host-gateway to docker run.

With Compose

For an installation that stays, the repository’s compose.yaml holds the same settings (the host.docker.internal line included) and an optional Litestream replica. It keeps everything in ./data:

curl -fsSLO https://raw.githubusercontent.com/nestor-home/nestor/main/compose.yaml
docker compose run --rm nestor init
docker compose up -d

To upgrade:

docker compose pull
docker compose up -d

compose.yaml follows latest. To stay on a release line, set the tag in it, for example ghcr.io/nestor-home/nestor:0.6 (or 0.6.0 for one exact release).

The owner account

nestor init creates it. For an installation that has none yet (a configuration written by hand, a state/ from elsewhere):

nestor accounts create-owner --login alex

It asks for the password. --person names the household member it belongs to (by default the first one of the configuration). Restart Nestor if it is running. With Docker, the same command runs as docker run --rm -it -v ./nestor:/data ghcr.io/nestor-home/nestor accounts create-owner --login alex.