Skip to content

Releases: veeso/blogatto

blogatto 6.0.0

07 May 18:26

Choose a tag to compare

6.0.0

Released on 2026-05-07

⚠ Breaking Changes

  • rename FeedConfig to RssFeedConfig and split into rss submodule

    blogatto/config/feed's FeedConfig, FeedItem, and the
    related builder functions have moved to blogatto/config/feed/rss as
    RssFeedConfig and RssFeedItem. Config.feeds is now Config.rss_feeds,
    and config.feed() is now config.rss_feed(). FeedMetadata stays 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 generic feed namespace.

  • rename MarkdownConfig to PostConfig and split builder

    blogatto/config/markdown module renamed to
    blogatto/config/post; MarkdownConfig renamed to PostConfig;
    Config.markdown_config field renamed to post_config;
    config.markdown() setter renamed to config.post();
    markdown.markdown_path() renamed to post.path(). Components,
    Options, and Alignment move 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
    through config.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 .dj and .djot post sources, sharing the
    same Components, frontmatter, and Post(msg) pipeline as markdown.
    Mixed-format blogs are supported; each post directory picks its own
    extension.

    Markdown Options and 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.md to docs/post-components.md to
    reflect that components apply to both formats.

CI

  • bump gleam 1.16.0

Changed

  • 💥 rename FeedConfig to RssFeedConfig and split into rss submodule- 💥 rename MarkdownConfig to PostConfig and split builder

    Renames blogatto/config/markdown to blogatto/config/post to reflect
    that it configures post discovery and rendering rather than the markdown
    format specifically. Builder is reshaped: internal/builder/blog.gleam
    becomes internal/builder/post.gleam, and markdown-only rendering is
    extracted to internal/builder/post/markdown.gleam so 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

25 Mar 16:38

Choose a tag to compare

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

25 Mar 14:09

Choose a tag to compare

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

20 Mar 08:15

Choose a tag to compare

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

19 Mar 20:19
76667eb

Choose a tag to compare

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

18 Mar 10:20

Choose a tag to compare

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.try for 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)

CI

  • gleam 1.15.1

blogatto 4.0.2

17 Mar 17:35

Choose a tag to compare

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

17 Mar 09:24

Choose a tag to compare

4.0.1

Released on 2026-03-17

Fixed

  • escape HTML tag in frontmatter title, subtitle and excerpt (#32)

blogatto 4.0.0

16 Mar 16:12

Choose a tag to compare

4.0.0

Released on 2026-03-16

⚠ Breaking Changes

  • auto generate slug if missing from frontmatter

    slug is no more required. User has nothing to change to their code though.

Added

  • 💥 auto generate slug if missing from frontmatter

    slug is 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 run command and conventional use of dev for setting up the dev server (#2)

    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

04 Mar 10:29

Choose a tag to compare

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.