This release lets your website read article bodies as markdown, HTML or structured blocks, and fixes text alignment in the editor. ## New **Article body formats** - Read an article body as markdown, HTML or a typed block array with the `format` query parameter, so a headless frontend can render it with markdown-it, comark or its own components. - Keep text alignment in every format: markdown wraps centered, right-aligned and justified blocks in a `div` with an inline style, and the block array carries an `align` field. - Keep plain text plain: text that merely looks like markdown, such as `# not a heading` or `- not a list`, is escaped in the markdown output. - See the Integration page snippets and [the article API reference](../api/articles.md) for the full contract. ## Improvements and fixes - Fix the text alignment buttons in the article editor, which were disabled and showed a blocked cursor. Paragraphs and headings can be aligned left, center, right or justified again, and unaligned text stays free of inline styles. - The web interface requests HTML explicitly when it loads, saves, publishes, unpublishes or creates an article, so the editor and the image counts behave exactly as before. ## API - Changed: `GET /v1/article/`, `GET /v1/article/{id}`, `POST /v1/article/`, `PATCH /v1/article/{id}`, `PATCH /v1/article/{id}/publish` and `PATCH /v1/article/{id}/unpublish` now return `body` as markdown by default. Pass `?format=html` to keep the previous HTML body. - Every article object now includes `body_format` (`markdown`, `html` or `json`), which names the format of `body`. - `?format=json` on the same routes returns `body` as a JSON array of typed blocks instead of a string. - An unsupported `format` answers `400` before anything is read or written. - Storage and the request bodies of `POST` and `PATCH` stay HTML. ## Under the hood - Add the article body renderer port in the domain, with a markdown and JSON block adapter, and tests for every supported element. - Update `golang.org/x/crypto` to v0.57.0 and add `golang.org/x/net` as a direct dependency for HTML parsing. - Add `@tiptap/extension-text-align` to the web interface. ## Upgrading - Replace the binary. No database migration or new environment variable is required. - Clients that read an article `body` as HTML must add `?format=html` to their article requests, because the default is now markdown. - A markdown renderer needs raw HTML enabled for text alignment to show, for example `html: true` in markdown-it.