Memory Primitives
Store content as memories, embed it, and retrieve it by meaning with vector search.
Features that take an AI application from prototype to production.
Vector storage built for AI workloads. GoodMem generates the embeddings for you.
Low-latency vector search with intelligent caching and optimized data structures.
Built-in access control 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 PDF, Word, PowerPoint, and Excel files into searchable memory that keeps an image of every page.
Built by PAIR Systems: ISO 27001 certified and SOC 2 Type II audited. Visit our Trust Center
GoodMem turns PDFs and Office files into per-page images, so your agents and the multimodal models behind them see what a document actually looks like — tables, charts, and layout — not a flattened text dump.
Rendering runs on the server in pure JVM code, with no headless Office subprocess to operate or secure. The output is deterministic, and it works in containers and air-gapped networks.
GoodMem renders tables, charts, conditional formatting, embedded images and effects, and right-to-left scripts like Arabic instead of stripping them.
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.

Store and search memories in a few lines of code, in any supported language.
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, and add memory to your agents in minutes.