Release history

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