
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
openmemory-js
Advanced tools
> **real long-term memory for ai agents. not rag. not a vector db. self-hosted.**
real long-term memory for ai agents. not rag. not a vector db. self-hosted.
openmemory is a cognitive memory engine for llms and agents.
your model stays stateless. your app stops being amnesiac.
npm install openmemory-js
import { Memory } from "openmemory-js"
const mem = new Memory()
await mem.add("user likes spicy food", { user_id: "u1" })
const results = await mem.search("food?", { user_id: "u1" })
drop this into:
that's it. you're now running a fully local cognitive memory engine 🎉
ingest data from external sources directly into memory:
const github = await mem.source("github")
await github.connect({ token: "ghp_..." })
await github.ingest_all({ repo: "owner/repo" })
available sources: github, notion, google_drive, google_sheets, google_slides, onedrive, web_crawler
✅ local-first - runs entirely on your machine, zero external dependencies
✅ multi-sector memory - episodic, semantic, procedural, emotional, reflective
✅ temporal knowledge graph - time-aware facts with validity periods
✅ memory decay - adaptive forgetting with sector-specific rates
✅ waypoint graph - associative recall paths for better retrieval
✅ explainable traces - see exactly why memories were recalled
✅ zero config - works out of the box with sensible defaults
openmemory automatically classifies content into 5 cognitive sectors:
| sector | description | examples | decay rate |
|---|---|---|---|
| episodic | time-bound events & experiences | "yesterday i attended a conference" | medium |
| semantic | timeless facts & knowledge | "paris is the capital of france" | very low |
| procedural | skills, procedures, how-tos | "to deploy: build, test, push" | low |
| emotional | feelings, sentiment, mood | "i'm excited about this project!" | high |
| reflective | meta-cognition, insights | "i learn best through practice" | very low |
# database
OM_DB_PATH=./data/om.db # sqlite file path (default: ./data/openmemory.sqlite)
OM_DB_URL=sqlite://:memory: # or use in-memory db
# embeddings
OM_EMBEDDINGS=ollama # synthetic | openai | gemini | ollama
OM_OLLAMA_URL=http://localhost:11434
OM_OLLAMA_MODEL=embeddinggemma # or nomic-embed-text, mxbai-embed-large
# openai
OPENAI_API_KEY=sk-...
OM_OPENAI_MODEL=text-embedding-3-small
# gemini
GEMINI_API_KEY=AIza...
# performance tier
OM_TIER=deep # fast | smart | deep | hybrid
OM_VEC_DIM=768 # vector dimension (must match model)
# metadata backend (optional)
OM_METADATA_BACKEND=postgres # sqlite (default) | postgres
OM_PG_HOST=localhost
OM_PG_PORT=5432
OM_PG_DB=openmemory
OM_PG_USER=postgres
OM_PG_PASSWORD=...
# vector backend (optional)
OM_VECTOR_BACKEND=valkey # default uses metadata backend
OM_VALKEY_URL=redis://localhost:6379
import { Memory } from 'openmemory-js';
const mem = new Memory('user-123'); // optional user_id
// add memories
await mem.add(
"user prefers dark mode",
{
tags: ["preference", "ui"],
created_at: Date.now()
}
);
// search
const results = await mem.search("user settings", {
user_id: "user-123",
limit: 10,
sectors: ["semantic", "procedural"]
});
// get by id
const memory = await mem.get("uuid-here");
// wipe all data (useful for testing)
await mem.wipe();
fast - synthetic embeddings (no api calls), instantsmart - hybrid semantic + synthetic for balanced speed/accuracydeep - pure semantic embeddings for maximum accuracyhybrid - adaptive based on query complexityopenmemory-js includes an mcp server for integration with claude desktop, cursor, windsurf, and other mcp clients:
npx openmemory-js serve --port 3000
{
"mcpServers": {
"openmemory": {
"command": "npx",
"args": ["openmemory-js", "serve"]
}
}
}
available mcp tools:
openmemory_query - search memoriesopenmemory_store - add new memoriesopenmemory_list - list all memoriesopenmemory_get - get memory by idopenmemory_reinforce - reinforce a memory// multi-user support
const mem = new Memory();
await mem.add("alice likes python", { user_id: "alice" });
await mem.add("bob likes rust", { user_id: "bob" });
const alicePrefs = await mem.search("what does alice like?", { user_id: "alice" });
// returns python results only
// temporal filtering
const recent = await mem.search("user activity", {
startTime: Date.now() - 86400000, // last 24 hours
endTime: Date.now()
});
// sector-specific queries
const facts = await mem.search("company info", { sectors: ["semantic"] });
const howtos = await mem.search("deployment", { sectors: ["procedural"] });
new Memory(user_id?: string)create a new memory instance with optional default user_id.
async add(content: string, metadata?: object): Promise<hsg_mem>store a new memory.
parameters:
content - text content to storemetadata - optional metadata object:
user_id - user identifiertags - array of tag stringscreated_at - timestampreturns: memory object with id, primary_sector, sectors
async search(query: string, options?: object): Promise<hsg_q_result[]>search for relevant memories.
parameters:
query - search textoptions:
user_id - filter by userlimit - max results (default: 10)sectors - array of sectors to searchstartTime - filter memories after this timestampendTime - filter memories before this timestampreturns: array of memory results with id, content, score, sectors, salience, tags, meta
async get(id: string): Promise<memory | null>retrieve a memory by id.
async wipe(): Promise<void>⚠️ danger: delete all memories, vectors, and waypoints. useful for testing.
apache 2.0
FAQs
> **real long-term memory for ai agents. not rag. not a vector db. self-hosted.**
The npm package openmemory-js receives a total of 192 weekly downloads. As such, openmemory-js popularity was classified as not popular.
We found that openmemory-js demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.