Skip to main content
Memos provides pre-built binaries for multiple platforms. This is the simplest installation method if you prefer not to use Docker.

Supported Platforms

Pre-built binaries are available for:
  • Linux: amd64, arm64, armv7
  • macOS: amd64 (Intel), arm64 (Apple Silicon)
  • Windows: amd64
Binaries are built using the workflow in .github/workflows/build-binaries.yml:106-208.

Download

Download the latest release from GitHub:
https://github.com/usememos/memos/releases/latest
Binary naming format: memos_{version}_{os}_{arch}.tar.gz (or .zip for Windows) Examples:
  • memos_0.28.1_linux_amd64.tar.gz
  • memos_0.28.1_darwin_arm64.tar.gz
  • memos_0.28.1_windows_amd64.zip

Installation

# Download for Linux amd64
wget https://github.com/usememos/memos/releases/download/v0.28.1/memos_0.28.1_linux_amd64.tar.gz

# Extract
tar -xzf memos_0.28.1_linux_amd64.tar.gz

# Make executable
chmod +x memos

# Move to system path (optional)
sudo mv memos /usr/local/bin/

Running Memos

Quick Start

Run Memos with default settings:
./memos
Memos will:
  • Start on port 8081
  • Store data in ~/.memos
  • Use SQLite database
  • Print access URL

With Custom Options

Use command-line flags from cmd/memos/main.go:95-107:
./memos --port 5230 --data /path/to/data

Available Flags

FlagDefaultDescription
--port8081HTTP server port
--addrBind address (empty = all interfaces)
--data~/.memosData directory path
--driversqliteDatabase driver: sqlite, mysql, postgres
--dsnDatabase connection string
--instance-urlPublic instance URL
--demofalseEnable demo mode
--unix-sockUnix socket path (overrides addr/port)

Using Environment Variables

Alternatively, use environment variables with MEMOS_ prefix:
export MEMOS_PORT=5230
export MEMOS_DATA=/var/memos
./memos

External Database Configuration

MySQL

./memos \
  --driver mysql \
  --dsn "user:password@tcp(localhost:3306)/memos"

PostgreSQL

./memos \
  --driver postgres \
  --dsn "postgres://user:password@localhost:5432/memos?sslmode=disable"

Running as a System Service

Linux (systemd)

1

Create service file

Create /etc/systemd/system/memos.service:
[Unit]
Description=Memos
After=network.target

[Service]
Type=simple
User=memos
WorkingDirectory=/opt/memos
ExecStart=/opt/memos/memos --port 5230 --data /var/lib/memos
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target
2

Create user and directories

sudo useradd -r -s /bin/false memos
sudo mkdir -p /opt/memos /var/lib/memos
sudo cp memos /opt/memos/
sudo chown -R memos:memos /opt/memos /var/lib/memos
3

Enable and start service

sudo systemctl daemon-reload
sudo systemctl enable memos
sudo systemctl start memos
4

Check status

sudo systemctl status memos
sudo journalctl -u memos -f

macOS (launchd)

1

Create launch agent

Create ~/Library/LaunchAgents/com.usememos.memos.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.usememos.memos</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/memos</string>
        <string>--port</string>
        <string>5230</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>StandardOutPath</key>
    <string>/tmp/memos.log</string>
    <key>StandardErrorPath</key>
    <string>/tmp/memos.err</string>
</dict>
</plist>
2

Load and start service

launchctl load ~/Library/LaunchAgents/com.usememos.memos.plist
launchctl start com.usememos.memos

Windows (NSSM)

Use NSSM to run Memos as a Windows service:
1

Download NSSM

2

Install service

nssm install Memos "C:\memos\memos.exe"
nssm set Memos AppParameters "--port 5230 --data C:\memos-data"
nssm set Memos AppDirectory "C:\memos"
3

Start service

nssm start Memos

Updating Memos

1

Download new binary

Download the latest release from GitHub.
2

Stop Memos

# If running in terminal: Ctrl+C
# If running as service:
sudo systemctl stop memos  # Linux
launchctl stop com.usememos.memos  # macOS
3

Replace binary

# Backup old binary
mv /usr/local/bin/memos /usr/local/bin/memos.backup

# Install new binary
tar -xzf memos_0.28.2_linux_amd64.tar.gz
sudo mv memos /usr/local/bin/
4

Start Memos

sudo systemctl start memos  # Linux
launchctl start com.usememos.memos  # macOS
Always backup your data directory before updating, especially when upgrading major versions.

Binary Details

Binaries are built with the following settings (.github/workflows/build-binaries.yml:147-168):
  • Go version: 1.25.7
  • CGO: Disabled (CGO_ENABLED=0)
  • Build flags:
    • -trimpath - Remove file system paths
    • -ldflags="-s -w -extldflags '-static'" - Strip symbols, static linking
    • -tags netgo,osusergo - Pure Go networking and user resolution
This produces fully static binaries with no external dependencies.

Next Steps

Build docs developers (and LLMs) love