
Get Memo running from source in under a minute. This guide assumes a development setup — for end-user installation, see the Installation Guide.
| Requirement | Minimum Version | Check Command |
|---|---|---|
| Go | 1.26+ | go version |
| Flutter | 3.10+ | flutter --version |
| GCC / build-essential | Any recent | gcc --version |
| Git | Any recent | git --version |
SQLite and sqlite-vec require CGO. SetCGO_ENABLED=1before any Go command. On Linux, installbuild-essential(Debian/Ubuntu) orbase-devel(Arch). On macOS, install Xcode Command Line Tools. On Windows, use MSYS2 or MinGW.
git clone https://github.com/BugraAkdemir/memo.git
cd memo
Terminal 1 — Backend:
go run -tags "sqlite_fts5" . --headless --port 8090
-tags "sqlite_fts5" is required, not optional — without it, mattn/go-sqlite3 silently skips FTS5 support and memory retrieval permanently degrades to vector-only search, with no visible error. --headless pairs the backend with the Flutter frontend below; Memo also runs as its own separate process from the terminal CLI (they no longer share a process — closing one doesn't disrupt the other), and the backend shuts itself down within a minute or two once nothing is using it.
Terminal 2 — Frontend:
cd frontend
flutter run -d linux
Replace linux with windows, macos, or chrome depending on your platform. The Flutter desktop app connects to the backend over HTTP/SSE.
If port 8090 is in use, pass--port 8080(or any other port). Update the Flutter client'sMemoApiClientbase URL to match.
Runninggo run -tags "sqlite_fts5" .from an interactive terminal (no--headless) drops you straight into the terminal CLI instead — a full chat REPL with/slash commands,@file-mention autocomplete, agent-mode tool permission prompts, and standalone flags (--kill,--help,--version,--status,--gui,--github,--bugreport,--docs). It always starts a fresh chat; use/sessionto resume any earlier conversation from either the CLI or the desktop app.
cd memo
CGO_ENABLED=1 go build -o memo .
cd memo/frontend
flutter build linux --release
The compiled binary is at frontend/build/linux/x64/release/bundle/.
The repository includes build_releases.sh which produces platform packages:
./build_releases.sh
This generates .AppImage, .deb, .tar.gz (Linux), .zip (macOS), and .exe (Windows) in dist/.
Listening on :8090memo/
├── main.go # Entry point
├── go.mod
├── internal/ # 29 Go packages
│ ├── app/ # Central orchestrator
│ ├── webserver/ # REST API + SSE
│ ├── memory/ # RAG vector store
│ ├── provider/ # LLM provider routing
│ ├── agent/ # Tool-calling sandbox
│ ├── orchestra/ # Multi-model workflows
│ ├── cloudsync/ # Google Drive E2E backup
│ ├── whatsapp/ # WhatsApp bridge
│ ├── calendar/ # Event store + reminders
│ ├── identity/ # System prompt / persona
│ └── ...
├── frontend/ # Flutter desktop + mobile
│ ├── lib/main.dart
│ ├── lib/providers/ # Riverpod state
│ ├── lib/widgets/ # UI components
│ └── lib/core/ # API client, themes
├── config/config.yaml # Default configuration
├── data/ # SQLite databases, sessions, models
└── build_releases.sh # Packaging script