Introduction
Pelican is a static site generator written in Python that reads content files in Markdown or reStructuredText, applies Jinja2 templates, and produces a complete static website ready for deployment. It was created as a Python-native alternative to Ruby-based generators like Jekyll, and is well suited for blogs, personal sites, and technical documentation.
What Pelican Does
- Converts Markdown and reStructuredText files into themed HTML pages
- Generates Atom and RSS feeds automatically for blog content
- Supports articles (date-ordered posts) and pages (static content) as distinct content types
- Applies Jinja2 templates for full layout and theme customization
- Provides a plugin system for extending build behavior (sitemap, SEO, image processing)
Architecture Overview
Pelican reads content files from a source directory, parses metadata from file headers, and passes the content through a reader (Markdown or reStructuredText). The parsed content is handed to Jinja2 templates defined by the active theme. Generators produce the output files: articles, pages, category and tag index pages, author pages, and feeds. Signals allow plugins to hook into specific points in the generation pipeline.
Self-Hosting & Configuration
- Install with
pip install pelican[markdown]in a virtual environment - Run
pelican-quickstartto generate project scaffold with configuration files - Place content in the
content/directory with metadata headers (Title, Date, Category) - Customize site settings in
pelicanconf.pyand production overrides inpublishconf.py - Build with
pelican contentand deploy theoutput/directory to any static host
Key Features
- Native Python ecosystem with pip install and Jinja2 templating
- Dual markup support for Markdown and reStructuredText in the same project
- Automatic feed generation for Atom and RSS without plugins
- Import tools for migrating content from WordPress, Tumblr, and other platforms
- Theme system with dozens of community themes available on pelicanthemes.com
Comparison with Similar Tools
- Jekyll — Ruby-based with Liquid templates, native GitHub Pages support, larger community
- Hugo — Go-based with sub-second builds, significantly faster for large sites
- MkDocs — Python-based but focused specifically on project documentation, not general blogging
- Sphinx — Python documentation generator aimed at API docs and technical references, not blogs
- Nikola — Python static generator with Jupyter Notebook support, smaller community than Pelican
FAQ
Q: Can Pelican handle large sites? A: Pelican handles hundreds of articles without issues. Very large sites (thousands of pages) may see slower build times compared to Hugo, but caching and incremental builds help.
Q: Does Pelican support i18n? A: Yes. The i18n_subsites plugin allows generating translated versions of the site with per-language content directories.
Q: How do I create a custom Pelican theme?
A: Create a directory with templates/ and static/ subdirectories containing Jinja2 templates and CSS/JS assets. Point the THEME setting to your theme directory.
Q: Can I use Pelican for documentation sites? A: Pelican can generate documentation pages, but MkDocs or Sphinx offer better navigation and search features specifically designed for technical documentation.