System Requirements
Hardware, software, network, and port requirements for running NetStacks Terminal and the Controller.
Overview
This page covers everything to verify before installing NetStacks. Requirements differ by which components you use:
- Terminal only (Personal Mode) — A lightweight native desktop app plus its bundled Local Agent. Minimal requirements; runs on macOS, Windows, and Linux.
- Controller (Enterprise Mode) — A server workload requiring Docker, PostgreSQL 16 with pgvector, a Valkey service, and more memory and disk as your device count grows.
It also covers network and port requirements and which device platforms are supported.
How It Works
The Terminal is a native Tauri application — a Rust backend with a React frontend. Because Tauri uses the operating system's built-in WebView instead of bundling Chromium, the application is small (under 50 MB) and uses roughly 80–150 MB of RAM during normal operation. The bundled Local Agent runs as a lightweight sidecar.
The Controller is a Rust/Axum API server that runs alongside PostgreSQL and a required Valkey service. Resource requirements scale with:
- Number of managed devices — each device adds inventory, credential, and configuration-history rows
- Concurrent sessions — each active SSH session through the Controller proxy consumes a connection and memory
- AI features — pgvector embeddings need extra disk and memory; local LLM inference is the most resource-intensive operation
If you only need the Terminal in Personal Mode, skip all Controller requirements. The Terminal has no dependency on Docker, PostgreSQL, Valkey, or any server.
Requirements Check
Walk through these steps to confirm your system is ready for NetStacks.
Step 1: Identify which components you need
Individual engineers and small teams start with the Terminal in Personal Mode. If your organization needs a shared vault, RBAC, audit logging, or scheduled automation, you also need the Controller. See the Introduction for help deciding.
Step 2: Check your operating system
Platform compatibility matrix
| Platform | Architecture | Terminal | Controller | Minimum OS Version |
|---|---|---|---|---|
| macOS | Intel x64 | Yes | Via Docker | macOS 10.15 (Catalina) |
| macOS | Apple Silicon arm64 | Yes | Via Docker | macOS 11 (Big Sur) |
| Windows | x64 | Yes | Via Docker (WSL2) | Windows 10 (1809+) |
| Linux | x64 | Yes | Yes (native or Docker) | Ubuntu 20.04 / Debian 11 / Fedora 34 |
| Linux | arm64 | Yes | Yes (native or Docker) | Ubuntu 20.04 / Debian 11 |
The macOS build sets a minimum system version of 10.15; Apple Silicon Macs ship with macOS 11 or newer by definition.
Step 3: Check hardware requirements
Terminal requirements
| Component | Minimum | Recommended |
|---|---|---|
| Processor | Any 64-bit CPU | Multi-core (Intel i5 / Apple M1 / Ryzen 5) |
| Memory | 4 GB RAM | 8 GB RAM |
| Disk Space | 200 MB | 500 MB (with session recordings) |
Controller requirements (by deployment size)
| Scale | Devices | CPU | Memory | Disk |
|---|---|---|---|---|
| Small | Up to 100 | 2 vCPUs | 4 GB | 20 GB SSD |
| Medium | 100–1,000 | 4 vCPUs | 8 GB | 50 GB SSD |
| Large | 1,000+ | 8+ vCPUs | 16+ GB | 100+ GB SSD |
Step 4: Verify Docker (Controller only)
The Controller ships as Docker images. Verify Docker and Docker Compose v2:
docker --version
docker compose versionStep 5: Check port availability
The Controller serves the admin UI and API over TLS on port 3000 (the admin-ui container maps 3000:443). Verify the port is free before deployment:
# Linux
ss -tlnp | grep 3000
# macOS
lsof -i :3000If the command returns output, another service is already using the port. Stop it or remap the host-side port in docker-compose.yml.
On Debian/Ubuntu, the Terminal's .deb declares two dependencies: WebKit2GTK and GTK3:
sudo apt install libwebkit2gtk-4.1-0 libgtk-3-0
The AppImage additionally needs libfuse2 at runtime.
Code Examples
Check Docker version and Compose
$ docker --version
Docker version 27.4.1, build 5d5a263
$ docker compose version
Docker Compose version v2.32.4Check available ports
# Linux: check if port 3000 is in use
ss -tlnp | grep 3000
# macOS: check if port 3000 is in use
lsof -i :3000
# No output means the port is availableCheck system resources
# macOS: total memory
sysctl hw.memsize
# Example: hw.memsize: 17179869184 (16 GB)
# Linux: available memory
free -h
# total used free
# Mem: 15Gi 4.2Gi 8.1Gi
# CPU architecture
uname -m
# Expected: x86_64 or aarch64Verify PostgreSQL connectivity (bundled db profile)
The bundled db service only runs under the bundled-db profile; many deployments use an external PostgreSQL instead. If you run the bundled db, confirm it is accepting connections:
docker compose exec db pg_isready -U netstacks
# Expected output:
# /var/run/postgresql:5432 - accepting connectionsRequired ports summary
| Port | Protocol | Component | Direction | Purpose |
|---|---|---|---|---|
| 3000 | TCP (HTTPS) | Controller admin UI / API | Inbound | TLS REST API, WebSocket, admin dashboard |
| 5432 | TCP | PostgreSQL | Internal | Database (only exposed with the bundled-db profile) |
| 6379 | TCP | Valkey | Internal | Session sharing and pub/sub (required) |
| 22 | TCP | Terminal / Controller | Outbound | SSH to network devices |
| 23 | TCP | Terminal | Outbound | Telnet to legacy devices |
| 161 | UDP | Controller / Local Agent | Outbound | SNMP polling and discovery |
Questions & Answers
- Q: What are the minimum requirements for the Terminal?
- A: Any 64-bit machine with 4 GB RAM and 200 MB of free disk. The Terminal runs on macOS 10.15+, Windows 10 (1809+), and modern Linux (Ubuntu 20.04+, Debian 11+, Fedora 34+). On Linux it needs WebKit2GTK and GTK3.
- Q: What are the minimum requirements for the Controller?
- A: For a small deployment (up to 100 devices): 2 vCPUs, 4 GB RAM, and 20 GB SSD, plus Docker and Docker Compose v2. The Controller uses PostgreSQL 16 with pgvector and a required Valkey service, both included in the official Compose stack.
- Q: Can I run the Controller on a Raspberry Pi?
- A: Yes. The Controller supports arm64, and the
pgvector/pgvector:pg16andvalkey/valkey:8-alpineimages are available for arm64. A Raspberry Pi 4 or 5 with 4+ GB RAM can handle a small deployment of up to 50–100 devices. - Q: What ports does NetStacks need?
- A: The Controller serves over HTTPS on port 3000. PostgreSQL (5432) and Valkey (6379) are internal to the Docker network. The Terminal and Controller need outbound TCP/22 for SSH. See the Code Examples section for the full table.
- Q: Does the Controller require an internet connection?
- A: No. Core features (device management, vault, templates, scheduled automation) work fully offline. Internet is only needed to pull container images and for AI/LLM features that call external APIs.
- Q: Can I change the default port?
- A: Yes. Change the host-side mapping for the admin-ui service in
docker-compose.yml(for example8443:443). See the Installation Guide. - Q: Do I need to install Rust or Node.js?
- A: No. The Terminal ships as a pre-compiled native binary; the Controller ships as Docker images. No build tools are required to run NetStacks.
Troubleshooting
Docker is not installed
The Controller requires Docker. Install Docker Engine (Linux) or Docker Desktop (macOS/Windows) from docs.docker.com/get-docker. Then verify:
docker run hello-worldPort 3000 is already in use
Another service is occupying the port. Find it and stop it, or remap the Controller:
# Find what is using port 3000
ss -tlnp | grep 3000 # Linux
lsof -i :3000 # macOS
# Change the admin-ui mapping in docker-compose.yml:
# ports:
# - "8443:443"Insufficient disk space for PostgreSQL
PostgreSQL stores data in a Docker volume. If the disk is nearly full, the database will fail to start or write. Free space or move the volume to a larger drive:
df -h
docker system df -vmacOS: app won't open
NetStacks is signed and notarized, so it normally opens on first launch. If a stale quarantine flag triggers a "damaged" error, clear it with xattr -cr /Applications/NetStacks.app, or open System Settings → Privacy & Security and click "Open Anyway".
Linux Terminal missing dependencies
The Terminal needs WebKit2GTK and GTK3. Install with your package manager:
# Debian / Ubuntu (.deb dependencies; add libfuse2 for the AppImage)
sudo apt install libwebkit2gtk-4.1-0 libgtk-3-0
# Fedora
sudo dnf install webkit2gtk4.1 gtk3
# Arch
sudo pacman -S webkit2gtk-4.1 gtk3Related Features
Now that you have verified your system meets the requirements:
- Introduction — what NetStacks is and how it works
- Installation Guide — install the Terminal and deploy the Controller
- Quick Start Guide — connect to your first device in minutes
- HA Deployment — scale the Controller across multiple instances