A lightweight, self-hosted memo hub. Open Source and Free forever.
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Go to file
Nic Luckie 30795d1d9c feat(web): introduce accessible ConfirmDialog and migrate confirmations; add Markdown-safe descriptions
Why
- window.confirm is not supported on Brave Mobile for iOS, which blocked destructive actions like deleting memos. Replacing it with an accessible, app-native dialog restores mobile functionality and improves UX.

What changed
- New ConfirmDialog component
  - Replaces window.confirm usage across the app.
  - Props: open/onOpenChange, title, description or descriptionMarkdown, confirm/cancel labels, onConfirm, confirmVariant.
  - Prevents double-submit and accidental dismiss while confirming (loading state).
- Markdown support for dialog descriptions
  - descriptionMarkdown renders via marked and is sanitized with DOMPurify before injection.
  - Keeps translations readable (Markdown) and safe (sanitized HTML).
- Member management flows
  - Updated archive/delete dialogs to use ConfirmDialog.
  - Added toast notifications for archive, restore, and delete actions.
- i18n: added/updated relevant translation keys (en).

Accessibility and mobile
- Dialog buttons are touch-friendly.
- Escape and outside-click behavior matches expectations.

Manual Tests - Verified in Brave desktop (v1.82.166) and Brave for iOS (v1.81 (134))
- Memos:
  - Archive → confirm archival and shows success toast.
  - Restore (only when archived) → confirm restoration and shows success toast.
  - Delete → destructive dialog → confirm deletion and shows success toast.
- Shortcuts: create → menu → Delete → dialog appears; cancel keeps; confirm deletes and list refreshes.
- Access tokens: Settings → Access Tokens → Delete → dialog title shows masked token; confirm deletes.
- Members: Settings → Members → non-current user:
  - Archive → warning dialog → confirm archives.
  - Delete (only when archived) → destructive dialog → confirm deletes.
- Sessions: Settings → Sessions → Revoke non-current session → dialog appears; confirm revokes; current session remains disabled.
- Webhooks: Settings → Webhooks → Delete → dialog appears; confirm deletes and list refreshes.
- Mobile/accessibility: focus trap, inert background, tappable buttons, Escape/outside-click behavior verified.

Notes / follow-ups
- Deleting a member currently removes the account but does not cascade-delete the member’s content. Not sure if this is intended or not, so I left the warning description more general for now.
3 weeks ago
.github chore: tweak development instructions 4 weeks ago
bin/memos fix: use Fprint instead of Fprintf for development mode message 1 month ago
internal feat: update gomark dependency and refactor markdown parsing logic 4 weeks ago
plugin feat: implement user-specific SQL converter for filtering in user service 1 month ago
proto chore: fix linter 1 month ago
scripts feat: update gomark dependency and refactor markdown parsing logic 4 weeks ago
server feat: update gomark dependency and refactor markdown parsing logic 4 weeks ago
store feat: implement user-specific SQL converter for filtering in user service 1 month ago
web feat(web): introduce accessible ConfirmDialog and migrate confirmations; add Markdown-safe descriptions 3 weeks ago
.dockerignore
.gitignore chore(dev): update build guides 9 months ago
.golangci.yaml chore: update golangci config 6 months ago
.goreleaser.yaml chore: remove cgo 8 months ago
AGENTS.md chore: tweak development instructions 4 weeks ago
CODEOWNERS
LICENSE chore: update LICENSE (#4394) 8 months ago
README.md chore: update readme with star history section 2 months ago
SECURITY.md chore: update security 2 years ago
go.mod feat: update gomark dependency and refactor markdown parsing logic 4 weeks ago
go.sum feat: update gomark dependency and refactor markdown parsing logic 4 weeks ago

README.md

Memos

Memos

A modern, open-source, self-hosted knowledge management and note-taking platform designed for privacy-conscious users and organizations. Memos provides a lightweight yet powerful solution for capturing, organizing, and sharing thoughts with comprehensive Markdown support and cross-platform accessibility.

Home Page Documentation Live Demo Blog

Docker Pulls Docker Image Size Discord

Memos Application Screenshot

Table of Contents

Overview

Memos is a lightweight, self-hosted alternative to cloud-based note-taking services. Built with privacy and performance in mind, it offers a comprehensive platform for personal knowledge management without compromising data ownership or security.

Key Features

Privacy & Security

  • Complete Data Ownership — All data stored locally in your chosen database
  • Self-Hosted Architecture — Full control over infrastructure and access policies
  • No External Dependencies — Zero third-party services or cloud connections required

Content Creation

  • Instant Save — Streamlined plain text input with automatic persistence
  • Rich Markdown Support — Full Markdown rendering with syntax highlighting
  • Media Integration — Native support for images, links, and embedded content

Performance & Technology

  • High-Performance Backend — Built with Go for optimal resource utilization
  • Modern React Frontend — Responsive, intuitive user interface
  • Lightweight Deployment — Minimal system requirements, maximum efficiency
  • Cross-Platform — Linux, macOS, Windows, and containerized environments

Customization

  • Configurable Interface — Custom branding, themes, and UI elements
  • API-First Design — RESTful API for seamless third-party integrations
  • Multi-Database Support — SQLite, PostgreSQL, and MySQL compatibility

Cost-Effective

  • Open Source (MIT) — Full source code availability with permissive licensing
  • Zero Subscription Fees — No usage limits, premium tiers, or hidden costs
  • Community-Driven — Transparent development with active community support

Quick Start

Get Memos running in under 1 minutes with Docker:

docker run -d \
  --name memos \
  --restart unless-stopped \
  -p 5230:5230 \
  -v ~/.memos:/var/opt/memos \
  neosmemo/memos:stable

Access Memos at http://localhost:5230 and complete the initial setup.

Alternative methods: For Docker Compose, binary installation, or building from source, see our Installation Guide.

Pro Tip: The data directory stores all your notes, uploads, and settings. Include it in your backup strategy!

Sponsors

Memos is made possible by the generous support of our sponsors. Their contributions help ensure the project's continued development, maintenance, and growth.

yourselfhosted fixermark alik-agaev

Every contribution, no matter the size, makes a difference!

Sponsor Memos

Contributing

Memos welcomes contributions from developers, designers, and users worldwide. We value quality, innovation, and community feedback.

Ways to Contribute:

  • Code contributions (bug fixes, features, performance improvements)
  • Documentation and user guides
  • Testing and bug reporting
  • Localization and translation
  • Community support

Get Started: Contributing GuideCode of Conduct

Star History

Star History Chart