notefeed 0.8.0
Released 2026-10-03 · on GitHub
v0.8.0: a note is a file, pictures are notes, and a note can bring its pictures
A note is a file (breaking)
- One API for every type.
POST /api/v1/feeds/{feed}/notes(andPOST /{feed}) takes the file's bytes as the body and its exactContent-Type(text/markdown,image/png,image/jpeg,image/giforimage/webp); the body is checked against the type. Metadata isX-Note-*headers.PUTreplaces a note's content andPATCHchanges its title and alt text. The JSON and form post bodies are gone, so a script that relied on curl's default type needs-H "Content-Type: text/markdown". - Pictures are notes of their own, listed in the feed, shown on the note page and sent to RSS readers as enclosures. A note's JSON has
type,file,file_url,size,titleand, for text types,content;kindandmarkdownare gone. Every note can have a title. - Storage: content is kept as posted with its metadata in a sidecar file, and note ids carry a UUID v7 so notes of the same second keep their order.
- Feeds: a feed's read id can be chosen when it is created and changed later; files are served under it, and relative
links follow it, also in RSS. - Web UI: the compose box and the editor post and edit every note through this API (it needs JavaScript), and a tags field sits next to the Add image button.
Pictures with a note (new)
- Attachments:
attachmentsonpost()in both clients,notefeed post --attach PATHin both CLIs andattachmentson the MCPpost_notetool post the pictures first, one note each, then the text, withswapped for each file name (a picture the text never refers to is added at the end). Everything checkable is checked before the first request. If an upload fails, the error names the picture and lists those already posted; the text is not posted and nothing is rolled back. - MCP:
post_fileposts any accepted file and replacesupload_image.
Client packages 0.8.0 (PyPI and npm notefeed)
post(content, type=…),edit(id, content)andupdate(id, title, alt)work for every kind of note;notefeed post --filereplacesnotefeed image.post()returnsattachments(empty without any).- Upgrade: these clients speak the file API, so a 0.8.0 client needs a 0.8.0 server. Compare the exact result of
post()in tests: it now hasattachments.