Revision history for Plerd

1.903 2026-06-26T01:15:00Z

      - Open Graph metadata tags are now generated for any post that has an
        associated image (its own, or the blog-wide fallback image), whether
        or not the blog configures a "facebook_id". This makes link previews
        work out of the box on Discord, Slack, Mastodon, and other services
        that read Open Graph data.

      - Twitter Card support is no longer scaffolded or documented. The
        "twitter_id" directive still works, but it has been removed from the
        sample configuration file, since Open Graph metadata already drives
        link previews on X as well as everywhere else.

      - The "plerdall --init" success message now points to the configuration
        file's real location (conf/plerd.conf), rather than a nonexistent
        path in the working directory's root.

      - Fixed a test whose expected result depended on the local time zone,
        causing spurious failures when the suite ran anywhere west of US
        Eastern.

      - Revised and refreshed the README documentation.

1.902 2026-06-23T22:37:04Z

      - Source files with Windows (CRLF) line endings are now normalized to
        LF throughout. Previously the in-place source rewrite left the body
        with CRLF line endings (mixed with LF metadata).

      - Publishing no longer dies when the optional tags.tt template is
        missing, so a blog with no tags can publish without it.

      - Posts whose titles consist entirely of characters that can't appear
        in a filename (such as emoji) no longer collide on a single
        YYYY-MM-DD-.html name; each now gets a distinct, stable filename
        derived from a hash of its title.

      - The docroot/index.html symlink now targets recent.html by basename
        rather than an absolute path, so it keeps working when the blog's
        docroot is moved or served from a different location.

      - Full and incremental publishing now share one post-ordering rule
        (date-descending, then basename-ascending), so the two paths can no
        longer disagree about ordering. Output order is unchanged.

1.901 2026-06-21T22:27:57Z

      - Fixed README generation: the CI badge and an "install Sweat"
        copypasta typo are now corrected at the README.pod source, since
        README.md is generated from it by Minilla.

1.900 2026-06-19T17:35:40Z

      - Incremental publishing: plerdwatcher now republishes incrementally on a
        source change, falling back to a full rebuild only when a change can
        affect shared pages (recent/archive/tag pages and feeds). Scales far
        better as a blog's archive grows.

      - All generated files are now written atomically (rendered to a temp file,
        then renamed into place), so a web server never serves a half-written or
        empty file, and a failed render leaves the previous file intact.

      - Promoting webmention sending from experimental to supported feature.

      - Removing experimental support for storing webmentions.

      - HTML is now stripped from JSON Feed titles.

      - Fixing a bug that would sometimes list a post twice on a tag page.

      - The default post template now shows a "Previous post" link in list view
        when older posts exist.

      - Trailing whitespace is now stripped from metadata values.

      - Assorted correctness and robustness fixes (with added tests), and
        hardened index.html symlink creation.

      - Declaring Digest::MD5 and JSON as dependencies.

      - Requiring DateTime 1.54 or later; older versions could round-trip a
        post's W3C "time" value into an unparseable form. Thanks to Olivier
        Auverlot for the report.

      - Continuous integration moved from the defunct Travis CI to GitHub
        Actions (Perl 5.32 / 5.36 / 5.40).

1.820 2019-12-26T04:03:53Z

      - Adding SSL support to Plerdwatcher.
      
      - Displayed webmentions are now sorted by time they were published (versus the time they were received).
      
      - Adding a trivial default handler on the webmention listener.

      - Plerd now emits an intentional warning on publication if the blog contains tags that are identical except for case.
      
1.811 2019-05-27T04:24:16Z

      - Fixing a tag-ordering bug.

1.810 2019-05-26T22:22:27Z

      - Adding support for MultiMarkdown. Thanks to Petter Hassberg for the patch.
      
      - Tags now decide on their own capitalization, in the case of user inconsistency, and apply it across the blog.

1.802 2019-04-14T15:42:54Z

      - Suppressing extra whitespace from post methods (e.g. description()) whose output might use an HTML-stripped version of the post's body.

      - Removing redundant example-template files, and basing tests on plerdall's "init" feature instead.
      
      - Adding the contributors list to Plerd.pm's POD.
      
      - Removing documentation regarding Facebook support. (See: http://fogknife.com/2019-02-26-ending-my-personal-use-and-project-support-for-facebook.html)

1.801 2019-02-07T02:31:29Z

      - Adding a linked tag list to the default post template.

1.8 2019-02-07T01:11:35Z

      - Adding support for tags. Thanks to Joe Johnston for the basic concept, and much of the implementation work.
      
      - Adding a utc_date method to post objects.
      
      - Fixing a bug that made `plerdall --init` fail if plerdall can't find a config file. (Thanks to Bo for the bug report.)
      
      - Fixing a bug that ignored any user-requested webmention-listener log level.
      
      - Improving automatically derived post descriptions.

1.72 2018-12-09T16:51:27Z

      - Tweaking some internal bits so that Plerd sits better with CPAN's amazing and celebrated testing army. (Thanks to Slaven Rezic for advice and guidance.)

1.7 2018-11-05T00:58:38Z

      - Adding support for "dist"-style installation and configuration of Plerd, making it appropriate for distribution via CPAN.
      
      - Adding an --init command to plerdall. (Thanks to Rebecca Turner for the suggestion.)
      
      - Plerd now automatically generates a symbolic link from recent.html to index.html on blog publication.

1.601 2018-08-11

      - Fixing a bug that prevented the Webmention-receiving plerdwatcher process from accepting webmentions for posts created after it launched.

      - Adding a (commented-out) `<link rel="webmention [...] />` element to the set of sample templates. (Thanks to Karen Cravens for the bug report.)
      
      - Separating the display of replies versus uncategorized webmentions, in the sample templates.
      
      - Retroactively adding a bunch of entries to the 1.6 Changelog entry that I forgot about in the excitement of the Webmention stuff.

1.6   2018-08-05

      - Adding experimental support for Webmention sending, receiving, and display.
     
      - If a template fails to process, Plerd will now die with a meaningful error message.
     
      - Adding a post_with_url method to Plerd objects.
     
      - Adding Microformats2 metadata to the sample templates.

1.55  2018-03-07

      - Switching away from a naive copy of Text::SmartyPants in favor of a custom fork of same (Plerd::SmartyPants). As a result, Plerd inserts higher-than-ASCII characters like curly-quotes and emdashes directly into its UTF-8 output, rather than using HTML entities. This avoids problems arising from mixing HTML entities with other modules' entity-escaping code.

1.54  2018-02-17

      - Improving how Plerd handles UTF-8 source and template files. (Much like v1.44, except I think I got it right this time.)

      - Adding mention of v1.52's alt-text improvement to the documentation.
     
1.53  2017-10-29

      - Fixing a bug where Markdown symbols, if present in the first paragraph of a post's source file, would appear in default social-media description tags.

      - Now requiring a minimum HTML::SocialMeta version.

1.52  2017-10-22

      - Social-media metadata tags will choose "featured image" style for posts that explicitly define an image, and "thumbnail" style for posts that use the blog's default image.
     
      - Adding support for image alt-text in social-media metadata tags.

1.5   2017-08-20

      - Adding support for social-media metadata tags.

1.45 2017-08-18

     - Emergency rollback of the UTF-8 "improving". O the embarrassment.

1.44 2017-08-18
    
     - Adding a reading_time method to post objects.
     
     - Improving how Plerd handles UTF-8 template files.

1.43 2017-05-19

     - Adding experimental support for JSON Feed (http://jsonfeed.org). 
     
     - Fixing a bug where Markdown in post titles could result in messed-up HTML title-element content.

1.42  2016-10-06

      - Adding some styling to the default template so that plain <img> elements within posts dont overflow the content div's width.
     
1.41  2016-09-17

      - Fixing a bug that would sometimes cause existing posts' "older_post" and "newer_post" methods to return incorrect values after new the publication of new posts.

      - Removing support for the Plerd object's "publish" method and "files_to_publish" attribute. (The former now just calls the "publish_all" method.)

1.4   2016-08-17

      - Adding support for user-defined post attributes.
     
      - Improving handling of base-URI configurations involving paths. (David Turner)

1.31  2016-08-01

      - Plerdwatcher now pays attention to all config directives, including the new ones defined in v1.3.

1.3   2016-07-23

      - Plerd no longer requires that the source, docroot, and template directories all exist within the same master directory.

1.2   2016-04-09

      - Fixing a bug that could prevent the recent, archive, and RSS pages from updating properly.

1.1   2016-03-27

      - Adding "newer_post" and "older_post" read-only methods to post objects.

      - Adding a "posts" read-only method to the Plerd object, returning all of
      the blog's posts.

      - GUIDs are now always added to posts. (The old "generates_post_guids"
      is now a deprecated no-op.)

1.0   2015-11-04

      - First versioned release. (Christian Sánchez contributed pre-release improvements)
