Build Mnemosyne from source
The path for contributors and the curious. Everything you need is in the monorepo — there are no private build steps.
Clone and install
git clone https://github.com/lucasmailland/mnemosyne
cd mnemosyne
pnpm installStart a local Postgres for testing
docker compose -f docker/compose.dev.yml up -d postgres
export DATABASE_URL=postgres://mnemo:mnemo@localhost:55432/mnemoRun the test suite
pnpm -r testRoughly 1,200 tests pass against a real Postgres in CI. The unit subset
runs without a database (pnpm test:unit).
Boot the server
pnpm --filter @mnemosyne/server devhttp://localhost:3000 serves the REST surface plus the live OpenAPI at
/openapi.json.
Hack on the docs
pnpm --filter @mnemosyne/docs devThe site you’re reading right now reloads on save at
http://localhost:4000.
Workspace layout
mnemosyne/
├── packages/
│ ├── core/ ← bitemporal storage + recall engine
│ ├── server/ ← Hono + zod-openapi REST surface
│ ├── mcp/ ← MCP tools (recall, remember, forget, pin, timeline)
│ ├── client-ts/ ← TypeScript SDK
│ ├── llm-providers/ ← optional embedders (OpenAI, Voyage, Cohere, Ollama)
│ └── cli/ ← `mnemo` CLI (recall, remember, export, import, …)
├── apps/
│ └── docs/ ← this site
├── examples/ ← runnable consumer apps
├── docker/ ← Dockerfile + compose files
└── docs/ ← legacy markdown (kept for git history)Conventions
- TypeScript is strict mode + noUncheckedIndexedAccess. No
anyin shipped code. - Migrations live in
packages/core/migrations/and are versioned 0001..N. - Every public function has a JSDoc + an integration test.
- Commit messages follow Conventional Commits.
- PRs without a
CHANGELOGentry fail CI.
💡
We use the same monorepo style as Drizzle and Hono — small focused
packages, generated SDKs, strict CI. Read the
CONTRIBUTING.md
before you open your first PR.