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
Steven 65a19df4be fix(backend): correct generic type parameter in withHeaderCarrier helper
Problem:
The withHeaderCarrier generic function had a type mismatch that caused compilation
errors in CI. The function used `T proto.Message` constraint, but Connect's Response
type expects the non-pointer message type while protobuf methods return pointers.

Error from CI:
  type T of resp does not match *T (cannot infer T)

This occurred because:
- Connect methods expect: *connect.Response[v1pb.CreateSessionResponse]
- Service methods return: (*v1pb.CreateSessionResponse, error)
- Old signature: fn func(context.Context) (T, error) with T proto.Message
- This caused T to be inferred as *v1pb.CreateSessionResponse
- Leading to return type: *connect.Response[*v1pb.CreateSessionResponse] (wrong!)

Solution:
Changed generic signature to explicitly handle the pointer/non-pointer distinction:
- New signature: fn func(context.Context) (*T, error) with T any
- T is now the non-pointer type (e.g., v1pb.CreateSessionResponse)
- fn returns *T (e.g., *v1pb.CreateSessionResponse)
- Return type is correctly: *connect.Response[T] (e.g., *connect.Response[v1pb.CreateSessionResponse])

Also removed unused "google.golang.org/protobuf/proto" import and improved documentation
to clarify the T vs *T distinction.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2 weeks ago
.github chore: remove goreleaser 4 weeks ago
cmd/memos refactor: remove unused constants 2 months ago
internal chore: bump version 4 weeks ago
plugin chore: fix some typos in comments (#5332) 2 weeks ago
proto refactor: migrate to connect-rpc (#5338) 2 weeks ago
scripts refactor: rename workspace to instance throughout codebase 2 months ago
server fix(backend): correct generic type parameter in withHeaderCarrier helper 2 weeks ago
store refactor(store): remove deprecated migration_history table and backward compatibility code 3 weeks ago
web fix(web): convert visibility enum values to string names in filter expressions 2 weeks ago
.dockerignore chore: update resource dialog style (#982) 3 years ago
.gitignore refactor: remove unused constants 2 months ago
.golangci.yaml chore: update golangci config 9 months ago
CLAUDE.md docs: update Memos Codebase Guide for clarity and structure 3 weeks ago
CODEOWNERS chore: update readme (#1047) 3 years ago
LICENSE chore: update LICENSE (#4394) 11 months ago
README.md chore: add Vercel OSS Program badge 1 month ago
SECURITY.md chore(docs): update security policy to prevent public vulnerability disclosure 1 month ago
go.mod refactor: migrate to connect-rpc (#5338) 2 weeks ago
go.sum refactor: migrate to connect-rpc (#5338) 2 weeks ago

README.md

Memos

Memos

An open-source, self-hosted note-taking service. Your thoughts, your data, your control — no tracking, no ads, no subscription fees.

Home Live Demo Docs Discord Docker Pulls

Memos Demo Screenshot

Warp — The AI-powered terminal built for speed and collaboration

Warp - The AI-powered terminal built for speed and collaboration

LambdaTest - Cross-browser testing cloud

LambdaTest - Cross-browser testing cloud

Overview

Memos is a privacy-first, self-hosted knowledge base that works seamlessly for personal notes, team wikis, and knowledge management. Built with Go and React, it offers lightning-fast performance without compromising on features or usability.

Why choose Memos over cloud services?

Feature Memos Cloud Services
Privacy Self-hosted, zero telemetry Your data on their servers
Cost Free forever, MIT license Subscription fees
Performance Instant load, no latency ⚠️ Depends on internet
Ownership Full control & export Vendor lock-in
API Access Full REST + gRPC APIs ⚠️ Limited or paid
Customization Open source, forkable Closed ecosystem

Features

  • 🔒 Privacy-First Architecture

    • Self-hosted on your infrastructure with zero telemetry
    • Complete data ownership and export capabilities
    • No tracking, no ads, no vendor lock-in
  • 📝 Markdown Native

    • Full markdown support
    • Plain text storage — take your data anywhere
  • Blazing Fast

    • Built with Go backend and React frontend
    • Optimized for performance at any scale
  • 🐳 Simple Deployment

    • One-line Docker installation
    • Supports SQLite, MySQL, and PostgreSQL
  • 🔗 Developer-Friendly

    • Full REST and gRPC APIs
    • Easy integration with existing workflows
  • 🎨 Beautiful Interface

    • Clean, minimal design and dark mode support
    • Mobile-responsive layout

Quick Start

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

Open http://localhost:5230 and start writing!

Try the Live Demo

Don't want to install yet? Try our live demo first!

Other Installation Methods

  • Docker Compose - Recommended for production deployments
  • Pre-built Binaries - Available for Linux, macOS, and Windows
  • Kubernetes - Helm charts and manifests available
  • Build from Source - For development and customization

See our installation guide for detailed instructions.

Contributing

We welcome contributions of all kinds! Whether you're fixing bugs, adding features, improving documentation, or helping with translations — every contribution matters.

Ways to contribute:

Sponsors

Love Memos? Sponsor us on GitHub to help keep the project growing!

Star History

Star History Chart

License

Memos is open-source software licensed under the MIT License.


WebsiteDocumentationDemoDiscordX/Twitter

Vercel OSS Program