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.
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.
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...
- 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
services:
memos:
image: chriscurrycc/memos:latest
container_name: memos
restart: unless-stopped
ports:
- 5230:5230
volumes:
- ~/.memos/:/var/opt/memosdocker compose up -dThen visit http://localhost:5230 in your browser.
docker run -d \
--init \
--name memos \
--restart unless-stopped \
--publish 5230:5230 \
--volume ~/.memos/:/var/opt/memos \
chriscurrycc/memos:latestSee Development Guide for detailed instructions.
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| 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 |
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 AMOr run a one-time update:
docker run --rm \
--volume /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--run-once \
memosdocker 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:latestIf 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 runmysqldump/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.
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 instore/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.
Use the MCP server to connect AI assistants (Claude Code, Claude Desktop, Cursor, etc.) to your Memos instance:
npx @chriscurrycc/memos-mcp17 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 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+
- Development Guide - Set up local development environment
- Development on Windows - Windows-specific setup
- API Documentation - REST API reference
- How I develop this project - Development blog
