Add UploadAttachment, a unary RPC that accepts a file in bounded chunks and streams it to a temp file instead of holding the whole blob in one request body and in memory. A call carrying a spec starts an upload and returns an opaque upload_id; later calls carry that id with write_offset, data, and finish_write, following the Cloud Storage WriteObject shape. Retrying the last chunk after a lost response is idempotent, uploads are bound to their owner, and they expire after 30 minutes of inactivity. CreateAttachment and the chunked finalize now share one processing pipeline for motion-photo detection, EXIF stripping, and storage. The motion-photo detector works over an io.ReaderAt so large JPEGs are never loaded whole, and the request body cap is a single per-procedure lookup. The web editor uploads through the new RPC in 2 MiB chunks with bounded concurrency under the server's per-user limit. |
||
|---|---|---|
| .github | ||
| cmd/memos | ||
| docs | ||
| internal | ||
| proto | ||
| scripts | ||
| server | ||
| store | ||
| web | ||
| .dockerignore | ||
| .gitignore | ||
| .golangci.yaml | ||
| .release-please-manifest.json | ||
| AGENTS.md | ||
| CHANGELOG.md | ||
| CODEOWNERS | ||
| CONTEXT.md | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| README.md | ||
| release-please-config.json | ||
| SECURITY.md | ||
✨ Featured sponsor: CodeRabbit — Industry-leading AI code reviews.
Memos
Fast enough for every thought. Private enough for all of them.
Memos is an open-source, self-hosted home for short-form thinking. Daily notes, links, work logs, and snippets flow into a chronological Markdown timeline—on infrastructure you control, without the overhead of an all-in-one workspace.
Run with Docker · Try the live demo · Read the docs
Why Memos?
- Capture quickly — Write in Markdown, attach media, and save without choosing a title, folder, or template.
- Organize lightly — Revisit notes through the timeline, search, tags, and pins.
- Share selectively — Keep memos private or publish only what you choose.
- Keep control — Self-host Memos with zero telemetry and MIT-licensed source.
Quick Start
Run Memos with Docker:
docker run -d \
--name memos \
-p 5230:5230 \
-v ~/.memos:/var/opt/memos \
neosmemo/memos:stable
Other install options are in the deployment guide.
Web Clipper
Save pages, selections, and images from your browser straight into Memos as source-linked Markdown. Get the Memos Web Clipper for Chrome or Firefox.
Sponsors
Love Memos? Sponsor the project on GitHub.
Get Help
Read the docs, join Discord, or ask in GitHub Discussions. Found a bug or have an idea? Open an issue. To contribute, see the contributing guide.