<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Pelican – A Python Static Site Generator</title><link href="https://getpelican.com/" rel="alternate"/><link href="https://getpelican.com/feeds/all.atom.xml" rel="self"/><id>https://getpelican.com/</id><updated>2025-05-13T00:00:00+02:00</updated><entry><title>Pelican 4.11 released</title><link href="https://getpelican.com/blog/pelican-4.11-released/" rel="alternate"/><published>2025-01-15T00:00:00+01:00</published><updated>2025-01-15T00:00:00+01:00</updated><author><name>Pelican Contributors</name></author><id>tag:getpelican.com,2025-01-15:/blog/pelican-4.11-released/</id><summary type="html">&lt;p&gt;Pelican 4.11 is now available. This new release includes the following enhancements, fixes, and tweaks:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Add setting to selectively omit Typogrify filters&lt;/li&gt;
&lt;li&gt;Add more blocks to the Simple theme’s base template, making it easier to create new themes by inheriting from the Simple theme&lt;/li&gt;
&lt;li&gt;Fix auto-reload behavior upon …&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;p&gt;Pelican 4.11 is now available. This new release includes the following enhancements, fixes, and tweaks:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Add setting to selectively omit Typogrify filters&lt;/li&gt;
&lt;li&gt;Add more blocks to the Simple theme’s base template, making it easier to create new themes by inheriting from the Simple theme&lt;/li&gt;
&lt;li&gt;Fix auto-reload behavior upon changes to the theme, content or settings&lt;/li&gt;
&lt;li&gt;Get current year from the &lt;tt class="docutils literal"&gt;SOURCE_DATE_EPOCH&lt;/tt&gt; environment variable, if available&lt;/li&gt;
&lt;li&gt;Add Python 3.13 to test matrix and remove Python 3.8&lt;/li&gt;
&lt;li&gt;Require Typogrify 2.1+ and Pygments &amp;lt;2.19&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information, please refer to the &lt;a class="reference external" href="https://github.com/getpelican/pelican/releases/tag/4.11.0"&gt;release page&lt;/a&gt; or the &lt;a class="reference external" href="https://docs.getpelican.com/en/latest/changelog.html"&gt;Release History&lt;/a&gt;
section of the documentation. For the full list of changes, see:
&lt;a class="reference external" href="https://github.com/getpelican/pelican/compare/4.10.2...4.11.0"&gt;https://github.com/getpelican/pelican/compare/4.10.2...4.11.0&lt;/a&gt;&lt;/p&gt;
&lt;div class="section" id="upgrading-from-previous-releases"&gt;
&lt;h2&gt;Upgrading from previous releases&lt;/h2&gt;
&lt;p&gt;Upgrading from Pelican 4.10.x should be smooth and require few (if any) changes to
your environment. If upgrading from a previous release, review the other release
announcements on this site to better understand what action might be necessary.&lt;/p&gt;
&lt;p&gt;As always, we do everything we can to maximize backwards compatibility and ensure
smooth Pelican upgrades. If you run into problems, please see the &lt;a class="reference external" href="https://docs.getpelican.com/en/latest/contribute.html#how-to-get-help"&gt;How to Get Help&lt;/a&gt; section
of the documentation, and we will update this post with any upgrade tips
contributed by the Pelican community.&lt;/p&gt;
&lt;/div&gt;
</content><category term="news"/></entry><entry><title>Pelican 4.10 released</title><link href="https://getpelican.com/blog/pelican-4.10-released/" rel="alternate"/><published>2024-09-16T00:00:00+02:00</published><updated>2024-09-16T00:00:00+02:00</updated><author><name>Pelican Contributors</name></author><id>tag:getpelican.com,2024-09-16:/blog/pelican-4.10-released/</id><summary type="html">&lt;p&gt;Pelican 4.10 is now available. This new release includes the following enhancements, fixes, and tweaks:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Add setting to specify summary via paragraph count&lt;/li&gt;
&lt;li&gt;Add new status to skip generation of a post&lt;/li&gt;
&lt;li&gt;Add setting to append &lt;tt class="docutils literal"&gt;ref&lt;/tt&gt; parameter to links in feeds&lt;/li&gt;
&lt;li&gt;Configure logging handler via &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;--log-handler&lt;/span&gt;&lt;/tt&gt; CLI option …&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;p&gt;Pelican 4.10 is now available. This new release includes the following enhancements, fixes, and tweaks:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Add setting to specify summary via paragraph count&lt;/li&gt;
&lt;li&gt;Add new status to skip generation of a post&lt;/li&gt;
&lt;li&gt;Add setting to append &lt;tt class="docutils literal"&gt;ref&lt;/tt&gt; parameter to links in feeds&lt;/li&gt;
&lt;li&gt;Configure logging handler via &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;--log-handler&lt;/span&gt;&lt;/tt&gt; CLI option&lt;/li&gt;
&lt;li&gt;Resolve intra-site links in summaries&lt;/li&gt;
&lt;li&gt;Warn when files are not processed due to disabled readers&lt;/li&gt;
&lt;li&gt;Add Medium post importer&lt;/li&gt;
&lt;li&gt;Improve GitHub Pages workflow&lt;/li&gt;
&lt;li&gt;Improve code test coverage&lt;/li&gt;
&lt;li&gt;Translate documentation into Simplified Chinese&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information, please refer to the &lt;a class="reference external" href="https://github.com/getpelican/pelican/releases/tag/4.10.0"&gt;release page&lt;/a&gt; or the &lt;a class="reference external" href="https://docs.getpelican.com/en/latest/changelog.html"&gt;Release History&lt;/a&gt;
section of the documentation. For the full list of changes, see:
&lt;a class="reference external" href="https://github.com/getpelican/pelican/compare/4.9.1...4.10.0"&gt;https://github.com/getpelican/pelican/compare/4.9.1...4.10.0&lt;/a&gt;&lt;/p&gt;
&lt;div class="section" id="upgrading-from-previous-releases"&gt;
&lt;h2&gt;Upgrading from previous releases&lt;/h2&gt;
&lt;p&gt;Upgrading from Pelican 4.9.x should be smooth and require few (if any) changes to
your environment. If upgrading from a previous release, review the other release
announcements on this site to better understand what action might be necessary.&lt;/p&gt;
&lt;p&gt;As always, we do everything we can to maximize backwards compatibility and ensure
smooth Pelican upgrades. If you run into problems, please see the &lt;a class="reference external" href="https://docs.getpelican.com/en/latest/contribute.html#how-to-get-help"&gt;How to Get Help&lt;/a&gt; section
of the documentation, and we will update this post with any upgrade tips
contributed by the Pelican community.&lt;/p&gt;
&lt;/div&gt;
</content><category term="news"/></entry><entry><title>Pelican 4.9 released</title><link href="https://getpelican.com/blog/pelican-4.9-released/" rel="alternate"/><published>2023-11-15T00:00:00+01:00</published><updated>2023-11-15T00:00:00+01:00</updated><author><name>Pelican Contributors</name></author><id>tag:getpelican.com,2023-11-15:/blog/pelican-4.9-released/</id><summary type="html">&lt;p&gt;Pelican 4.9 is now available. This new release includes the following enhancements, fixes, and tweaks:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Upgrade code to new minimum supported Python version: 3.8&lt;/li&gt;
&lt;li&gt;Settings support for &lt;tt class="docutils literal"&gt;pathlib.Path&lt;/tt&gt; &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/2758"&gt;(#2758)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Various improvements to Simple theme (&lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/2976"&gt;#2976&lt;/a&gt; &amp;amp; &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/3234"&gt;#3234&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Use Furo as Sphinx documentation theme &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/3023"&gt;(#3023)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Default to 100 articles …&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;p&gt;Pelican 4.9 is now available. This new release includes the following enhancements, fixes, and tweaks:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Upgrade code to new minimum supported Python version: 3.8&lt;/li&gt;
&lt;li&gt;Settings support for &lt;tt class="docutils literal"&gt;pathlib.Path&lt;/tt&gt; &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/2758"&gt;(#2758)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Various improvements to Simple theme (&lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/2976"&gt;#2976&lt;/a&gt; &amp;amp; &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/3234"&gt;#3234&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Use Furo as Sphinx documentation theme &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/3023"&gt;(#3023)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Default to 100 articles maximum in feeds &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/3127"&gt;(#3127)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Add &lt;tt class="docutils literal"&gt;period_archives common context&lt;/tt&gt; variable &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/3148"&gt;(#3148)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Use &lt;tt class="docutils literal"&gt;watchfiles&lt;/tt&gt; as the file-watching backend &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/3151"&gt;(#3151)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Add GitHub Actions workflow for GitHub Pages &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/3189"&gt;(#3189)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Allow dataclasses in settings &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/3204"&gt;(#3204)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Switch build tool to PDM instead of Setuptools/Poetry &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/3220"&gt;(#3220)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Provide a &lt;tt class="docutils literal"&gt;plugin_enabled&lt;/tt&gt; Jinja test for themes &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/3235"&gt;(#3235)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Preserve connection order in Blinker &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/3238"&gt;(#3238)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Remove social icons from default &lt;tt class="docutils literal"&gt;notmyidea&lt;/tt&gt; theme &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/3240"&gt;(#3240)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Remove unreliable &lt;tt class="docutils literal"&gt;WRITE_SELECTED&lt;/tt&gt; feature &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/3243"&gt;(#3243)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Importer: Report broken embedded video links when importing from Tumblr &lt;a class="reference external" href="https://github.com/getpelican/pelican/issues/3177"&gt;(#3177)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Importer: Remove newline addition when iterating Photo post types &lt;a class="reference external" href="https://github.com/getpelican/pelican/issues/3178"&gt;(#3178)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Importer: Force timestamp conversion in Tumblr importer to be UTC with offset &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/3221"&gt;(#3221)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Importer: Use tempfile for intermediate HTML file for Pandoc &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/3221"&gt;(#3221)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Switch linters to Ruff &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/3223"&gt;(#3223)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information, please refer to the &lt;a class="reference external" href="https://github.com/getpelican/pelican/releases/tag/4.9.0"&gt;release page&lt;/a&gt; or the &lt;a class="reference external" href="https://docs.getpelican.com/en/latest/changelog.html"&gt;Release History&lt;/a&gt;
section of the documentation. For the full list of changes, see:
&lt;a class="reference external" href="https://github.com/getpelican/pelican/compare/4.8.0...4.9.0"&gt;https://github.com/getpelican/pelican/compare/4.8.0...4.9.0&lt;/a&gt;&lt;/p&gt;
&lt;div class="section" id="upgrading-from-previous-releases"&gt;
&lt;h2&gt;Upgrading from previous releases&lt;/h2&gt;
&lt;p&gt;Upgrading from Pelican 4.8.x should be smooth and require few (if any) changes to
your environment. If upgrading from a previous release, review the other release
announcements on this site to better understand what action might be necessary.&lt;/p&gt;
&lt;p&gt;As always, we do everything we can to maximize backwards compatibility and ensure
smooth Pelican upgrades. If you run into problems, please see the &lt;a class="reference external" href="https://docs.getpelican.com/en/latest/contribute.html#how-to-get-help"&gt;How to Get Help&lt;/a&gt; section
of the documentation, and we will update this post with any upgrade tips
contributed by the Pelican community.&lt;/p&gt;
&lt;/div&gt;
</content><category term="news"/></entry><entry><title>New Pelican Site, Docs Theme, and Discussions</title><link href="https://getpelican.com/blog/new-pelican-site-docs-theme-discussions/" rel="alternate"/><published>2022-09-15T00:00:00+02:00</published><updated>2022-09-15T00:00:00+02:00</updated><author><name>Justin Mayer</name></author><id>tag:getpelican.com,2022-09-15:/blog/new-pelican-site-docs-theme-discussions/</id><summary type="html">&lt;div class="section" id="new-pelican-web-site"&gt;
&lt;h2&gt;✨ New Pelican Web Site ✨&lt;/h2&gt;
&lt;p&gt;Pelican has a brand-new, custom-built web site! 🦄&lt;/p&gt;
&lt;p&gt;The previous design served the Pelican community well for many years, but it was time for it to be replaced with a design that is more modern and responsive on mobile devices. Check it out on a phone and …&lt;/p&gt;&lt;/div&gt;</summary><content type="html">&lt;div class="section" id="new-pelican-web-site"&gt;
&lt;h2&gt;✨ New Pelican Web Site ✨&lt;/h2&gt;
&lt;p&gt;Pelican has a brand-new, custom-built web site! 🦄&lt;/p&gt;
&lt;p&gt;The previous design served the Pelican community well for many years, but it was time for it to be replaced with a design that is more modern and responsive on mobile devices. Check it out on a phone and marvel at its glory!&lt;/p&gt;
&lt;p&gt;We also took this opportunity to switch the canonical domain from &lt;tt class="docutils literal"&gt;blog.getpelican.com&lt;/tt&gt; to the root &lt;tt class="docutils literal"&gt;getpelican.com&lt;/tt&gt; domain, with the blog now available at &lt;a class="reference external" href="https://getpelican.com/blog/"&gt;https://getpelican.com/blog/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Many sincere thanks to &lt;a class="reference external" href="https://lucafedrizzi.com"&gt;Luca Fedrizzi&lt;/a&gt; for his excellent work on the new web site. 🥇&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="new-documentation-theme"&gt;
&lt;h2&gt;✨ New Documentation Theme ✨&lt;/h2&gt;
&lt;p&gt;In a similar fashion, the default ReadTheDocs theme for &lt;a class="reference external" href="https://docs.getpelican.com/"&gt;Pelican’s documentation&lt;/a&gt; served us well but was overdue to be replaced with a more modern and responsive theme. We chose the excellent &lt;a class="reference external" href="https://github.com/pradyunsg/furo"&gt;Furo theme&lt;/a&gt; by Pradyun Gedam, and it is a wonderful complement to the new Pelican web site design.&lt;/p&gt;
&lt;p&gt;We extend our gratitude to &lt;a class="reference external" href="https://www.paulox.net"&gt;Paolo Melchiorre&lt;/a&gt; for his pull request that implemented this welcome change. 👍&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="pelican-discussions"&gt;
&lt;h2&gt;✨ Pelican Discussions ✨&lt;/h2&gt;
&lt;p&gt;IRC will always have a place in our hearts, but it was never the most accessible channel for the Pelican community. Even more experienced folks often found it a cumbersome place to get help and interact with other Pelican users, so was time to find a more appropriate solution.&lt;/p&gt;
&lt;p&gt;We have therefore set up &lt;a class="reference external" href="https://github.com/getpelican/pelican/discussions"&gt;Pelican Discussions&lt;/a&gt;, which is now the best place for the Pelican community to exchange ideas, ask questions, and propose suggestions. Please visit the &lt;a class="reference external" href="https://github.com/getpelican/pelican/discussions/3041"&gt;initial discussion&lt;/a&gt; and post a comment introducing yourself and your Pelican site(s). We’d love to hear from you!&lt;/p&gt;
&lt;p&gt;We are excited that the Pelican community now has a better place to have asynchronous discussions. At some point we will most likely set up an officially-supported space on Matrix for real-time conversations.&lt;/p&gt;
&lt;/div&gt;
</content><category term="news"/></entry><entry><title>Pelican 4.8 released</title><link href="https://getpelican.com/blog/pelican-4.8-released/" rel="alternate"/><published>2022-07-11T00:00:00+02:00</published><updated>2022-07-11T00:00:00+02:00</updated><author><name>Pelican Contributors</name></author><id>tag:getpelican.com,2022-07-11:/blog/pelican-4.8-released/</id><summary type="html">&lt;p&gt;Pelican 4.8 is now available. This new release includes the following enhancements, fixes, and tweaks:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Use JSON values for extra settings in Invoke tasks template &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/2994"&gt;(#2994)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Add content tag for links, which can help with things like Twitter social cards &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/3001"&gt;(#3001)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Improve word count behavior when generating summary &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/3002"&gt;(#3002 …&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;p&gt;Pelican 4.8 is now available. This new release includes the following enhancements, fixes, and tweaks:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Use JSON values for extra settings in Invoke tasks template &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/2994"&gt;(#2994)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Add content tag for links, which can help with things like Twitter social cards &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/3001"&gt;(#3001)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Improve word count behavior when generating summary &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/3002"&gt;(#3002)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information, please refer to the &lt;a class="reference external" href="https://github.com/getpelican/pelican/releases/tag/4.8.0"&gt;release page&lt;/a&gt; or the &lt;a class="reference external" href="https://docs.getpelican.com/en/4.8.0/changelog.html"&gt;Release History&lt;/a&gt;
section of the documentation. For the full list of changes, see:
&lt;a class="reference external" href="https://github.com/getpelican/pelican/compare/4.7.0...4.8.0"&gt;https://github.com/getpelican/pelican/compare/4.7.0...4.8.0&lt;/a&gt;&lt;/p&gt;
&lt;div class="section" id="upgrading-from-previous-releases"&gt;
&lt;h2&gt;Upgrading from previous releases&lt;/h2&gt;
&lt;p&gt;Upgrading from Pelican 4.7.x should be smooth and require few (if any) changes to
your environment. If upgrading from a previous release, review the other release
announcements on this site to better understand what action might be necessary.&lt;/p&gt;
&lt;p&gt;As always, we do everything we can to maximize backwards compatibility and ensure
smooth Pelican upgrades. If you run into problems, please see the &lt;a class="reference external" href="https://docs.getpelican.com/en/latest/contribute.html#how-to-get-help"&gt;How to Get Help&lt;/a&gt; section
of the documentation, and we will update this post with any upgrade tips
contributed by the Pelican community.&lt;/p&gt;
&lt;/div&gt;
</content><category term="news"/></entry><entry><title>Pelican 4.7 released</title><link href="https://getpelican.com/blog/pelican-4.7-released/" rel="alternate"/><published>2021-10-01T00:00:00+02:00</published><updated>2021-10-01T00:00:00+02:00</updated><author><name>Pelican Contributors</name></author><id>tag:getpelican.com,2021-10-01:/blog/pelican-4.7-released/</id><summary type="html">&lt;p&gt;Pelican 4.7 is now available. This new release includes the following enhancements, fixes, and tweaks:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Improve default theme rendering on mobile and other small screen devices &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/2914"&gt;(#2914)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Add support for hidden articles &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/2866"&gt;(#2866)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Improve word count behavior when generating summary CJK &amp;amp; other locales &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/2864"&gt;(#2864)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Add progress spinner during generation …&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;p&gt;Pelican 4.7 is now available. This new release includes the following enhancements, fixes, and tweaks:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Improve default theme rendering on mobile and other small screen devices &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/2914"&gt;(#2914)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Add support for hidden articles &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/2866"&gt;(#2866)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Improve word count behavior when generating summary CJK &amp;amp; other locales &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/2864"&gt;(#2864)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Add progress spinner during generation &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/2869"&gt;(#2869)&lt;/a&gt;
and richer logging &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/2897"&gt;(#2897)&lt;/a&gt;, both via &lt;a class="reference external" href="https://github.com/willmcgugan/rich"&gt;Rich&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Invoke tasks &lt;tt class="docutils literal"&gt;serve&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;livereload&lt;/tt&gt; now auto-open a web browser pointing to the locally-served web site &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/2764"&gt;(#2764)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support some date format codes used by ISO dates &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/2902"&gt;(#2902)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Document how to add a new writer &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/2901"&gt;(#2901)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more info, please refer to the &lt;a class="reference external" href="https://github.com/getpelican/pelican/releases/tag/4.7.0"&gt;release page&lt;/a&gt; or the &lt;a class="reference external" href="https://docs.getpelican.com/en/4.7.0/changelog.html"&gt;Release History&lt;/a&gt;
section of the documentation. For the full list of changes, see:
&lt;a class="reference external" href="https://github.com/getpelican/pelican/compare/4.6.0...4.7.0"&gt;https://github.com/getpelican/pelican/compare/4.6.0...4.7.0&lt;/a&gt;&lt;/p&gt;
&lt;div class="section" id="upgrading-from-previous-releases"&gt;
&lt;h2&gt;Upgrading from previous releases&lt;/h2&gt;
&lt;p&gt;Upgrading from Pelican 4.6.x should be smooth and require few (if any) changes to
your environment. If upgrading from a previous release, review the other release
announcements on this site to better understand what action might be necessary.&lt;/p&gt;
&lt;p&gt;As always, we do everything we can to maximize backwards compatibility and ensure
smooth Pelican upgrades. If you run into problems, please see the &lt;a class="reference external" href="https://docs.getpelican.com/en/latest/contribute.html#how-to-get-help"&gt;How to Get Help&lt;/a&gt; section
of the documentation, and we will update this post with any upgrade tips
contributed by the Pelican community.&lt;/p&gt;
&lt;/div&gt;
</content><category term="news"/></entry><entry><title>Pelican 4.6 released</title><link href="https://getpelican.com/blog/pelican-4.6-released/" rel="alternate"/><published>2021-03-23T00:00:00+01:00</published><updated>2021-03-23T00:00:00+01:00</updated><author><name>Pelican Contributors</name></author><id>tag:getpelican.com,2021-03-23:/blog/pelican-4.6-released/</id><summary type="html">&lt;p&gt;Pelican 4.6 is now available. Thanks to &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/1401"&gt;Tom Adler’s contribution&lt;/a&gt;, this release contains a new feature that allows for more SEO-friendly index pages, whereby &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;/page-1/&lt;/span&gt;&lt;/tt&gt; contains the &lt;em&gt;oldest&lt;/em&gt; articles, with newer articles placed on &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;/page-2/&lt;/span&gt;&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;/page-3/&lt;/span&gt;&lt;/tt&gt;, etc. That way, the names of the previous article index pages do …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Pelican 4.6 is now available. Thanks to &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/1401"&gt;Tom Adler’s contribution&lt;/a&gt;, this release contains a new feature that allows for more SEO-friendly index pages, whereby &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;/page-1/&lt;/span&gt;&lt;/tt&gt; contains the &lt;em&gt;oldest&lt;/em&gt; articles, with newer articles placed on &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;/page-2/&lt;/span&gt;&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;/page-3/&lt;/span&gt;&lt;/tt&gt;, etc. That way, the names of the previous article index pages do not change every time a new index page is generated. Cool URLs don’t change!&lt;/p&gt;
&lt;p&gt;To enable this feature, first add a pagination pattern for &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;-1&lt;/span&gt;&lt;/tt&gt; to your Pelican settings file. For example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;PAGINATION_PATTERNS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;{base_name}&lt;/span&gt;&lt;span class="s2"&gt;/page-1/&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;{base_name}&lt;/span&gt;&lt;span class="s2"&gt;/page-1/index.html&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;{base_name}&lt;/span&gt;&lt;span class="s2"&gt;/page-&lt;/span&gt;&lt;span class="si"&gt;{number}&lt;/span&gt;&lt;span class="s2"&gt;/&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;{base_name}&lt;/span&gt;&lt;span class="s2"&gt;/page-&lt;/span&gt;&lt;span class="si"&gt;{number}&lt;/span&gt;&lt;span class="s2"&gt;/index.html&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;{base_name}&lt;/span&gt;&lt;span class="s2"&gt;/&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;{base_name}&lt;/span&gt;&lt;span class="s2"&gt;/index.html&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You will also benefit from changing other settings to match the intended behavior. For example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;DEFAULT_PAGINATION&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="n"&gt;DEFAULT_ORPHANS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="n"&gt;ARTICLE_ORDER_BY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;date&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;REVERSE_ARCHIVE_ORDER&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;
&lt;span class="n"&gt;NEWEST_FIRST_ARCHIVES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In your theme’s &lt;tt class="docutils literal"&gt;index.html&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;tag.html&lt;/tt&gt; templates, change the &lt;tt class="docutils literal"&gt;object_list&lt;/tt&gt; loop to &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;object_list[::-1]&lt;/span&gt;&lt;/tt&gt; to reverse the order of the article list:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="cp"&gt;{%&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nv"&gt;article&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nv"&gt;articles_page.object_list&lt;/span&gt;&lt;span class="o"&gt;[::-&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="cp"&gt;%}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Make sure the pagination links below the list are changed to reflect the switched direction of “next” vs. “previous” articles. For example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="cp"&gt;{%&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nv"&gt;articles_page.has_next&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="cp"&gt;%}&lt;/span&gt;
&lt;span class="x"&gt;    &amp;lt;a class=&amp;quot;pagination-item newer&amp;quot; href=&amp;quot;&lt;/span&gt;&lt;span class="cp"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;SITEURL&lt;/span&gt; &lt;span class="cp"&gt;}}&lt;/span&gt;&lt;span class="x"&gt;/&lt;/span&gt;&lt;span class="cp"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;articles_next_page.url&lt;/span&gt; &lt;span class="cp"&gt;}}&lt;/span&gt;&lt;span class="x"&gt;&amp;quot;&amp;gt;next&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="x"&gt;    &lt;/span&gt;&lt;span class="cp"&gt;{%&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="cp"&gt;%}&lt;/span&gt;
&lt;span class="x"&gt;    &amp;lt;span class=&amp;quot;pagination-item newer&amp;quot;&amp;gt;next&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;{%&lt;/span&gt; &lt;span class="k"&gt;endif&lt;/span&gt; &lt;span class="cp"&gt;%}&lt;/span&gt;
&lt;span class="cp"&gt;{%&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nv"&gt;articles_page.has_previous&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="cp"&gt;%}&lt;/span&gt;
&lt;span class="x"&gt;    &amp;lt;a class=&amp;quot;pagination-item older&amp;quot; href=&amp;quot;&lt;/span&gt;&lt;span class="cp"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;SITEURL&lt;/span&gt; &lt;span class="cp"&gt;}}&lt;/span&gt;&lt;span class="x"&gt;/&lt;/span&gt;&lt;span class="cp"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;articles_previous_page.url&lt;/span&gt; &lt;span class="cp"&gt;}}&lt;/span&gt;&lt;span class="x"&gt;&amp;quot;&amp;gt;previous&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="x"&gt;    &lt;/span&gt;&lt;span class="cp"&gt;{%&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="cp"&gt;%}&lt;/span&gt;
&lt;span class="x"&gt;    &amp;lt;span class=&amp;quot;pagination-item older&amp;quot;&amp;gt;previous&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;{%&lt;/span&gt; &lt;span class="k"&gt;endif&lt;/span&gt; &lt;span class="cp"&gt;%}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;While this is general guidance and will apply differently depending on your chosen theme, hopefully the above helps you get further along experimenting with this new feature.&lt;/p&gt;
&lt;p&gt;This new release also includes the following enhancements, fixes, and tweaks:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Speed up &lt;tt class="docutils literal"&gt;livereload&lt;/tt&gt; Invoke task via caching &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/2847"&gt;(#2847)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ignore &lt;tt class="docutils literal"&gt;None&lt;/tt&gt; return value from &lt;tt class="docutils literal"&gt;get_generators&lt;/tt&gt; signal &lt;a class="reference external" href="https://github.com/getpelican/pelican/pull/2850"&gt;(#2850)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Relax dependency minimum versions and remove upper bounds&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more info, please refer to the &lt;a class="reference external" href="https://github.com/getpelican/pelican/releases/tag/4.6.0"&gt;release page&lt;/a&gt; or the &lt;a class="reference external" href="https://docs.getpelican.com/en/4.6.0/changelog.html"&gt;Release History&lt;/a&gt;
section of the documentation. For the full list of changes, see:
&lt;a class="reference external" href="https://github.com/getpelican/pelican/compare/4.5.4...4.6.0"&gt;https://github.com/getpelican/pelican/compare/4.5.4...4.6.0&lt;/a&gt;&lt;/p&gt;
&lt;div class="section" id="upgrading-from-previous-releases"&gt;
&lt;h2&gt;Upgrading from previous releases&lt;/h2&gt;
&lt;p&gt;Upgrading from Pelican 4.5.x should be smooth and require few (if any) changes to your environment. If upgrading from a previous release, review the other release announcements on this site to better understand what action might be necessary.&lt;/p&gt;
&lt;p&gt;As always, we do everything we can to maximize backwards compatibility and ensure
smooth Pelican upgrades. If you run into problems, please see the &lt;a class="reference external" href="https://docs.getpelican.com/en/latest/contribute.html#how-to-get-help"&gt;How to Get Help&lt;/a&gt; section
of the documentation, and we will update this post with any upgrade tips
contributed by the Pelican community.&lt;/p&gt;
&lt;/div&gt;
</content><category term="news"/></entry><entry><title>Migrating Plugins to New Organization</title><link href="https://getpelican.com/blog/namespace-plugin-migration/" rel="alternate"/><published>2021-02-15T00:00:00+01:00</published><updated>2025-05-13T00:00:00+02:00</updated><author><name>Pelican Contributors</name></author><id>tag:getpelican.com,2021-02-15:/blog/namespace-plugin-migration/</id><summary type="html">&lt;p&gt;So you want to help migrate a plugin? Great!&lt;/p&gt;
&lt;p&gt;If the plugin you want to migrate is located in the &lt;a href="https://github.com/getpelican/pelican-plugins"&gt;legacy monolithic Pelican Plugins repository&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Create an issue at the &lt;a href="https://github.com/getpelican/pelican-plugins"&gt;legacy monolithic Pelican Plugins repository&lt;/a&gt; and ask a maintainer to create a corresponding new repository under the new &lt;a href="https://github.com/pelican-plugins"&gt;Pelican Plugins …&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;So you want to help migrate a plugin? Great!&lt;/p&gt;
&lt;p&gt;If the plugin you want to migrate is located in the &lt;a href="https://github.com/getpelican/pelican-plugins"&gt;legacy monolithic Pelican Plugins repository&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Create an issue at the &lt;a href="https://github.com/getpelican/pelican-plugins"&gt;legacy monolithic Pelican Plugins repository&lt;/a&gt; and ask a maintainer to create a corresponding new repository under the new &lt;a href="https://github.com/pelican-plugins"&gt;Pelican Plugins organization&lt;/a&gt; and invite you to join it.&lt;/p&gt;
&lt;p&gt;If, on the other hand, you are migrating a plugin from a personal repository:&lt;/p&gt;
&lt;p&gt;Create an issue at the &lt;a href="https://github.com/getpelican/pelican-plugins"&gt;legacy monolithic Pelican Plugins repository&lt;/a&gt;, include a link to the personal repository, and ask a maintainer for assistance with the next steps.&lt;/p&gt;
&lt;h1 id="initial-setup-by-maintainer"&gt;Initial Setup (By Maintainer)&lt;/h1&gt;
&lt;p&gt;Create new repository via: &lt;a href="https://github.com/organizations/pelican-plugins/repositories/new"&gt;https://github.com/organizations/pelican-plugins/repositories/new&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;repository name should not contain the word “pelican”&lt;/li&gt;
&lt;li&gt;add description (example: “Pelican plugin that adds a table of contents to articles”)&lt;/li&gt;
&lt;li&gt;set to &lt;strong&gt;Public&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;do not&lt;/strong&gt; check the box marked: “Initialize this repository with a README”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;do not&lt;/strong&gt; add a &lt;code&gt;README&lt;/code&gt;, &lt;code&gt;.gitignore&lt;/code&gt;, or license file&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once the repository has been created:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Settings &amp;gt; Environments &amp;gt; New environment &amp;gt; Name: &lt;strong&gt;Deployment&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Settings &amp;gt; Pull Requests &amp;gt; check: Always suggest updating pull request branches&lt;/li&gt;
&lt;li&gt;Settings &amp;gt; Pull Requests &amp;gt; check: Automatically delete head branches&lt;/li&gt;
&lt;li&gt;Invite collaborators: Settings &amp;gt; Collaborators and teams &amp;gt; Manage access &amp;gt; Add people (button)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In order to ensure package publication automation functions correctly, be sure to log into PyPI and add a trusted publisher: &lt;a href="https://pypi.org/manage/account/publishing/"&gt;https://pypi.org/manage/account/publishing/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The following is performed on the maintainer’s workstation. Replace &lt;code&gt;related-posts&lt;/code&gt; below with the name of the to-be-migrated plugin.&lt;/p&gt;
&lt;p&gt;Clone the legacy monolithic repository:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cd ~/projects/pelican-plugins/
git clone https://github.com/getpelican/pelican-plugins related-posts-legacy
cd related-posts-legacy
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Filter existing commits related to the plugin via &lt;code&gt;git-filter-repo&lt;/code&gt; (which on MacOS can be installed via &lt;code&gt;brew install git-filter-repo&lt;/code&gt;, or if you have Pipx installed, via &lt;code&gt;pipx install git-filter-repo&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;git filter-repo --path related_posts/ --path-rename related_posts/:
git log --reverse  # copy full day+date+timestamp of first commit
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Create a new (empty) repository with an initial empty commit, using the above date:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;mkdir&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;related&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;related&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;posts&lt;/span&gt;
&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;init&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;initial&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;branch&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;
&lt;span class="n"&gt;GIT_COMMITTER_DATE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;Wed Apr 10 19:12:31 2013 -0400&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GIT_COMMITTER_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;Original Author Name&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GIT_COMMITTER_EMAIL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;original_author@email.tld&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;commit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;--allow-empty -m &amp;quot;Initial commit&amp;quot; --date=&amp;quot;$GIT_COMMITTER_DATE&amp;quot; --author=&amp;quot;$GIT_COMMITTER_NAME &amp;lt;$GIT_COMMITTER_EMAIL&amp;gt;&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Add the new repository as the &lt;code&gt;origin&lt;/code&gt; remote and push the initial commit:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;remote&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;origin&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="nv"&gt;@github&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nl"&gt;com&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;pelican&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;plugins&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;related&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt;
&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;origin&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Add legacy plugin clone as a remote and pull contents into new branch:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;git remote add legacy ../related-posts-legacy
git fetch legacy master
git checkout -b migrate --track legacy/master
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Rebase legacy plugin commits on top of new initial commit and push:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;git rebase --committer-date-is-author-date main
git push origin migrate
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1 id="updating-the-plugin"&gt;Updating the Plugin&lt;/h1&gt;
&lt;p&gt;Once a maintainer has created the new (empty) repository and pushed existing commits into a new &lt;code&gt;migrate&lt;/code&gt; branch, clone the new repository to your workstation and switch to that branch:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clone&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="nv"&gt;@github&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nl"&gt;com&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;pelican&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;plugins&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;related&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~/&lt;/span&gt;&lt;span class="n"&gt;projects&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;pelican&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;plugins&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;related&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;posts&lt;/span&gt;
&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~/&lt;/span&gt;&lt;span class="n"&gt;projects&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;pelican&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;plugins&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;related&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;posts&lt;/span&gt;
&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;switch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;migrate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Create the new directory structure and move the plugin code contents to it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mkdir -p pelican/plugins/related_posts
git mv *.py pelican/plugins/related_posts/
git commit --no-verify -m &amp;quot;Convert to namespace plugin filesystem layout&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Review the &lt;a href="https://github.com/getpelican/cookiecutter-pelican-plugin#pelican-plugin-cookiecutter-template"&gt;Pelican Plugin CookieCutter Template docs&lt;/a&gt; and use the template to generate a fresh project. Here we’ll use the Pipx-based method to ephemerally invoke &lt;a href="https://github.com/cruft/cruft"&gt;Cruft&lt;/a&gt; to generate a new plugin from the template:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cd ~
pipx run cruft create https://github.com/getpelican/cookiecutter-pelican-plugin
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Guidance follows for answering the Cookiecutter questions you will be asked. Except for &lt;code&gt;plugin_name&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;, &lt;code&gt;authors&lt;/code&gt;, &lt;code&gt;keywords&lt;/code&gt;, &lt;code&gt;license&lt;/code&gt;, and &lt;code&gt;dev_status&lt;/code&gt;, you should be able to just hit the &lt;code&gt;Return&lt;/code&gt; key to accept the provided default value.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;plugin_name&lt;/code&gt;: For multiple-word names, put a space in between words and use title case. Should not contain the word “pelican”. Ex: &lt;code&gt;Related Posts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;repo_name&lt;/code&gt;:  For multiple-word names, use a hyphen — not an underscore. Ex: &lt;code&gt;related-posts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;package_name&lt;/code&gt;: Hyphens should be converted to underscores here. Ex: &lt;code&gt;related_posts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;distribution_name&lt;/code&gt;: Prefixed with &lt;code&gt;pelican-&lt;/code&gt;. Ex: &lt;code&gt;pelican-related-posts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;version&lt;/code&gt;: Leave as &lt;code&gt;0.0.0&lt;/code&gt; default value, which will be incremented automatically via AutoPub upon initial distribution release.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;description&lt;/code&gt;: Copy &amp;amp; paste description from repository’s &lt;strong&gt;About&lt;/strong&gt; section&lt;/li&gt;
&lt;li&gt;&lt;code&gt;authors&lt;/code&gt;: Review source code and commit history to determine primary author, if any. Ask a maintainer if not clear. Ex: &lt;code&gt;{name = "Jane Smith", email = "jane@example.com"}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;keywords&lt;/code&gt;: Add relevant keywords, including &lt;code&gt;"pelican"&lt;/code&gt; and &lt;code&gt;"plugin"&lt;/code&gt;. Ex: &lt;code&gt;"pelican", "plugin", "table", "contents"&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;readme&lt;/code&gt;: Name of the README file. Ex: &lt;code&gt;README.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;contributing&lt;/code&gt;: Name of the README file. Ex: &lt;code&gt;CONTRIBUTING.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;license&lt;/code&gt;: Choose the same license as the original plugin.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;repo_url&lt;/code&gt;: URL to the repository. Ex: &lt;code&gt;https://github.com/pelican-plugins/related-posts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dev_status&lt;/code&gt;: Development status. Best to choose &lt;code&gt;5 - Production/Stable&lt;/code&gt; unless there’s a good reason not to. Ex: &lt;code&gt;5&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tests_exist&lt;/code&gt;: Whether tests currently exist for this plugin.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;python_version&lt;/code&gt;: Minimum Python version. Best to choose 3.9+. Ex: &lt;code&gt;~=3.9&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pelican_version&lt;/code&gt;: Minimum Pelican version. Best to choose 4.5+. Ex: &lt;code&gt;&amp;gt;=4.5&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Copy over the new files generated by the plugin template, none of which presumably exist in the existing repository:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cd ~/projects/pelican-plugins/
mv ~/related-posts ~/projects/pelican-plugins/related-posts-new
cp -R related-posts-new/{.editorconfig,.gitignore,.github,.pre-commit-config.yaml,CONTRIBUTING.md,pyproject.toml,tasks.py} related-posts/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Create a virtual environment and set up the project:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cd ~/projects/pelican-plugins/related-posts
python -m venv ~/virtualenvs/related-posts
source ~/virtualenvs/related-posts/bin/activate
python -m pip install --upgrade pip invoke
invoke setup
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Add any plugin dependencies to the &lt;code&gt;pyproject.toml&lt;/code&gt; file via &lt;code&gt;pdm add […]&lt;/code&gt; and adjust them in &lt;code&gt;pyproject.toml&lt;/code&gt; to ensure they are in alphabetical order. Then install those added dependencies via:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pdm update
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Compare the old and new README files, merging them such that the relevant parts of the template-generated README are present — particularly the build/PyPI status badges and the &lt;strong&gt;Installation&lt;/strong&gt; and &lt;strong&gt;Contributing&lt;/strong&gt; sections.&lt;/p&gt;
&lt;p&gt;Are there any tests? If not, now might be a good time to copy over the generated test file and then add some:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cp related-posts-new/pelican/plugins/related_posts/test_related_posts.py related-posts/pelican/plugins/related_posts/test_related_posts.py
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Confirm that the plugin is detected and registered:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pelican-plugins
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Run the test suite and ensure there are no failures or errors:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;invoke tests
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Test that the plugin actually works by building it and installing the packaged distribution:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pdm build
pip install dist/pelican-related-posts-0.0.0.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Fix functional issues, if any, and then commit Python code fixes with appropriate commit message(s):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;git add [...]
git commit --no-verify
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ensure code has been modernized for Python 3.9+, review the changed files, modify as necessary, and commit:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pipx run pyupgrade --py39-plus pelican/plugins/related_posts/*.py
git add [...]
git commit --no-verify -m &amp;quot;Modernize code for Python 3.9+&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Make sure the GitHub Actions CI/CD workflow refers to the repository’s actual primary branch name (e.g., &lt;code&gt;main&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;grep github\.ref .github/workflows/main.yml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Add and commit the new files related to code style:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;git add .editorconfig .pre-commit-config.yaml tasks.py .github
git commit --no-verify -m &amp;quot;Add code style and CI/CD configuration&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Apply code style formatting, ensure linting passes, and commit any code style changes:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;inv ruff --fix
inv format
inv lint
git add [...]
git commit -m &amp;quot;Apply code style conventions to project&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Add and commit &lt;code&gt;pyproject.toml&lt;/code&gt; and &lt;code&gt;.gitignore&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;git add pyproject.toml .gitignore
git commit -m &amp;quot;Add pyproject file to project&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Add and commit README changes and the CONTRIBUTING file:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;git add README.md CONTRIBUTING.md
git commit -m &amp;quot;Update README and add CONTRIBUTING&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Link to current version of the plugin template via Cruft:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;git add .cruft.json
git commit -m &amp;quot;Link to upstream plugin template via Cruft&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Assuming all new and changed files have been committed, push the branch and submit a pull request:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;git push origin migrate
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2 id="clean-up"&gt;Clean Up&lt;/h2&gt;
&lt;p&gt;Remove section from &lt;code&gt;.git/config&lt;/code&gt; that is no longer needed:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;git remote remove legacy
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Remove legacy clone and generated template files:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cd ~/projects/pelican-plugins/
trash related-posts-legacy related-posts-new
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Add a note at the top of the legacy plugin README in the deprecated monolithic repository indicating that the plugin has migrated. 🎉&lt;/p&gt;</content><category term="news"/></entry><entry><title>Pelican 4.5 released</title><link href="https://getpelican.com/blog/pelican-4.5-released/" rel="alternate"/><published>2020-08-20T00:00:00+02:00</published><updated>2020-08-20T00:00:00+02:00</updated><author><name>Pelican Contributors</name></author><id>tag:getpelican.com,2020-08-20:/blog/pelican-4.5-released/</id><summary type="html">&lt;p&gt;Pelican 4.5 is now available. Its marquee feature is support for “namespace” plugins, which means any plugin listed under the new &lt;a class="reference external" href="https://github.com/pelican-plugins"&gt;Pelican Plugins&lt;/a&gt; organization can be installed via Pip, after which Pelican should automatically detect and enable the new plugin.&lt;/p&gt;
&lt;p&gt;This also means that Pelican projects can specify and …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Pelican 4.5 is now available. Its marquee feature is support for “namespace” plugins, which means any plugin listed under the new &lt;a class="reference external" href="https://github.com/pelican-plugins"&gt;Pelican Plugins&lt;/a&gt; organization can be installed via Pip, after which Pelican should automatically detect and enable the new plugin.&lt;/p&gt;
&lt;p&gt;This also means that Pelican projects can specify and pin plugin versions, which helps ensure plugin updates do not cause unexpected problems building your site. For example, here we define a project’s Pelican and plugin versions via &lt;a class="reference external" href="https://python-poetry.org/"&gt;Poetry&lt;/a&gt; and &lt;tt class="docutils literal"&gt;pyproject.toml&lt;/tt&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;[tool.poetry.dependencies]&lt;/span&gt;
&lt;span class="n"&gt;pelican&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;^4.5&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;pelican-simple-footnotes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;^1.0&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;pelican-sitemap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;^1.0&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;pelican-webring&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;^1.0&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If one of the above plugins introduces a breaking change in v2.0, for example, there shouldn’t be any related disruption since above we have effectively pinned plugin versions to: &lt;tt class="docutils literal"&gt;&amp;gt;= 1.0, &amp;lt;2.0&lt;/tt&gt;&lt;/p&gt;
&lt;p&gt;This new release also includes the following enhancements, fixes, and tweaks:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;List registered plugins via &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;pelican-plugins&lt;/span&gt;&lt;/tt&gt; command&lt;/li&gt;
&lt;li&gt;Override settings via &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;-e&lt;/span&gt;&lt;/tt&gt; / &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;--extra-settings&lt;/span&gt;&lt;/tt&gt; CLI option flags&lt;/li&gt;
&lt;li&gt;Add settings for custom Jinja globals and tests&lt;/li&gt;
&lt;li&gt;Customize article summary ellipsis via &lt;tt class="docutils literal"&gt;SUMMARY_END_SUFFIX&lt;/tt&gt; setting&lt;/li&gt;
&lt;li&gt;Customize Typogrify dash handling via new &lt;tt class="docutils literal"&gt;TYPOGRIFY_DASHES&lt;/tt&gt; setting&lt;/li&gt;
&lt;li&gt;Support Unicode when generating slugs&lt;/li&gt;
&lt;li&gt;Support Asciidoc &lt;tt class="docutils literal"&gt;.adoc&lt;/tt&gt; file generation in Pelican importer&lt;/li&gt;
&lt;li&gt;Improve user experience when &lt;tt class="docutils literal"&gt;pelican &lt;span class="pre"&gt;--listen&lt;/span&gt;&lt;/tt&gt; web server is quit&lt;/li&gt;
&lt;li&gt;Improve Invoke tasks template&lt;/li&gt;
&lt;li&gt;Include tests in source distributions&lt;/li&gt;
&lt;li&gt;Switch CI from Travis to GitHub Actions&lt;/li&gt;
&lt;li&gt;Remove support for Python 2.7&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more info, please refer to the &lt;a class="reference external" href="https://github.com/getpelican/pelican/releases/tag/4.5.0"&gt;release page&lt;/a&gt; or the &lt;a class="reference external" href="https://docs.getpelican.com/en/4.5.0/changelog.html"&gt;Release History&lt;/a&gt;
section of the documentation. For a more comprehensive list of changes, please
review the respective &lt;a class="reference external" href="https://github.com/getpelican/pelican/milestone/16?closed=1"&gt;milestone&lt;/a&gt; for this release. For the full list of changes,
see: &lt;a class="reference external" href="https://github.com/getpelican/pelican/compare/4.2.0...4.5.0"&gt;https://github.com/getpelican/pelican/compare/4.2.0...4.5.0&lt;/a&gt;&lt;/p&gt;
&lt;div class="section" id="upgrading-from-previous-releases"&gt;
&lt;h2&gt;Upgrading from previous releases&lt;/h2&gt;
&lt;p&gt;First, since Python 2.7 support has been dropped, ensure you are using Python 3.6+.&lt;/p&gt;
&lt;p&gt;Next, if your site uses any Pelican plugins:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Have all your plugins been migrated to the new &lt;a class="reference external" href="https://github.com/pelican-plugins"&gt;Pelican Plugins&lt;/a&gt; organization? If so, you can Pip-install those plugins, comment out the &lt;tt class="docutils literal"&gt;PLUGINS&lt;/tt&gt; variable in your settings file, and ensure your site builds properly. If everything seems to be in order, you can remove the &lt;tt class="docutils literal"&gt;PLUGINS&lt;/tt&gt; setting as well as any local &lt;tt class="docutils literal"&gt;plugin&lt;/tt&gt; folders that contain legacy plugins.&lt;/li&gt;
&lt;li&gt;If you are using one or more plugins that have not yet been migrated to the new &lt;a class="reference external" href="https://github.com/pelican-plugins"&gt;Pelican Plugins&lt;/a&gt; organization, this is a great opportunity to contribute to Pelican by assisting with plugin migration. Create a new issue at the &lt;a class="reference external" href="https://github.com/getpelican/pelican-plugins/issues"&gt;legacy plugin repo&lt;/a&gt; and communicate which plugin you would like to help migrate, after which a Pelican maintainer will guide you through the process.&lt;/li&gt;
&lt;li&gt;If you want to use a mix of namespace &amp;amp; legacy plugins, or if you prefer to manually specify plugins instead of relying on Pelican’s automatic detection, you can use the &lt;tt class="docutils literal"&gt;PLUGINS&lt;/tt&gt; setting as described in the &lt;a class="reference external" href="https://docs.getpelican.com/en/latest/plugins.html#how-to-use-plugins"&gt;How to Use Plugins&lt;/a&gt; documentation.&lt;/li&gt;
&lt;li&gt;Importing from &lt;tt class="docutils literal"&gt;pelican.signals&lt;/tt&gt; is deprecated. If your plugin uses that pattern, please notify the plugin author to update the code to use &lt;tt class="docutils literal"&gt;from pelican import signals&lt;/tt&gt; or &lt;tt class="docutils literal"&gt;import pelican.plugins.signals&lt;/tt&gt; instead.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As always, we do everything we can to maximize backwards compatibility and ensure
smooth Pelican upgrades. If you run into problems, please see the &lt;a class="reference external" href="https://docs.getpelican.com/en/latest/contribute.html#how-to-get-help"&gt;How to Get Help&lt;/a&gt; section
of the documentation, and we will update this post with any upgrade tips
contributed by the Pelican community.&lt;/p&gt;
&lt;/div&gt;
</content><category term="news"/></entry><entry><title>Pelican Sprint — Fall 2019</title><link href="https://getpelican.com/blog/sprint-2019-fall/" rel="alternate"/><published>2019-10-18T00:00:00+02:00</published><updated>2019-10-18T00:00:00+02:00</updated><author><name>Pelican Contributors</name></author><id>tag:getpelican.com,2019-10-18:/blog/sprint-2019-fall/</id><summary type="html">&lt;p&gt;In the spirit of Hacktoberfest, we will be conducting an informal sprint on Sunday, 20 October. One of the goals for this sprint is to migrate plugins from the current monolithic repository to individual, community-shared repositories. The following issues will provide some historical background for those who want to learn …&lt;/p&gt;</summary><content type="html">&lt;p&gt;In the spirit of Hacktoberfest, we will be conducting an informal sprint on Sunday, 20 October. One of the goals for this sprint is to migrate plugins from the current monolithic repository to individual, community-shared repositories. The following issues will provide some historical background for those who want to learn more:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://github.com/getpelican/pelican/issues/1488"&gt;https://github.com/getpelican/pelican/issues/1488&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://github.com/getpelican/pelican-plugins/issues/425"&gt;https://github.com/getpelican/pelican-plugins/issues/425&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please &lt;a class="reference external" href="http://docs.getpelican.com/en/stable/contribute.html#the-pelican-irc-channel"&gt;join us via IRC&lt;/a&gt; this Sunday! Due to time differences, some folks will start earlier than others, so please be patient and stick around even if there isn't much activity there.&lt;/p&gt;
&lt;p&gt;Looking forward to collaborating with you!&lt;/p&gt;
</content><category term="news"/></entry><entry><title>Pelican 4.1 released</title><link href="https://getpelican.com/blog/pelican-4.1-released/" rel="alternate"/><published>2019-07-14T00:00:00+02:00</published><updated>2019-07-14T00:00:00+02:00</updated><author><name>Pelican Contributors</name></author><id>tag:getpelican.com,2019-07-14:/blog/pelican-4.1-released/</id><summary type="html">&lt;p&gt;Pelican 4.1 has been released and includes the following enhancements, fixes,
and tweaks:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Live browser reload upon changed files (provided via Invoke task)&lt;/li&gt;
&lt;li&gt;Add &lt;tt class="docutils literal"&gt;pyproject.toml&lt;/tt&gt;, managed by Poetry&lt;/li&gt;
&lt;li&gt;Support for invoking &lt;tt class="docutils literal"&gt;python &lt;span class="pre"&gt;-m&lt;/span&gt; pelican&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;Add relative source path attribute to content&lt;/li&gt;
&lt;li&gt;Allow directories in &lt;tt class="docutils literal"&gt;EXTRA_PATH_METADATA&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;Add &lt;tt class="docutils literal"&gt;all_articles&lt;/tt&gt; variable …&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;p&gt;Pelican 4.1 has been released and includes the following enhancements, fixes,
and tweaks:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Live browser reload upon changed files (provided via Invoke task)&lt;/li&gt;
&lt;li&gt;Add &lt;tt class="docutils literal"&gt;pyproject.toml&lt;/tt&gt;, managed by Poetry&lt;/li&gt;
&lt;li&gt;Support for invoking &lt;tt class="docutils literal"&gt;python &lt;span class="pre"&gt;-m&lt;/span&gt; pelican&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;Add relative source path attribute to content&lt;/li&gt;
&lt;li&gt;Allow directories in &lt;tt class="docutils literal"&gt;EXTRA_PATH_METADATA&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;Add &lt;tt class="docutils literal"&gt;all_articles&lt;/tt&gt; variable to period pages (for recent posts functionality)&lt;/li&gt;
&lt;li&gt;Improve debug mode output&lt;/li&gt;
&lt;li&gt;Remove blank or duplicate summaries from Atom feed&lt;/li&gt;
&lt;li&gt;Fix bugs in pagination, pelican-import, pelican-quickstart, and feed importer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more info, please refer to the &lt;a class="reference external" href="https://github.com/getpelican/pelican/releases/tag/4.1.0"&gt;release page&lt;/a&gt; or the &lt;a class="reference external" href="https://docs.getpelican.com/en/4.1.0/changelog.html"&gt;Release History&lt;/a&gt;
section of the documentation. For a more comprehensive list of changes, please
review the respective &lt;a class="reference external" href="https://github.com/getpelican/pelican/milestone/14?closed=1"&gt;milestone&lt;/a&gt; for this release. For the full list of changes,
see: &lt;a class="reference external" href="https://github.com/getpelican/pelican/compare/4.0.1...4.1.0"&gt;https://github.com/getpelican/pelican/compare/4.0.1...4.1.0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As always, we do everything we can to maximize backwards compatibility and ensure
smooth Pelican upgrades. If you run into problems, please see the &lt;a class="reference external" href="https://docs.getpelican.com/en/latest/contribute.html#how-to-get-help"&gt;How to Get Help&lt;/a&gt; section
of the documentation, and we will update this post with any upgrade tips
contributed by the Pelican community.&lt;/p&gt;
</content><category term="news"/></entry><entry><title>Pelican 4.0 released</title><link href="https://getpelican.com/blog/pelican-4.0-released/" rel="alternate"/><published>2018-11-13T00:00:00+01:00</published><updated>2018-11-13T00:00:00+01:00</updated><author><name>Pelican Contributors</name></author><id>tag:getpelican.com,2018-11-13:/blog/pelican-4.0-released/</id><summary type="html">&lt;p&gt;Pelican 4.0 has been released, including many enhancements, fixes, and tweaks.
Highlights include:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Replace &lt;tt class="docutils literal"&gt;develop_server.sh&lt;/tt&gt; script with &lt;tt class="docutils literal"&gt;pelican &lt;span class="pre"&gt;--listen&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;Improved copy/link behavior for large static files (e.g., videos)&lt;/li&gt;
&lt;li&gt;New &lt;tt class="docutils literal"&gt;{static}&lt;/tt&gt; syntax to link to static content&lt;/li&gt;
&lt;li&gt;Pages can now have &lt;tt class="docutils literal"&gt;draft&lt;/tt&gt; status&lt;/li&gt;
&lt;li&gt;Show current settings via …&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;p&gt;Pelican 4.0 has been released, including many enhancements, fixes, and tweaks.
Highlights include:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Replace &lt;tt class="docutils literal"&gt;develop_server.sh&lt;/tt&gt; script with &lt;tt class="docutils literal"&gt;pelican &lt;span class="pre"&gt;--listen&lt;/span&gt;&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;Improved copy/link behavior for large static files (e.g., videos)&lt;/li&gt;
&lt;li&gt;New &lt;tt class="docutils literal"&gt;{static}&lt;/tt&gt; syntax to link to static content&lt;/li&gt;
&lt;li&gt;Pages can now have &lt;tt class="docutils literal"&gt;draft&lt;/tt&gt; status&lt;/li&gt;
&lt;li&gt;Show current settings via new &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;--print-settings&lt;/span&gt;&lt;/tt&gt; flag&lt;/li&gt;
&lt;li&gt;Replace Fabric’s &lt;tt class="docutils literal"&gt;fabfile.py&lt;/tt&gt; with Invoke’s &lt;tt class="docutils literal"&gt;task.py&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;Importer improvements&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more info, please refer to the &lt;a class="reference external" href="https://github.com/getpelican/pelican/releases/tag/4.0.0"&gt;release page&lt;/a&gt; or the &lt;a class="reference external" href="https://docs.getpelican.com/en/4.0.0/changelog.html"&gt;Release History&lt;/a&gt;
section of the documentation. For a more comprehensive list of changes, please
review the respective &lt;a class="reference external" href="https://github.com/getpelican/pelican/milestone/12?closed=1"&gt;milestone&lt;/a&gt; for this release. For the full list of changes,
see: &lt;a class="reference external" href="https://github.com/getpelican/pelican/compare/3.7.1...4.0.0"&gt;https://github.com/getpelican/pelican/compare/3.7.1...4.0.0&lt;/a&gt;&lt;/p&gt;
&lt;div class="section" id="upgrading-from-previous-releases"&gt;
&lt;h2&gt;Upgrading from previous releases&lt;/h2&gt;
&lt;p&gt;You may see deprecation warnings for certain settings. If that occurs, please
change the specified setting to the new setting mentioned in the deprecation
message.&lt;/p&gt;
&lt;p&gt;Due to &lt;a class="reference external" href="https://github.com/getpelican/pelican/issues/2493"&gt;Python-Markdown changes&lt;/a&gt;, Markdown users must ensure they are using
version &amp;lt; 3.0 or &amp;gt;= 3.1 to ensure proper rendering of code blocks.&lt;/p&gt;
&lt;p&gt;Some user-submitted themes use positional argument formatting on object-related
feed URLs, which will cause sites to fail to build with: &amp;quot;TypeError: not all
arguments converted during string formatting&amp;quot;. In that case, the theme needs to
be updated. For example, substitute &lt;tt class="docutils literal"&gt;TAG_FEED_ATOM|format(tag.slug)&lt;/tt&gt; with
&lt;tt class="docutils literal"&gt;TAG_FEED_ATOM.format(slug=tag.slug)&lt;/tt&gt;. Affected variables include:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;CATEGORY_FEED_ATOM&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;CATEGORY_FEED_ATOM_URL&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;CATEGORY_FEED_RSS&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;CATEGORY_FEED_RSS_URL&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;AUTHOR_FEED_ATOM&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;AUTHOR_FEED_ATOM_URL&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;AUTHOR_FEED_RSS&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;AUTHOR_FEED_RSS_URL&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;TAG_FEED_ATOM&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;TAG_FEED_ATOM_URL&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;TAG_FEED_RSS&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As always, we do everything we can to maximize backwards compatibility and ensure
smooth Pelican upgrades. If you run into problems, please see the &lt;a class="reference external" href="https://docs.getpelican.com/en/latest/contribute.html#how-to-get-help"&gt;How to Get Help&lt;/a&gt; section
of the documentation, and we will update this post with any upgrade tips
contributed by the Pelican community.&lt;/p&gt;
&lt;/div&gt;
</content><category term="news"/></entry><entry><title>Pelican 3.7 released</title><link href="https://getpelican.com/blog/pelican-3.7-released/" rel="alternate"/><published>2016-12-12T00:00:00+01:00</published><updated>2016-12-12T00:00:00+01:00</updated><author><name>Pelican Contributors</name></author><id>tag:getpelican.com,2016-12-12:/blog/pelican-3.7-released/</id><summary type="html">&lt;p&gt;Pelican 3.7 has been released, incorporating a year and a half worth of
enhancements and bug fixes.&lt;/p&gt;
&lt;p&gt;To see highlights, please refer to the &lt;a class="reference external" href="https://github.com/getpelican/pelican/releases/tag/3.7.0"&gt;release page&lt;/a&gt; or the &lt;a class="reference external" href="http://docs.getpelican.com/en/3.7.0/changelog.html"&gt;Release History&lt;/a&gt;
section of the documentation. For a more comprehensive list of changes, please
review the respective &lt;a class="reference external" href="https://github.com/getpelican/pelican/milestone/9?closed=1"&gt;milestone&lt;/a&gt; for this release …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Pelican 3.7 has been released, incorporating a year and a half worth of
enhancements and bug fixes.&lt;/p&gt;
&lt;p&gt;To see highlights, please refer to the &lt;a class="reference external" href="https://github.com/getpelican/pelican/releases/tag/3.7.0"&gt;release page&lt;/a&gt; or the &lt;a class="reference external" href="http://docs.getpelican.com/en/3.7.0/changelog.html"&gt;Release History&lt;/a&gt;
section of the documentation. For a more comprehensive list of changes, please
review the respective &lt;a class="reference external" href="https://github.com/getpelican/pelican/milestone/9?closed=1"&gt;milestone&lt;/a&gt; for this release. For the full list of changes,
see: &lt;a class="reference external" href="https://github.com/getpelican/pelican/compare/3.6.3...3.7.0"&gt;https://github.com/getpelican/pelican/compare/3.6.3...3.7.0&lt;/a&gt;&lt;/p&gt;
&lt;div class="section" id="upgrading-from-previous-releases"&gt;
&lt;h2&gt;Upgrading from previous releases&lt;/h2&gt;
&lt;p&gt;Unlike Atom, the RSS feed specification does not contain a &lt;tt class="docutils literal"&gt;&amp;lt;content&amp;gt;&lt;/tt&gt; field
and only contains a &lt;tt class="docutils literal"&gt;&amp;lt;summary&amp;gt;&lt;/tt&gt; field. Pelican previously put the full content
in this field, which could cause odd behavior in feed readers that only expected
a summary. For this reason, RSS feeds in Pelican 3.7 will by default only contain
article summaries. To revert to the previous full-content behavior, either
use Atom (which supports both &lt;tt class="docutils literal"&gt;&amp;lt;summary&amp;gt;&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;&amp;lt;content&amp;gt;&lt;/tt&gt; fields) or set:
&lt;tt class="docutils literal"&gt;RSS_FEED_SUMMARY_ONLY = False&lt;/tt&gt;&lt;/p&gt;
&lt;p&gt;If you have defined &lt;tt class="docutils literal"&gt;MD_EXTENSIONS&lt;/tt&gt; in your settings file, you will see
deprecation warnings since that setting has been replaced by the &lt;tt class="docutils literal"&gt;MARKDOWN&lt;/tt&gt;
setting in Pelican 3.7. Refer to the corresponding entry in the &lt;a class="reference external" href="http://docs.getpelican.com/en/3.7.0/settings.html"&gt;Settings&lt;/a&gt;
documentation to see the new default value and replace any existing
&lt;tt class="docutils literal"&gt;MD_EXTENSIONS&lt;/tt&gt; settings with your preferred customized variation of the
&lt;tt class="docutils literal"&gt;MARKDOWN&lt;/tt&gt; setting.&lt;/p&gt;
&lt;p&gt;Themes originally had access to two identical context variables: &lt;tt class="docutils literal"&gt;PAGES&lt;/tt&gt; and
&lt;tt class="docutils literal"&gt;pages&lt;/tt&gt;. This redundancy was removed in Pelican 3.7, so any themes that use
&lt;tt class="docutils literal"&gt;PAGES&lt;/tt&gt; will need to be updated to use &lt;tt class="docutils literal"&gt;pages&lt;/tt&gt; instead.&lt;/p&gt;
&lt;p&gt;&lt;tt class="docutils literal"&gt;JINJA_EXTENSIONS&lt;/tt&gt; has been replaced by the &lt;tt class="docutils literal"&gt;JINJA_ENVIRONMENT&lt;/tt&gt; setting.
Any plugins that refer to the former setting will need to be updated. Refer to
the corresponding entry in the &lt;a class="reference external" href="http://docs.getpelican.com/en/3.7.0/settings.html"&gt;Settings&lt;/a&gt; documentation for more information.&lt;/p&gt;
&lt;p&gt;As always, we do everything we can to maximize backwards compatibility and ensure
smooth Pelican upgrades. If you run into problems, please see the &lt;a class="reference external" href="http://docs.getpelican.com/en/latest/contribute.html#how-to-get-help"&gt;How to Get Help&lt;/a&gt; section
of the documentation, and we will update this post with any upgrade tips
contributed by the Pelican community.&lt;/p&gt;
&lt;/div&gt;
</content><category term="news"/></entry><entry><title>Pelican 3.6 released</title><link href="https://getpelican.com/blog/pelican-3.6-released/" rel="alternate"/><published>2015-06-15T00:00:00+02:00</published><updated>2015-06-15T00:00:00+02:00</updated><author><name>Pelican Contributors</name></author><id>tag:getpelican.com,2015-06-15:/blog/pelican-3.6-released/</id><summary type="html">&lt;p&gt;Pelican 3.6 has been released. Highlights of the improvements contained in this
release follow below.&lt;/p&gt;
&lt;p&gt;For those who are new to Pelican, please refer to the &lt;a class="reference external" href="http://docs.getpelican.com/en/latest/quickstart.html"&gt;Quickstart Guide&lt;/a&gt;. There is also a
&lt;a class="reference external" href="https://github.com/getpelican/pelican/wiki/Tutorials"&gt;Tutorials&lt;/a&gt; page
available, which also includes a link to a Pelican installation screencast.&lt;/p&gt;
&lt;div class="section" id="highlights"&gt;
&lt;h2&gt;Highlights&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Disable caching by …&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;Pelican 3.6 has been released. Highlights of the improvements contained in this
release follow below.&lt;/p&gt;
&lt;p&gt;For those who are new to Pelican, please refer to the &lt;a class="reference external" href="http://docs.getpelican.com/en/latest/quickstart.html"&gt;Quickstart Guide&lt;/a&gt;. There is also a
&lt;a class="reference external" href="https://github.com/getpelican/pelican/wiki/Tutorials"&gt;Tutorials&lt;/a&gt; page
available, which also includes a link to a Pelican installation screencast.&lt;/p&gt;
&lt;div class="section" id="highlights"&gt;
&lt;h2&gt;Highlights&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Disable caching by default in order to prevent potential confusion&lt;/li&gt;
&lt;li&gt;Improve caching behavior, replacing &lt;tt class="docutils literal"&gt;pickle&lt;/tt&gt; with &lt;tt class="docutils literal"&gt;cpickle&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;Allow Markdown or reST content in metadata fields other than &lt;tt class="docutils literal"&gt;summary&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;Support semicolon-separated author/tag lists&lt;/li&gt;
&lt;li&gt;Improve flexibility of article sorting&lt;/li&gt;
&lt;li&gt;Add &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;--relative-urls&lt;/span&gt;&lt;/tt&gt; argument&lt;/li&gt;
&lt;li&gt;Support devserver listening on addresses other than localhost&lt;/li&gt;
&lt;li&gt;Unify HTTP server handlers to &lt;tt class="docutils literal"&gt;pelican.server&lt;/tt&gt; throughout&lt;/li&gt;
&lt;li&gt;Handle intra-site links to draft posts&lt;/li&gt;
&lt;li&gt;Move &lt;tt class="docutils literal"&gt;tag_cloud&lt;/tt&gt; from core to plugin&lt;/li&gt;
&lt;li&gt;Load default theme's external resources via HTTPS&lt;/li&gt;
&lt;li&gt;Import drafts from WordPress XML&lt;/li&gt;
&lt;li&gt;Improve support for Windows users&lt;/li&gt;
&lt;li&gt;Enhance logging and test suite&lt;/li&gt;
&lt;li&gt;Clean up and refactor codebase&lt;/li&gt;
&lt;li&gt;New signals: &lt;tt class="docutils literal"&gt;all_generators_finalized&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;page_writer_finalized&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a full list of changes, see: &lt;a class="reference external" href="https://github.com/getpelican/pelican/compare/3.5.0...3.6.0"&gt;https://github.com/getpelican/pelican/compare/3.5.0...3.6.0&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="upgrading-from-previous-releases"&gt;
&lt;h2&gt;Upgrading from previous releases&lt;/h2&gt;
&lt;p&gt;&lt;a class="reference external" href="http://docs.getpelican.com/en/latest/settings.html#reading-only-modified-content"&gt;Content generation caching&lt;/a&gt;
is now disabled by default. If you have a large site with many articles/pages
and notice that site generation takes longer than you would prefer, follow
these two steps:&lt;/p&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt;&lt;p class="first"&gt;Delete the &lt;tt class="docutils literal"&gt;cache&lt;/tt&gt; folder, if it exists&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Add the following to your settings file:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
CACHE_CONTENT = True
LOAD_CONTENT_CACHE = True
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;While we do everything we can to maximize backwards compatibility and ensure
smooth Pelican upgrades, it's possible that you may encounter un-anticipated
wrinkles. If you run into problems, please see the &lt;a class="reference external" href="http://docs.getpelican.com/en/latest/contribute.html#how-to-get-help"&gt;How to Get Help&lt;/a&gt; section
of the documentation, and we will update this post with any upgrade tips
contributed by the Pelican community.&lt;/p&gt;
&lt;/div&gt;
</content><category term="news"/></entry><entry><title>Pelican 3.5 released</title><link href="https://getpelican.com/blog/pelican-3.5-released/" rel="alternate"/><published>2014-11-20T00:00:00+01:00</published><updated>2014-11-20T00:00:00+01:00</updated><author><name>Pelican Contributors</name></author><id>tag:getpelican.com,2014-11-20:/blog/pelican-3.5-released/</id><summary type="html">&lt;p&gt;Today we are pleased to announce the release of Pelican 3.5. Highlights of the
improvements contained in this release follow below.&lt;/p&gt;
&lt;p&gt;For those who are new to Pelican, please refer to the &lt;a class="reference external" href="http://docs.getpelican.com/en/3.5.0/quickstart.html"&gt;Quickstart Guide&lt;/a&gt;. There is also a
&lt;a class="reference external" href="https://github.com/getpelican/pelican/wiki/Tutorials"&gt;Tutorials&lt;/a&gt; page
available, which currently includes a link to a Pelican …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Today we are pleased to announce the release of Pelican 3.5. Highlights of the
improvements contained in this release follow below.&lt;/p&gt;
&lt;p&gt;For those who are new to Pelican, please refer to the &lt;a class="reference external" href="http://docs.getpelican.com/en/3.5.0/quickstart.html"&gt;Quickstart Guide&lt;/a&gt;. There is also a
&lt;a class="reference external" href="https://github.com/getpelican/pelican/wiki/Tutorials"&gt;Tutorials&lt;/a&gt; page
available, which currently includes a link to a Pelican installation
screencast.&lt;/p&gt;
&lt;div class="section" id="highlights"&gt;
&lt;h2&gt;Highlights&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Introduce &lt;tt class="docutils literal"&gt;ARTICLE_ORDER_BY&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;PAGE_ORDER_BY&lt;/tt&gt; settings to control the
order of articles and pages.&lt;/li&gt;
&lt;li&gt;Include time zone information in dates rendered in templates.&lt;/li&gt;
&lt;li&gt;Expose the reader name in the metadata for articles and pages.&lt;/li&gt;
&lt;li&gt;Allow storing static files in the same directory as content source files,
without causing the raw content sources to be published.&lt;/li&gt;
&lt;li&gt;Introduce the &lt;tt class="docutils literal"&gt;{attach}&lt;/tt&gt; internal link syntax for placing a static file in
the same output directory as the document that links to it.&lt;/li&gt;
&lt;li&gt;Prevent Pelican from raising an exception when there are duplicate pieces of
metadata in a Markdown file.&lt;/li&gt;
&lt;li&gt;Introduce the &lt;tt class="docutils literal"&gt;TYPOGRIFY_IGNORE_TAGS&lt;/tt&gt; setting to add HTML tags to be ignored
by Typogrify.&lt;/li&gt;
&lt;li&gt;Add the ability to use &lt;tt class="docutils literal"&gt;-&lt;/tt&gt; in date formats to strip leading zeros. For
example, &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;%-d/%-m/%y&lt;/span&gt;&lt;/tt&gt; will now result in the date &lt;tt class="docutils literal"&gt;9/8/12&lt;/tt&gt;.&lt;/li&gt;
&lt;li&gt;Ensure feed generation is correctly disabled during quickstart configuration.&lt;/li&gt;
&lt;li&gt;Fix &lt;tt class="docutils literal"&gt;PAGE_EXCLUDES&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;ARTICLE_EXCLUDES&lt;/tt&gt; from incorrectly matching
sub-directories.&lt;/li&gt;
&lt;li&gt;Introduce &lt;tt class="docutils literal"&gt;STATIC_EXCLUDE&lt;/tt&gt; setting to add static file excludes.&lt;/li&gt;
&lt;li&gt;Fix an issue when using &lt;tt class="docutils literal"&gt;PAGINATION_PATTERNS&lt;/tt&gt; while &lt;tt class="docutils literal"&gt;RELATIVE_URLS&lt;/tt&gt;
is enabled.&lt;/li&gt;
&lt;li&gt;Fix feed generation causing links to use the wrong language for month
names when using other locales.&lt;/li&gt;
&lt;li&gt;Fix an issue where the authors list in the simple template wasn't correctly
formatted.&lt;/li&gt;
&lt;li&gt;Fix an issue when parsing non-string URLs from settings.&lt;/li&gt;
&lt;li&gt;Improve consistency of debug and warning messages.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a full list of changes, see: &lt;a class="reference external" href="https://github.com/getpelican/pelican/compare/3.4.0...3.5.0"&gt;https://github.com/getpelican/pelican/compare/3.4.0...3.5.0&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="upgrading-from-previous-releases"&gt;
&lt;h2&gt;Upgrading from previous releases&lt;/h2&gt;
&lt;p&gt;While we do everything we can to maximize backwards compatibility and ensure
smooth Pelican upgrades, it's possible that you may encounter un-anticipated
wrinkles. If you run into problems, please reach out via the #pelican channel
on IRC, and we will update this post with any upgrade tips contributed by the
Pelican community.&lt;/p&gt;
&lt;/div&gt;
</content><category term="news"/></entry><entry><title>Pelican 3.4 released</title><link href="https://getpelican.com/blog/pelican-3.4-released/" rel="alternate"/><published>2014-07-01T00:00:00+02:00</published><updated>2014-07-01T00:00:00+02:00</updated><author><name>Pelican Contributors</name></author><id>tag:getpelican.com,2014-07-01:/blog/pelican-3.4-released/</id><summary type="html">&lt;p&gt;Today we are pleased to announce the release of Pelican 3.4, which is one of
the more significant updates Pelican has ever seen. Take a look at the &lt;a class="reference external" href="https://github.com/getpelican/pelican/blob/master/docs/changelog.rst"&gt;changelog&lt;/a&gt; and
the &lt;a class="reference external" href="https://github.com/getpelican/pelican/issues?milestone=6&amp;amp;state=closed"&gt;Pelican 3.4 milestone issues&lt;/a&gt; list
to see all the features, fixes, and miscellaneous improvements that are
included …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Today we are pleased to announce the release of Pelican 3.4, which is one of
the more significant updates Pelican has ever seen. Take a look at the &lt;a class="reference external" href="https://github.com/getpelican/pelican/blob/master/docs/changelog.rst"&gt;changelog&lt;/a&gt; and
the &lt;a class="reference external" href="https://github.com/getpelican/pelican/issues?milestone=6&amp;amp;state=closed"&gt;Pelican 3.4 milestone issues&lt;/a&gt; list
to see all the features, fixes, and miscellaneous improvements that are
included in this release.&lt;/p&gt;
&lt;div class="section" id="major-highlights"&gt;
&lt;h2&gt;Major highlights&lt;/h2&gt;
&lt;div class="section" id="faster-rebuild-times"&gt;
&lt;h3&gt;Faster rebuild times&lt;/h3&gt;
&lt;p&gt;Thanks to a new caching mechanism and selective output writing, rebuilding
a site can take just a few seconds. Tinkering with posts and themes is now
even easier.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="fixed-locale-and-encoding-issues"&gt;
&lt;h3&gt;Fixed locale and encoding issues&lt;/h3&gt;
&lt;p&gt;Finally URLs can include, for example, localized month names.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="improved-documentation-both-in-style-and-content"&gt;
&lt;h3&gt;Improved documentation, both in style and content&lt;/h3&gt;
&lt;p&gt;The documentation has been ported to the new ReadTheDocs theme, including a
functional search bar and a navigation side panel. A quickstart section is now
provided to jump-start your Pelican experience.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="support-for-multiple-post-authors"&gt;
&lt;h3&gt;Support for multiple post authors&lt;/h3&gt;
&lt;p&gt;The new &lt;tt class="docutils literal"&gt;:authors:&lt;/tt&gt; metadata field makes it possible to easily manage
multi-user sites.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="upgrading-from-previous-releases"&gt;
&lt;h2&gt;Upgrading from previous releases&lt;/h2&gt;
&lt;p&gt;While we do everything we can to maximize backwards compatibility and ensure
smooth Pelican upgrades, it's possible that you may encounter un-anticipated
wrinkles. If you run into problems, please reach out via the #pelican channel
on IRC, and we will update this post with any upgrade tips contributed by the
Pelican community.&lt;/p&gt;
&lt;/div&gt;
</content><category term="news"/></entry><entry><title>I18N Subsites plugin released</title><link href="https://getpelican.com/blog/i18n-subsites-plugin-released/" rel="alternate"/><published>2014-02-05T00:00:00+01:00</published><updated>2014-02-05T00:00:00+01:00</updated><author><name>Ondřej Grover</name></author><id>tag:getpelican.com,2014-02-05:/blog/i18n-subsites-plugin-released/</id><summary type="html">&lt;p&gt;Pelican has supported article and page translations &lt;a class="reference external" href="https://github.com/getpelican/pelican/blob/master/docs/changelog.rst#26-2011-03-08"&gt;since version 2.6&lt;/a&gt;.
However, this functionality does not include translations of themes or the site name, something many have asked for.&lt;/p&gt;
&lt;p&gt;The new I18N Subsites plugin makes it simple to:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;override settings for each language, e.g. &lt;tt class="docutils literal"&gt;SITENAME&lt;/tt&gt; or &lt;tt class="docutils literal"&gt;MENUITEMS&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;translate and …&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;p&gt;Pelican has supported article and page translations &lt;a class="reference external" href="https://github.com/getpelican/pelican/blob/master/docs/changelog.rst#26-2011-03-08"&gt;since version 2.6&lt;/a&gt;.
However, this functionality does not include translations of themes or the site name, something many have asked for.&lt;/p&gt;
&lt;p&gt;The new I18N Subsites plugin makes it simple to:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;override settings for each language, e.g. &lt;tt class="docutils literal"&gt;SITENAME&lt;/tt&gt; or &lt;tt class="docutils literal"&gt;MENUITEMS&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;translate and localize themes using &lt;tt class="docutils literal"&gt;jinja2.ext.i18n&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;automatically create translated subsites such as &lt;a class="reference external" href="http://example.com/fr/"&gt;http://example.com/fr/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The new plugin is available in the &lt;a class="reference external" href="https://github.com/getpelican/pelican-plugins/tree/master/i18n_subsites"&gt;Pelican plugin repository&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A &lt;a class="reference external" href="http://smartass101.github.io/pelican-plugins/"&gt;demo site&lt;/a&gt; has been put up to showcase the plugin.
You can use the &lt;a class="reference external" href="https://github.com/smartass101/pelican-plugins/tree/gh-pages_source"&gt;demo site source&lt;/a&gt; as a reference for using the plugin in your own site.&lt;/p&gt;
&lt;p&gt;Although this plugin has been tested, it is quite possible that you will find some bugs or inconvenient behavior as it is very new. Do not hesitate to file an issue!&lt;/p&gt;
&lt;p&gt;Finally, I would like to thank the Pelican developers for implementing and designing Pelican so well that making this plugin was straightforward, fast, and fun.&lt;/p&gt;
</content><category term="news"/></entry><entry><title>Pelican 3.3 released</title><link href="https://getpelican.com/blog/pelican-3.3-released/" rel="alternate"/><published>2013-09-24T00:00:00+02:00</published><updated>2013-09-24T00:00:00+02:00</updated><author><name>Pelican Contributors</name></author><id>tag:getpelican.com,2013-09-24:/blog/pelican-3.3-released/</id><summary type="html">&lt;p&gt;Today we are pleased to announce the release of Pelican 3.3. Highlights of the
improvements contained in this release follow below.&lt;/p&gt;
&lt;p&gt;For those who are new to Pelican, please refer to the &lt;a class="reference external" href="http://docs.getpelican.com/en/3.3.0/getting_started.html"&gt;Getting Started Guide&lt;/a&gt;. There is also a
&lt;a class="reference external" href="https://github.com/getpelican/pelican/wiki/Tutorials"&gt;Tutorials&lt;/a&gt; page
available, which currently includes a link to a …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Today we are pleased to announce the release of Pelican 3.3. Highlights of the
improvements contained in this release follow below.&lt;/p&gt;
&lt;p&gt;For those who are new to Pelican, please refer to the &lt;a class="reference external" href="http://docs.getpelican.com/en/3.3.0/getting_started.html"&gt;Getting Started Guide&lt;/a&gt;. There is also a
&lt;a class="reference external" href="https://github.com/getpelican/pelican/wiki/Tutorials"&gt;Tutorials&lt;/a&gt; page
available, which currently includes a link to a Pelican installation
screencast.&lt;/p&gt;
&lt;div class="section" id="highlights"&gt;
&lt;h2&gt;Highlights&lt;/h2&gt;
&lt;div class="section" id="python-3-3-support"&gt;
&lt;h3&gt;Python 3.3 support&lt;/h3&gt;
&lt;p&gt;Following up on the last release's &lt;a class="reference external" href="http://blog.getpelican.com/pelicans-unified-codebase.html"&gt;support for Python 3.2&lt;/a&gt;, this new version
of Pelican now supports Python 3.3. In order to do so, support for Python 3.2
unfortunately had to be dropped.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="cross-platform-automation-via-fabric"&gt;
&lt;h3&gt;Cross-platform automation via Fabric&lt;/h3&gt;
&lt;p&gt;Pelican has traditionally included a &lt;tt class="docutils literal"&gt;make&lt;/tt&gt;-based workflow that works well
enough for POSIX-based systems but at the expense of Windows users. In order to
improve cross-platform publishing automation, Pelican 3.3 includes support for
Fabric, a Python-based automation framework.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="retain-certain-files-in-output"&gt;
&lt;h3&gt;Retain certain files in output&lt;/h3&gt;
&lt;p&gt;Some folks apply version control to their output directories, the metadata for
which is obliterated when using the &lt;tt class="docutils literal"&gt;DELETE_OUTPUT_DIRECTORY&lt;/tt&gt; directive.
Pelican 3.3 includes a new &lt;tt class="docutils literal"&gt;OUTPUT_RETENTION&lt;/tt&gt; setting which allows you to
define arbitrary files/folders that should be retained during the
aforementioned output cleaning process (e.g., &lt;tt class="docutils literal"&gt;.hg&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;.git&lt;/tt&gt;, et cetera).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="tumblr-import"&gt;
&lt;h3&gt;Tumblr import&lt;/h3&gt;
&lt;p&gt;Tumblr posts can now be imported into Pelican sites.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="refactoring-fixes-and-improvements"&gt;
&lt;h3&gt;Refactoring, fixes, and improvements&lt;/h3&gt;
&lt;p&gt;Pelican 3.3 includes a significant number of other improvements, as indicated
by the long list of items in the &lt;a class="reference external" href="https://github.com/getpelican/pelican/blob/master/docs/changelog.rst"&gt;changelog&lt;/a&gt; and
the &lt;a class="reference external" href="https://github.com/getpelican/pelican/issues?milestone=5&amp;amp;state=closed"&gt;Pelican 3.3 milestone issues&lt;/a&gt; list.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="upgrade-notes"&gt;
&lt;h2&gt;Upgrade notes&lt;/h2&gt;
&lt;p&gt;While we do everything we can to maximize backwards compatibility and ensure
smooth Pelican upgrades, it's possible that you may encounter un-anticipated
wrinkles. Following are a few notes that may help:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;The &lt;tt class="docutils literal"&gt;FILES_TO_COPY&lt;/tt&gt; setting has been deprecated, so replace it with the
&lt;tt class="docutils literal"&gt;STATIC_PATHS&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;EXTRA_PATH_METADATA&lt;/tt&gt; settings. Refer to the
corresponding entries in the &lt;a class="reference external" href="http://docs.getpelican.com/en/3.3.0/settings.html#basic-settings"&gt;Settings section of the docs&lt;/a&gt; for more
information.&lt;/li&gt;
&lt;li&gt;Due to minor changes to the plugin API, some plugins may not function
properly if they are not updated accordingly. Most (if not all) of the
plugins in the official &lt;a class="reference external" href="https://github.com/getpelican/pelican-plugins"&gt;Pelican Plugins Repository&lt;/a&gt; have already been updated,
but externally-hosted plugins may not be. If you are heavily dependent on
such a plugin, consider holding off on upgrading to Pelican 3.3 until you are
certain that your desired plugins will function correctly.&lt;/li&gt;
&lt;li&gt;PDF generation has been moved out of core and into a separate plugin. If you
previously relied on this feature, please be sure to retrieve, install, and
configure the new plugin from the &lt;a class="reference external" href="https://github.com/getpelican/pelican-plugins"&gt;Pelican Plugins Repository&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;There is a new warning for &lt;tt class="docutils literal"&gt;&amp;lt;img&amp;gt;&lt;/tt&gt; tags without &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;alt=&amp;quot;&amp;quot;&lt;/span&gt;&lt;/tt&gt; attributes,
which are important for accessibility reasons. Please consider adding these
attributes to your &lt;tt class="docutils literal"&gt;&amp;lt;img&amp;gt;&lt;/tt&gt; tags in order to improve accessibility (and
eliminate the warnings).&lt;/li&gt;
&lt;li&gt;The syntax for linking to source content has been changed in order to ensure
compatibility with Markdown and reST extensions. For example, the new syntax
for Markdown: &lt;tt class="docutils literal"&gt;[a link relative to content &lt;span class="pre"&gt;root]({filename}/article1.md)&lt;/span&gt;&lt;/tt&gt;
The previous &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;|filename|/article1.md&lt;/span&gt;&lt;/tt&gt; syntax will continue to be supported
for backwards compatibility.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We will keep the above list updated with any additional items as we find them,
so please let us know if we missed anything.&lt;/p&gt;
&lt;/div&gt;
</content><category term="news"/></entry><entry><title>Using Pelican with Heroku</title><link href="https://getpelican.com/blog/using-pelican-with-heroku/" rel="alternate"/><published>2013-07-25T00:00:00+02:00</published><updated>2013-07-25T00:00:00+02:00</updated><author><name>Kyle Fuller</name></author><id>tag:getpelican.com,2013-07-25:/blog/using-pelican-with-heroku/</id><summary type="html">&lt;p&gt;Using Pelican with Heroku couldn't be easier. We have recently been working on
a buildpack allowing you to publish your Pelican site directly to Heroku.&lt;/p&gt;
&lt;p&gt;This allows you to host your Pelican site on the Heroku platform with very little
effort. Simply create a Heroku application and push your repository …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Using Pelican with Heroku couldn't be easier. We have recently been working on
a buildpack allowing you to publish your Pelican site directly to Heroku.&lt;/p&gt;
&lt;p&gt;This allows you to host your Pelican site on the Heroku platform with very little
effort. Simply create a Heroku application and push your repository to it.&lt;/p&gt;
&lt;p&gt;You don't need to deal with generating the HTML with the Pelican command — the
buildpack takes care of this. Just push a git repository with the
&lt;cite&gt;pelicanconf.py&lt;/cite&gt; file in the root directory.&lt;/p&gt;
&lt;p&gt;To enable the Heroku buildpack for existing sites, run:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;heroku&lt;span class="w"&gt; &lt;/span&gt;buildpacks:set&lt;span class="w"&gt; &lt;/span&gt;https://github.com/getpelican/heroku-buildpack-pelican
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Alternatively, for those of you switching to Heroku, you can use the following
command to create your Pelican site on Heroku.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;heroku&lt;span class="w"&gt; &lt;/span&gt;create&lt;span class="w"&gt; &lt;/span&gt;myapp&lt;span class="w"&gt; &lt;/span&gt;--buildpack&lt;span class="w"&gt; &lt;/span&gt;https://github.com/getpelican/heroku-buildpack-pelican
&lt;/pre&gt;&lt;/div&gt;
</content><category term="news"/><category term="deployment"/></entry><entry><title>Pelican 3.2 released</title><link href="https://getpelican.com/blog/pelican-3.2-released/" rel="alternate"/><published>2013-04-24T00:00:00+02:00</published><updated>2013-04-24T00:00:00+02:00</updated><author><name>Pelican Contributors</name></author><id>tag:getpelican.com,2013-04-24:/blog/pelican-3.2-released/</id><summary type="html">&lt;p&gt;Today we are pleased to announce the release of Pelican 3.2. Highlights of the
improvements contained in this release follow below.&lt;/p&gt;
&lt;p&gt;For those who are new to Pelican, please refer to the &lt;a class="reference external" href="http://docs.getpelican.com/en/latest/getting_started.html"&gt;Getting Started Guide&lt;/a&gt;. There is also a
&lt;a class="reference external" href="https://github.com/getpelican/pelican/wiki/Tutorials"&gt;Tutorials&lt;/a&gt; page
available, which currently includes a link to a …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Today we are pleased to announce the release of Pelican 3.2. Highlights of the
improvements contained in this release follow below.&lt;/p&gt;
&lt;p&gt;For those who are new to Pelican, please refer to the &lt;a class="reference external" href="http://docs.getpelican.com/en/latest/getting_started.html"&gt;Getting Started Guide&lt;/a&gt;. There is also a
&lt;a class="reference external" href="https://github.com/getpelican/pelican/wiki/Tutorials"&gt;Tutorials&lt;/a&gt; page
available, which currently includes a link to a Pelican installation
screencast.&lt;/p&gt;
&lt;div class="section" id="highlights"&gt;
&lt;h2&gt;Highlights&lt;/h2&gt;
&lt;div class="section" id="python-3-support"&gt;
&lt;h3&gt;Python 3 support&lt;/h3&gt;
&lt;p&gt;As noted in &lt;a class="reference external" href="http://blog.getpelican.com/pelicans-unified-codebase.html"&gt;Pelican's Unified Codebase&lt;/a&gt;, this new version
of Pelican includes support for Python 3. All tests currently pass on Python
3.2, and we expect the same for Python 3.3 in the near future. (Pelican
interacts with a number of third-party components that have not yet been
fully updated for Python 3.3 compatibility.)&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="override-page-save-to-location-from-meta-data"&gt;
&lt;h3&gt;Override page save-to location from meta-data&lt;/h3&gt;
&lt;p&gt;Instead of blog or a site with dated articles, some people want to use Pelican
to publish sites with non-chronological content. Pelican 3.2 enables this by
providing a way to override the save-to location from within a page's
meta-data, so for example, you can have a &lt;tt class="docutils literal"&gt;pages/index.md&lt;/tt&gt; file that will
replace your site root's &lt;tt class="docutils literal"&gt;index.html&lt;/tt&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="time-period-archives"&gt;
&lt;h3&gt;Time period archives&lt;/h3&gt;
&lt;p&gt;For folks who use date-based URL schemes such as &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;/2013/04/23/my-post/&lt;/span&gt;&lt;/tt&gt;,
you can now create per-year and per-month archives that will appear at
&lt;tt class="docutils literal"&gt;/2013/&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;/2013/04/&lt;/tt&gt;, respectively.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="posterous-blog-import"&gt;
&lt;h3&gt;Posterous blog import&lt;/h3&gt;
&lt;p&gt;With Posterous shutting down on April 30th, this release offers the timely
ability to import an existing Posterous blog. There are only a few days
remaining, so if you have a Posterous blog and want to import it into a
Pelican-powered site, please act quickly!&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="separate-pelican-plugins-repository"&gt;
&lt;h3&gt;Separate Pelican plugins repository&lt;/h3&gt;
&lt;p&gt;Pelican plugins have been moved out of the core Pelican repository and into
their &lt;a class="reference external" href="https://github.com/getpelican/pelican-plugins"&gt;own repository&lt;/a&gt;.
This allows us to focus on the Pelican core while simultaneously encouraging
the community to extend Pelican's functionality in the form of modular plugins.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="refactoring-fixes-and-improvements"&gt;
&lt;h3&gt;Refactoring, fixes, and improvements&lt;/h3&gt;
&lt;p&gt;There have been a large number of improvements under the hood. While not an
exhaustive list, the &lt;a class="reference external" href="https://github.com/getpelican/pelican/issues?milestone=4&amp;amp;state=closed"&gt;Pelican 3.2 milestone issues&lt;/a&gt;
should provide a good overview of the many enhancements that are part of this
release.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="upgrade-notes"&gt;
&lt;h2&gt;Upgrade notes&lt;/h2&gt;
&lt;p&gt;While we do everything we can to maximize backwards compatibility and ensure
smooth Pelican upgrades, it's possible that you may encounter un-anticipated
wrinkles. Following are a few notes that may help:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Add &lt;tt class="docutils literal"&gt;from __future__ import unicode_literals&lt;/tt&gt; near the top of your settings
file.&lt;/li&gt;
&lt;li&gt;As noted above, Pelican plugins are now located in their own repository. If
you currently use any plugins bundled with Pelican 3.1.1 or earlier, you
should follow the instructions located in the &lt;a class="reference external" href="https://github.com/getpelican/pelican-plugins"&gt;Pelican plugins repository&lt;/a&gt; to re-enable those
plugins.&lt;/li&gt;
&lt;li&gt;Document-relative URL generation is now off by default. If you previously
relied on this feature and fully understand its potential disadvantages,
you can re-enable it by adding &lt;tt class="docutils literal"&gt;RELATIVE_URLS = True&lt;/tt&gt; to your settings
file.&lt;/li&gt;
&lt;li&gt;The CSS class generated by the reST and Markdown processors was unified into
a single &lt;tt class="docutils literal"&gt;highlight&lt;/tt&gt; class. If you find that your code syntax highlighting
has disappeared after upgrading, ensure that any instances of &lt;tt class="docutils literal"&gt;codehilite&lt;/tt&gt;
in your CSS are replaced with &lt;tt class="docutils literal"&gt;highlight&lt;/tt&gt;.&lt;/li&gt;
&lt;li&gt;Support for Python 2.6 has been dropped as of Pelican 3.2. For those running
on distros that do not have a more recent version of Python available, one
possible solution is to compile Python 2.7.x and use it from within a
virtualenv (e.g., via &lt;tt class="docutils literal"&gt;virtualenv &lt;span class="pre"&gt;-p&lt;/span&gt; $HOME/bin/python2.7 pelican&lt;/tt&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We will keep the above list updated with any additional items as we find them.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="special-thanks"&gt;
&lt;h2&gt;Special thanks&lt;/h2&gt;
&lt;p&gt;As evidenced by our growing THANKS file, there were many people who
contributed to this release. A few folks deserve special mention for the
many hours they put into this new version of Pelican:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="http://parenchym.com/pymblog/"&gt;Dirk Makowski&lt;/a&gt; added support for Python 3,
including provisional ports for third-party components such as Typogrify and
SmartyPants.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="http://blog.tremily.us/"&gt;W. Trevor King&lt;/a&gt; has undertaken a significant
refactoring of the Pelican core, improving a wide swath of the codebase that
will continue to surface in future versions of Pelican.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="http://avar.is/"&gt;Deniz Turgut (Avaris)&lt;/a&gt; contributed so many features and
fixes to this release that it would be silly to even try to list them. He's put
so much work into Pelican that one of the maintainers insisted that he set up a
&lt;a class="reference external" href="https://www.gittip.com/avaris/"&gt;Gittip profile&lt;/a&gt; (which Deniz did under much
duress), to which an anonymous donor has already made a sizeable contribution.
If you want to thank Deniz for his hard work, please consider doing the same.
It would be great to see him on the &amp;quot;Top Receivers&amp;quot; list next week!&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="staying-in-touch"&gt;
&lt;h2&gt;Staying in touch&lt;/h2&gt;
&lt;p&gt;2013 has been a busy year so far, as evidenced by both the number of commits
to Pelican as well as the lack of updates here on the Pelican blog.  (^_^)
We'll do our best to post more frequently in the months to come, both here on
the blog and also via the
&lt;a class="reference external" href="http://twitter.com/getpelican"&gt;&amp;#64;getpelican Twitter account&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
</content><category term="news"/></entry><entry><title>Pelican's Unified Codebase</title><link href="https://getpelican.com/blog/pelicans-unified-codebase/" rel="alternate"/><published>2013-04-16T00:00:00+02:00</published><updated>2013-04-16T00:00:00+02:00</updated><author><name>Pelican Contributors</name></author><id>tag:getpelican.com,2013-04-16:/blog/pelicans-unified-codebase/</id><summary type="html">&lt;p&gt;&lt;em&gt;In this post by&lt;/em&gt; &lt;a class="reference external" href="https://github.com/dmdm"&gt;Dirk Makowski&lt;/a&gt;, &lt;em&gt;he
explains how he added preliminary Python 3.x support to the forthcoming
Pelican 3.2 release.&lt;/em&gt;&lt;/p&gt;
&lt;hr class="docutils" /&gt;
&lt;p&gt;When referring to Pelican's &amp;quot;unified&amp;quot; codebase, this means the code runs
without changes (or requiring &lt;tt class="docutils literal"&gt;2to3&lt;/tt&gt;) on both Python 2.x and 3.x.
Specifically, this unified …&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;In this post by&lt;/em&gt; &lt;a class="reference external" href="https://github.com/dmdm"&gt;Dirk Makowski&lt;/a&gt;, &lt;em&gt;he
explains how he added preliminary Python 3.x support to the forthcoming
Pelican 3.2 release.&lt;/em&gt;&lt;/p&gt;
&lt;hr class="docutils" /&gt;
&lt;p&gt;When referring to Pelican's &amp;quot;unified&amp;quot; codebase, this means the code runs
without changes (or requiring &lt;tt class="docutils literal"&gt;2to3&lt;/tt&gt;) on both Python 2.x and 3.x.
Specifically, this unified codebase is tested on Python 2.7 and 3.2.&lt;/p&gt;
&lt;p&gt;At the time of this writing all tests pass, whether manually invoked
via &lt;tt class="docutils literal"&gt;python &lt;span class="pre"&gt;-m&lt;/span&gt; unittest discover&lt;/tt&gt; within manually-created virtual
environments or via &lt;tt class="docutils literal"&gt;tox&lt;/tt&gt;, which automatically creates virtual environments
for Python 2.7 and 3.2 and runs tests on both Python versions:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
74 tests, 9 skips, no errors
&lt;/pre&gt;
&lt;p&gt;During my first attempt to port Pelican to Python 3, I had used 2to3 and
manually applied corrections to achieve syntactical correctness. But as the
tests showed, more subtle bugs in the encoding of strings remained (e.g.
outputting b'...' instead of '...'). Also, the code was suitable for Python 3
only and would not run properly on Python 2.&lt;/p&gt;
&lt;p&gt;Building on the lessons learned with 2to3, the current in-development version
of Pelican now provides a single codebase for Python 2 and 3. The following
section lists some hints about what had to be changed in order to achieve this.
These hints may also be valuable for anyone who wants to contribute new Pelican
features or bug fixes, since all Pelican code submissions must now run on both
Python versions.&lt;/p&gt;
&lt;div class="section" id="unification"&gt;
&lt;h2&gt;Unification&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Assume every string and literal is Unicode (import unicode_literals):&lt;ul&gt;
&lt;li&gt;Do not use prefix &lt;tt class="docutils literal"&gt;u'&lt;/tt&gt;.&lt;/li&gt;
&lt;li&gt;Do not encode/decode strings in the middle. Follow the code to the source
(or target) of a string and encode/decode at the first/last possible point.&lt;/li&gt;
&lt;li&gt;In other words, write your functions to expect and to return Unicode.&lt;/li&gt;
&lt;li&gt;Encode/decode strings if the source is a Python function that is known
to handle this badly, e.g., &lt;tt class="docutils literal"&gt;strftime()&lt;/tt&gt; in Python 2.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Use new syntax: print function, &amp;quot;except ... &lt;em&gt;as&lt;/em&gt; e&amp;quot; (not comma) etc.&lt;/li&gt;
&lt;li&gt;Refactor method calls like &lt;tt class="docutils literal"&gt;dict.iteritems()&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;xrange()&lt;/tt&gt; etc. in a way
that runs without code change in both Python versions.&lt;/li&gt;
&lt;li&gt;Do not use magic method &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;__unicode()__&lt;/span&gt;&lt;/tt&gt; in new classes. Use only &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;__str()__&lt;/span&gt;&lt;/tt&gt;
and decorate the class with &lt;tt class="docutils literal"&gt;&amp;#64;python_2_unicode_compatible&lt;/tt&gt;.&lt;/li&gt;
&lt;li&gt;Do not start int literals with a zero. This is a syntax error in Py3k.&lt;/li&gt;
&lt;li&gt;Unfortunately I did not find an octal notation that is valid in both
Pythons. Use decimal instead.&lt;/li&gt;
&lt;li&gt;use &lt;tt class="docutils literal"&gt;six&lt;/tt&gt;, e.g.:&lt;ul&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;isinstance(..,&lt;/span&gt; basestring) &lt;span class="pre"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="pre"&gt;isinstance(..,&lt;/span&gt; six.string_types)&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;isinstance(..,&lt;/span&gt; unicode) &lt;span class="pre"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="pre"&gt;isinstance(..,&lt;/span&gt; six.text_type)&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;setlocale()&lt;/tt&gt; in Python 2 bails when we give the locale name as Unicode,
and since we are using &lt;tt class="docutils literal"&gt;from __future__ import unicode_literals&lt;/tt&gt;, we do
that everywhere! As a workaround, I enclosed the localename with &lt;tt class="docutils literal"&gt;str()&lt;/tt&gt;;
in Python 2 this casts the name to a byte string, and in Python 3 this should
do nothing, because the locale name is already in Unicode.&lt;/li&gt;
&lt;li&gt;Kept range() almost everywhere as-is (2to3 suggests list(range())) — just
changed it where I felt necessary.&lt;/li&gt;
&lt;li&gt;Changed xrange() back to range(), so it is valid in both Python versions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="about-external-libraries"&gt;
&lt;h2&gt;About External Libraries&lt;/h2&gt;
&lt;div class="section" id="core"&gt;
&lt;h3&gt;Core&lt;/h3&gt;
&lt;p&gt;Pelican core depends on &lt;tt class="docutils literal"&gt;feedgenerator&lt;/tt&gt;. To run on Py3k, you will need
&lt;tt class="docutils literal"&gt;feedgenerator&lt;/tt&gt; 1.5, which also now has a unified codebase and is available
on PyPI.&lt;/p&gt;
&lt;p&gt;BeautifulSoup had to be upgraded to bs4 (only bs4 supports Py3k), which has some
consequences:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;To parse XML (e.g., which the WordPress importer does), the &lt;tt class="docutils literal"&gt;lxml&lt;/tt&gt; package
is now required.&lt;/li&gt;
&lt;li&gt;bs4 does not have &lt;tt class="docutils literal"&gt;convertEntities&lt;/tt&gt; anymore.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="plugins"&gt;
&lt;h3&gt;Plugins&lt;/h3&gt;
&lt;p&gt;On Python 2 you still can use all plugins and their dependencies as they are.
But if you want to use Pelican plugins on Python 3, you must seek out and
install compatible packages yourself.&lt;/p&gt;
&lt;p&gt;For &lt;strong&gt;Typogrify&lt;/strong&gt; and &lt;strong&gt;SmartyPants&lt;/strong&gt;, on which Typogrify depends, I provide
ready-made 2to3'd code:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://github.com/dmdm/smartypants.git"&gt;https://github.com/dmdm/smartypants.git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://github.com/dmdm/typogrify/tree/py3k"&gt;https://github.com/dmdm/typogrify/tree/py3k&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For &lt;strong&gt;webassets&lt;/strong&gt;, I also have 2to3'd code available:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://github.com/dmdm/webassets/tree/py3k"&gt;https://github.com/dmdm/webassets/tree/py3k&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But &lt;tt class="docutils literal"&gt;webassets&lt;/tt&gt; still has issues. One is that the less-css compiler is not
correctly invoked when I build the blog (e.g., with &lt;tt class="docutils literal"&gt;make html&lt;/tt&gt;); I have to
manually invoke the compiler afterwards:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
lessc themes/pymblog/static/less/pymblog.less &amp;gt; output/theme/css/pymblog.css
&lt;/pre&gt;
&lt;p&gt;Be aware that the 2to3'd code of aforementioned libraries runs on Python 3 only.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="testing"&gt;
&lt;h2&gt;Testing&lt;/h2&gt;
&lt;p&gt;Testing on Python 2 is straightforward.&lt;/p&gt;
&lt;p&gt;On Python 3, if you have installed the Python 3.x-compatible versions of the
plugins, like shown in the previous chapter, manual testing with
&lt;tt class="docutils literal"&gt;python &lt;span class="pre"&gt;-m&lt;/span&gt; unittest discover&lt;/tt&gt; is also straightforward.&lt;/p&gt;
&lt;p&gt;However, you must tell tox to use those Py3k libraries. If you forget this,
tox will pull the regular packages from PyPI and the tests will fail.&lt;/p&gt;
&lt;p&gt;Tell tox about the local packages thusly: enter the source directory of
SmartyPants and run tox there. Do this again for Typogrify and webassets.
SmartyPants and Typogrify do not have real tests, and webassets will fail
noisily, but as a result we get these libraries neatly packaged in tox's
distshare directory. And this is what we need to order to run tox for Pelican.&lt;/p&gt;
&lt;p&gt;See also the comments in &lt;tt class="docutils literal"&gt;tox.ini&lt;/tt&gt; for more detail.&lt;/p&gt;
&lt;/div&gt;
</content><category term="news"/></entry><entry><title>Pelican 3.1 released</title><link href="https://getpelican.com/blog/pelican-31-released/" rel="alternate"/><published>2012-12-03T00:00:00+01:00</published><updated>2012-12-03T00:00:00+01:00</updated><author><name>Pelican Contributors</name></author><id>tag:getpelican.com,2012-12-03:/blog/pelican-31-released/</id><summary type="html">&lt;p&gt;Pelican development has progressed steadily over the last few months, and we're
pleased to announce the release of version 3.1, which can be obtained via
&lt;a class="reference external" href="https://crate.io/packages/pelican/"&gt;Crate.io&lt;/a&gt; or
&lt;a class="reference external" href="https://github.com/getpelican/pelican/tags"&gt;GitHub&lt;/a&gt;. This release contains
some exciting new features; following is a summary of changes since the last
3.0.1 release …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Pelican development has progressed steadily over the last few months, and we're
pleased to announce the release of version 3.1, which can be obtained via
&lt;a class="reference external" href="https://crate.io/packages/pelican/"&gt;Crate.io&lt;/a&gt; or
&lt;a class="reference external" href="https://github.com/getpelican/pelican/tags"&gt;GitHub&lt;/a&gt;. This release contains
some exciting new features; following is a summary of changes since the last
3.0.1 release.&lt;/p&gt;
&lt;div class="section" id="easier-intra-site-linking"&gt;
&lt;h2&gt;Easier intra-site linking&lt;/h2&gt;
&lt;p&gt;Whether linking from one post to another or including locally-hosted images on
a page, linking to intra-site resources has been significantly enhanced. In
addition to improving reliability, it's now possible to link to a resource in
your &lt;em&gt;source content&lt;/em&gt; hierarchy instead of the &lt;em&gt;generated&lt;/em&gt; hierarchy.&lt;/p&gt;
&lt;p&gt;Find more information here:
&lt;a class="reference external" href="http://docs.getpelican.com/en/3.1.1/getting_started.html#linking-to-internal-content"&gt;http://docs.getpelican.com/en/3.1.1/getting_started.html#linking-to-internal-content&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="metadata-extraction-from-filename"&gt;
&lt;h2&gt;Metadata extraction from filename&lt;/h2&gt;
&lt;p&gt;There is a new &lt;tt class="docutils literal"&gt;FILENAME_METADATA&lt;/tt&gt; setting that adds support for metadata
extraction from the filename via regular expressions. For example, if you
would like to extract both the date and the post slug from the filename, you
could set your &lt;tt class="docutils literal"&gt;FILENAME_METADATA&lt;/tt&gt; setting to something like:
&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;'(?P&amp;lt;date&amp;gt;\d{4}-\d{2}-\d{2})_(?P&amp;lt;slug&amp;gt;.*)'&lt;/span&gt;&lt;/tt&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="web-asset-processing-moved-to-separate-plugin"&gt;
&lt;h2&gt;Web asset processing moved to separate plugin&lt;/h2&gt;
&lt;p&gt;We are trying to move non-essential features out of the Pelican core and
instead make them available as plugins. Web asset management is an example of
this effort — we don't think this is a core component of Pelican, but it's
still a useful feature and remains available to those who want to use it.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="new-gzip-cache-plugin"&gt;
&lt;h2&gt;New gzip cache plugin&lt;/h2&gt;
&lt;p&gt;The gzip cache plugin allows generated text files to be compressed once during
site generation and thus served without needing any server-side compression.
This obviates the need for the web server to compress these text files
on-the-fly, which can result in lower web server CPU utilization.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="basic-functional-tests-restored"&gt;
&lt;h2&gt;Basic functional tests restored&lt;/h2&gt;
&lt;p&gt;We now have a way to fully test Pelican's output, which helps us understand
whether code changes break Pelican's intended behavior (for developers and for
end users) while we are developing new features.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="template-pages"&gt;
&lt;h2&gt;Template pages&lt;/h2&gt;
&lt;p&gt;If you want to generate custom pages besides your blog entries, you can use
any Jinja template file with a path pointing to the file and the destination
path for the generated file. For instance, if you have a blog with three
static pages — a list of books, your resume, and a contact page — you could
set them up via:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;TEMPLATE_PAGES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;src/books.html&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;dest/books.html&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                  &lt;span class="s1"&gt;&amp;#39;src/resume.html&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;dest/resume.html&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                  &lt;span class="s1"&gt;&amp;#39;src/contact.html&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;dest/contact.html&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="feed-improvements"&gt;
&lt;h2&gt;Feed improvements&lt;/h2&gt;
&lt;p&gt;The &lt;tt class="docutils literal"&gt;FEED_ALL_ATOM&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;FEED_ALL_RSS&lt;/tt&gt; directives have been introduced as
distinct from their &lt;tt class="docutils literal"&gt;FEED_ATOM&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;FEED_RSS&lt;/tt&gt; brethren.  The former show
entries in all available language translations, while the latter only include
entries written in the site's primary language.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="use-folders-as-category"&gt;
&lt;h2&gt;Use folders as category&lt;/h2&gt;
&lt;p&gt;Until now, Pelican made the assumption that the folders used to organize your
content should be used as the respective categories of the articles contained
within. You now can configure this behavior via the &lt;tt class="docutils literal"&gt;USE_FOLDER_AS_CATEGORY&lt;/tt&gt;
setting.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="new-signals"&gt;
&lt;h2&gt;New signals&lt;/h2&gt;
&lt;p&gt;Plugins now have additional signals at their disposal:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;We now provide a &lt;tt class="docutils literal"&gt;generator_init&lt;/tt&gt; signal that is sent when the generator
is initialized. You'll receive the generator as an argument.&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;get_generators&lt;/tt&gt; is invoked in &lt;tt class="docutils literal"&gt;Pelican.get_generator_classes&lt;/tt&gt; and can
return a Generator or several generators in a tuple or list. This is useful
when you want to add your own generators.&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;article_generate_preread&lt;/tt&gt; is invoked before an article is read in
&lt;tt class="docutils literal"&gt;ArticlesGenerator.generate_context&lt;/tt&gt;. Use this if the code needs to do
something before every article is parsed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="minor-enhancements-and-fixes"&gt;
&lt;h2&gt;Minor enhancements and fixes&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Empty value for the &lt;tt class="docutils literal"&gt;AUTHOR&lt;/tt&gt; setting is now allowed&lt;/li&gt;
&lt;li&gt;Improved WordPress importing&lt;/li&gt;
&lt;li&gt;Generated content doesn't contain as much blank lines as it did previously&lt;/li&gt;
&lt;li&gt;New icon for Google+ and improvements to many others&lt;/li&gt;
&lt;li&gt;Many small documentation and bug fixes not described here&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="on-the-horizon"&gt;
&lt;h2&gt;On the horizon&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;We are working on moving plugins out of the main Pelican repository and into a
&lt;a class="reference external" href="http://github.com/getpelican/pelican-plugins"&gt;separate repository&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;We would like to implement measures designed to speed up site generation in
order to reduce processing time.&lt;/li&gt;
&lt;li&gt;In order to provide more regular updates on development progress, we intend
to publish blog posts on a more frequent basis.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That's all for now. More to come soon!  :-)&lt;/p&gt;
&lt;/div&gt;
</content><category term="news"/></entry><entry><title>Pelican 3.0 released</title><link href="https://getpelican.com/blog/pelican-30-released/" rel="alternate"/><published>2012-08-08T00:00:00+02:00</published><updated>2012-08-08T00:00:00+02:00</updated><author><name>Pelican Contributors</name></author><id>tag:getpelican.com,2012-08-08:/blog/pelican-30-released/</id><summary type="html">&lt;p&gt;Today marks the release of Pelican 3.0! Some of the new features include:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Improved URL structure flexibility&lt;/li&gt;
&lt;li&gt;Support for &lt;a class="reference external" href="https://github.com/justinmayer/typogrify"&gt;Typogrify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for &lt;a class="reference external" href="http://lesscss.org/"&gt;LESS CSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;New development server script for previewing auto-regenerated changes&lt;/li&gt;
&lt;li&gt;Improved recognition of alternate content filename extensions&lt;/li&gt;
&lt;li&gt;... and much more!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Feel free to check out the &lt;a class="reference external" href="https://pypi.python.org/pypi/pelican/"&gt;package …&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;Today marks the release of Pelican 3.0! Some of the new features include:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Improved URL structure flexibility&lt;/li&gt;
&lt;li&gt;Support for &lt;a class="reference external" href="https://github.com/justinmayer/typogrify"&gt;Typogrify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for &lt;a class="reference external" href="http://lesscss.org/"&gt;LESS CSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;New development server script for previewing auto-regenerated changes&lt;/li&gt;
&lt;li&gt;Improved recognition of alternate content filename extensions&lt;/li&gt;
&lt;li&gt;... and much more!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Feel free to check out the &lt;a class="reference external" href="https://pypi.python.org/pypi/pelican/"&gt;package listing on PyPI&lt;/a&gt; or the &lt;a class="reference external" href="https://github.com/getpelican/pelican"&gt;project source at GitHub&lt;/a&gt;. If you want to give Pelican a spin,
check out the &lt;a class="reference external" href="http://docs.getpelican.com/en/3.0/getting_started.html"&gt;Getting Started&lt;/a&gt; section of the
&lt;a class="reference external" href="http://docs.getpelican.com/"&gt;Pelican Documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Thanks to all the folks who helped out with testing, reporting bugs, fixing
bugs, contributing features, and improving the documentation. Pelican's third
major release would not be the same without you!&lt;/p&gt;
</content><category term="news"/></entry><entry><title>Pelican now has a blog of its own!</title><link href="https://getpelican.com/blog/pelican-now-has-a-blog-of-its-own/" rel="alternate"/><published>2012-07-23T00:00:00+02:00</published><updated>2012-07-23T00:00:00+02:00</updated><author><name>Pelican Contributors</name></author><id>tag:getpelican.com,2012-07-23:/blog/pelican-now-has-a-blog-of-its-own/</id><summary type="html">&lt;p&gt;Since Alexis started working on the project almost two years ago, a bunch of
happy hackers have joined the effort to make Pelican an even better tool. Among
these contributors are &lt;a class="reference external" href="http://kylefuller.co.uk/"&gt;Kyle&lt;/a&gt;, &lt;a class="reference external" href="http://hackercodex.com/"&gt;Justin&lt;/a&gt;, and &lt;a class="reference external" href="http://bunnyman.info/"&gt;tBunnyMan&lt;/a&gt;, all of
whom have done an amazing job recently.&lt;/p&gt;
&lt;p&gt;We thought having a project blog …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Since Alexis started working on the project almost two years ago, a bunch of
happy hackers have joined the effort to make Pelican an even better tool. Among
these contributors are &lt;a class="reference external" href="http://kylefuller.co.uk/"&gt;Kyle&lt;/a&gt;, &lt;a class="reference external" href="http://hackercodex.com/"&gt;Justin&lt;/a&gt;, and &lt;a class="reference external" href="http://bunnyman.info/"&gt;tBunnyMan&lt;/a&gt;, all of
whom have done an amazing job recently.&lt;/p&gt;
&lt;p&gt;We thought having a project blog would be a good way to keep users and
developers updated on the status of Pelican's development.&lt;/p&gt;
&lt;p&gt;We have version 3.0 coming soon with &lt;em&gt;a lot&lt;/em&gt; of niceties that will
hopefully be ready by the end of the week. Kyle is working on Py3k support for
integration after 3.0, and we are getting rid of old things that don't make
sense anymore for 3.0, so expect some changes.  :)&lt;/p&gt;
</content><category term="news"/></entry></feed>