Releases: veeso/blogatto
blogatto 6.0.0
6.0.0
Released on 2026-05-07
⚠ Breaking Changes
- rename
FeedConfigtoRssFeedConfigand split into rss submoduleblogatto/config/feed'sFeedConfig,FeedItem, and the
related builder functions have moved toblogatto/config/feed/rssas
RssFeedConfigandRssFeedItem.Config.feedsis nowConfig.rss_feeds,
andconfig.feed()is nowconfig.rss_feed().FeedMetadatastays in
blogatto/config/feed. This makes the existing API explicit about RSS and
leaves room for additional feed formats (e.g. Atom, #44) without overloading
the genericfeednamespace. - rename
MarkdownConfigtoPostConfigand split builderblogatto/config/markdownmodule renamed to
blogatto/config/post;MarkdownConfigrenamed toPostConfig;
Config.markdown_configfield renamed topost_config;
config.markdown()setter renamed toconfig.post();
markdown.markdown_path()renamed topost.path().Components,
Options, andAlignmentmove with the module. Component setter names
unchanged; only the module qualifier changes.
Added
- support Atom 1.0 feeds alongside RSS
Adds AtomFeed configuration and internal builder for generating
Atom 1.0 feeds via webls. Multiple Atom feeds can be configured
throughconfig.atom_feed()with optional filter/serialize hooks
mirroring the RSS API. Updates docs, README, and the simple_blog
example to demonstrate atom feed generation.- add djot support alongside markdown
Add jot-backed renderer for.djand.djotpost sources, sharing the
sameComponents, frontmatter, andPost(msg)pipeline as markdown.
Mixed-format blogs are supported; each post directory picks its own
extension.Markdown
Optionsand Smalto syntax highlighting remain markdown-only.
Djot-only inline constructs (span, ins, math, symbols) fall back to raw
Lustre elements with attributes preserved.Renames
docs/markdown-components.mdtodocs/post-components.mdto
reflect that components apply to both formats.
CI
- bump gleam 1.16.0
Changed
- 💥 rename FeedConfig to RssFeedConfig and split into rss submodule- 💥 rename
MarkdownConfigtoPostConfigand split builderRenames
blogatto/config/markdowntoblogatto/config/postto reflect
that it configures post discovery and rendering rather than the markdown
format specifically. Builder is reshaped:internal/builder/blog.gleam
becomesinternal/builder/post.gleam, and markdown-only rendering is
extracted tointernal/builder/post/markdown.gleamso other source
formats (e.g. djot) can be added as sibling submodules.
Documentation
- README and getting started provide command for latest version
Miscellaneous
- add githook to run
gleam format
blogatto 5.1.1
5.1.1
Released on 2026-03-25
Fixed
- use tzcalendar.from_calendar for IANA timezone resolution
Replace the broken resolve-to-offset approach that could produce
incorrect results around DST transitions. The new implementation
uses tzcalendar.from_calendar which properly handles ambiguous
and invalid local times.
blogatto 5.1.0
5.1.0
Released on 2026-03-25
Added
- support timezone in frontmatter date field
Allow specifying a timezone in the frontmatter date field as either a
UTC offset (+02:00) or an IANA timezone name (Europe/Helsinki).
Dates without a timezone are still interpreted as UTC.The timezone database from the zones package is cached via
persistent_term for efficient repeated lookups during builds.
blogatto 5.0.2
5.0.2
Released on 2026-03-20
Fixed
- RSS pubDate is now correctly being serialized with RFC882
webls was serializing with RFC3339. I've created this PR on webls versecafe/webls#9 to fix this behaviour. This fix on blogatto just bumps webls from 1.6.1 to 1.6.2
blogatto 5.0.1
5.0.1
Released on 2026-03-19
CI
- gleam 1.15.2
Fixed
- move HTML escaping from post parsing to RSS feed generation
Escaping at parse time caused double-escaping in HTML output (Lustre
already escapes via element.text) and forced users to use
unsafe_raw_html for titles. Now escaping is applied only when
constructing FeedMetadata for RSS, keeping Post fields raw.
blogatto 5.0.0
5.0.0
Released on 2026-03-18
Added
- add before_build and after_build hooks to dev server
Add optional hooks that run around each rebuild cycle in the dev server.
Hooks return Result(Nil, String) so they can abort the rebuild with a
descriptive error message (e.g. a failing Tailwind compilation).Execution order: before_build → build command → after_build → SSE reload.
A failing before_build aborts the build entirely; a failing after_build
prevents the browser reload. Both error paths log the reason and keep
the server running.Internal changes:
- Introduce RebuildStateConfig public type to bundle build_command and
hooks into rebuild_actor.new() - Refactor rebuild() to use Result with
use _ <- result.tryfor clean
short-circuit chaining via run_hook() and exec_build() helpers - Update existing tests for the new RebuildStateConfig API
- Add 7 new tests covering hook invocation, ordering, and error handling
- Document hooks in docs/dev-server.md (API, reference table, rebuild flow)
- Introduce RebuildStateConfig public type to bundle build_command and
CI
- gleam 1.15.1
blogatto 4.0.2
4.0.2
Released on 2026-03-17
CI
- bump gleam to 1.15.0
Documentation
- add CONTRIBUTING.md
Fixed
- bump smalto to 3.0.0; added support for new languages (fsharp, csharp, razor, nginx, react-tsx, react-jsx)
blogatto 4.0.1
blogatto 4.0.0
4.0.0
Released on 2026-03-16
⚠ Breaking Changes
- auto generate
slugif missing from frontmatterslugis no more required. User has nothing to change to their code though.
Added
- 💥 auto generate
slugif missing from frontmatterslugis no more a required field in the frontmatter. If missing it is automatically generated by slugifying the post title- build-time syntax - highlighting via smalto
Add syntax highlighting support for code blocks during static site
generation using the smalto library. Closes #27
Documentation
- typo in
gleam runcommand and conventional use ofdevfor setting up the dev server (#2)- Fixes "build" to "run" which it should be.
- Also a proposal for where to put and how to name the dev module, so it can be run with
gleam devdirectly. This follows the convention in Gleam projects (since Gleam 1.11: https://gleam.run/news/gleam-javascript-gets-30-percent-faster/).
Edited and submitted with the online editor in Forgejo so squash the commits together as I didn't find a way to do that myself. 😁
Build
- mist 6
blogatto 3.0.0
3.0.0
Released on 2026-03-04
Added
- add route_builder to MarkdownConfig for custom blog post routing
Add an optional route_builder function to MarkdownConfig that allows
users to fully customize the output path and URL for each blog post.
When set, the route_prefix field is ignored, giving full control over
post URLs for date-based, category-based, or any custom URL scheme.Introduces PostMetadata type in blogatto/post with frontmatter-derived
fields available at routing time (excludes url, excerpt, contents). - expose mork markdown parsing options via MarkdownConfig
Add Options type to MarkdownConfig allowing users to enable/disable
markdown extensions (tables, footnotes, heading IDs, task lists, emoji
shortcodes, autolinks). Defaults match mork's defaults with tables and
most extensions enabled. Updates blog builder to use mork_document.Options
directly instead of the deprecated mork.configure() builder API.