The core engine: high-performance graph storage, native Gremlin query support, and enterprise tooling for autonomous AI workloads.
AsanagiDB speaks the core Gremlin 3.x traversal set — traverse, filter, aggregate, retrieve.
sustained over 12M records
peak throughput
Same machine, same data: 4× Neo4j Desktop's import† on a MacBook Pro M3 18GB.
* LDBC Social Network Benchmark, 11,984,610 records, 0 errors. MacBook Pro M3 18GB RAM. WAL enabled. 4 live indexes: firstName, lastName, browserUsed, title. GraphSON / APOC not yet benchmarked. Methodology available on request.
† neo4j-admin offline bulk import on the same MacBook Pro M3 18GB: ~1.17M nodes/sec for the node pass. Not comparable: database must be offline, no indexes during load, index rebuild time not included. AsanagiDB ran with WAL on, 4 live indexes, and zero downtime.
Twenty-two files. One command.
Neo4j — what you write before a single row is read
# 22 header files, one per CSV: # header_person.csv :ID(Person)|firstName|lastName|...|:LABEL # header_comment_hasCreator_person.csv :START_ID(Comment)|:END_ID(Person) # header_forum_hasTag_tag.csv :START_ID(Forum)|:END_ID(Tag) # ... 19 more
AsanagiDB — the entire import
AsanagiDB dataset-import \ --data-dir ./ldbc_data \ --db mydb
Label inferred from filename (person_0_0.csv → Person). Relationship type inferred from edge filename pattern. No annotation files.
Import your existing data in whatever format you have it:
// Your existing Gremlin. No changes.
// Traverse — unchanged
g.V().has('name', 'Alice')
.out('knows')
.values('name')
// Pattern match — unchanged
g.V().hasLabel('Person')
.where(out('knows').count().is(gt(5)))
.valueMap('name', 'age')
// Single-file import (csv / graphson / apoc)
AsanagiDB graphson-import --file export.json --db mydb
AsanagiDB apoc-import --file apoc_export.json --db mydb
// Bulk dataset import (LDBC / amazon / dblp)
AsanagiDB dataset-import --dataset ldbc --data-dir ./ldbc_data NOTE: AsanagiDB implements the core TinkerPop traversal set. See our full gap list → /docs/limitations.
Every tier ships as a perpetual license by default — pay once, own your binary, own your data forever. Prefer to spread the cost instead? Flip the switch below for monthly billing.
Community
Free
perpetual license
Developer
$149
perpetual license
Pro
$499
perpetual license
Team (10 Seats)
$3,499
perpetual license
AsanagiDB Admin is a native desktop app — not Electron, not a browser tab. It speaks directly to your AsanagiDB server over the same ASNA protocol the MCP layer uses. No middleware, no translation layer.
Physics-simulated graph canvas, live Gremlin console, vertex and edge inspector, multi-database switching, and a dedicated Memory view for your AI agent's knowledge graph — all in one window.
AsanagiDB goes where no graph database has gone before. Drop in a JSON document and it decomposes automatically — nested objects become child vertices, arrays become ordered edges, scalars become indexed properties. No schema. No migration. No bolted-on document store to keep in sync with the graph.
Retrieve it and the graph reassembles into your original document, complete with all nested structures intact. We call it Compository — the same engine that stores it knows how to put it back together.
Because documents live in the graph, you can query
across them with Gremlin. Find all Employee vertices inside a collection of Person documents. Filter by nested field. Traverse relationships
between documents. AsanagiDB is both your document store
and your graph database — at the same time.
Coming attraction: Because Compository understands your document's shape, it can map that shape to a typed model class. An AsanagiDB-backed ORM is a natural next step — write objects, query graphs, get objects back. All without leaving the database.
Production databases don't get maintenance windows. AsanagiDB replicates in real time over a simple TCP connection. When the primary goes silent, the standby promotes automatically — no operator intervention, no quorum vote, no ZooKeeper, no Raft consensus overhead.
Replication is built on the same WAL that makes crash recovery instant. The standby is always caught up. Failover is measured in seconds, not minutes.
One binary. One YAML config. Two instances. That's the entire HA story.
// normal operation
PRIMARY
:8182
● ACTIVE
WAL stream
──────▶
STANDBY
:8183
○ REPLICA
▲ clients connect here
// primary unreachable — auto-failover
PRIMARY
:8182
✗ OFFLINE
~15 seconds
── ✗ ──▶
STANDBY
:8183
● PROMOTED
▲ clients connect here
~15s
Failover time
Primary silence detected; standby promotes.
sub-ms
Replication lag
WAL shipped continuously, not on a timer.
1 field
Setup complexity
Set role: leader or follower in fleet.yaml.