Introduction to AstraeaDB

What is AstraeaDB?

AstraeaDB is a cloud-native, AI-first graph database written in Rust. It is designed from the ground up for workloads that combine traditional graph analytics with modern vector similarity search and retrieval-augmented generation (RAG). Its core data model is the Vector-Property Graph, which extends the classical property graph with dense vector embeddings and temporal edge validity windows.

Key characteristics of AstraeaDB include:

The Vector-Property Graph Data Model

AstraeaDB organises data into nodes and edges:

Nodes have:

Edges have:

Transport Options

AstraeaDB exposes three network endpoints simultaneously:

Transport Default Port Protocol Best For
JSON/TCP 7687 Line-delimited JSON General CRUD, interactive use
gRPC 7688 Protocol Buffers Service-to-service calls
Arrow Flight 7689 Apache Arrow Flight Bulk queries, analytics

The AstraeaDB R package provides three client classes that map to these transports:

For most users, AstraeaClient or the convenience function astraea_connect() is the recommended starting point.

Key Features at a Glance

The R package exposes the full AstraeaDB feature set:

Installation

From CRAN (when available)

install.packages("AstraeaDB")

Development Version from GitHub

# install.packages("remotes")
remotes::install_github("AstraeaDB/R-AstraeaDB")

Optional: Arrow Flight Support

To enable the high-performance Arrow Flight transport, install the arrow package:

install.packages("arrow")

Prerequisites

Before using the R package, you must have an AstraeaDB server running and accessible on the network. You can start a local development server with:

# From the AstraeaDB source directory
cargo run -p astraea-cli -- serve

By default the server listens on:

You can verify the server is reachable from R before connecting:

library(AstraeaDB)
astraea_server_available()
#> [1] TRUE

Quick Start Example

The following example connects to a local server, creates two nodes and an edge, queries the graph, and then disconnects.

library(AstraeaDB)

# 1. Connect to the server (convenience wrapper)
client <- astraea_connect()

# 2. Health check
client$ping()

# 3. Create nodes
alice_id <- client$create_node(
  labels     = c("Person"),
  properties = list(name = "Alice", age = 30, city = "San Francisco")
)

bob_id <- client$create_node(
  labels     = c("Person"),
  properties = list(name = "Bob", age = 25, city = "New York")
)

# 4. Create an edge
edge_id <- client$create_edge(
  source    = alice_id,
  target    = bob_id,
  edge_type = "KNOWS",
  properties = list(since = 2020),
  weight    = 0.9
)

# 5. Read a node back
node <- client$get_node(alice_id)
node$labels
#> [1] "Person"
node$properties$name
#> [1] "Alice"

# 6. Find neighbors
neighbors <- client$neighbors(alice_id, direction = "outgoing")

# 7. Run a GQL query
result <- client$query("MATCH (p:Person) RETURN p.name, p.city")

# 8. Disconnect when finished
client$disconnect()

Where to Go Next