RushDB is the memory layer for AI agents and apps.
10K+
Push any JSON. Get graph relationships and vector search automatically. No schema. No pipeline. No glue code.
Most AI memory stacks use separate systems for key-value memory, vectors, and graph relationships, then add custom sync code on top.
RushDB replaces that with one API:
This page documents the self-hosted platform image:
docker pull rushdb/platform
Default app port: 3000
docker run -d \
--name rushdb \
-p 3000:3000 \
-e NEO4J_URL='neo4j+s://your-instance.databases.neo4j.io' \
-e NEO4J_USERNAME='neo4j' \
-e NEO4J_PASSWORD='password' \
-e RUSHDB_AES_256_ENCRYPTION_KEY='replace-with-32-char-secret-key' \
-e RUSHDB_LOGIN='admin' \
-e RUSHDB_PASSWORD='strong-password' \
rushdb/platform
Open: http://localhost:3000
version: '3.8'
services:
rushdb:
image: rushdb/platform:latest
container_name: rushdb
ports:
- '3000:3000'
environment:
- NEO4J_URL=neo4j+s://your-instance.databases.neo4j.io
- NEO4J_USERNAME=neo4j
- NEO4J_PASSWORD=password
- RUSHDB_AES_256_ENCRYPTION_KEY=replace-with-32-char-secret-key
- RUSHDB_LOGIN=admin
- RUSHDB_PASSWORD=strong-password
2026.01.4+| Name | Required | Default | Notes |
|---|---|---|---|
NEO4J_URL | yes | - | Neo4j connection URL |
NEO4J_USERNAME | yes | - | Neo4j username |
NEO4J_PASSWORD | yes | - | Neo4j password |
RUSHDB_AES_256_ENCRYPTION_KEY | yes (production) | 32SymbolStringForTokenEncryption | Must be exactly 32 chars |
RUSHDB_PORT | no | 3000 | HTTP listen port |
RUSHDB_SELF_HOSTED | no | true | Self-hosted mode toggle |
RUSHDB_SERVE_STATIC | no | true | Serve dashboard static assets |
RUSHDB_DASHBOARD_URL | no | / | Dashboard base URL |
RUSHDB_LOGIN | no | admin | Bootstrap admin username |
RUSHDB_PASSWORD | no | password | Bootstrap admin password |
RUSHDB_ALLOWED_LOGINS | no | [] | JSON array of allowed login emails/usernames |
| Name | Required | Default | Notes |
|---|---|---|---|
SQL_DB_TYPE | no | sqlite | sqlite or postgres |
SQL_DB_PATH | when SQL_DB_TYPE=sqlite | ./rushdb.db | SQLite file path |
SQL_DB_URL | when SQL_DB_TYPE=postgres | - | Postgres DSN |
SQL_DB_SSL | no | unset | Postgres SSL mode/flag |
| Name | Required | Default | Notes |
|---|---|---|---|
RUSHDB_PUBLIC_URL | no | https://api.rushdb.com | Public issuer used by OAuth flows |
RUSHDB_OAUTH_ISSUER | no | https://api.rushdb.com | Well-known OAuth issuer override |
RUSHDB_JWT_PRIVATE_KEY | no | unset | PEM private key (RS256) |
RUSHDB_JWT_PUBLIC_KEY | no | unset | PEM public key (RS256) |
RUSHDB_JWT_PRIVATE_KEY_BASE64 | no | unset | Base64 PEM private key (container-friendly) |
RUSHDB_JWT_PUBLIC_KEY_BASE64 | no | unset | Base64 PEM public key (container-friendly) |
RUSHDB_JWT_KID | no | rushdb-mcp-rs256 | Key ID for JWKS |
| Name | Required | Default | Notes |
|---|---|---|---|
RUSHDB_EMBEDDING_BASE_URL | no | https://api.openai.com/v1 | OpenAI-compatible embeddings endpoint |
RUSHDB_EMBEDDING_API_KEY | required if embeddings enabled | unset | Provider API key |
RUSHDB_EMBEDDING_MODEL | required if embeddings enabled | unset | Model identifier |
RUSHDB_EMBEDDING_DIMENSIONS | required if embeddings enabled | unset | Must match model output |
RUSHDB_EMBEDDING_BATCH_SIZE | no | 500 | Backfill batch size |
RUSHDB_EMBEDDING_MAX_RUNTIME_MS | no | 50000 | Backfill scheduler max runtime per tick |
| Name |
|---|
GOOGLE_CLIENT_ID |
GOOGLE_SECRET |
GH_CLIENT_ID |
GH_SECRET |
MAIL_HOST |
MAIL_USER |
MAIL_PASSWORD |
MAIL_FROM |
SERVICE_CAPTCHA_KEY |
| Name | Default |
|---|---|
RATE_LIMITER_REQUESTS_LIMIT | 100 (non-self-hosted) |
RATE_LIMITER_TTL | 1000 |
RUSHDB_PAGINATION_DEFAULT_LIMIT | 100 |
RUSHDB_PAGINATION_MAX_LIMIT | 1000 |
NODE_ENV is also honored (production, development).
RushDB platform components distributed via Docker are licensed under Elastic License 2.0 (ELv2). For repository-level license breakdowns, see the main README.
version: '3.8'
services:
rushdb:
image: rushdb/platform:latest
container_name: rushdb
depends_on:
neo4j:
condition: service_healthy
ports:
- '3000:3000'
environment:
- NEO4J_URL=bolt://neo4j
- NEO4J_USERNAME=neo4j
- NEO4J_PASSWORD=password
- RUSHDB_AES_256_ENCRYPTION_KEY=replace-with-32-char-secret-key
neo4j:
image: neo4j:2026.01.4
container_name: neo4j
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
Manage users for self-hosted deployments:
rushdb create-user [email protected] securepassword123
rushdb update-password [email protected] newsecurepassword456
npm install @rushdb/javascript-sdk
import RushDB from '@rushdb/javascript-sdk'
const db = new RushDB('RUSHDB_API_KEY', { url: 'http://localhost:3000' })
await db.records.create({
label: 'MEMORY',
data: {
agent_id: 'agent-42',
topic: 'Q4 planning',
output: 'Decision summary'
}
})
pip install rushdb
from rushdb import RushDB
db = RushDB('RUSHDB_API_KEY', base_url='http://localhost:3000')
result = db.records.create(
label='MEMORY',
data={
'agent_id': 'agent-42',
'topic': 'Q4 planning',
'output': 'Decision summary',
},
)
Need something not supported yet? Open an issue: https://github.com/rush-db/rushdb/issues
Content type
Image
Digest
sha256:af9fd548e…
Size
146 MB
Last updated
about 1 month ago
docker pull rushdb/platform