
How to build Memo from source and create distributable packages.
CGO_ENABLED=1 go build -o memo .
The output is a single binary named memo (or memo.exe on Windows). This binary contains the Go backend server only — the Flutter frontend is a separate build step.
cd frontend
flutter build linux --release # Linux desktop
flutter build windows --release # Windows desktop
flutter build macos --release # macOS desktop
flutter build apk --release # Android companion app
flutter build ios --release # iOS companion app
The desktop app is distributed as a single package containing both the Go backend and the Flutter frontend. The release build script handles combining them.
package_linux.shThe Linux release is packaged via package_linux.sh:
./package_linux.sh
This produces a .tar.gz archive containing:
memo (backend binary)memo_frontend/ (Flutter Linux build output)vec0.so (sqlite-vec extension)config/config.yaml (default config)An AppImage format is planned for future releases to provide a single-click Linux distribution that bundles all dependencies.
Windows releases are built via GitHub Actions CI and produce a .zip archive:
memo.exe (backend binary)memo_frontend/ (Flutter Windows build output)vec0.dll (sqlite-vec extension)An NSIS-based .exe installer is the primary Windows distribution format:
Memo-Setup-v3.1.0.exe
| Format | Platform | Status |
|---|---|---|
.exe installer |
Windows | Shipped |
.tar.gz portable |
Linux | Shipped |
.AppImage |
Linux | Planned |
.deb |
Linux | Planned |
.dmg |
macOS | Shipped |
.apk |
Android | Shipped (companion app) |
.ipa |
iOS | Planned (companion app) |
./build_releases.sh
This script orchestrates full platform builds and produces all distribution archives. The script handles:
Update the version string in main.go and in the frontend's pubspec.yaml before building a release.