Skip to content

About

RushDB SDK for JavaScript and TypeScript: RushDB Cloud or self-hosted RushDB.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

RushDB Logo

RushDB β€” JavaScript & TypeScript SDK

RushDB β€” the database for AI

One database for your records, their relationships, and search over them.

NPM Version NPM Downloads Bundle size License Made with Node

🌐 Website β€’ πŸ“– Documentation β€’ ☁️ Cloud β€’ πŸ” Examples


Why RushDB

Agents need memory. Apps need connected data. The standard answer involves multiple databases, schema design, and an embedding pipeline before you write a single useful line of business logic.

RushDB skips all of that:

  • Managed embeddings β€” mark a property for indexing once; every write is auto-embedded server-side
  • Graph auto-structured β€” nested JSON becomes a traversable graph; no manual edge creation
  • Semantic + graph in one query β€” filter by relationships, rank by meaning, compute metrics β€” one call (use select/groupBy)
  • Zero schema β€” push any shape; RushDB infers types and links records
  • 6.9KB gzipped β€” zero runtime dependencies
  • Isomorphic β€” Node.js and browser

Installation

npm install @rushdb/javascript-sdk
# yarn add @rushdb/javascript-sdk
# pnpm add @rushdb/javascript-sdk

Compatibility

Package RushDB 3.x and RushDB Cloud RushDB 2.x (legacy)
@rushdb/javascript-sdk 3.x 2.11.0: npm i @rushdb/javascript-sdk@2
rushdb (PyPI) 3.x 2.10.0: pip install "rushdb<3"
@rushdb/mcp-server 3.x 2.13.0: npx @rushdb/mcp-server@2

Agent memory in 3 lines

Get an API key at app.rushdb.com. Keys come in two levels: full access (server-side only) and read-only β€” read-only keys can't modify data, so they're safe to ship in browser code for public demos and dashboards.

import RushDB from '@rushdb/javascript-sdk'

const db = new RushDB('RUSHDB_API_KEY')

// 1. One-time: index a property for semantic search
await db.ai.indexes.create({ label: 'MEMORY', propertyName: 'output' })

// 2. Store β€” no embedder needed, server handles it
await db.records.create({
  label: 'MEMORY',
  data: {
    agent_id: 'agent-42',
    session_id: 'sess-001',
    action: 'summarized',
    topic: 'Q4 results',
    output: summaryText
  }
})

// 3. Recall by meaning, scoped by graph
const memories = await db.records.vectorSearch({
  labels: ['MEMORY'],
  propertyName: 'output',
  query: 'what did we decide about Q4?',
  where: { agent_id: 'agent-42' },
  limit: 10
})

Graph traversal

// Push nested JSON β€” relationships created automatically
await db.records.importJson({
  label: 'COMPANY',
  data: {
    name: 'Acme Corp',
    DEPARTMENT: [
      {
        name: 'Engineering',
        EMPLOYEE: [
          {
            name: 'Alice',
            role: 'Staff Engineer'
          }
        ]
      }
    ]
  }
})

// Traverse the auto-created graph
const engineers = await db.records.find({
  labels: ['EMPLOYEE'],
  where: {
    role: { $contains: 'Engineer' },
    DEPARTMENT: { COMPANY: { name: 'Acme Corp' } }
  }
})

// Constrain by relationship type and direction
const authoredPosts = await db.records.find({
  labels: ['USER'],
  where: {
    POST: {
      $relation: { type: 'AUTHORED', direction: 'out' },
      title: { $contains: 'graph' }
    }
  },
  limit: 10
})

// Manage relationships explicitly
const company = await db.records.findUniq({
  labels: ['COMPANY'],
  where: { name: 'Acme Corp' }
})
await company.attach(engineers, { type: 'EMPLOYS' })

Query API

One JSON structure works for record queries, aggregations, and vector search:

const result = await db.records.find({
  labels: ['TRANSACTION'],
  where: {
    status: 'posted',
    amount: { $gte: 100 }
  },
  select: {
    total: { $sum: '$record.amount' }
  },
  groupBy: ['$record.category'],
  // Legacy: The aggregate clause is deprecated and should only be used for vector similarity until select supports it.
  orderBy: { amount: 'desc' },
  limit: 50
})

where is resource-local:

  • db.records.find().where filters Records.
  • db.labels.find().where and db.properties.find().where filter Records before returning matching labels/properties.
  • db.relationships.find().where filters relationship edges. Use source and target for endpoint Record predicates.
const relationships = await db.relationships.find({
  source: { labels: ['USER'], where: { status: 'active' } },
  target: { labels: ['ORDER'] },
  where: { type: 'ORDERED', confidence: { $gte: 0.8 } }
})

RushDB Cloud or a self-hosted engine

The SDK works with RushDB in one of two ways:

RushDB Cloud Self-hosted RushDB engine (direct mode)
What you run nothing: the managed service at app.rushdb.com one rushdb binary, on your own infrastructure
Connect with an API key the engine URL and the engine token

The engine is what you can self-host. RushDB Cloud runs that engine for you and adds the dashboard, managed embeddings and the AI features (natural-language search, relationship-pattern suggestions), which exist only in RushDB Cloud.

// RushDB Cloud
const cloud = new RushDB('RUSHDB_API_KEY')

// A self-hosted engine
const selfHosted = new RushDB('ENGINE_TOKEN', {
  direct: true,
  engineUrl: 'http://127.0.0.1:3000',
  scope: 'tenant-1' // only for an engine started with --multitenant
})

What each offers:

Feature Cloud Self-hosted engine
Records: create, read, update, set, upsert, delete, find with where, orderBy, select, groupBy βœ“ βœ“
Relationships: attach/detach, relationships.createMany/deleteMany/find βœ“ βœ“
Labels, properties, property values βœ“ βœ“
Import JSON and CSV, export CSV βœ“ βœ“
Text indexes and keyword search (records.textSearch) βœ“ βœ“
External vector indexes; vector and hybrid search with a queryVector you supply βœ“ βœ“
Raw openCypher (query.raw; the engine needs --languages cypher) βœ“ βœ“
Schema (ai.getSchema, ai.getSchemaMarkdown) βœ“ βœ“
Catalog lookups: ai.searchValues (a value across every property, also near spellings), ai.getSchemaSummary, ai.resolveNames, and value search in properties.values (query, match, domainOnMiss) βœ“ βœ“
Transactions βœ“ record creates, updates, sets, deletes by id, attaches and imports are staged; other writes refuse a transaction
Managed embeddings: managed indexes, records.vectorSearch by text query βœ“ β€”
Natural-language search (ai.search) βœ“ β€”
Relationship-pattern suggestions (relationships.patterns.*) and join suggestions (ai.getJoinCandidates) βœ“ β€”
Project settings (settings.get), dashboard, projects, team access, MCP over HTTP with OAuth βœ“ β€”

In direct mode a Cloud-only method throws CloudOnlyError (with method and reason) before sending anything, and no request ever goes to RushDB Cloud. A write the engine cannot stage into a transaction throws DirectModeError, also before sending anything. The list is available in code:

import { CLOUD_ONLY_METHODS, CloudOnlyError, isCloudOnlyMethod } from '@rushdb/javascript-sdk'

SDK configuration

import RushDB from '@rushdb/javascript-sdk'

const db = new RushDB('RUSHDB_API_KEY', {
  // A different RushDB Cloud API endpoint (default: https://api.rushdb.com/api/v1)
  url: 'https://api.rushdb.com/api/v1',
  timeout: 30000
})

Key options:

  • url β€” full API URL (default: https://api.rushdb.com/api/v1)
  • host, port, protocol β€” alternative to url
  • timeout β€” request timeout in ms (default: 10000)
  • httpClient β€” custom HTTP client for advanced use
  • options.allowForceDelete β€” allow deleting all records without criteria (default: false)
  • direct, engineUrl, scope β€” direct mode against a standalone engine (see above)

Full config reference: docs.rushdb.com/3.x/learn/reference/typescript/RushDB


Documentation

docs.rushdb.com/3.x/connect/sdks and the TypeScript reference β€” full API reference, examples, transactions, CSV import, and more.


Contributing

See CONTRIBUTING.md. Issues and PRs welcome.

About

RushDB SDK for JavaScript and TypeScript: RushDB Cloud or self-hosted RushDB.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages