本地实例默认数据存在内存里,要持久化必须用 helix start dev --disk;启动本地实例依赖 Docker 或 Podman;Cypher 读写需用本仓库源码构建的 SDK 和 server,发布版未必支持。
helix-db
HelixDBApache-2.0活跃维护用 Rust 写的 OLTP 图数据库,跑在对象存储上,原生集成向量检索和全文搜索,适合给 RAG 应用做统一的数据底座。
HelixDB is an OLTP graph database with native vector and full-text search built in Rust on Object Storage.
curl -sSL "https://install.helix-db.com" | bash
mkdir my-helix-app && cd my-helix-app
helix init local
helix start dev
helix query dev --file examples/request.jsonREADME 未说明显存或 GPU 要求;本地启动实例需要 Docker 或 Podman。
Rust 写的 OLTP 图数据库,把向量检索和全文搜索放进同一个事务引擎
用 Rust 写的 OLTP 图数据库,跑在对象存储上,原生集成向量检索和全文搜索,适合给 RAG 应用做统一的数据底座。
核心能力
- 用带标签属性图建模实体、关系与类型化属性
- 向量近似最近邻检索可被图遍历预过滤
- 对节点和边属性做 BM25 关键词全文搜索
- 提供 Rust、TypeScript、Python、Go 四种 SDK 统一发 JSON 查询
- 本地实例默认内存存储,加 --disk 可跨重启持久化
容易踩的坑
- v3.6.1最新正式版2026-11-06 · 2026-11-06 10:16 UTC
What's Changed
- Reuse the planning catalog per scope and read through snapshots on the writer by @xav-db in https://github.com/HelixDB/helix-db/pull/1253
- Release CLI v3.6.1 with Docker v0.0.14 default by @xav-db in https://github.com/HelixDB/helix-db/pull/1256
Full Changelog: https://github.com/HelixDB/helix-db/compare/v3.6.0...v3.6.1
- v3.6.02026-11-05 · 2026-11-05 20:50 UTC
查看更新说明
What's Changed
- Define Cypher error codes in lower snake case by @matthewsanetra in https://github.com/HelixDB/helix-db/pull/1205
- perf(db): store resident vector rows in a slab with exact accounting by @xav-db in https://github.com/HelixDB/helix-db/pull/1200
- perf(db): reuse HNSW mutation scratch and borrow cached rows by @xav-db in https://github.com/HelixDB/helix-db/pull/1203
- perf(db): read property rows in place and decode only requested fields by @xav-db in https://github.com/HelixDB/helix-db/pull/1204
- test(db): follow up #1200, #1203 and #1204 and refresh DB coverage by @xav-db in https://github.com/HelixDB/helix-db/pull/1209
- Format the TypeScript client's embedded error test with Prettier by @xav-db in https://github.com/HelixDB/helix-db/pull/1210
- Skip the deferred-index flush before counts of held rows by @xav-db in https://github.com/HelixDB/helix-db/pull/1211
- chore(deps): bump the npm_and_yarn group across 1 directory with 2 updates by @dependabot[bot] in https://github.com/HelixDB/helix-db/pull/1180
- docs: add the Helix Foundry tab by @xav-db in https://github.com/HelixDB/helix-db/pull/1219
- Share one hybrid cache per disk root so reopened readers stop leaking descriptors by @xav-db in https://github.com/HelixDB/helix-db/pull/1182
- feat: add helix doctor and GET /v2/diagnostics by @xav-db in https://github.com/HelixDB/helix-db/pull/1183
- docs: publish the Cypher guide and add Cypher to the query examples by @matthewsanetra in https://github.com/HelixDB/helix-db/pull/1208
- Start unselective typed Cypher patterns from edge-label bitmaps by @xav-db in https://github.com/HelixDB/helix-db/pull/1218
- docs: explain storage-level tenant database isolation by @xav-db in https://github.com/HelixDB/helix-db/pull/1225
- Expect write_outcome_unknown from Helix Cloud in SDK probes by @matthewsanetra in https://github.com/HelixDB/helix-db/pull/1206
- Return [] for every empty row return by @xav-db in https://github.com/HelixDB/helix-db/pull/1212
- chore(deps): bump follow-redirects from 1.16.0 to 1.16.1 in /docs in the npm_and_yarn group across 1 directory by @dependabot[bot] in https://github.com/HelixDB/helix-db/pull/1221
- fix: reject inner types in Go SDK ParamObject by @Tyagiquamar in https://github.com/HelixDB/helix-db/pull/1224
- chore(deps): bump the npm_and_yarn group across 1 directory with 3 updates by @dependabot[bot] in https://github.com/HelixDB/helix-db/pull/1226
- docs: bring Helix Foundry up to date with prod: Helix MCP, API sources, AI models, usage, the Ask home by @xav-db in https://github.com/HelixDB/helix-db/pull/1223
- fix: fsync every write to local disk storage by @xav-db in https://github.com/HelixDB/helix-db/pull/1228
- Map every query error code to one transport class by @xav-db in https://github.com/HelixDB/helix-db/pull/1229
- perf(db): do not flush deferred index state before element KV reads by @pmsudhi in https://github.com/HelixDB/helix-db/pull/1220
- Fix MCP first-read example and document index operation tracking by @xav-db in https://github.com/HelixDB/helix-db/pull/1241
- ci: replace the line-fingerprint coverage gate with a feature-gated test job by @xav-db in https://github.com/HelixDB/helix-db/pull/1231
- ci: build and run every Rust test once through a sharded nextest archive by @xav-db in https://github.com/HelixDB/helix-db/pull/1232
- test: delete dead, trivial and duplicated tests by @xav-db in https://github.com/HelixDB/helix-db/pull/1233
- test(db): shrink the slowest tests and flush test databases every millisecond by @xav-db in https://github.com/HelixDB/helix-db/pull/1234
- test(db): replace production-coverage with ordinary unit tests by @xav-db in https://github.com/HelixDB/helix-db/pull/1235
- Show
auth statusworkspaces one per line by @xav-db in https://github.com/HelixDB/helix-db/pull/1243 - Support every sign-in method in
helix auth loginby @xav-db in https://github.com/HelixDB/helix-db/pull/1237 - Activate secondary index builds under sustained wr
- v3.5.12026-10-08 · 2026-10-08 20:49 UTC
查看更新说明
What's Changed
- ci: make main pass its own db production coverage gate by @xav-db in https://github.com/HelixDB/helix-db/pull/1189
- perf(db): vectorise the cosine norm while keeping stored bits by @xav-db in https://github.com/HelixDB/helix-db/pull/1191
- fix(db): reopen full-text splits from disk once hydration publishes them by @xav-db in https://github.com/HelixDB/helix-db/pull/1192
- perf(db): resolve BM25 live state only for candidates that can make the top k by @xav-db in https://github.com/HelixDB/helix-db/pull/1193
- perf(db): rank index ID sets directly in filtered node vector searches by @xav-db in https://github.com/HelixDB/helix-db/pull/1194
- perf(db): pick up SlateDB's probe-first cached reads by @xav-db in https://github.com/HelixDB/helix-db/pull/1197
- Bump SlateDB for multi_get version ordering fix by @xav-db in https://github.com/HelixDB/helix-db/pull/1198
- perf: faster native request front end and 1.8× faster planning (simd-json, early freeing, planner data structures), with arena study by @matthewsanetra in https://github.com/HelixDB/helix-db/pull/1196
- Serve Cypher on its own routes and share its API contract by @matthewsanetra in https://github.com/HelixDB/helix-db/pull/1195
- Default the CLI to Docker v0.0.12 by @xav-db in https://github.com/HelixDB/helix-db/pull/1201
- Release CLI v3.5.1 for Docker v0.0.12 by @xav-db in https://github.com/HelixDB/helix-db/pull/1202
Full Changelog: https://github.com/HelixDB/helix-db/compare/v3.5.0...v3.5.1
- v3.5.02026-10-08 · 2026-10-08 09:03 UTC
查看更新说明
What's Changed
- Shared planner for native and Cypher queries (Cypher off by default) by @matthewsanetra in https://github.com/HelixDB/helix-db/pull/1168
- Add
helix explorerto browse a local instance in the graph Explorer by @xav-db in https://github.com/HelixDB/helix-db/pull/1187 - Release CLI 3.5.0 with Explorer image v0.1.0 by @xav-db in https://github.com/HelixDB/helix-db/pull/1188
Full Changelog: https://github.com/HelixDB/helix-db/compare/v3.4.4...v3.5.0
- v3.4.42026-10-07 · 2026-10-07 09:32 UTC
查看更新说明
What's Changed
- ci(docker-image): raise the quality job timeout to 60 minutes by @matthewsanetra in https://github.com/HelixDB/helix-db/pull/1173
- test(db): document the range count contract's dedicated stack by @xav-db in https://github.com/HelixDB/helix-db/pull/1170
- perf(db): decode each searched queue once per request and bound strong vector searches by @xav-db in https://github.com/HelixDB/helix-db/pull/1174
- perf(db): drain index publication queues in time linear in their backlog by @xav-db in https://github.com/HelixDB/helix-db/pull/1175
- perf(db): stream the index-operation backlog at writer open by @xav-db in https://github.com/HelixDB/helix-db/pull/1177
- feat(db): bound strong text searches on their own and reuse pending text analyses by @xav-db in https://github.com/HelixDB/helix-db/pull/1176
- fix(db): charge index-queue admission each operation's memory by @xav-db in https://github.com/HelixDB/helix-db/pull/1178
- test(db): fix two strong vector bound tests broken by per-operation admission charges by @xav-db in https://github.com/HelixDB/helix-db/pull/1181
- Release CLI 3.4.4 and Docker v0.0.11 by @xav-db in https://github.com/HelixDB/helix-db/pull/1184
Full Changelog: https://github.com/HelixDB/helix-db/compare/v3.4.3...v3.4.4
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
HelixDB is an open-source (Apache 2.0) graph database with native vector search and BM25 full-text search, built in Rust on object storage. Store entities, relationships, embeddings, and text in one transactional engine and query them together from Rust, TypeScript, Go, or Python.
| Graph | Vector | Full-text |
|---|---|---|
| Model entities, relationships, and typed properties as a labeled property graph. | Approximate nearest-neighbor search, prefiltered by graph traversal. | BM25 keyword search over node and edge properties. |
Getting started
Install the CLI. On macOS and Linux:
curl -sSL "https://install.helix-db.com" | bash
On Windows PowerShell:
irm https://raw.githubusercontent.com/HelixDB/helix-db/main/crates/cli/install.ps1 | iex
Create a project, start a local instance (requires Docker or Podman), and run the generated query:
mkdir my-helix-app && cd my-helix-app
helix init local # writes helix.toml and examples/request.json
helix start dev # serves http://localhost:6969
helix query dev --file examples/request.json
Local data lives in memory by default; helix start dev --disk persists it across restarts.
To run HelixDB inside your own process without a server, use
embedded mode.
The full walkthrough is in the quickstart.
Already installed? Run helix update.
Or let an agent build it
helix chef installs the HelixDB query skills and docs MCP, scaffolds a project, starts a local
instance, seeds example data, and hands off to the first coding agent it finds, in this order:
Claude Code → OpenAI Codex → OpenCode → Cursor Agent. Describe what you want to build and it
builds a working app, frontend included.
helix chef
Cypher
Source builds also support Cypher reads and CRUD through POST /v2/cypher,
embedded clients, and helix cypher. See the Cypher guide
for the supported language profile, SDK calls, parameters, lossless results,
and transaction rules. Use SDK and server builds from this checkout for Cypher.
For implementation work, the codebase map covers package dependencies, query execution, storage ownership and correctness gates.
Query from your app
Write queries with an SDK and send them to a running instance through POST /v2/query. There is
no build or deploy step, and every SDK produces the same JSON request. (/v2/ is the wire
endpoint version; the current HelixDB and SDK generation is v3.) The examples below target the
local instance on http://localhost:6969. New to the query model? Start with the
Query walkthrough.
| SDK | Package | Current release | Setup guide |
|---|---|---|---|
| Rust | helix-db | 3.0.0 | Rust setup |
| TypeScript | @helix-db/helix-db | 3.1.0 | TypeScript setup |
| Python | helix-db | 0.3.4 | Python setup |
| Go | github.com/helixdb/helix-db/sdks/go | v0.3.1 | Go setup |
The crate is published as helix-db and imported as helix_db:
cargo init && cargo add [email protected] tokio sonic-rs
use helix_db::Client;
use helix_db::dsl::prelude::*;
#[query]
pub fn add_user(name: String) -> WriteBatch {
write_batch()
.var_as(
"user",
g().add_n("User", vec![("name", name)])
.value_map(None::<Vec<String>>),
)
.returning(["user"])
}
#[query]
pub fn get_user(name: String) -> ReadBatch {
read_batch()
.var_as(
"user",
g().n_with_label("User")
.where_(Predicate::eq("name", name))
.value_map(None::<Vec<String>>),
)
.returning(["user"])
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::new(None)?; // defaults to http://localhost:6969
// #[query] helpers return Result<QueryRequest, QueryError>
let new_user: sonic_rs::Value = client
.query(add_user("John Doe".to_string())?)
.send()
.await?;
println!("new user: {:#}", sonic_rs::to_string_pretty(&new_user)?);
let user: sonic_rs::Value = client
.query(get_user("John Doe".to_string())?)
.send()
.await?;
println!("user: {:#}", sonic_rs::to_string_pretty(&user)?);
Ok(())
}
Requires Node.js 20+:
npm init -y && npm install @helix-db/[email protected]
import {
Predicate, PropertyProjection,
defineParams, g, param, readBatch, writeBatch,
} from "@helix-db/helix-db";
const addUserParams = defineParams({ name: param.string() });
function addUser(p = addUserParams) {
return writeBatch()
.varAs("user",
g().addN("User", { name: p.name })
.project([PropertyProjection.new("name")]),
)
.returning(["user"]);
}
const getUserParams = defineParams({ name: param.string() });
function getUser(p = getUserParams) {
return readBatch()
.varAs("user",
g().nWithLabel("User")
.where(Predicate.eq("name", p.name))
.project([PropertyProjection.new("name")]),
)
.returning(["user"]);
}
const HELIX_URL = "http://localhost:6969/v2/query";
const newUser = await fetch(HELIX_URL, {
method: "POST",
headers: { "content-type": "application/json" },
body: addUser().toQueryJson(addUserParams, { name: "John Doe" }),
}).then((r) => r.json());
console.log("new user:", newUser);
const user = await fetch(HELIX_URL, {
method: "POST",
headers: { "content-type": "application/json" },
body: getUser().toQueryJson(getUserParams, { name: "John Doe" }),
}).then((r) => r.json());
console.log("user:", user);
python -m pip install helix-db==0.3.4
from helixdb import Client, Predicate, g, param, define_params, read_batch, write_batch
add_user_params = define_params({"name": param.string()})
add_user = (
write_batch()
.var_as("user", g().add_n("User", {"name": add_user_params.name}))
.returning(["user"])
)
get_user_params = define_params({"name": param.string()})
get_user = (
read_batch()
.var_as(
"user",
g()
.n_with_label("User")
.where(Predicate.eq("name", get_user_params.name))
.value_map(["name"]),
)
.returning(["user"])
)
client = Client("http://localhost:6969")
new_user = client.query(
add_user.to_query_request(add_user_params, {"name": "John Doe"})
)
print("new user:", new_user)
user = client.query(
get_user.to_query_request(get_user_params, {"name": "John Doe"})
)
print("user:", user)
go mod init example.com/my-helix-app
go get github.com/helixdb/helix-db/sdks/[email protected]
package main
import (
"context"
"fmt"
"log"
helix "github.com/helixdb/helix-db/sdks/go"
)
func getUsers() helix.Request {
return helix.ReadQuery("get_users").
VarAs("users", helix.G().NWithLabel("User").ValueMap("$id", "name")).
Returning("users")
}
func main() {
client, err := helix.NewClient("http://localhost:6969")
if err != nil {
log.Fatal(err)
}
var response map[string]any
if err := client.Exec(context.Background(), getUsers(), &response); err != nil {
log.Fatal(err)
}
fmt.Println(response)
}
Helix Cloud
Helix Cloud is the managed, high-availability deployment. Object storage is the durable system of record, a single writer commits every transaction with full ACID guarantees, and reader nodes auto-scale with query load. Sign up or talk to a founder.
helix auth login
helix init cloud # pick a workspace, project, and database; links them in helix.toml
helix query production --file request.json
See the Cloud CLI workflow for authentication and resource commands, and the architecture for how it scales.
Docs and community
License
HelixDB is licensed under the Apache License 2.0.
Just Use Helix.