All posts

OpenClaw on a $5 VPS

OpenClaw 2026.10.9 on a 1 GB guest. The gateway listened on 127.0.0.1:18789 at 656,808 kB RSS, with 10,188 kB still available.

Written by NodeRings Inc.

NodeRings Inc. writes these notes. The company runs the marketplace and the agent that stays on the provider’s side of the hypervisor.

OpenClaw 2026.10.9 listened on 127.0.0.1:18789 and on [::1]:18789. At process elapsed 00:35, ps showed openclaw-gateway at 656,808 kB RSS, and MemAvailable was 10,188 kB. MemTotal was 984,552 kB. SwapTotal was 0. A curl of http://127.0.0.1:18789/ with a 3 second cap returned 0 bytes and timed out at 3.064279 seconds. The same process was still the listener at elapsed 02:22, RSS 645,492 kB. After I stopped it, MemAvailable read 681,356 kB and ss had no 18789 line.

Before that run, openclaw gateway status said the runtime was stopped, ~/.openclaw/openclaw.json was missing, and the connectivity check to ws://127.0.0.1:18789 was connect ECONNREFUSED 127.0.0.1:18789.

openclaw --version printed OpenClaw 2026.10.9 (8b18b55) and exited 0. /usr/bin/time -v recorded a maximum resident set of 68,572 kB and a wall time of 0:00.14. That short hash is commit 8b18b5578f66eab1501cba4cef2310d88bfb9a41 on openclaw/openclaw. The npm package version is 2026.10.9, the release tag is v2026.10.9, and package.json lists the license as MIT.

The guest was Ubuntu 24.04.5, kernel 6.8.0-147-generic, glibc 2.39, qemu -m 1024 -smp 1. Node and npm were absent before the installer. The script was install.sh, sha256 b8c9b2496e2e7a04ca6952f0aeb8febfb71d035e8bcb36907e4ba54d8585c249, run as --no-onboard --no-prompt --version 2026.10.9.

On this guest
VersionOpenClaw 2026.10.9 (8b18b55), exit 0, max RSS 68,572 kB
Nodev24.22.2 from NodeSource, npm 11.19.1
Package~/.npm-global 646,266,880 bytes
Doctorexit 0, max RSS 583,632 kB, wall 0:31.40
Promptopenclaw agent --local wrote 0 bytes of stdout
Gateway beforeruntime stopped, ECONNREFUSED on 127.0.0.1:18789
Gateway afterboth 18789 sockets listening, RSS 656,808 kB
Free RAMMemAvailable 10,188 kB at that sample
HTTPcurl timed out, 0 bytes, 3.064279 seconds
GuestMemTotal 984,552 kB, SwapTotal 0
openclaw --version prints OpenClaw 2026.10.9 (8b18b55). time reports maximum resident set 68572 kbytes, elapsed 0:00.14, exit status 0.
The version command on a fresh install. Maximum resident set was 68,572 kB.

What did the installer put down?

The plan it printed was linux, npm, requested version 2026.10.9, onboarding skipped. Node was missing, so it installed Linux build tools (make, g++, cmake, python3) and then Node.js from the NodeSource repository. node --version was v24.22.2. npm --version was 11.19.1. The nodejs package is 24.22.2-1nodesource1, and dpkg-query reports Installed-Size 240053. That field is KiB, so 240053 times 1024 is 245,814,272 bytes. cmake on the same query is 36493, which is 37,368,832 bytes.

The log then said it was installing OpenClaw v2026.10.9, that the package installed, and that the bin link is /home/ubuntu/.npm-global/bin/openclaw. That path is a symlink to openclaw.mjs in the package. The success line is OpenClaw installed successfully (2026.10.9). The next line says it skipped onboard because that was requested. PATH in the non-login shell did not include ~/.npm-global/bin until I added it.

du -B1 -s of ~/.npm-global was 646,266,880 bytes, and almost all of that is lib/node_modules. Disk used on / rose by 1,360,805,888 bytes from the sample before the installer to the sample after it. The nodejs package and the npm tree are the two large pieces inside that rise. The rest is apt metadata and the build tools.

What does doctor print when nothing is configured?

openclaw doctor exited 0. /usr/bin/time -v recorded a maximum resident set of 583,632 kB and a wall time of 0:31.40. The run created ~/.openclaw. The only file under it afterward was state/openclaw.sqlite. openclaw.json was still missing, which matches the gateway status line.

The text I kept from that screen:

NODE_COMPILE_CACHE is not set
gateway.mode is unset; gateway start will be blocked.
Gateway service not installed.
Memory search provider is set to "openai" but no API key was found.

NODE_COMPILE_CACHE and OPENCLAW_NO_RESPAWN were unset for every command in this run. The version command still finished in 0:00.14. Doctor is the one that took half a minute and held 583,632 kB. I left both variables alone, so these numbers are the unset case the doctor warning describes.

openclaw gateway status says runtime stopped and the check to ws://127.0.0.1:18789 is connection refused. Later, ss shows 127.0.0.1:18789 and [::1]:18789 listening, and curl times out with 0 bytes.
Status before the gateway process, then the listeners and the curl after it.

What does a local prompt do with no key?

openclaw agent --local -m "reply with the single word pong" --timeout 20 --json produced no stdout. I wrapped it in timeout 70. The timeout command exited 124, which is the status it uses when it kills the child. Stderr was 332 bytes:

[state/agent-db] agent database stale lease: owner-pid-dead; previous release not observed
[state/agent-db] agent database stale lease: owner-pid-dead; previous release not observed
[state/agent-db] agent database integrityGateReason=stale-lease-full because=legacy-provenance-missing
[state/agent-db] agent database integrity gate

An earlier attempt, cut off at 40 seconds, also left stdout at 0 bytes. Neither run printed a model reply. Doctor had already said the memory search provider is openai and that no API key was found. Onboarding stayed skipped, which is how the installer was launched.

What listens if you start the gateway anyway?

Doctor said gateway start is blocked while gateway.mode is unset. The gateway run help says --allow-unconfigured allows a start and leaves that setting alone. I ran:

openclaw gateway run --allow-unconfigured --bind loopback --port 18789

The log said the auth token was missing, and that this startup generated a runtime token and left the config unchanged. The log then said it was starting the HTTP server. At elapsed 00:35 the sockets were up, backlog 511, on 127.0.0.1 and on [::1]. The curl above is that moment: the TCP connection was accepted, and no response bytes arrived inside 3 seconds. MemAvailable was 10,188 kB. A later sample, elapsed 02:22, still showed both listeners, RSS 645,492 kB, MemAvailable 23,812 kB. dmesg had no OOM line. Stopping the process returned MemAvailable to 681,356 kB.

During startup, before ss showed 18789, I read oom_score_adj on the gateway, on spawn-broker/worker.js, and on the sqlite readonly worker. All three files contained 0. The Linux page says a covered child should read 1000 when the score write succeeds. This sample was three zeros, taken while the HTTP server line was already in the log and the port was not in ss yet.

Three bars in kB. MemTotal is 984552. The gateway RSS is 656808. MemAvailable at that sample is 10188.
The scale ends at 984,552 kB. The free bar is the 10,188 kB that were left while 18789 was listening.

Hermes Agent on a $5 VPS is the other installer I ran on a guest of this size. Its web build asked for a 4096 MB heap, and the kernel killed node at 593,212 kB anon-rss. This OpenClaw gateway stayed in the process list. AgentGateway on a $5 VPS listened on 127.0.0.1:4000 and returned completions from local mocks. The curl here accepted the connection and wrote nothing in 3 seconds.

What does the $5 VPS line meet?

The install docs send you to a Linux server or a cloud VPS, and they tell you to keep the Gateway on loopback. RackNerd's specials page lists a 1 GB KVM VPS, 1 vCPU, 20 GB SSD, at $21.99 a year. Divided by 12, that is 1.8325, which is $1.83 a month. This guest was qemu -m 1024 -smp 1. The disk image is 40,483,942,400 bytes, and the special's disk figure is 20 GB SSD. The used-space rise of 1,360,805,888 bytes fits in that 20 GB figure. The tight number is RAM. MemTotal is 984,552 kB, the gateway RSS at the listen sample was 656,808 kB, and MemAvailable was 10,188 kB.

Questions people ask about OpenClaw on a 1 GB guest

Does the CLI install?

openclaw --version exited 0 at 68,572 kB. The installer reported 2026.10.9, node v24.22.2, and a user-level bin under ~/.npm-global. Onboarding was skipped. Doctor created ~/.openclaw and state/openclaw.sqlite. openclaw.json was still absent when gateway status ran after that.

Does doctor mean the gateway is up?

Doctor exited 0 and printed Gateway service not installed and gateway.mode is unset; gateway start will be blocked. ss at that point showed ssh and the stub resolver. The 18789 lines appeared only after gateway run --allow-unconfigured.

Can a prompt run with no API key?

The local agent command wrote 0 bytes of stdout. The outer timeout killed it at 70 seconds with status 124. Doctor's memory search line said the provider is openai and that no API key was found. There was no completion to quote.

Did 18789 answer?

ss showed listeners on 127.0.0.1:18789 and [::1]:18789. curl to the IPv4 address returned 0 bytes and exit status from the timeout at 3.064279 seconds. The gateway process RSS at that sample was 656,808 kB, and MemAvailable was 10,188 kB.

Does the $21.99 disk figure hold the install?

The special lists 20 GB SSD and 1 GB of RAM. Used space on this guest rose by 1,360,805,888 bytes, ~/.npm-global is 646,266,880 of that, and the nodejs package reports 245,814,272 bytes. The RAM figure matches this qemu -m 1024 guest, where the listen sample left 10,188 kB available.