A graph database in Common Lisp.
Scalaxy is a Common Lisp graph database. Query property graphs with openCypher, inspect data in the HTTP console, and replicate writes across nodes from the same binary.
# run the test suite (9,018 checks)
$ make test
# start a node with the web console
$ bin/scalaxy --address 127.0.0.1:7200 \
--http-address 127.0.0.1:8080
Scalaxy node node-abc123
data: 127.0.0.1:7200
http: 127.0.0.1:8080 (web console)
# run a Cypher query against the graph
$ curl -X POST localhost:8080/api/cypher \
-d '{"query":"MATCH (m:Movie {title:\"The Matrix\"})<-[:ACTED_IN]-(p:Person) RETURN p.name AS actor ORDER BY actor LIMIT 2"}'
{"columns":["actor"],"rows":[["Carrie-Anne Moss"],["Emil Eifrem"]],"count":2}Graph storage and key/value storage in one process
Scalaxy stores nodes, relationships, labels, and properties in a durable key/value store. The graph and key/value APIs share the same ring, replication path, and HTTP console.
Property graph store
Nodes, relationships, labels, and properties live in the same durable store as key/value data.
openCypher query language
Query graphs with openCypher through REST, the Lisp client, TCP, or the web console. The local TCK runner covers 3,898 scenarios; current results are in the Cypher documentation.
Consistent-hash sharding
Keys and graph records are placed on a virtual-node ring. Adding a node moves about 1/N of the keyspace.
Synchronous replication
Writes are copied to the configured replica before the client receives an acknowledgement. Reads can fall back to a replica when the owner is unavailable.
Durable by default
Writes go to an append-only log and are replayed on startup. Acknowledged writes survive a node restart.
Web console included
Each node serves an HTTP console with a cluster view, data browser, topology view, and command console. There is no separate frontend to deploy.
Runs in containers
The repository includes Docker, docker-compose, and Kubernetes manifests. Configure the node with environment variables.
In-tree runtime
The core is ANSI Common Lisp; JSON and HTTP are implemented in the repository. SBCL is the supported runtime.
From source to a running node
01 · Install
Install SBCL 2.x, clone the repository, and run make test. The runtime has no external Lisp dependencies.
02 · Deploy
Run a single node, a Docker Compose cluster, or a Kubernetes StatefulSet. Configuration uses environment variables.
Deployment →03 · Build apps
Use the REST API, the Lisp client, or the web console. The cluster routes reads and writes for you.
REST API →Choose a deployment topology
Use the same binary for a single node, Docker Compose, or a Kubernetes StatefulSet. Set SCALAXY_PEERS and SCALAXY_REPLICATE_TO to describe the cluster.
Single node
One node, a durable log, and a web console for local development, small services, and edge devices.
Topologies →Cluster
Keys shard across N nodes. With a replica and a reachable survivor, reads fail over and acknowledged writes remain available when a node goes down.
Topologies →Kubernetes
A StatefulSet with PVCs, probes, and peer discovery over headless DNS. Change the peer list when you change the replica count.
Kubernetes →Docs for developers and maintainers
Guides cover local builds, the wire and REST APIs, Docker and Kubernetes deployment, and failure handling.

