{"id":24005165,"url":"https://github.com/rush-db/rushdb","last_synced_at":"2026-05-09T05:12:41.115Z","repository":{"id":268220227,"uuid":"903680048","full_name":"rush-db/rushdb","owner":"rush-db","description":"RushDB is an instant database for modern apps and DS/ML ops built on top of Neo4j","archived":false,"fork":false,"pushed_at":"2025-04-06T10:37:52.000Z","size":54731,"stargazers_count":61,"open_issues_count":40,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-06T11:27:45.711Z","etag":null,"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"],"latest_commit_sha":null,"homepage":"https://rushdb.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rush-db.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-15T09:12:00.000Z","updated_at":"2025-03-22T03:50:28.000Z","dependencies_parsed_at":"2024-12-15T10:24:25.044Z","dependency_job_id":"c17298f5-ea99-4b81-96bd-7155e890c46f","html_url":"https://github.com/rush-db/rushdb","commit_stats":null,"previous_names":["rush-db/rushdb"],"tags_count":48,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rush-db%2Frushdb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rush-db%2Frushdb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rush-db%2Frushdb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rush-db%2Frushdb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rush-db","download_url":"https://codeload.github.com/rush-db/rushdb/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247478229,"owners_count":20945261,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["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"],"created_at":"2025-01-08T02:34:23.516Z","updated_at":"2026-05-09T05:12:41.104Z","avatar_url":"https://github.com/rush-db.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n![RushDB Logo](https://raw.githubusercontent.com/rush-db/rushdb/main/rushdb-logo.svg)\n\n# RushDB\n\n### The memory layer for AI agents and apps.\n\nPush any JSON. Get graph relationships and vector search — automatically.\nNo schema. No pipeline. No glue code.\n\n[![GitHub Stars](https://img.shields.io/github/stars/rush-db/rushdb?style=social)](https://github.com/rush-db/rushdb)\n[![Follow on X](https://img.shields.io/twitter/follow/rushdb?style=social)](https://x.com/RushDatabase)\n[![NPM Version](https://img.shields.io/npm/v/%40rushdb%2Fjavascript-sdk?label=npm)](https://www.npmjs.com/package/@rushdb/javascript-sdk)\n[![PyPI Version](https://img.shields.io/pypi/v/rushdb?label=pypi)](https://pypi.org/project/rushdb/)\n[![License](https://img.shields.io/badge/license-Apache%202.0-blue)](packages/javascript-sdk/LICENSE)\n\n[🌐 Website](https://rushdb.com) • [📖 Documentation](https://docs.rushdb.com) • [☁️ Cloud](https://app.rushdb.com) • [🔍 Examples](https://github.com/rush-db/examples)\n\n\u003c/div\u003e\n\n---\n\n## The problem\n\nYour 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.\n\nRushDB replaces all three. Push JSON once. Query it with graph traversal, semantic search, or both — in one call.\n\n| Without RushDB | With RushDB |\n|---|---|\n| Redis + Pinecone + Neo4j + glue code | One API |\n| Design schema → write migrations → repeat | Push any shape, no schema required |\n| Separate embedding pipeline | Managed embeddings, server-side |\n| Hand-craft relationship edges | Auto-detected from your data structure |\n\n---\n\n## Quick start\n\nGet an API key at [app.rushdb.com](https://app.rushdb.com), then:\n\n```bash\nnpm install @rushdb/javascript-sdk\n# or\npip install rushdb\n```\n\n### Store and recall agent memory\n\n```typescript\nimport RushDB from '@rushdb/javascript-sdk'\n\nconst db = new RushDB('RUSHDB_API_KEY')\n\n// One-time: tell RushDB to auto-embed 'output' on every write\nawait db.ai.indexes.create({ label: 'MEMORY', propertyName: 'output' })\n\n// Store an agent action — no embedder, no vectors array\nawait db.records.create({\n  label: 'MEMORY',\n  data: {\n    agent_id: 'agent-42',\n    session_id: 'sess-001',\n    action: 'summarized',\n    topic: 'Q4 results',\n    output: summaryText,\n  },\n})\n\n// Recall by meaning — graph filter + semantic search in one call\nconst memories = await db.ai.search({\n  labels: ['MEMORY'],\n  propertyName: 'output',\n  query: 'what did we decide about Q4?',\n  where: { agent_id: 'agent-42' },\n  limit: 10,\n})\n```\n\n```python\nfrom rushdb import RushDB\n\ndb = RushDB('RUSHDB_API_KEY')\n\n# Store — graph links sessions, actions, and context automatically\ndb.records.create(\n    label='MEMORY',\n    data={\n        'agent_id': 'agent-42',\n        'action': 'summarized',\n        'topic': 'Q4 results',\n        'output': summary_text,\n    },\n)\n\n# Recall — traverse relationships and filter by meaning\nresults = db.records.find({\n    'labels': ['MEMORY'],\n    'where': {\n        'agent_id': 'agent-42',\n        'topic': {'$contains': 'Q4'},\n    },\n    'limit': 10,\n})\n```\n\n\u003cdetails\u003e\n\u003csummary\u003eAlso works with nested JSON — RushDB structures it automatically\u003c/summary\u003e\n\n```typescript\n// Push nested JSON — RushDB normalizes it into a graph, no schema needed\nawait db.records.importJson({\n  label: 'COMPANY',\n  payload: {\n    name: 'Acme Corp',\n    DEPARTMENT: [{\n      name: 'Engineering',\n      EMPLOYEE: [{\n        name: 'Alice',\n        role: 'Staff Engineer',\n      }]\n    }]\n  }\n})\n\n// Traverse the auto-created relationships\nconst engineers = await db.records.find({\n  labels: ['EMPLOYEE'],\n  where: {\n    role: { $contains: 'Engineer' },\n    DEPARTMENT: { COMPANY: { name: 'Acme Corp' } },\n  },\n})\n```\n\n\u003c/details\u003e\n\n---\n\n## Connect to Claude, Cursor, or any MCP client\n\nRushDB ships an MCP server. Your agent gets persistent, structured memory — out of the box.\n\n```json\n{\n  \"mcpServers\": {\n    \"rushdb\": {\n      \"command\": \"npx\",\n      \"args\": [\"@rushdb/mcp-server\"],\n      \"env\": {\n        \"RUSHDB_API_KEY\": \"your-api-key-here\"\n      }\n    }\n  }\n}\n```\n\nPlace 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.\n\n---\n\n## What's in the box\n\n| Capability | What it means |\n|---|---|\n| **Managed embeddings** | Index any string property once — every write is auto-embedded server-side |\n| **Graph + vector in one query** | Semantic similarity and relationship traversal compose in a single call |\n| **Zero schema** | Push any JSON shape. RushDB infers types, creates properties, links records |\n| **ACID transactions** | Concurrent agents don't corrupt shared memory. Neo4j under the hood |\n| **Self-describing graph** | Agents enumerate labels, properties, and value ranges to orient themselves |\n| **MCP-native** | Full MCP server with discovery-first query prompt built in |\n| **Agent Skills** | Installable `@rushdb/skills` package — teach any skills-compatible agent to query, model, and remember with RushDB in one command |\n| **Unified query API** | One JSON shape for graph, vector, aggregation, and introspection |\n| **Self-host or cloud** | Docker + your Neo4j, or managed cloud. Full data ownership |\n\n---\n\n## Use cases\n\n**Agent memory** — Persist tool outputs, conversation history, and reasoning chains. Graph auto-links sessions, entities, and actions without manual relationship modeling.\n\n**RAG with context** — Go beyond flat chunk retrieval. Filter by relationships, rank by semantic similarity, aggregate — one query.\n\n**Schema-free apps** — Push raw data now, refine later. No migration churn. Labels and properties auto-discovered for dynamic UIs and AI agents.\n\n**Connected data products** — Product catalogs, knowledge bases, fraud graphs, biotech entities: traverse, filter, and aggregate without separate systems.\n\n---\n\n## Self-hosting\n\nRequires Neo4j 2026.01.4+ with APOC and Graph Data Science plugins.\n\n```yaml\n# docker-compose.yml\nversion: '3.8'\nservices:\n  rushdb:\n    image: rushdb/platform\n    ports:\n      - \"3000:3000\"\n    environment:\n      - NEO4J_URL=neo4j+s://your-instance.neo4j.io\n      - NEO4J_USERNAME=neo4j\n      - NEO4J_PASSWORD=password\n      - RUSHDB_AES_256_ENCRYPTION_KEY=32-char-key-here\n      - RUSHDB_LOGIN=admin\n      - RUSHDB_PASSWORD=secure-password\n```\n\n\u003cdetails\u003e\n\u003csummary\u003eFull environment variables\u003c/summary\u003e\n\n| Name | Description | Required | Default |\n|------|-------------|----------|---------|\n| `NEO4J_URL` | Neo4j connection URL | yes | — |\n| `NEO4J_USERNAME` | Neo4j username | yes | neo4j |\n| `NEO4J_PASSWORD` | Neo4j password | yes | — |\n| `RUSHDB_AES_256_ENCRYPTION_KEY` | 32-char key for API token encryption | yes (prod) | — |\n| `RUSHDB_PORT` | HTTP port | no | 3000 |\n| `RUSHDB_LOGIN` | Admin login | no | admin |\n| `RUSHDB_PASSWORD` | Admin password | no | password |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eLocal development (bundled Neo4j)\u003c/summary\u003e\n\n```yaml\nversion: '3.8'\nservices:\n  rushdb:\n    image: rushdb/platform\n    depends_on:\n      neo4j:\n        condition: service_healthy\n    ports:\n      - \"3000:3000\"\n    environment:\n      - NEO4J_URL=bolt://neo4j\n      - NEO4J_USERNAME=neo4j\n      - NEO4J_PASSWORD=password\n  neo4j:\n    image: neo4j:2026.01.4\n    healthcheck:\n      test: [\"CMD-SHELL\", \"wget --no-verbose --tries=1 --spider localhost:7474 || exit 1\"]\n      interval: 5s\n      retries: 30\n      start_period: 10s\n    ports:\n      - \"7474:7474\"\n      - \"7687:7687\"\n    environment:\n      - NEO4J_ACCEPT_LICENSE_AGREEMENT=yes\n      - NEO4J_AUTH=neo4j/password\n    volumes:\n      - ./neo4j-plugins:/var/lib/neo4j/plugins\n```\n\n\u003c/details\u003e\n\n```bash\n# Manage users via CLI\nrushdb create-user admin@example.com securepassword123\nrushdb update-password admin@example.com newsecurepassword456\n```\n\n\u003cdetails\u003e\n\u003csummary\u003eArchitecture: how RushDB structures data (LMPG)\u003c/summary\u003e\n\nRushDB 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.\n\nThis means:\n- **Auto-detected relationships** — records sharing properties get linked without hand-crafting edges\n- **Schema introspection** — agents can enumerate labels, property types, value ranges, and relationship topology in one query\n- **Soft constraints** — type cohesion scoring, cardinality tracking, and vector dimension enforcement without rigid upfront schemas\n- **Unified query surface** — the same filter expression works across records, labels, properties, and relationships\n\nOne SearchQuery retrieves multiple perspectives simultaneously (records + property stats + aggregations), avoiding the N+1 inspection pattern common in separate-system architectures.\n\n[Read the full LMPG architecture post →](https://rushdb.com/blog/labeled-meta-property-graphs-rushdb-s-revolutionary-approach-to-graph-database-architecture)\n\n\u003c/details\u003e\n\n---\n\n## Documentation\n\n| Topic | Link |\n|-------|------|\n| Quick Tutorial | https://docs.rushdb.com/get-started/quick-tutorial |\n| Vector / Semantic Search | https://docs.rushdb.com/concepts/search/where#vector-operators |\n| Filtering \u0026 Traversal | https://docs.rushdb.com/concepts/search/where |\n| Grouping \u0026 Aggregations | https://docs.rushdb.com/concepts/search/group-by |\n| TypeScript SDK | https://docs.rushdb.com/typescript-sdk/introduction |\n| Python SDK | https://docs.rushdb.com/python-sdk/introduction |\n| REST API | https://docs.rushdb.com/rest-api/introduction |\n| MCP Server | packages/mcp-server/README.md |\n| Agent Skills | packages/skills/README.md |\n\n---\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md). Issues and PRs welcome.\n\n---\n\n## License\n\n| Path | License |\n|------|---------|\n| platform/core | Elastic License 2.0 |\n| platform/dashboard | Elastic License 2.0 |\n| docs | Apache 2.0 |\n| website | Apache 2.0 |\n| packages/javascript-sdk | Apache 2.0 |\n| packages/mcp-server | Apache 2.0 |\n\n---\n\nNeed something not supported yet? Open an issue — design discussions are welcome.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frush-db%2Frushdb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frush-db%2Frushdb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frush-db%2Frushdb/lists"}