Oct 6
notefeed 0.9.0
Released 2026-10-06 · on GitHub
v0.9.0: a note and its pictures in one request, storage in a database, images in an object store
A note with its pictures is one request
- Multipart posts:
POST /api/v1/feeds/{feed}/notes(andPOST /{feed}) andPUTon a note also acceptmultipart/form-data: an optionaltextpart, up to 10fileparts andalt.<filename>fields. The server checks everything before the first write and removes what it stored if a later write fails. A raw single-file request is unchanged. - Every caller uses it: MCP
post_note, both clients (attachments), both CLIs (--attach) and the web compose box and editor. - Stricter text rules: names, titles, alt texts, tags and feed settings are one line with no control or text-direction override characters. A text sent with pictures is read in a worker with a time limit (
NOTEFEED_PARSE_TIMEOUT_MS). - Changed answers: a malformed multipart body is
400; a title or alt text with a forbidden character is400; the MCP request body limit is 16 MiB.
Storage backends (new)
NOTEFEED_STORAGEchooses where feeds and notes are kept:fs(default, unchanged),sqliteorpostgres. The database backends needNOTEFEED_SECRET; with PostgreSQL several containers can share the data. A new instance on a database starts empty: moving between backends is not built.NOTEFEED_IMAGESchooses where a database backend keeps image bytes:db(default),fs(a folder) ors3(any S3-compatible object store; there is no default endpoint). Going fromdbtofsors3needs no move.- Cleaning up the image store: with
NOTEFEED_OPERATOR_TOKENset,GET /api/operator/images/unreferencedreports the image files or objects that no note refers to, andDELETEremoves them. - Reading costs less on the file backend: a feed's folder is listed once per request, and a stray folder or link in it no longer breaks the listing.
Operations
- Metrics:
GET /metricsin the Prometheus format, off unlessNOTEFEED_METRICS=1, with an optionalNOTEFEED_METRICS_TOKEN. The docs include a Prometheus and Grafana setup. - Docs are restructured into sections with short pages.
- Web UI fix: adding an image no longer takes the focus back from the title or tags field.
Client packages 0.9.0 (PyPI and npm
notefeed)post()sends the text and itsattachmentsin one request; content may be empty for pictures only. The clients no longer check file names themselves: the server decides.- Upgrade: a 0.9.0 client needs a 0.9.0 server (an older server answers
415to multipart).post()withaltornametogether withattachmentsis aConfigError.
The container image is moving. This is the last release published as
ghcr.io/marceltov/notefeed. Later releases are published asghcr.io/notefeed/notefeed; change the image line in your compose file when you next upgrade.- Multipart posts: