Backend-agnostic memory-layer SDK — pluggable providers, local embeddings, storage adapters, semantic search.
Docs: docs.atomicstrata.ai/sdk
AtomicMemory Core currently reaches cost-Pareto SOTA on BEAM-100K, BEAM-1M, and LoCoMo10, with BEAM-10M parity against the strongest published Mem0-new result. The SDK is the typed application surface for building on that memory layer.
AtomicMemoryClient— primary public surface. Aggregates the memory and storage namespaces:client.memory.search(...)andclient.storage.put(...).- Provider interface + registry — implement
MemoryProviderto plug in any backend. AtomicMemoryProvider— HTTP adapter for atomicmemory-core.Mem0Provider— HTTP adapter for Mem0 (OSS or hosted).StorageManager— KV / cache adapters under the./kv-cachesubpath (IndexedDB, in-memory).EmbeddingGenerator— local embedding generation viatransformers.js.SemanticSearch— cosine-similarity search primitives.- Error types (
AtomicMemoryError,StorageError,SearchError, plus storage typed errors likeArtifactInUseError,PointerContentNotManagedError) and a minimal event emitter.
Server-side only in v1. The direct storage API uses a shared bearer credential and must run inside a trusted process (a Node server, ops tooling, or the webapp-sdk proxy). Browser bundles must NOT instantiate
AtomicMemoryClientdirectly.
pnpm add @atomicmemory/sdkAlso works with npm install / yarn add.
Prerequisite: start atomicmemory-core first. The full SDK walkthrough is in the SDK Quickstart.
import { AtomicMemoryClient } from '@atomicmemory/sdk';
const client = new AtomicMemoryClient({
apiUrl: 'http://localhost:3050',
apiKey: process.env.ATOMICMEMORY_API_KEY!,
userId: 'demo-user',
memory: {
providers: {
atomicmemory: { apiUrl: 'http://localhost:3050' },
},
},
});
await client.memory.initialize();
// Memory namespace.
await client.memory.ingest({
mode: 'messages',
messages: [{ role: 'user', content: 'I prefer aisle seats.' }],
scope: { user: 'demo-user' },
});
const results = await client.memory.search({
query: 'seat preference',
scope: { user: 'demo-user' },
});
// Storage namespace.
const artifact = await client.storage.put({
mode: 'pointer',
uri: 'https://example.com/file.pdf',
contentType: 'application/pdf',
});
console.log(artifact.artifactId);Applications that only need memory operations can still use
MemoryClient directly. New integrations should prefer the
namespaced AtomicMemoryClient.memory surface.
const memory = new MemoryClient({
providers: {
atomicmemory: {
apiUrl: 'http://localhost:3050',
apiKey: process.env.ATOMICMEMORY_API_KEY,
timeout: 30_000,
},
},
});const memory = new MemoryClient({
providers: {
mem0: {
apiUrl: 'http://localhost:8888',
apiStyle: 'oss',
},
},
});@atomicmemory/sdk/browser— browser-safe entry:MemoryClient+ memory types/adapters, without the root bundle's storage/embedding/search surface@atomicmemory/sdk/storage— storage artifact client + types (ConcreteStorageClient,StorageClient,StoredArtifact, error classes)@atomicmemory/sdk/kv-cache— KV / cache adapters (IndexedDB, in-memory) used internally by the embedding cache@atomicmemory/sdk/embedding— embedding generator@atomicmemory/sdk/search— semantic search primitives@atomicmemory/sdk/utils— shared utilities@atomicmemory/sdk/core— error types + events@atomicmemory/sdk/memory— memory types, provider interface, provider adapters
pnpm install
pnpm build
pnpm test
pnpm typecheckThe AtomicMemoryProvider mappers are guarded by a record/replay
test suite that runs against captured atomicmemory-core HTTP
responses. When core's wire shape changes, refresh the fixtures:
# In sibling atomicmemory-core checkout: ensure .env has a real
# OPENAI_API_KEY (or LLM_PROVIDER=ollama), then:
docker compose up -d --build
# Back in this repo:
pnpm fixtures:captureSee src/memory/atomicmemory-provider/__tests__/fixtures/README.md for the full procedure and what gets normalized at capture time.
Issues and PRs welcome.
Apache-2.0 © AtomicMemory