Installation and Quick Start
Get Geode running locally in minutes, from zero to executing your first GQL query.
Prerequisites
System Requirements
Minimum:
- CPU: 2 cores
- RAM: 4GB
- Disk: 2GB free space
Recommended:
- CPU: 4+ cores
- RAM: 8GB+
- Disk: 10GB+ free space (SSD preferred)
Supported Platforms
- Linux: Ubuntu 20.04+, Debian 11+, RHEL 8+, Arch Linux
- macOS: macOS 11+ (Big Sur or later), including Apple Silicon
- Windows: Windows 10+ with WSL2
Installation Options
Option 1: Install by Operating System
# Add GPG signing key
curl -fsSL https://apt.geodedb.com/geode.gpg | \
sudo gpg --dearmor -o /usr/share/keyrings/geode-archive-keyring.gpg
# Add repository
echo "deb [signed-by=/usr/share/keyrings/geode-archive-keyring.gpg] https://apt.geodedb.com stable main" | \
sudo tee /etc/apt/sources.list.d/geode.list
# Install
sudo apt update
sudo apt install geode
curl -L -o geode.rpm https://gitlab.com/devnw/codepros/geode/geode/-/releases/latest/download/geode-linux-x86_64.rpm
sudo rpm -i geode.rpm
curl -L -o geode-linux-amd64 https://gitlab.com/devnw/codepros/geode/geode/-/releases/latest/download/geode-linux-amd64
chmod +x geode-linux-amd64
sudo install -m 0755 geode-linux-amd64 /usr/local/bin/geode
# Install via Homebrew (recommended)
brew install geodedb/geode/geode
# PowerShell
wsl --install -d Ubuntu
# Inside Ubuntu (WSL)
# Add GPG signing key
curl -fsSL https://apt.geodedb.com/geode.gpg | \
sudo gpg --dearmor -o /usr/share/keyrings/geode-archive-keyring.gpg
# Add repository
echo "deb [signed-by=/usr/share/keyrings/geode-archive-keyring.gpg] https://apt.geodedb.com stable main" | \
sudo tee /etc/apt/sources.list.d/geode.list
# Install
sudo apt update
sudo apt install geode
Option 2: Docker
Quick start with Docker Compose:
cd geode
# Single-node deployment
make docker-up-singleton
# Or distributed cluster
make docker-up-distributed
Manual Docker run:
# Pull image (when available)
docker pull geodedb/geode:latest
# Run server
docker run -d \
-p 3141:3141 \
-v geode-data:/var/lib/geode \
--name geode \
geodedb/geode:latest serve --listen 0.0.0.0:3141
Environment variables for Docker:
LOG_LEVEL: Set logging level (debug/info/warn/error)GEODE_DATA_DIR: Data directory path (default:/var/lib/geode)GEODE_ADMIN_USERNAME: Initial admin usernameGEODE_DEFAULT_PASSWORD: Initial admin password
See Docker Deployment for the full production stack (Vault, MinIO, Prometheus, Grafana, Loki, Nginx).
Option 3: Build from Source
Requirements: Zig 0.1.0+ (download from ziglang.org )
# Clone repository
git clone https://github.com/codeprosorg/geode
cd geode
# Debug build (faster compilation)
make build
# Or release build (optimized, recommended for production)
make release
# Verify installation
geode --version
Make targets (from QUICK_REFERENCE.md):
make build- Debug build with symbolsmake release- ReleaseSafe build (recommended)make test- Run core unit testsmake geodetestlab-comprehensive- Full test suite (97.4% pass rate)
For detailed build options, see Install from Source .
Start the Server
Default Server Start
# Start with defaults (QUIC/TLS on port 3141)
./geode serve
# Or if installed system-wide
geode serve
Default behavior:
- Listens on
127.0.0.1:3141(QUIC+TLS only, no TCP) - Data directory:
./geode-data(current directory) - Auto-generates self-signed certificates if none provided
- Creates default admin user if
GEODE_ADMIN_USERNAME/GEODE_DEFAULT_PASSWORDenv vars are set
Custom Server Start
# Custom listen address and data directory
./geode serve --listen 0.0.0.0:8443 --data-dir /var/lib/geode
# With TLS certificates (production)
./geode serve \
--listen 0.0.0.0:3141 \
--cert /etc/geode/certs/server-cert.pem \
--key /etc/geode/certs/server-key.pem \
--data-dir /var/lib/geode
# With configuration file
./geode serve --config /etc/geode/geode.yaml
Example configuration (geode.yaml from USAGE.md):
server:
listen: '0.0.0.0:3141'
data_dir: '/var/lib/geode'
tls:
cert: '/etc/geode/certs/server-cert.pem'
key: '/etc/geode/certs/server-key.pem'
storage:
page_size: 8192
page_cache_size: '1GB'
logging:
level: 'info'
format: 'json'
security:
tde:
enabled: true
key_hex: '0123456789abcdef...' # 32-byte hex key for AES-256-GCM
Connect and Run Your First Query
Using the Client CLI
# Execute a single query
geode query "RETURN 1 AS x"
# Execute from file
geode query -f query.gql
# Choose output format
geode query --format json "MATCH (n) RETURN n LIMIT 10"
geode query --format txt "MATCH (n) RETURN n LIMIT 10"
Output formats (from USAGE.md):
txt- Human-readable table format (default)json- JSON lines (one object per row)
Using the Interactive Shell
Start the REPL:
# Start interactive shell
./geode shell
# Or the alternative entrypoint
./gql
Key meta commands (from REPL_USAGE.md):
| Command | Description |
|---|---|
\connect <uri> | Connect to a server |
\begin | Start transaction |
\commit | Commit transaction |
\rollback | Rollback transaction |
\format json|txt | Set output format |
\timing on|off | Show query execution time |
\help | Show help |
\quit | Exit shell |
Example session:
-- Connect to server
\connect quic://localhost:3141
-- Create a graph
CREATE GRAPH SocialNetwork;
USE SocialNetwork;
-- Create nodes
CREATE (:Person {name: "Alice", age: 30});
CREATE (:Person {name: "Bob", age: 25});
-- Create relationship
MATCH (a:Person {name: "Alice"}), (b:Person {name: "Bob"})
CREATE (a)-[:KNOWS {since: 2020}]->(b);
-- Query
MATCH (p:Person)-[k:KNOWS]->(friend)
RETURN p.name, friend.name, k.since;
-- Enable timing
\timing on
-- Run EXPLAIN
EXPLAIN MATCH (p:Person) RETURN p.name;
-- Start transaction
\begin
-- Make changes
CREATE (:Person {name: "Charlie", age: 35});
-- Commit
\commit
Troubleshooting
TLS/Certificate Issues
Symptom: “certificate verification failed” or “TLS handshake failed”
Solution:
# Verify certificate
openssl x509 -in /etc/geode/certs/server-cert.pem -text -noout
# Check certificate matches key
openssl x509 -noout -modulus -in server-cert.pem | openssl md5
openssl rsa -noout -modulus -in server-key.pem | openssl md5
# Should match
# For development, use self-signed cert
./geode serve # Auto-generates if none present
Port Binding Issues
Symptom: “address already in use” or “bind failed”
Solution:
# Find process using port
lsof -i :3141
# Kill process
kill -9 <PID>
# Or use different port
./geode serve --listen 0.0.0.0:3142
Connection Issues
Symptom: “connection refused” or “cannot connect”
Checklist:
Server running?
ps aux | grep geodeCorrect port?
# Check server logs for listening addressFirewall blocking?
# Check firewall rules sudo ufw status # Ubuntu/Debian sudo firewall-cmd --list-all # RHEL/CentOSQUIC support?
- Geode requires QUIC (UDP transport). Ensure UDP port 3141 is open, not just TCP.
Next Steps
Now that Geode is running:
- GQL Guide - Learn the query language with examples
- Data Model and Types - Understand property graphs and types
- Configuration Reference - Deep dive into server configuration
- Client Libraries - Connect from Go, Python, Rust, or Zig
- Deployment Guide - Production deployment patterns (Vault, MinIO, Prometheus, Grafana, Loki)
Health and Monitoring
Once running, check server health:
# Health check endpoint
curl http://localhost:8080/health
# Readiness check
curl http://localhost:8080/ready
# Prometheus metrics
curl http://localhost:8080/metrics
See Monitoring and Telemetry for full observability setup.