Nikola v8.3.0 is out!

On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v8.3.0. This release adds support for Python 3.12, with some other features and bugfixes.

Note that Nikola v8.3.0 no longer uses the Yapsy plugin manager, which has been replaced by a custom, minimal manager. The new Nikola Plugin Manager was tested with some typical plugins, but there might be issues if your plugins have an unusual structure or are outdated. Please update your plugins and report any bugs you may encounter.

The Nikola developers would also like to express discontent with Python’s efforts to remove features from the standard library, causing breakage without a solid reason, other than “it’s old”.

What is Nikola?

Nikola is a static site and blog generator, written in Python. It can use Mako and Jinja2 templates, and input in many popular markup formats, such as reStructuredText and Markdown — and can even turn Jupyter Notebooks into blog posts! It also supports image galleries, and is multilingual. Nikola is flexible, and page builds are extremely fast, courtesy of doit (which is rebuilding only what has been changed).

Find out more at the website: https://getnikola.com/

Downloads

Install using pip install Nikola.

Changes

Features

  • Implement a new plugin manager from scratch to replace Yapsy, which does not work on Python 3.12 due to Python 3.12 carelessly removing parts of the standard library (Issue #3719)

  • Support for Discourse as comment system (Issue #3689)

Bugfixes

  • Fix loading of templates from plugins with __init__.py files (Issue #3725)

  • Fix margins of paragraphs at the end of sections (Issue #3704)

  • Ignore .DS_Store files in listing indexes (Issue #3698)

  • Fix baguetteBox.js invoking in the base theme (Issue #3687)

  • Fix development (preview) server nikola auto for non-root SITE_URL, in particular when URL_TYPE is full_path. (Issue #3715)

For plugin developers

Nikola now requires the .plugin file to contain a [Nikola] section with a PluginCategory entry set to the name of the plugin category class. This was already required by plugins.getnikola.com, but you may have custom plugins that don’t have this set.

Nikola v8.2.4 is out!

On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v8.2.4. This release comes with some new features and a handful of bug fixes.

What is Nikola?

Nikola is a static site and blog generator, written in Python. It can use Mako and Jinja2 templates, and input in many popular markup formats, such as reStructuredText and Markdown — and can even turn Jupyter Notebooks into blog posts! It also supports image galleries, and is multilingual. Nikola is flexible, and page builds are extremely fast, courtesy of doit (which is rebuilding only what has been changed).

Find out more at the website: https://getnikola.com/

Downloads

Install using pip install Nikola.

Changes

Features

  • Add a -q, --ignore-query-strings option to ignore query strings for internal links, allowing their use for cache busting

  • Update reST stylesheets (Issue #3657)

  • Add a --timeout parameter to the check plugin, defaulting to 30s. (Issue #3643)

  • GZIP compression is now deterministic for automatic deploys (Issue #3650)

Bugfixes

  • Fix failures to build with a "Document is empty" error in default themes (Issue #3679)

  • Fix PAGE_INDEX skipping generation when there exists a conflicting post

  • Fix RSS generation of galleries containing WebP images, which caused an unhandled exception due to not having a known MIME type (Issue #3671)

  • Fix auto command infinite loop (Issue #3677)

  • Fix API URL in CSS and JS minifiers (Issue #3658)

  • Fix :align: center for images in reST (Issue #3657)

  • GZIP_COMMAND parsing on win32 platforms (Issue #3649)

Nikola v8.2.3 is out!

On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v8.2.3. This is a bugfix release, which fixes compatibility with python-markdown and two more minor bugs.

What is Nikola?

Nikola is a static site and blog generator, written in Python. It can use Mako and Jinja2 templates, and input in many popular markup formats, such as reStructuredText and Markdown — and can even turn Jupyter Notebooks into blog posts! It also supports image galleries, and is multilingual. Nikola is flexible, and page builds are extremely fast, courtesy of doit (which is rebuilding only what has been changed).

Find out more at the website: https://getnikola.com/

Downloads

Install using pip install Nikola.

Changes

  • Compatibility with Markdown 3.4.0 (Issue #3635)

  • Find substring in string instead of using contains in utils

  • Don't add semicolon in docinfo fields via CSS (caused duplicated semicolons)

Nikola now requires Python 3.7 or newer.

Nikola v8.2.2 is out!

On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v8.2.2. This is a bugfix release, whose only change is support for the latest version of Pygments.

What is Nikola?

Nikola is a static site and blog generator, written in Python. It can use Mako and Jinja2 templates, and input in many popular markup formats, such as reStructuredText and Markdown — and can even turn Jupyter Notebooks into blog posts! It also supports image galleries, and is multilingual. Nikola is flexible, and page builds are extremely fast, courtesy of doit (which is rebuilding only what has been changed).

Find out more at the website: https://getnikola.com/

Downloads

Install using pip install Nikola.

Changes

  • Compatibility with Pygments 2.12.0 (Issue #3617, #3618)

Nikola v8.2.1 is out!

On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v8.2.1. This is a minor release with a couple new features, as well as fixes for compatibility with the latest version of doit.

What is Nikola?

Nikola is a static site and blog generator, written in Python. It can use Mako and Jinja2 templates, and input in many popular markup formats, such as reStructuredText and Markdown — and can even turn Jupyter Notebooks into blog posts! It also supports image galleries, and is multilingual. Nikola is flexible, and page builds are extremely fast, courtesy of doit (which is rebuilding only what has been changed).

Find out more at the website: https://getnikola.com/

Downloads

Install using pip install Nikola.

Changes

Features

  • Add emphasize_lines directive to code blocks (Issue #3607)

  • Gallery index pages support the status flag (Issue #3598)

  • Add start_at option to youtube directive (Issue #3603)

Bugfixes

  • Add data files to dependency file (Issue #3608)

  • Compatibility with doit 0.36.0 (Issue #3612)

Note: nikola doit_auto is not available if using doit>=0.36.0. You can still use nikola auto.

Nikola v8.2.0 is out!

On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v8.2.0. This release includes some new features as well as a bunch of bugfixes.

What is Nikola?

Nikola is a static site and blog generator, written in Python. It can use Mako and Jinja2 templates, and input in many popular markup formats, such as reStructuredText and Markdown — and can even turn Jupyter Notebooks into blog posts! It also supports image galleries, and is multilingual. Nikola is flexible, and page builds are extremely fast, courtesy of doit (which is rebuilding only what has been changed).

Find out more at the website: https://getnikola.com/

Downloads

Install using pip install Nikola.

Changes

Features

  • Add category_titles, category_descriptions, tag_titles, tag_descriptions to default context of tags page (Issue #3584)

  • Add Maori translation

  • Add Occitan translation

  • New auto_command_starting signal when nikola auto is starting

  • typogrify_custom filter adds a default value for typogrify_filters so that ignore_tags can be specified as the only option.

  • The default ignore_tags are appended to the user-supplied ignore_tags added via typogrify_custom.

  • Allow adding comment systems from a plugin (Issue #3544)

  • New CommentSystem plugin category (Issue #3544)

Bugfixes

  • Fix changes to INDEX_READ_MORE_LINK and FEED_READ_MORE_LINK not triggering rebuilds

  • Make CATEGORY_TITLES, CATEGORY_DESCRIPTIONS, TAG_TITLES, TAG_DESCRIPTIONS translatable settings for consistency (Issue #3584)

  • Fix bug with posts after the first one appearing shifted due to a <div> closed too early (Issue #3573, #3564)

  • Fix support for files outside of site root directory on Windows

  • Support passing --backend and --db-file to nikola auto

  • Support blank values in certain WordPress-imported structures (Issue #3535)

  • Typogrify ignores div elements with .math CSS class. (Issue #3512)

  • Adjust panorama aspect ratio to 3:1 and document behaviour.

Nikola v8.1.3 is out!

On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v8.1.3. This release has some minor fixes, and a minor dependency change.

What is Nikola?

Nikola is a static site and blog generator, written in Python. It can use Mako and Jinja2 templates, and input in many popular markup formats, such as reStructuredText and Markdown — and can even turn Jupyter Notebooks into blog posts! It also supports image galleries, and is multilingual. Nikola is flexible, and page builds are extremely fast, courtesy of doit (which is rebuilding only what has been changed).

Find out more at the website: https://getnikola.com/

Downloads

Install using pip install Nikola.

Changes

Features

  • Provide the full GLOBAL_CONTEXT to the post list shortcode plugin (Issue #3481)

  • Add BasePlugin.register_auto_watched_folder()

  • Allow different PANDOC_OPTIONS values based on input extensions by specifying a dict of {".extension": [options]} (Issue #3492)

  • Allow boolean/integer pretty_url post meta values in YAML/TOML (Issue #3503)

Bugfixes

  • Fix an UnboundLocalError crash in nikola deploy (Issue #3479)

Other

  • For nikola github_deploy, the ghp-import PyPI package is now recommended instead of ghp-import2. Both versions should work, but you can’t have both installed at the same time. (Issue #3499)

Nikola v8.1.2 is out!

On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v8.1.2. This release has a bunch of new features, fixes some bugs, and improves compatibility with some dependencies and Windows.

What is Nikola?

Nikola is a static site and blog generator, written in Python. It can use Mako and Jinja2 templates, and input in many popular markup formats, such as reStructuredText and Markdown — and can even turn Jupyter Notebooks into blog posts! It also supports image galleries, and is multilingual. Nikola is flexible, and page builds are extremely fast, courtesy of doit (which is rebuilding only what has been changed).

Find out more at the website: https://getnikola.com/

Downloads

Install using pip install Nikola.

Changes

Features

  • Support for multiple authors per post — comma-separated, enabled by MULTIPLE_AUTHORS_PER_POST setting (Issue #3252)

  • Add navbar_custom_bg theme option to bootstrap4 and document options for bootstrap4 better (Issue #3443)

  • Add Marathi translation

  • Restore caps typogrify filter (wraps strings of capital letters with <span class="caps"> (via Issue #3405)

  • Improve nikola auto performance with rate-limiting, support -n argument to pass to nikola build (Issue #3401)

  • Add support for the Utterances comment system

Bugfixes

  • Fix previewimages (post- and root-relative) in bootblog4/galleries featured posts for non-server-root sites (Issue #3471)

  • Windows: Also fix symlinks when installing from source with pip; if possible, enable Developer Mode and run git config --global core.symlinks true before cloning the Nikola repo

  • Fix clicking on links to image files. baguetteBox now requires a link (<a>) to have an <img> as a child in order to make the link activate the lightbox. (Issue #3472)

  • Fix LINK_CHECK_WHITELIST having issues due to mixing Unicode and bytestrings (Issue #3466)

  • Add support for nbconvert>=6.0.0 (Issue #3457)

  • Read files as utf-8-sig to allow BOM in input files

  • Don’t break slugs with slashes in doc directive (Issue #3450)

  • Avoid warnings from type annotations in auto caused by missing aiohttp (Issue #3451)

  • Ensure query strings and fragments are kept with URL_TYPE = "full_path" (Issue #3448)

  • Don’t run typogrify filters on <title> tag to avoid adding extra tags (Issue #3405)

  • Fix handling of duplicate plugins on Windows

  • Allow else clause in post-list plugin. (Issue #3436)

  • Ensure type metadata value from plugins is preserved (Issue 3445)

  • Fix path handlers with slashes on Windows

Nikola v8.1.1 is out!

On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v8.1.1. This release is mainly due to an incorrect PGP key being used for the PyPI artifacts; three regressions were also fixed in this release.

What is Nikola?

Nikola is a static site and blog generator, written in Python. It can use Mako and Jinja2 templates, and input in many popular markup formats, such as reStructuredText and Markdown — and can even turn Jupyter Notebooks into blog posts! It also supports image galleries, and is multilingual. Nikola is flexible, and page builds are extremely fast, courtesy of doit (which is rebuilding only what has been changed).

Find out more at the website: https://getnikola.com/

Downloads

Install using pip install Nikola.

Changes

Bugfixes

  • Default to no line numbers in code blocks, honor CodeHilite requesting no line numbers. Listing pages still use line numbers (Issue #3426)

  • Remove duplicate MathJax config in bootstrap themes (Issue #3427)

  • Fix doit requirement to doit>=0.32.0 (Issue #3422)

Nikola v8.1.0 is out!

On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v8.1.0. This release makes a few feature changes, improvements, and fixes a few bugs.

What is Nikola?

Nikola is a static site and blog generator, written in Python. It can use Mako and Jinja2 templates, and input in many popular markup formats, such as reStructuredText and Markdown — and can even turn Jupyter Notebooks into blog posts! It also supports image galleries, and is multilingual. Nikola is flexible, and page builds are extremely fast, courtesy of doit (which is rebuilding only what has been changed).

Find out more at the website: https://getnikola.com/

Downloads

Install using pip install Nikola.

Changes

Features

  • Support posts without titles (Issue #3408)

  • Support WebP image scaling (Issue #3399)

  • Use Luxon instead of Moment for fancy dates to make it more lightweight, going from 328k to 68k (Issue #3232)

  • New nikola console -s script.py option to run scripts that access your site (Issue #3385)

  • Allow preview images to be relative to posts for bootblog4 featured posts

  • Change the listings formatting to support word wrap with line numbers and improve appearance

  • Put the current language’s feed links first so that feed readers prefer it (Issue #3248)

  • Added support for default preview image for posts (Issue #3326)

  • Added support for thumbnails in gallery lists (Issue #1771)

Bugfixes

  • Support directory names in REDIRECTIONS (Issue #3421)

  • Return a non-zero error code when nikola github_deploy fails

  • Refactored scale_image causing performance increasing in image resizing.

  • Don’t force absolute links for brand/languages (Issue #3229)

  • Fix RTL mirroring in base theme (:dir() pseudo-class is Firefox only) (Issue #3353)

  • Work around Bootstrap 4 alignment bug for RTL languages (Issue #3353)

  • Handle multiple level of inherit/import nesting in Mako templates correctly (Issue #3349)

  • Output a more informative error when files are missing due to broken symlinks or incorrect TRANSLATIONS_PATTERN values

  • Avoid installing tests package to site-packages, remove it from your environment if it was inadvertently added (Issue #3348)

  • Sometimes hyphenation added hyphens at the beginning of words (Issue #3362)

  • Mark gallery images as "dirty" if EXIF configuration changes (Issue #3357)

  • Fix regression in gallery titles being "index" if there was a index.txt and no title (Issue #3360)

  • Make gallery indexes depend on destination images to avoid multithreading race condition (Issue #3361)

  • Mark gallery thumbnails as lazy loading (Issue #2918)

  • Don't consider JPEG images with EXIF thumbnails as animated (Issue #3332)

  • Use correct language for hyphenation in posts that are not translated to all languages (Issue #3377)

Internal

  • Added Post.source() method to get a Post's object unprocessed contents.

  • Added Post.save() method to modify Post contents.

  • Made is_two_file a property that uses save()