QuickstartFrom scratch

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 install

Start a local Postgres for testing

docker compose -f docker/compose.dev.yml up -d postgres
export DATABASE_URL=postgres://mnemo:mnemo@localhost:55432/mnemo

Run the test suite

pnpm -r test

Roughly 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 dev

http://localhost:3000 serves the REST surface plus the live OpenAPI at /openapi.json.

Hack on the docs

pnpm --filter @mnemosyne/docs dev

The 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 any in 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 CHANGELOG entry 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.