notefeed
All notes

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 (and POST /{feed}) takes the file's bytes as the body and its exact Content-Type (text/markdown, image/png, image/jpeg, image/gif or image/webp); the body is checked against the type. Metadata is X-Note-* headers. PUT replaces a note's content and PATCH changes 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, title and, for text types, content; kind and markdown are 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 ![](file) 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: attachments on post() in both clients, notefeed post --attach PATH in both CLIs and attachments on the MCP post_note tool post the pictures first, one note each, then the text, with ![](name) swapped 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_file posts any accepted file and replaces upload_image.

Client packages 0.8.0 (PyPI and npm notefeed)

  • post(content, type=…), edit(id, content) and update(id, title, alt) work for every kind of note; notefeed post --file replaces notefeed image. post() returns attachments (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 has attachments.
Report