https://github.com/rush-db/rushdb
RushDB is an instant database for modern apps and DS/ML ops built on top of Neo4j
https://github.com/rush-db/rushdb
app-backend cloud data-analysis data-engineering data-science database docker firebase graph-database graphs instant instant-apps javascript neo4j nestjs rest-api self-hosted typescript web-development
Last synced: 9 days ago
JSON representation
RushDB is an instant database for modern apps and DS/ML ops built on top of Neo4j
- Host: GitHub
- URL: https://github.com/rush-db/rushdb
- Owner: rush-db
- License: apache-2.0
- Created: 2024-12-15T09:12:00.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-04-06T10:37:52.000Z (about 1 year ago)
- Last Synced: 2025-04-06T11:27:45.711Z (about 1 year ago)
- Topics: app-backend, cloud, data-analysis, data-engineering, data-science, database, docker, firebase, graph-database, graphs, instant, instant-apps, javascript, neo4j, nestjs, rest-api, self-hosted, typescript, web-development
- Language: TypeScript
- Homepage: https://rushdb.com
- Size: 52.2 MB
- Stars: 61
- Watchers: 2
- Forks: 1
- Open Issues: 40
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README

# RushDB
### The memory layer for AI agents and apps.
Push any JSON. Get graph relationships and vector search — automatically.
No schema. No pipeline. No glue code.
[](https://github.com/rush-db/rushdb)
[](https://x.com/RushDatabase)
[](https://www.npmjs.com/package/@rushdb/javascript-sdk)
[](https://pypi.org/project/rushdb/)
[](packages/javascript-sdk/LICENSE)
[🌐 Website](https://rushdb.com) • [📖 Documentation](https://docs.rushdb.com) • [☁️ Cloud](https://app.rushdb.com) • [🔍 Examples](https://github.com/rush-db/examples)
---
## The problem
Your agent needs memory. The standard answer is three databases: Redis for key-value, a vector store for semantic search, a graph DB for relationships — plus glue code to keep them in sync.
RushDB replaces all three. Push JSON once. Query it with graph traversal, semantic search, or both — in one call.
| Without RushDB | With RushDB |
|---|---|
| Redis + Pinecone + Neo4j + glue code | One API |
| Design schema → write migrations → repeat | Push any shape, no schema required |
| Separate embedding pipeline | Managed embeddings, server-side |
| Hand-craft relationship edges | Auto-detected from your data structure |
---
## Quick start
Get an API key at [app.rushdb.com](https://app.rushdb.com), then:
```bash
npm install @rushdb/javascript-sdk
# or
pip install rushdb
```
### Store and recall agent memory
```typescript
import RushDB from '@rushdb/javascript-sdk'
const db = new RushDB('RUSHDB_API_KEY')
// One-time: tell RushDB to auto-embed 'output' on every write
await db.ai.indexes.create({ label: 'MEMORY', propertyName: 'output' })
// Store an agent action — no embedder, no vectors array
await db.records.create({
label: 'MEMORY',
data: {
agent_id: 'agent-42',
session_id: 'sess-001',
action: 'summarized',
topic: 'Q4 results',
output: summaryText,
},
})
// Recall by meaning — graph filter + semantic search in one call
const memories = await db.ai.search({
labels: ['MEMORY'],
propertyName: 'output',
query: 'what did we decide about Q4?',
where: { agent_id: 'agent-42' },
limit: 10,
})
```
```python
from rushdb import RushDB
db = RushDB('RUSHDB_API_KEY')
# Store — graph links sessions, actions, and context automatically
db.records.create(
label='MEMORY',
data={
'agent_id': 'agent-42',
'action': 'summarized',
'topic': 'Q4 results',
'output': summary_text,
},
)
# Recall — traverse relationships and filter by meaning
results = db.records.find({
'labels': ['MEMORY'],
'where': {
'agent_id': 'agent-42',
'topic': {'$contains': 'Q4'},
},
'limit': 10,
})
```
Also works with nested JSON — RushDB structures it automatically
```typescript
// Push nested JSON — RushDB normalizes it into a graph, no schema needed
await db.records.importJson({
label: 'COMPANY',
payload: {
name: 'Acme Corp',
DEPARTMENT: [{
name: 'Engineering',
EMPLOYEE: [{
name: 'Alice',
role: 'Staff Engineer',
}]
}]
}
})
// Traverse the auto-created relationships
const engineers = await db.records.find({
labels: ['EMPLOYEE'],
where: {
role: { $contains: 'Engineer' },
DEPARTMENT: { COMPANY: { name: 'Acme Corp' } },
},
})
```
---
## Connect to Claude, Cursor, or any MCP client
RushDB ships an MCP server. Your agent gets persistent, structured memory — out of the box.
```json
{
"mcpServers": {
"rushdb": {
"command": "npx",
"args": ["@rushdb/mcp-server"],
"env": {
"RUSHDB_API_KEY": "your-api-key-here"
}
}
}
}
```
Place this in your Claude Desktop, Cursor, or Windsurf MCP config. The agent can now create records, search by meaning, traverse relationships, and introspect the schema — all via natural language.
---
## What's in the box
| Capability | What it means |
|---|---|
| **Managed embeddings** | Index any string property once — every write is auto-embedded server-side |
| **Graph + vector in one query** | Semantic similarity and relationship traversal compose in a single call |
| **Zero schema** | Push any JSON shape. RushDB infers types, creates properties, links records |
| **ACID transactions** | Concurrent agents don't corrupt shared memory. Neo4j under the hood |
| **Self-describing graph** | Agents enumerate labels, properties, and value ranges to orient themselves |
| **MCP-native** | Full MCP server with discovery-first query prompt built in |
| **Agent Skills** | Installable `@rushdb/skills` package — teach any skills-compatible agent to query, model, and remember with RushDB in one command |
| **Unified query API** | One JSON shape for graph, vector, aggregation, and introspection |
| **Self-host or cloud** | Docker + your Neo4j, or managed cloud. Full data ownership |
---
## Use cases
**Agent memory** — Persist tool outputs, conversation history, and reasoning chains. Graph auto-links sessions, entities, and actions without manual relationship modeling.
**RAG with context** — Go beyond flat chunk retrieval. Filter by relationships, rank by semantic similarity, aggregate — one query.
**Schema-free apps** — Push raw data now, refine later. No migration churn. Labels and properties auto-discovered for dynamic UIs and AI agents.
**Connected data products** — Product catalogs, knowledge bases, fraud graphs, biotech entities: traverse, filter, and aggregate without separate systems.
---
## Self-hosting
Requires Neo4j 2026.01.4+ with APOC and Graph Data Science plugins.
```yaml
# docker-compose.yml
version: '3.8'
services:
rushdb:
image: rushdb/platform
ports:
- "3000:3000"
environment:
- NEO4J_URL=neo4j+s://your-instance.neo4j.io
- NEO4J_USERNAME=neo4j
- NEO4J_PASSWORD=password
- RUSHDB_AES_256_ENCRYPTION_KEY=32-char-key-here
- RUSHDB_LOGIN=admin
- RUSHDB_PASSWORD=secure-password
```
Full environment variables
| Name | Description | Required | Default |
|------|-------------|----------|---------|
| `NEO4J_URL` | Neo4j connection URL | yes | — |
| `NEO4J_USERNAME` | Neo4j username | yes | neo4j |
| `NEO4J_PASSWORD` | Neo4j password | yes | — |
| `RUSHDB_AES_256_ENCRYPTION_KEY` | 32-char key for API token encryption | yes (prod) | — |
| `RUSHDB_PORT` | HTTP port | no | 3000 |
| `RUSHDB_LOGIN` | Admin login | no | admin |
| `RUSHDB_PASSWORD` | Admin password | no | password |
Local development (bundled Neo4j)
```yaml
version: '3.8'
services:
rushdb:
image: rushdb/platform
depends_on:
neo4j:
condition: service_healthy
ports:
- "3000:3000"
environment:
- NEO4J_URL=bolt://neo4j
- NEO4J_USERNAME=neo4j
- NEO4J_PASSWORD=password
neo4j:
image: neo4j:2026.01.4
healthcheck:
test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider localhost:7474 || exit 1"]
interval: 5s
retries: 30
start_period: 10s
ports:
- "7474:7474"
- "7687:7687"
environment:
- NEO4J_ACCEPT_LICENSE_AGREEMENT=yes
- NEO4J_AUTH=neo4j/password
volumes:
- ./neo4j-plugins:/var/lib/neo4j/plugins
```
```bash
# Manage users via CLI
rushdb create-user admin@example.com securepassword123
rushdb update-password admin@example.com newsecurepassword456
```
Architecture: how RushDB structures data (LMPG)
RushDB uses a **Labeled Meta Property Graph (LMPG)** model. Properties are elevated to first-class graph nodes ("HyperProperties") — not just key-value pairs attached to records.
This means:
- **Auto-detected relationships** — records sharing properties get linked without hand-crafting edges
- **Schema introspection** — agents can enumerate labels, property types, value ranges, and relationship topology in one query
- **Soft constraints** — type cohesion scoring, cardinality tracking, and vector dimension enforcement without rigid upfront schemas
- **Unified query surface** — the same filter expression works across records, labels, properties, and relationships
One SearchQuery retrieves multiple perspectives simultaneously (records + property stats + aggregations), avoiding the N+1 inspection pattern common in separate-system architectures.
[Read the full LMPG architecture post →](https://rushdb.com/blog/labeled-meta-property-graphs-rushdb-s-revolutionary-approach-to-graph-database-architecture)
---
## Documentation
| Topic | Link |
|-------|------|
| Quick Tutorial | https://docs.rushdb.com/get-started/quick-tutorial |
| Vector / Semantic Search | https://docs.rushdb.com/concepts/search/where#vector-operators |
| Filtering & Traversal | https://docs.rushdb.com/concepts/search/where |
| Grouping & Aggregations | https://docs.rushdb.com/concepts/search/group-by |
| TypeScript SDK | https://docs.rushdb.com/typescript-sdk/introduction |
| Python SDK | https://docs.rushdb.com/python-sdk/introduction |
| REST API | https://docs.rushdb.com/rest-api/introduction |
| MCP Server | packages/mcp-server/README.md |
| Agent Skills | packages/skills/README.md |
---
## Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md). Issues and PRs welcome.
---
## License
| Path | License |
|------|---------|
| platform/core | Elastic License 2.0 |
| platform/dashboard | Elastic License 2.0 |
| docs | Apache 2.0 |
| website | Apache 2.0 |
| packages/javascript-sdk | Apache 2.0 |
| packages/mcp-server | Apache 2.0 |
---
Need something not supported yet? Open an issue — design discussions are welcome.