Skip to content

Homelab & mini PCs

This is the deployment target Nouride was designed around. A Pi 4 with 2 GB of RAM comfortably runs a handful of agents.

What works

TargetVerdict
Raspberry Pi 4 / 5 (1 GB+)Comfortable. linux-arm64. A Pi 5 is more than this needs
Orange Pi 5 / 5 PlusSame. Armbian arm64
Mini PC / NUC / old laptopOverkill, and the right choice anyway if the agent does infrastructure work
Any 512 MB VPSFine, including the dashboard. The cheapest tier at most providers
NAS with Docker (Synology, QNAP, Unraid)Fine. Check uname -m — several are arm64
Proxmox LXCFine, with one caveat about memory limits below
Alpine anythingNeeds the -musl build and apk add libstdc++

The one thing to check first

Your OS must be 64-bit.

Terminal window
uname -m # aarch64 → good. armv7l → 32-bit, not supported

There is no 32-bit ARM build, and the installer stops rather than downloading something that will not run. If you see armv7l, reinstall with Raspberry Pi OS (64-bit), Ubuntu Server arm64, or Armbian arm64. A Pi 3 or newer and any modern Orange Pi can all run 64-bit — the 32-bit image is just still a common default.

Install

Exactly the same command as any other Linux box:

Terminal window
curl -fsSL https://get.nouride.com/install.sh | sudo sh

systemd supervises it, it comes back after a reboot, and re-running the script upgrades it.

What it will actually use

Idle, 1 agent~65–75 MB resident
Boot peakroughly double the resting figure
Each extra agent~0.4 MB
CPU at idle0.7% of one core
Disk~95 MB installed

The floor is 64 MB — verified — but do not deploy at the floor: that is the number that proves the daemon is small, not a recommendation. At 64 MB there is nothing left for a turn.

Every measurement, with its provenance →

MemoryHigh is silently inert on Raspberry Pi OS

The generated systemd unit carries a soft memory ceiling at 80% of what the machine reports. Raspberry Pi OS ships with the memory cgroup controller disabled, so systemd accepts the setting and enforces nothing:

Terminal window
systemctl show nouride -p MemoryCurrent --value # `[not set]` means it is inert
cat /sys/fs/cgroup/cgroup.controllers # no `memory` in the list

Fix it by adding cgroup_enable=memory cgroup_memory=1 to /boot/firmware/cmdline.txt and rebooting.

Inside an LXC

Two things to know.

Percentages resolve against the host. This is why the unit writes MemoryHigh as an absolute number computed at install time: on a 2 GB container of a 62 GB node, 80% came out as 49.8 GB.

The typecheck used to take the container down, if you run the test suite on the box. It sizes its pool from the machine now and prints the width it chose; NOURIDE_TYPECHECK_JOBS=1 forces it lower still.

The daemon is often not the biggest thing in its own cgroup

Worth knowing before you size a small device. Measured on a live install:

the daemon73.3 MB
wa-bridge67.8 MB
one Node-based MCP server91.5 MB

On a 256 MB device the daemon and the bridge fit. Adding one Node MCP server does not.

One way to buy headroom back:

  • --bundle-wa-bridge puts the bridge in-process and saves ~40 MB — one process instead of two. It makes the binary GPL-3.0.

Build variants →

Keeping the work off the SD card

An agent’s output is the only part of the install that grows without bound, and an SD card is the part of a Pi that fails.

[daemon]
workspace_dir = "/mnt/ssd/nouride-workspace"

The three paths are separate config keys for exactly this. Nothing else has to move.

What to expect from the model, not the machine

None of the above depends on which model an agent uses. Providers are remote endpoints, so RAM is unaffected — a Pi calling Claude and a 64-core server calling Claude use the same amount of memory and wait the same amount of time.

What a small box does affect is exec: a build the agent kicks off runs on this machine. That is what the 512 MB recommendation is really for.