Skip to content

chriscurrycc/memos

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3,415 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chris Curry's Memos

简体中文 | 繁體中文 | 日本語

Chris Curry's Memos

A lightweight, self-hosted memo hub for capturing and organizing your thoughts.

This is a customized fork of usememos/memos, forked from v0.23.0.

Demo

Try it live without installing anything: memo-demo.chriscurry.cc

Username Password
chriscurry memos

Shared demo instance — please don't store anything sensitive. Content may be reset periodically.

What's Different

See CHANGELOG.md for a detailed list of features and improvements compared to the original Memos.

Highlights:

  • Tag management with pinning and emoji support
  • Export memos as beautiful images
  • Pinned memos displayed in separate column/drawer
  • Code block collapse/expand
  • Improved calendar heatmap
  • URL-based filter persistence
  • And more...

Features

  • Privacy First - Self-hosted, your data stays with you
  • Markdown Support - Write with familiar markdown syntax, including task lists, code blocks, and more
  • Tag Organization - Organize memos with tags, pin important tags, add emoji icons
  • Timeline View - Browse your memos chronologically with activity heatmap
  • Multi-platform - Access from any device via web browser, responsive design for mobile
  • Lightweight - Minimal resource usage with SQLite as default database
  • RESTful API - Full API support for integration and automation
  • SSO Support - OAuth2 identity provider integration
  • Multi-language - i18n support for multiple languages

Quick Start

Docker Compose (Recommended)

services:
  memos:
    image: chriscurrycc/memos:latest
    container_name: memos
    restart: unless-stopped
    ports:
      - 5230:5230
    volumes:
      - ~/.memos/:/var/opt/memos
docker compose up -d

Then visit http://localhost:5230 in your browser.

Docker

docker run -d \
  --init \
  --name memos \
  --restart unless-stopped \
  --publish 5230:5230 \
  --volume ~/.memos/:/var/opt/memos \
  chriscurrycc/memos:latest

Build from Source

See Development Guide for detailed instructions.

Configuration

Memos can be configured via environment variables:

Variable Description Default
MEMOS_PORT Server port 5230
MEMOS_MODE Running mode (prod, dev, demo) prod
MEMOS_DRIVER Database driver (sqlite, mysql, postgres) sqlite
MEMOS_DSN Database connection string ~/.memos/memos_prod.db

Example with MySQL:

docker run -d \
  --name memos \
  --restart unless-stopped \
  --publish 5230:5230 \
  -e MEMOS_DRIVER=mysql \
  -e MEMOS_DSN="user:password@tcp(host:3306)/memos" \
  chriscurrycc/memos:latest

Update

Docker Image Tags

Tag Description Who should use
latest Updated on every release (including beta) Early adopters who want the newest features
stable Updated only on stable releases Users who prefer reliability over new features
vX.Y.Z Pinned to a specific version Users who want full control over updates

With Watchtower (Recommended)

Use Watchtower for automatic updates. Choose the image tag based on your preference:

# docker-compose.yml
services:
  memos:
    image: chriscurrycc/memos:latest  # or :stable for stable-only updates
    container_name: memos
    restart: unless-stopped
    ports:
      - 5230:5230
    volumes:
      - ~/.memos/:/var/opt/memos

  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TZ=Asia/Shanghai
    command: --schedule "0 0 3 * * *" memos  # Check daily at 3:00 AM

Or run a one-time update:

docker run --rm \
  --volume /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower \
  --run-once \
  memos

Without Watchtower

docker pull chriscurrycc/memos:latest  # or :stable
docker stop memos && docker rm memos
docker run -d \
  --init \
  --name memos \
  --restart unless-stopped \
  --publish 5230:5230 \
  --volume ~/.memos/:/var/opt/memos \
  chriscurrycc/memos:latest

Migration from usememos/memos

If you are migrating from the original usememos/memos project:

Compatibility:

  • From v0.23.0 ~ v0.23.1: Fully compatible
  • From v0.24.0 ~ v0.26.2: Compatible after running the migration repair script below

For detailed information about what changed at the database level and what the repair script does, see the Migration Guide.

WARNING: Back up your data BEFORE migrating. This step is NOT optional.

If the migration fails or produces unexpected results, having a backup is the ONLY way to recover your data. Stop the service first, then copy your data directory (default: ~/.memos/). For MySQL/PostgreSQL users, your database is on an external server, so you also need to run mysqldump/pg_dump. See the Migration Guide for detailed backup instructions.

Migration Repair:

If migrating from upstream v0.24.0 ~ v0.26.2, run the migration repair script before starting this fork's service, to fix database schema differences and create missing tables. The script requires sqlite3, mysql, or psql CLI tools depending on your database driver:

# SQLite (default path: ~/.memos/memos_prod.db)
curl -sL https://raw.githubusercontent.com/chriscurrycc/memos/main/scripts/migration-repair.sh | bash -s -- --driver sqlite --dsn ~/.memos/memos_prod.db

# MySQL
curl -sL https://raw.githubusercontent.com/chriscurrycc/memos/main/scripts/migration-repair.sh | bash -s -- --driver mysql --dsn "user:password@tcp(host:3306)/memos"

# PostgreSQL
curl -sL https://raw.githubusercontent.com/chriscurrycc/memos/main/scripts/migration-repair.sh | bash -s -- --driver postgres --dsn "postgresql://user:password@host:5432/memos"

The script is idempotent and safe to run multiple times.

Versioning

This project uses two independent version numbers:

  • Application version (e.g., v0.30.0) — the release version, incremented when new features or improvements are added. This is what you see in Docker tags and GitHub releases.
  • Database schema version (e.g., 0.25.2) — the database migration version, only incremented when the database structure changes. Defined in store/migration/SCHEMA_VERSION.

The application version may increase without any database schema change. For example, multiple feature releases can share the same schema version if they only involve frontend or API changes.

Note: You don't need to worry about the database schema version in daily use. It only matters when migrating from the original usememos/memos. The original project ties its database version to the application version — even if the database hasn't changed, the version number still increases with each minor release (e.g., v0.26 → v0.27). So the compatibility range "v0.24.0 ~ v0.26.2" below refers to the original project's application version, not actual database changes.

Ecosystem

MCP Server

Use the MCP server to connect AI assistants (Claude Code, Claude Desktop, Cursor, etc.) to your Memos instance:

npx @chriscurrycc/memos-mcp

17 tools for memo CRUD & search, tags, resources, relations, and review — plus 6 workflow prompts (digest, review, relation graph, etc.). See the memos-mcp repo for setup instructions.

Pixmo

Pixmo is a photo wall that connects to your Memos server — turn your memos into a browsable gallery with masonry layout, timeline navigation, EXIF display, and tag cloud.

  • Demo: ccmemos.pixmo.cc (connected to this fork)
  • Supports both this fork and official Memos v0.26.x+

Documentation

About

A customized fork of Memos, tuned to my taste.

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Contributors

Languages

  • TypeScript 48.8%
  • Go 48.3%
  • Shell 2.2%
  • Less 0.3%
  • JavaScript 0.2%
  • Dockerfile 0.1%
  • Other 0.1%