Release history#

4.9.1 - 2023-11-15#

  • Ensure tzdata dependency is installed on Windows

4.9.0 - 2023-11-12#

  • Upgrade code to new minimum supported Python version: 3.8

  • Settings support for pathlib.Path (#2758)

  • Various improvements to Simple theme (#2976 & #3234)

  • Use Furo as Sphinx documentation theme (#3023)

  • Default to 100 articles maximum in feeds (#3127)

  • Add period_archives common context variable (#3148)

  • Use watchfiles as the file-watching backend (#3151)

  • Add GitHub Actions workflow for GitHub Pages (#3189)

  • Allow dataclasses in settings (#3204)

  • Switch build tool to PDM instead of Setuptools/Poetry (#3220)

  • Provide a plugin_enabled Jinja test for themes (#3235)

  • Preserve connection order in Blinker (#3238)

  • Remove social icons from default notmyidea theme (#3240)

  • Remove unreliable WRITE_SELECTED feature (#3243)

  • Importer: Report broken embedded video links when importing from Tumblr (#3177)

  • Importer: Remove newline addition when iterating Photo post types (#3178)

  • Importer: Force timestamp conversion in Tumblr importer to be UTC with offset (#3221)

  • Importer: Use tempfile for intermediate HTML file for Pandoc (#3221)

  • Switch linters to Ruff (#3223)

4.8.0 - 2022-07-11#

  • Use JSON values for extra settings in Invoke tasks template (#2994)

  • Add content tag for links, which can help with things like Twitter social cards (#3001)

  • Improve word count behavior when generating summary (#3002)

4.7.2 - 2022-02-09#

  • Fix incorrect parsing of parameters specified via -e / –extra-settings option flags (#2938)

  • Add categories.html template to default theme (#2973)

  • Document how to use plugins to inject content (#2922)

4.7.1 - 2021-10-12#

  • Extend rich logging to server component (#2927)

  • Fix an issue where metadata flagged to be discarded was being cached (#2926)

  • Adjust suffix in server to allow redirection when needed (#2931)

  • Add MIME types for web fonts (#2929)

  • Distribute sample data used to run tests (#2935)

  • Add Python 3.10 to test matrix

4.7.0 - 2021-10-01#

  • Improve default theme rendering on mobile and other small screen devices (#2914)

  • Add support for hidden articles (#2866)

  • Improve word count behavior when generating summary CJK & other locales (#2864)

  • Add progress spinner during generation (#2869) and richer logging (#2897), both via Rich

  • Invoke tasks serve and livereload now auto-open a web browser pointing to the locally-served web site (#2764)

  • Support some date format codes used by ISO dates (#2902)

  • Document how to add a new writer (#2901)

4.6.0 - 2021-03-23#

  • Add new URL pattern to PAGINATION_PATTERNS for the last page in the list (#1401)

  • Speed up livereload Invoke task via caching (#2847)

  • Ignore None return value from get_generators signal (#2850)

  • Relax dependency minimum versions and remove upper bounds

4.5.4 - 2021-01-04#

Replace plugin definitions in settings with string representations after registering, so they can be cached correctly (#2828).

4.5.3 - 2020-12-01#

Fix a mistake made in PR #2821

4.5.2 - 2020-11-22#

Improve logging of generators and writer loaders

4.5.1 - 2020-11-02#

  • Refactor intra-site link discovery in order to match more permissively (#2646)

  • Fix plugins running twice in auto-reload mode (#2817)

  • Add notice to use from pelican import signals instead of import pelican.signals (#2805)

4.5.0 - 2020-08-20#

  • Add namespace plugin support; list plugins via pelican-plugins command

  • Override settings via -e / --extra-settings CLI option flags

  • Add settings for custom Jinja globals and tests

  • Customize article summary ellipsis via SUMMARY_END_SUFFIX setting

  • Customize Typogrify dash handling via new TYPOGRIFY_DASHES setting

  • Support Unicode when generating slugs

  • Support Asciidoc .adoc file generation in Pelican importer

  • Improve user experience when pelican --listen web server is quit

  • Improve Invoke tasks template

  • Include tests in source distributions

  • Switch CI from Travis to GitHub Actions

  • Remove support for Python 2.7

4.2.0 - 2019-10-17#

  • Support inline SVGs; don’t treat titles in SVGs as HTML titles

  • Add category to feeds (in addition to tags)

  • Improve content metadata field docs

  • Add docs for including other Markdown/reST files in content

4.1.3 - 2019-10-09#

  • Fix quick-start docs regarding pelican --listen

  • Set default listen address to

  • Add extra/optional Markdown dependency to

  • Use correct SSH port syntax for rsync in

  • Place all deprecated settings handling together

  • Add related project URLs for display on PyPI

  • Skip some tests on Windows that can’t pass due to filesystem differences

4.1.2 - 2019-09-23#

Fix pelican.settings.load_source to avoid caching issues - PR #2621

4.1.1 - 2019-08-23#

  • Add AutoPub to auto-publish releases on PR merge

  • Add CSS classes for reStructuredText figures

  • Pass argv to Pelican main entrypoint

  • Set default content status to a blank string rather than None

4.1.0 - 2019-07-14#

  • Live browser reload upon changed files (provided via Invoke task)

  • Add pyproject.toml, managed by Poetry

  • Support for invoking python -m pelican

  • Add relative source path attribute to content

  • Allow directories in EXTRA_PATH_METADATA

  • Add all_articles variable to period pages (for recent posts functionality)

  • Improve debug mode output

  • Remove blank or duplicate summaries from Atom feed

  • Fix bugs in pagination, pelican-import, pelican-quickstart, and feed importer

4.0.1 (2018-11-30)#

  • Refactor pelican.server logging

  • Fix bug in which all static files were processed as “draft”

  • Bug fixes for Invoke/Makefile automation, Importer, and other miscellanea

If upgrading from 3.7.x or earlier, please note that slug-related settings in 4.0+ use {slug} and/or {lang} rather than %s. If %s-style settings are encountered, Pelican will emit a warning and fall back to the default setting. Some user-submitted themes might try to format setting values but fail upon site build with a TypeError. In such cases, the theme needs to be updated. For example, instead of TAG_FEED_ATOM|format(tag.slug), use TAG_FEED_ATOM.format(slug=tag.slug)

4.0.0 (2018-11-13)#

  • Replace script with pelican --listen

  • Improved copy/link behavior for large static files (e.g., videos)

  • New {static} syntax to link to static content; content linked to by {static} and {attach} is automatically copied over even if not in STATIC_PATHS

  • Pages can now have draft status

  • Show current settings via new --print-settings flag

  • All settings for slugs now use {slug} and/or {lang} rather than %s. If %s-style settings are encountered, Pelican will emit a warning and fallback to the default setting.

  • New signals: feed_generated and page_generated_write_page

  • Replace Fabric with Invoke and template with

  • Replace PAGINATED_DIRECT_TEMPLATES by PAGINATED_TEMPLATES, extending control over pagination to all templates and making page size variable

  • Replace SLUG_SUBSTITUTIONS (and friends) by SLUG_REGEX_SUBSTITUTIONS for more finegrained control

  • '{base_name}' value in PAGINATION_PATTERNS setting no longer strips 'bar' from 'foo/bar.html' (unless 'bar' == 'index').

  • ARTICLE_ORDER_BY and PAGE_ORDER_BY now also affect 1) category, tag and author pages 2) feeds 3) draft and hidden articles and pages

  • New ARTICLE_TRANSLATION_ID and PAGE_TRANSLATION_ID settings to specify metadata attributes used to identify/disable translations

  • Make the HTML reader parse multiple occurrences of metadata tags as a list

  • New Blogger XML backup importer

  • Wordpress importer now updates file links to point to local copies if the files were downloaded with --wp-attach.

  • Importer no longer inserts extra newlines, to prevent breaking of HTML attributes.

  • Pelican server now prioritises foo.html and foo/index.html over foo/ when resolving foo.

3.7.1 (2017-01-10)#

  • Fix locale issues in Quickstart script

  • Specify encoding for README and CHANGELOG in

3.7.0 (2016-12-12)#

  • Atom feeds output <content> in addition to <summary>

  • Atom feeds use <published> for the original publication date and <updated> for modifications

  • Simplify Atom feed ID generation and support URL fragments

  • Produce category feeds with category-specific titles

  • RSS feeds now default to summary instead of full content; set RSS_FEED_SUMMARY_ONLY = False to revert to previous behavior

  • Replace MD_EXTENSIONS with MARKDOWN setting

  • Replace JINJA_EXTENSIONS with more-robust JINJA_ENVIRONMENT setting

  • Improve summary truncation logic to handle special characters and tags that span multiple lines, using HTML parser instead of regular expressions

  • Include summary when looking for intra-site link substitutions

  • Link to authors and index via {author}name and {index} syntax

  • Override widget names via LINKS_WIDGET_NAME and SOCIAL_WIDGET_NAME

  • Add INDEX_SAVE_AS option to override default index.html value

  • Remove PAGES context variable for themes in favor of pages

  • SLUG_SUBSTITUTIONS now accepts 3-tuple elements, allowing URL slugs to contain non-alphanumeric characters

  • Tag and category slugs can be controlled with greater precision using the TAG_SUBSTITUTIONS and CATEGORY_SUBSTITUTIONS settings

  • Author slugs can be controlled with greater precision using the AUTHOR_SUBSTITUTIONS setting

  • DEFAULT_DATE can be defined as a string

  • Use mtime instead of ctime when DEFAULT_DATE = 'fs'

  • Add --fatal=errors|warnings option for use with continuous integration

  • When using generator-level caching, ensure previously-cached files are processed instead of just new files.

  • Add Python and Pelican version information to debug output

  • Improve compatibility with Python 3.5

  • Comply with and enforce PEP8 guidelines

  • Replace tables in settings documentation with data:: directives

3.6.3 (2015-08-14)#

  • Fix permissions issue in release tarball

3.6.2 (2015-08-01)#

  • Fix installation errors related to Unicode in tests

  • Don’t show pagination in notmyidea theme if there’s only one page

  • Make hidden pages available in context

  • Improve URLWrapper comparison

3.6.0 (2015-06-15)#

  • Disable caching by default in order to prevent potential confusion

  • Improve caching behavior, replacing pickle with cpickle

  • Allow Markdown or reST content in metadata fields other than summary

  • Support semicolon-separated author/tag lists

  • Improve flexibility of article sorting

  • Add --relative-urls argument

  • Support devserver listening on addresses other than localhost

  • Unify HTTP server handlers to pelican.server throughout

  • Handle intra-site links to draft posts

  • Move tag_cloud from core to plugin

  • Load default theme’s external resources via HTTPS

  • Import drafts from WordPress XML

  • Improve support for Windows users

  • Enhance logging and test suite

  • Clean up and refactor codebase

  • New signals: all_generators_finalized and page_writer_finalized

3.5.0 (2014-11-04)#

  • Introduce ARTICLE_ORDER_BY and PAGE_ORDER_BY settings to control the order of articles and pages.

  • Include time zone information in dates rendered in templates.

  • Expose the reader name in the metadata for articles and pages.

  • Add the ability to store static files along with content in the same directory as articles and pages using {attach} in the path.

  • Prevent Pelican from raising an exception when there are duplicate pieces of metadata in a Markdown file.

  • Introduce the TYPOGRIFY_IGNORE_TAGS setting to add HTML tags to be ignored by Typogrify.

  • Add the ability to use - in date formats to strip leading zeros. For example, %-d/%-m/%y will now result in the date 9/8/12.

  • Ensure feed generation is correctly disabled during quickstart configuration.

  • Fix PAGE_EXCLUDES and ARTICLE_EXCLUDES from incorrectly matching sub-directories.

  • Introduce STATIC_EXCLUDE setting to add static file excludes.

  • Fix an issue when using PAGINATION_PATTERNS while RELATIVE_URLS is enabled.

  • Fix feed generation causing links to use the wrong language for month names when using other locales.

  • Fix an issue where the authors list in the simple template wasn’t correctly formatted.

  • Fix an issue when parsing non-string URLs from settings.

  • Improve consistency of debug and warning messages.

3.4.0 (2014-07-01)#

  • Speed up content generation via new caching mechanism

  • Add selective post generation (instead of always building entire site)

  • Many documentation improvements, including switching to prettier RtD theme

  • Add support for multiple content and plugin paths

  • Add :modified: metadata field to complement :date:. Used to specify the last date and time an article was updated independently from the date and time it was published.

  • Add support for multiple authors via new :authors: metadata field

  • Watch for changes in static directories when in auto-regeneration mode

  • Add filters to limit log output when desired

  • Add language support to drafts

  • Add SLUGIFY_SOURCE setting to control how post slugs are generated

  • Fix many issues relating to locale and encoding

  • Apply Typogrify filter to post summary

  • Preserve file metadata (e.g. time stamps) when copying static files to output

  • Move AsciiDoc support from Pelican core into separate plugin

  • Produce inline links instead of reference-style links when importing content

  • Improve handling of IGNORE_FILES setting behavior

  • Properly escape symbol characters in tag names (e.g., C++)

  • Minor tweaks for Python 3.4 compatibility

  • Add several new signals

3.3.0 (2013-09-24)#

  • Drop Python 3.2 support in favor of Python 3.3

  • Add Fabfile so Fabric can be used for workflow automation instead of Make

  • OUTPUT_RETENTION setting can be used to preserve metadata (e.g., VCS data such as .hg and .git) from being removed from output directory

  • Tumblr import

  • Improve logic and consistency when cleaning output folder

  • Improve documentation versioning and release automation

  • Improve pagination flexibility

  • Rename signals for better consistency (some plugins may need to be updated)

  • Move metadata extraction from generators to readers; metadata extraction no longer article-specific


  • Summaries in Markdown posts no longer include footnotes

  • Remove unnecessary whitespace in output via lstrip_blocks Jinja parameter

  • Move PDF generation from core to plugin

  • Replace MARKUP setting with READERS

  • Add warning if img tag is missing alt attribute

  • Add support for {} in relative links syntax, besides ||

  • Add support for {tag} and {category} relative links

  • Add a content_written signal

3.2.1 and 3.2.2#

  • Facilitate inclusion in FreeBSD Ports Collection

3.2 (2013-04-24)#

  • Support for Python 3!

  • Override page save-to location from meta-data (enables using a static page as the site’s home page, for example)

  • Time period archives (per-year, per-month, and per-day archives of posts)

  • Posterous blog import

  • Improve WordPress blog import

  • Migrate plugins to separate repository

  • Improve HTML parser

  • Provide ability to show or hide categories from menu using DISPLAY_CATEGORIES_ON_MENU option

  • Auto-regeneration can be told to ignore files via IGNORE_FILES setting

  • Improve post-generation feedback to user

  • For multilingual posts, use meta-data to designate which is the original and which is the translation

  • Add .mdown to list of supported Markdown file extensions

  • Document-relative URL generation (RELATIVE_URLS) is now off by default

3.1 (2012-12-04)#

  • Importer now stores slugs within files by default. This can be disabled with the --disable-slugs option.

  • Improve handling of links to intra-site resources

  • Ensure WordPress import adds paragraphs for all types of line endings in post content

  • Decode HTML entities within WordPress post titles on import

  • Improve appearance of LinkedIn icon in default theme

  • Add GitHub and Google+ social icons support in default theme

  • Optimize social icons

  • Add FEED_ALL_ATOM and FEED_ALL_RSS to generate feeds containing all posts regardless of their language


  • Different feeds can now be enabled/disabled individually

  • Allow for blank author: if AUTHOR setting is not set, author won’t default to ${USER} anymore, and a post won’t contain any author information if the post author is empty

  • Move LESS and Webassets support from Pelican core to plugin

  • The DEFAULT_DATE setting now defaults to None, which means that articles won’t be generated unless date metadata is specified

  • Add FILENAME_METADATA setting to support metadata extraction from filename

  • Add gzip_cache plugin to compress common text files into a .gz file within the same directory as the original file, preventing the server (e.g. Nginx) from having to compress files during an HTTP call

  • Add support for AsciiDoc-formatted content

  • Add USE_FOLDER_AS_CATEGORY setting so that feature can be toggled on/off

  • Support arbitrary Jinja template files

  • Restore basic functional tests

  • New signals: generator_init, get_generators, and article_generate_preread

3.0 (2012-08-08)#

  • Refactored the way URLs are handled

  • Improved the English documentation

  • Fixed packaging using setuptools entrypoints

  • Added typogrify support

  • Added a way to disable feed generation

  • Added support for DIRECT_TEMPLATES

  • Allow multiple extensions for content files

  • Added LESS support

  • Improved the import script

  • Added functional tests

  • Rsync support in the generated Makefile

  • Improved feed support (easily pluggable with Feedburner for instance)

  • Added support for abbr in reST

  • Fixed a bunch of bugs :-)

2.8 (2012-02-28)#

  • Dotclear importer

  • Allow the usage of Markdown extensions

  • Themes are now easily extensible

  • Don’t output pagination information if there is only one page

  • Add a page per author, with all their articles

  • Improved the test suite

  • Made the themes easier to extend

  • Removed Skribit support

  • Added a pelican-quickstart script

  • Fixed timezone-related issues

  • Added some scripts for Windows support

  • Date can be specified in seconds

  • Never fail when generating posts (skip and continue)

  • Allow the use of future dates

  • Support having different timezones per language

  • Enhanced the documentation

2.7 (2011-06-11)#

  • Use logging rather than echoing to stdout

  • Support custom Jinja filters

  • Compatibility with Python 2.5

  • Added a theme manager

  • Packaged for Debian

  • Added draft support

2.6 (2011-03-08)#

  • Changes in the output directory structure

  • Makes templates easier to work with / create

  • Added RSS support (was Atom-only)

  • Added tag support for the feeds

  • Enhance the documentation

  • Added another theme (brownstone)

  • Added translations

  • Added a way to use cleaner URLs with a rewrite url module (or equivalent)

  • Added a tag cloud

  • Added an autoreloading feature: the blog is automatically regenerated each time a modification is detected

  • Translate the documentation into French

  • Import a blog from an RSS feed

  • Pagination support

  • Added Skribit support

2.5 (2010-11-20)#

  • Import from WordPress

  • Added some new themes (martyalchin / wide-notmyidea)

  • First bug report!

  • Linkedin support

  • Added a FAQ

  • Google Analytics support

  • Twitter support

  • Use relative URLs, not static ones

2.4 (2010-11-06)#

  • Minor themes changes

  • Add Disqus support (so we have comments)

  • Another code refactoring

  • Added config settings about pages

  • Blog entries can also be generated in PDF

2.3 (2010-10-31)#

  • Markdown support

2.2 (2010-10-30)#

  • Prettify output

  • Manages static pages as well

2.1 (2010-10-30)#

  • Make notmyidea the default theme

2.0 (2010-10-30)#

  • Refactoring to be more extensible

  • Change into the setting variables

1.2 (2010-09-28)#

  • Added a debug option

  • Added per-category feeds

  • Use filesystem to get dates if no metadata is provided

  • Add Pygments support

1.1 (2010-08-19)#

  • First working version