Getting Started

Install Traverse, start the server, and run your first query in under five minutes.

Install

Download the latest release from the Traverse product page or follow the instructions for your platform:

Latest version: 0.6.7

Download traverse-0.6.7-x86_64-linux.tar.gz

# Download and extract
curl -LO /releases/traverse/latest/traverse-0.6.7-x86_64-linux.tar.gz
tar xzf traverse-0.6.7-x86_64-linux.tar.gz

# Move to PATH (optional)
sudo mv traverse-server traverse-cli traverse-admin traverse-bench /usr/local/bin/

# Start the server
traverse-server

Download traverse-0.6.7-x86_64-windows.zip

# Download and extract
Invoke-WebRequest -Uri /releases/traverse/latest/traverse-0.6.7-x86_64-windows.zip -OutFile traverse.zip
Expand-Archive traverse.zip -DestinationPath traverse

# Start the server
.\traverse\traverse-server.exe

To run as a Windows service, see Server Configuration.

macOS release not currently available. Check back soon.

Download traverse-silicon-0.6.7-x86_64-linux.tar.gz

Traverse Silicon runs as a lightweight virtual machine — no guest OS, no containers. A single binary boots directly on a KVM hypervisor, providing the full Bolt protocol, HTTP API, and WebSocket interface.

Requirements

  • Linux host with KVM enabled (/dev/kvm)
  • Cloud Hypervisor 44.0+ or Firecracker v1.15.0+
  • Bridged tap network interface

Cloud Hypervisor

# Download and extract
curl -LO /releases/traverse-silicon/latest/traverse-silicon-0.6.7-x86_64-linux.tar.gz
tar xzf traverse-silicon-0.6.7-x86_64-linux.tar.gz

# Create a storage disk (formatted automatically on first boot)
truncate -s 32G storage.raw

# Launch
sudo cloud-hypervisor \
  --kernel traverse-silicon \
  --cpus boot=4 --memory size=32G --serial tty --console off \
  --disk path=storage.raw \
  --net tap=tap0,mac=52:54:00:12:34:56 \
  --cmdline "TRAVERSE_HTTP_LISTEN=0.0.0.0:7691 TRAVERSE_LICENSE_KEY=<your-key> TRAVERSE_API_KEY=<your-api-key>"

Firecracker

# Download and extract
curl -LO /releases/traverse-silicon/latest/traverse-silicon-0.6.7-x86_64-linux.tar.gz
tar xzf traverse-silicon-0.6.7-x86_64-linux.tar.gz

# Create a storage disk
truncate -s 32G storage.raw

# Start Firecracker
sudo rm -f /tmp/fc.sock
sudo firecracker --api-sock /tmp/fc.sock --enable-pci &
sleep 0.5

# Machine config
sudo curl -s -X PUT --unix-socket /tmp/fc.sock \
    -d '{"vcpu_count":4,"mem_size_mib":32768}' \
    http://localhost/machine-config

# Kernel + configuration
sudo curl -s -X PUT --unix-socket /tmp/fc.sock \
    -d '{"kernel_image_path":"traverse-silicon","boot_args":"TRAVERSE_HTTP_LISTEN=0.0.0.0:7691 TRAVERSE_LICENSE_KEY=<your-key> TRAVERSE_API_KEY=<your-api-key>"}' \
    http://localhost/boot-source

# Storage disk
sudo curl -s -X PUT --unix-socket /tmp/fc.sock \
    -d '{"drive_id":"disk0","path_on_host":"storage.raw","is_root_device":false,"is_read_only":false}' \
    http://localhost/drives/disk0

# Network
sudo curl -s -X PUT --unix-socket /tmp/fc.sock \
    -d '{"iface_id":"net0","guest_mac":"52:54:00:12:34:56","host_dev_name":"tap0"}' \
    http://localhost/network-interfaces/net0

# Boot
sudo curl -s -X PUT --unix-socket /tmp/fc.sock \
    -d '{"action_type":"InstanceStart"}' \
    http://localhost/actions

Connecting

The VM acquires an IP via DHCP (shown in serial output). Once booted:

  • Bolt protocol on port 7690 (default)
  • HTTP / WebSocket API on port 7691 (when TRAVERSE_HTTP_LISTEN is set)
# Verify the server is running
curl -s http://<VM_IP>:7691/api/databases -H "X-API-Key: <your-api-key>"

Storage

Storage disks are raw block images. Silicon automatically formats new disks on first boot — just create an empty file at the desired size. Database files (.tvdb) are persisted to this disk.

Configuration

All settings are passed as KEY=VALUE pairs in the hypervisor command line:

VariableDefaultDescription
TRAVERSE_DATA/dataData directory on the storage disk
TRAVERSE_LISTEN0.0.0.0:7690Bolt protocol listen address
TRAVERSE_HTTP_LISTENdisabledHTTP/WebSocket API listen address
TRAVERSE_LICENSE_KEYLicense key
TRAVERSE_API_KEYrandomAPI key for HTTP authentication
TRAVERSE_AUTHnoneBolt auth credentials (user:pass)
TRAVERSE_DEFAULT_DBtraverseDefault database name
TRAVERSE_MEMORY_LIMITautoMemory budget (e.g. 4G, 30GB)
TRAVERSE_QUERY_TIMEOUTnoneQuery timeout in seconds
TRAVERSE_ALLOWED_IPSallCIDR allowlist (e.g. 10.0.0.0/8)
TRAVERSE_ALLOW_DROP_DATABASEtrueAllow DROP DATABASE command
LOGdisabledTCP log export (host:port)
WATCHDOGdisabledWatchdog timeout in seconds
# Pull the image
docker pull truespar/traverse

# Run the server
docker run -p 7690:7690 -p 7691:7691 truespar/traverse

# With persistent data
docker run -p 7690:7690 -p 7691:7691 \
  -v traverse-data:/data \
  truespar/traverse --data /data

Each release includes four binaries: traverse-server, traverse-cli, traverse-admin, and traverse-bench.

Start the Server

Traverse runs fully in-memory by default. To persist databases to disk, add --data pointing to a directory. Each database is stored as a .tvdb file:

mkdir data
traverse-server --data ./data

The server listens on two ports:

  • Bolt protocol on port 7690 — for drivers and the CLI
  • HTTP API + Studio on port 7691 — for the web UI and REST API

On startup the server prints an API key (prefixed tvs_). You will need this to log in to Studio.

Tip: Set TRAVERSE_LICENSE_KEY to activate your license and remove trial restrictions. See Server Configuration for all options.

Connect with Studio

Open http://localhost:7691 in your browser. Enter the API key printed at startup to log in. Studio provides a visual query editor, graph explorer, schema browser, and import tools.

Connect with the CLI

The CLI connects via the Bolt protocol:

traverse-cli
# or specify a host
traverse-cli --bolt bolt://localhost:7690

Once connected you can run Cypher queries interactively:

traverse> CREATE (a:Person {name: "Alice"})-[:KNOWS]->(b:Person {name: "Bob"}) RETURN a, b;
traverse> MATCH (n:Person) RETURN n.name;

See the CLI reference for meta-commands and output formats.

Connect with a Bolt Driver

Traverse speaks Bolt 5.1–6.0, so any compatible driver works. Point it at bolt://localhost:7690:

from neo4j import GraphDatabase

driver = GraphDatabase.driver("bolt://localhost:7690")
with driver.session() as session:
    result = session.run("MATCH (n) RETURN n LIMIT 5")
    for record in result:
        print(record)

See the driver guides for your language: Python, JavaScript, Java, Go, Rust, .NET.

Import Data

For small datasets, use Cypher CREATE statements. For larger imports, use the admin tool:

# Import CSV files into a new .tvdb database
traverse-admin import \
  --nodes Person=people.csv \
  --edges KNOWS=friendships.csv \
  --output ./data/social.tvdb

Or import Cypher scripts:

traverse-admin cypher-import \
  --input data.cypher \
  --output ./data/mydb.tvdb

Restart the server (or start with the data directory) to load the new database. See Admin for the full import reference.

Next Steps

  • Server Configuration — environment variables, TOML config, authentication
  • Cypher — supported query language syntax
  • HTTP API — REST endpoints for programmatic access
  • Bench — download datasets and benchmark performance