[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"journal-post-summercms-0-2-3":3},{"author":4,"categories":8,"content":9,"content_html":10,"created_at":11,"excerpt":12,"featured_image_url":9,"featured_images":13,"id":14,"is_pinned":15,"metadata":9,"next_post":16,"previous_post":9,"published":20,"published_at":21,"reading_time":22,"related_posts":23,"slug":24,"sources":9,"tags":25,"title":26,"translations":9,"updated_at":27},{"first_name":5,"id":6,"last_name":5,"login":7},"",1,"jakubzych@gmail.com",[],null,"\u003Ch2>Highlights\u003C\u002Fh2>\n\u003Cp>SummerCMS 0.2.3 adds \u003Ccode>breakwater\u003C\u002Fcode>, a Markdown renderer and HTML sanitizer for content your site's users submit. It is the release the new community plugins build on: forum, friends and groups, chat bots, web push notifications and video calls now run on SummerCMS and require 0.2.3.\u003C\u002Fp>\n\u003Ch2>Added\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>\u003Ccode>breakwater\u003C\u002Fcode> module.\u003C\u002Fstrong> \u003Ccode>breakwater.Render\u003C\u002Fcode> turns GitHub Flavored Markdown into HTML, and \u003Ccode>breakwater.Purify\u003C\u002Fcode> cleans HTML that arrives as HTML. Both apply one fixed allow-list: basic text formatting, headings, lists, quotes, code, tables and links. Images, scripts, iframes, forms, event-handler attributes, \u003Ccode>class\u003C\u002Fcode> and \u003Ccode>id\u003C\u002Fcode> are removed.\u003C\u002Fli>\n\u003Cli>Links may use \u003Ccode>http\u003C\u002Fcode>, \u003Ccode>https\u003C\u002Fcode> and \u003Ccode>mailto\u003C\u002Fcode> only. Every link gets \u003Ccode>rel=\"nofollow\"\u003C\u002Fcode>, and external links also open in a new tab with \u003Ccode>rel=\"noopener\"\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Raw HTML inside Markdown is stripped, not shown as text, and the engine is safe for concurrent use. Use it for forum posts, comments and anything else that does not come from an administrator; admin rich text keeps its own policy.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Changed\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>The \"Extending plugins\" guide now explains optional dependencies in Go terms. A plugin that integrates with another one only when it is installed still lists that plugin's module in its \u003Ccode>go.mod\u003C\u002Fcode>, because it imports the interface it looks up. Only \u003Ccode>Requires()\u003C\u002Fcode> leaves it out, so the plugin is optional at activation, not at compile time.\u003C\u002Fli>\n\u003C\u002Ful>\n","2026-10-18T17:29:44+00:00","A Markdown renderer and HTML sanitizer for user content, the base for the new community plugins.",[],31,false,{"id":17,"slug":18,"title":19},30,"summercms-0-2-2","SummerCMS 0.2.2",true,"2026-10-18T17:28:38+00:00",2,[],"summercms-0-2-3",[],"SummerCMS 0.2.3","2026-10-18T17:58:45+00:00"]