Self-hosted
Run the open-source engine with Docker, your database, and your model provider
Your infrastructure is the trust boundary
View on GitHubTurn conversations into lasting memory. Keep the sources. Give every response the context to pick up where you left off
Store durable knowledge as memory. Keep long-form source material as source material. Retrieve what the next response actually needs
Conversation
I'm vegetarian, and peanuts trigger my allergy
I'll keep that in mind for future recommendations
Find somewhere for dinner tomorrow
Ready for recall
Alex follows a vegetarian diet
Alex is allergic to peanuts
Concise records instead of replaying the full conversation
FishMem distills conversations into concise records your product can reuse. The next response gets the durable preference or decision—not another wall of chat history
How memory worksAlex · profile history
May 12
Alex works from Lisbon
Superseded
Aug 1
Alex works from Berlin
Current
Recall the current state or inspect what was true before
A new fact can supersede an old one without erasing history. Recall what is current, inspect what changed, and stop letting stale preferences steer the next answer
Explore temporal memorylaunch-brief.pdf
Original stored
launch-brief.pdf
0.91
Roll back within ten minutes if checkout errors exceed the agreed threshold…
launch-brief.pdf
0.84
The on-call owner confirms recovery before traffic is restored…
Long text and files follow a separate document path. FishMem preserves the original, indexes it for retrieval, and keeps source material out of the user-memory stream
Build document recallAsync Memory Inference returns a durable event immediately. Follow it through processing, handle bounded retries, and read the final records without holding your agent request open
Explore the Event APIMemory inference
event_••••••••
2 records stored · 1.1s
PENDING
RUNNING
SUCCEEDED
Durable receipt
Bounded retries
Terminal result
A frozen, full-suite comparison against mem0 OSS 3.1.2. Every row uses paired items and the same disclosed configuration within the pair
500 paired items
88.2%
83.8%
+4.4 pt
95% CI +1.0 to +7.8
400 paired items
46.7%
41.0%
+5.7 pt
95% CI +1.8 to +9.5
1,986 paired items
67.5%
71.1%
−3.7 pt
95% CI −5.8 to −1.5
Turn a conversation into durable records, then recall only what the next response needs. The same client works with FishMem Cloud and your own deployment
Read the SDK quickstartimport { FishMem } from "@fishmem/sdk";
const memory = new FishMem({
apiKey: process.env.FISHMEM_API_KEY!,
});
await memory.memories.addAndWait({
content: "Alex is vegetarian and allergic to peanuts.",
user_id: "alex",
});
const { results } = await memory.memories.search({
query: "What can Alex eat?",
user_id: "alex",
});Use the same SDK with managed Cloud or your own infrastructure. Choose where your data, models, and operations live
Run the open-source engine with Docker, your database, and your model provider
Your infrastructure is the trust boundary
View on GitHubUse the managed API with workspaces, keys, usage, events, webhooks, and the dashboard ready
No memory infrastructure to operate
Get StartedFor private networks and custom data boundaries, plan a deployment around your cloud and operating model
A tailored path for enterprise requirements
Talk to usNo black boxes around your users' memories. Project scope is enforced at authorization and data-access boundaries, changes retain history, and memory namespaces are exportable on demand
Every public read and write is authorized against a project. Project IDs are carried through database rows and vector metadata, while API keys are hashed at rest, shown once, and revocable from the dashboard
Memory changes retain history, while hosted requests, operations, and credit usage remain visible in the dashboard and API
Export a memory namespace and explicitly delete memories, documents, and source assets through the API. The Apache-2.0 engine remains self-hostable
Practical guidance for choosing, integrating, and operating memory in real agent products