Memory Primitives
Store, embed, and retrieve memories with semantic understanding and vector search capabilities.
Enterprise-grade features that scale with your AI applications, from prototype to production.
High-performance vector database optimized for AI workloads with automatic embedding generation.
Sub-100ms query times with intelligent caching and optimized data structures.
Built-in security, compliance, and data governance for production environments.
Manage memories across multiple agents with shared and isolated contexts.
Comprehensive SDKs, debugging tools, and development workflows for any stack.
Turn documents into searchable, visually-grounded memory — PDF, Word, PowerPoint, and Excel.
Built by PAIR Systems — SOC 2 Type II compliant and ISO 27001 certified. Visit our Trust Center
GoodMem turns PDFs and Office files into per-page images, so your agents retrieve over what a document actually looks like — tables, charts, and layout — not a flattened text dump.
Pure-JVM, server-side rendering with no headless Office subprocess to operate or secure — deterministic output that is container- and air-gap-friendly.
Tables, charts, conditional formatting, embedded images and effects, and right-to-left scripts like Arabic are rendered, not stripped.
Every chunk maps back to its source page, so retrieval results can cite exactly where an answer came from.
Manage resources, upload documents, and search your knowledge base — all from your browser. Launches automatically with the server.

Get started with just a few lines of code. Our intuitive API makes memory management effortless across all supported languages.
import requests, json
BASE_URL = "http://localhost:8080"HEADERS = {"x-api-key": "your-api-key", "Content-Type": "application/json"}
# Store a memorymemory = requests.post(f"{BASE_URL}/v1/memories", headers=HEADERS, json={ "spaceId": "your-space-id", "contentType": "text/plain", "originalContent": "User prefers dark mode and Python"}).json()print(f"Stored: {memory['memoryId']}")
# Search with natural languageresults = requests.post( f"{BASE_URL}/v1/memories:retrieve", headers={**HEADERS, "Accept": "application/x-ndjson"}, json={ "message": "What are the user's preferences?", "spaceKeys": [{"spaceId": "your-space-id"}] })for line in results.text.strip().split("\n"): if line: print(json.loads(line))Native SDKs and integrations for popular AI frameworks, providers, and programming languages.
View all integrationsStart building with GoodMem today. No setup required, just add intelligence to your agents in minutes.