Start here

From download to your first answer.

This is the whole path, in plain language, for someone who has never seen Semurg before. You download it, check it is the real file, and run one command. It comes up serving on your own machine. Then you bring in some data, see it, ask it a question, and time it on your own CPU. It takes about five minutes, and there is nothing to configure. The node reads your hardware and tunes itself.

A single node is free, with no time limit and no sign-up. It runs entirely on your box.

First time on a machine? → What you need

Before you start

What you need.

One machine running Ubuntu 24.04 (the 64-bit x86 build), with at least 4 CPU cores, 8 GB of RAM, and 20 GB of free disk. That is a small cloud server or any recent desktop. You run the commands as an administrator with sudo. Nothing leaves the machine at any point.

What OS are you on?
  • Linux x86_64 (uname -m prints x86_64): run the commands below as-is.
  • Windows (Intel/AMD): the simplest path is Docker Desktop — it turns on WSL2 for you on first run (no separate Ubuntu to install) and runs the prebuilt amd64 image natively. To use the bash installer below instead, run wsl --install once in an admin PowerShell, reboot, then open Ubuntu and run these lines inside it. They do not run in PowerShell or CMD.
  • macOS & ARM / Apple Silicon: not supported (Semurg uses AVX instructions Apple Silicon lacks; emulation cannot run it). Use a cloud x86_64 Linux VM. An Intel Mac can use the Docker path on the Troubleshooting page.

A normal Ubuntu server already has the two tools you need, curl and sudo. If a bare image is missing them, install them first:

sudo apt-get update && sudo apt-get install -y curl ca-certificates sudo
Running inside a container (Docker, and similar)? A container needs three extra settings so Semurg can talk to the disk the fast way. It is a short fix, and it is the very first entry on the Troubleshooting page. On a normal server there is nothing to do, the installer handles it.

Ready? → Step 1, download and check the file

Setup, step 1 of 2

Download it, and check it is the real file.

Two lines. The first pulls the installer down. The second checks it against a published fingerprint, so you know it arrived whole and untampered before you run anything.

These are Linux/bash commands. On Windows run them inside WSL2 (the Ubuntu app), not PowerShell. On ARM / Apple Silicon they will not work — use a cloud x86_64 Linux VM.

curl -fsSLO https://one.semurg.io/dl/semurg-r11-installer.tar.gz
curl -fsSLO https://one.semurg.io/dl/SHA256SUMS && sha256sum -c SHA256SUMS

You should see: semurg-r11-installer.tar.gz: OK

If it does not say OK, stop. Do not run the installer. Delete the file and download it again. Never run a downloaded script with sudo until the checksum says OK.

Got OK? → Step 2, install it

Setup, step 2 of 2

Run one command. It tunes itself.

Unpack the tarball and run the installer. There is nothing to configure. It reads your CPU and disks, maps its work to your cores, stripes across the disks it finds, picks the engine build that matches your processor, installs a background service, and starts serving. On a fresh box it is up in under a minute.

tar xzf semurg-r11-installer.tar.gz && cd semurg_installer && sudo ./semurg-install.sh

You should see, at the end: a SUCCESS line and the address it is serving on, http://localhost:4000.

You do not need a compiler, a language toolchain, or a separate database. The download brings its own runtime. If the installer stops, it prints one plain reason (for example, too few cores or not enough disk) rather than a wall of errors. Each of those is covered on the Troubleshooting page.

Confirm it is alive:

curl -s http://localhost:4000/api/health
{"ok":true}

The part that matters: "ok":true. That means the node is up, serving, and reading straight from disk. The rest of that line is internal telemetry you can ignore.

Nothing to tune. There are no knobs to get right. The node aims for confidence through visible truth, not settings. The five moves below all read the store it just started.

Alive? → Bring some data in

Also yours
Good to know

Your node has a control plane, and it has memory.

Two things a first-time user usually does not find on their own, so they are said here rather than left to be discovered:

1. There is an admin console. Your node runs a private, loopback-only operator console — live cluster graph, node monitor, mechanism liveness, settings. It is fail-closed and never exposed on the public network. Your node printed the console URL and a one-time credential on first start, under CLUSTER ADMIN CONSOLE (first-run bootstrap). See how to reach it.

2. The memory API is on. Agent memory is a first-class capability here, so /v1/memory works out of the box — remember, recall, relate, forget, durable under your data directory. Recall is entity-seeded (you name a thing, it walks the graph from there) and extraction runs in the background — the docs state both limits plainly. Check it is live:

curl -s http://localhost:4000/v1/memory/status -H "Authorization: Bearer $TOKEN"

You should see: {"enabled":true,…}. Turn it off with SEMURG_MEMORY=0 if you do not want it.

Bring
Move 1 of 5

Put data into the store.

First: get your API token. Every /v1 call needs it, and without it you will get 401. It was printed when your node started, under YOUR NODE IS READY. To get it again, run the line for how you installed:
docker exec $(docker compose ps -q) cat /var/lib/semurg/.api_token
sudo grep SEMURG_API_TOKEN /etc/semurg/semurg.env | cut -d= -f2
Then put it in a shell variable so every command below just works:
export TOKEN='paste-your-token-here'

Nothing to load: your node already has a real graph in it

A fresh install comes up holding a real public graph, so you can ask it a question immediately. Start here — it is the fastest proof that your node works:

curl -s -X POST http://localhost:4000/v1/query -H "Authorization: Bearer $TOKEN" -H 'content-type: application/json' -d '{"op":"traverse","seeds":[1],"hops":3}'

You should see: {"ok":true,"op":"traverse","result":{"nodes_visited":…}} — a real 3-hop walk over a real graph, on your hardware, in one command.

Now write your own: three records in and back out

Paste this one block. It writes three records into your node. It looks technical because it packs the raw 64-byte records for you — you only have to paste it.

B=$(for id in 1 2 3; do printf '\020\000\001\000\000\000\001\000'; printf "$(printf '\\%03o' $id)\000\000\000\000\000\000\000"; head -c 48 /dev/zero; done | base64 -w0); curl -s -X POST http://localhost:4000/v1/ingest -H "Authorization: Bearer $TOKEN" -H 'content-type: application/json' -d "{\"containers_b64\":\"$B\"}"

You should see: {"ok":true,"containers":3, ...}

Read them back:

curl -s -X POST http://localhost:4000/v1/query -H "Authorization: Bearer $TOKEN" -H 'content-type: application/json' -d '{"op":"fetch","ids":[1,2,3]}'

You should see: {"ok":true,"containers":3, ...}. The three records come straight back off the disk. That is the whole write and read path, proven on your node.

A real dataset: a graph bigger than memory

Your fresh node starts empty, ready for your own data; the large public graphs are not bundled in the download. When you want something large and real to see and traverse, load a public graph yourself. To go past what RAM can hold, point Semurg at a Wikidata dump (roughly 100 million entities and over a billion statements, genuinely larger than memory) or an OpenStreetMap extract, or a redacted slice of your own data, and watch the out-of-core traversal survive where an in-memory engine would stop.

There is no one-line sync switch for this today. The reproducible loading kit lives on data.semurg.io and the universal ingestor, and it walks the load step by step.

Budget the disk before you start a large graph. A full Wikidata graph is hundreds of gigabytes raw and more once ingested. Smaller public SNAP graphs and your own slices are covered in the docs.

Data in? → See it

See
Move 2 of 5

Open the console and watch it live.

Point a browser at the address the installer printed:

http://localhost:4000

That is the operator console. It has a living graph that draws your data as it lands, a health cockpit that shows the node armed and serving, a prove it panel that runs the benchmarks in front of you, and Simargl, a place to explore. The graph fills in as data arrives, so if you loaded a large graph, you will watch it grow.

No desktop browser on the box? On a bare cloud server, forward the port to your own laptop over SSH with ssh -L 4000:localhost:4000 you@your-server, then open http://localhost:4000 at home. Or just use the command line below, which reads the exact same node.

Seen it? → Ask it a question

Ask
Move 3 of 5

Query the store.

In the console, the graph is clickable: pick a node and follow its links to answer a question by walking the data. From the command line, the same store answers a handful of query shapes:

AskopWhat it does
Get specific recordsfetchread a batch of records by id
Find a needlesearchscan the whole store for a pattern
Count by grouphistogramgroup and aggregate in one pass
curl -s -X POST http://localhost:4000/v1/query -H "Authorization: Bearer $TOKEN" -H 'content-type: application/json' -d '{"op":"fetch","ids":[1,2,3]}'

Every one of these reads the one copy of your data on disk. There is no export step and no second system to move data into first. Full detail is on the docs Query section.

Got an answer? → Prove the speed

Prove
Move 4 of 5

Time it on your own hardware.

You do not have to take a number off a slide. The benchmark harness ships inside the release and runs against your node. Start with the compute kernel, which needs no dataset:

curl -s http://localhost:4000/api/bench/saops
{"result":{"saops_human":"<your figure>", ...},"provenance":{"native_engaged":true, ...}}

The part that matters: "native_engaged":true, and your own figure in saops_human. The placeholder above stands in for the live figure. Yours fills in when you run it, measured on your own CPU, which is the whole point.

If you loaded a graph, time a deep traversal over it. The identical call runs on the public box and on yours, so you can put the two numbers side by side:

curl -s 'http://localhost:4000/api/bench/graph_teps?dataset=pokec'

The full set of live figures, with methodology, is on the Benchmarks page.

Timed it? → Keep going

Play
Move 5 of 5

Explore, and go further.

You have installed it, brought data in, seen it, asked it, and timed it. From here:

  • Models and data streams the world into your node as a peer: Gemma 4 E4B, the 2.8-trillion-parameter Kimi K3 on CPU, and large public graphs such as Wikidata or OpenStreetMap, loaded once and pulled straight in.
  • One store, ten reads shows the same data answered as a graph, a table, a search, and more, all from one copy.
  • Docs covers operating the node, durability, backups, and every query shape in full.
  • Paradigms explains how each way of reading maps onto the one store.
  • Verify lets the node attest to itself, for the security-minded.
Something not working? The Troubleshooting page lists the real problems people hit, in plain language, each with the exact command that fixes it.