Memos
Configuration

Environment Variables

Reference for the most important `MEMOS_*` runtime settings.

Memos maps runtime flags to environment variables with the MEMOS_ prefix. In production, environment variables are usually the cleanest way to keep deployment config explicit and repeatable.

Reference

All flags and their corresponding environment variables:

FlagEnvironment variableDefaultPurpose
--portMEMOS_PORT8081HTTP listen port
--addrMEMOS_ADDR``Bind address (empty = all interfaces)
--unix-sockMEMOS_UNIX_SOCK``Unix socket path
--dataMEMOS_DATAautoData directory
--driverMEMOS_DRIVERsqliteDatabase backend (sqlite, mysql, postgres)
--dsnMEMOS_DSNautoDatabase connection string
--instance-urlMEMOS_INSTANCE_URL``Public instance URL
--demoMEMOS_DEMOfalseDemo mode
--allow-private-webhooksMEMOS_ALLOW_PRIVATE_WEBHOOKSfalseAllow webhook URLs that resolve to private or reserved IP ranges
--log-levelMEMOS_LOG_LEVELinfoLog verbosity (debug, info, warn, error)

Data directory defaults

MEMOS_DATA resolves automatically when not set:

  • Windows: %ProgramData%\memos
  • Docker: /var/opt/memos (when writable)
  • Linux / macOS: current directory (.)

DSN defaults

When MEMOS_DRIVER=sqlite and MEMOS_DSN is empty, the database file defaults to {MEMOS_DATA}/memos_prod.db. For MySQL and PostgreSQL, MEMOS_DSN is required.

Priority order

  1. Command-line flags (highest)
  2. Environment variables
  3. Default values (lowest)

An explicit flag always wins over the environment variable for the same setting.

Practical guidance

  • set MEMOS_INSTANCE_URL whenever the app sits behind a proxy
  • prefer explicit MEMOS_DRIVER and MEMOS_DSN when you are not using SQLite defaults
  • leave MEMOS_ALLOW_PRIVATE_WEBHOOKS disabled unless your webhook targets intentionally live on a trusted private network
  • keep secrets such as database credentials outside committed compose files
  • treat these values as part of deployment config and back them up accordingly

Common patterns

SQLite with explicit data directory:

export MEMOS_DRIVER=sqlite
export MEMOS_DATA=/var/opt/memos
./memos

External PostgreSQL:

export MEMOS_DRIVER=postgres
export MEMOS_DSN="postgres://user:password@db:5432/memos?sslmode=disable"
export MEMOS_INSTANCE_URL=https://memos.example.com
./memos

Unix socket with Nginx (useful for local reverse proxy):

export MEMOS_UNIX_SOCK=/var/run/memos.sock
export MEMOS_DATA=/var/lib/memos
export MEMOS_INSTANCE_URL=https://memos.example.com
./memos

Nginx upstream for the socket:

upstream memos {
    server unix:/var/run/memos.sock;
}

On this page