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()

Automating Nikola rebuilds with GitHub Actions

In this guide, we’ll set up GitHub Actions to rebuild a Nikola website and host it on GitHub Pages.

Why?

By using GitHub Actions to build your site, you can easily blog from anywhere you can edit text files. Which means you can blog with only a web browser and GitHub.com. You also won’t need to install Nikola and Python to write. You won’t need a real computer either — a mobile phone could probably access GitHub.com and write something.

Caveats

  • The build might take a couple minutes to finish (1:30 for the demo site; YMMV)

  • When you commit and push to GitHub, the site will be published unconditionally. If you don’t have a copy of Nikola for local use, there is no way to preview your site.

What you need

  • A computer for the initial setup that can run Nikola. You can do it with any OS (Linux, macOS, *BSD, but also Windows).

  • A GitHub account (free)

Setting up Nikola

Start by creating a new Nikola site and customizing it to your liking. Follow the Getting Started guide. You might also want to add support for other input formats, namely Markdown, but this is not a requirement.

After you’re done, you must configure deploying to GitHub in Nikola. There are a few important things you need to take care of:

  • Make your first deployment from your local computer and make sure your site works right. Don’t forget to set up .gitignore.

  • The GITHUB_COMMIT_SOURCE and GITHUB_REMOTE_NAME settings are overridden, so you can use values appropriate for your local builds.

  • Ensure that the correct branch for GitHub Pages is set on GitHub.com.

If everything works, you can make some change to your site (so you see that rebuilding works), but don’t commit it just yet.

Setting up GitHub Actions

Next, we need to set up GitHub Actions. This is really straightforward.

On your source branch, create a file named .github/workflows/main.yml with the following contents:

github-workflow.yml (Source)

on: [push]
jobs:
  nikola_build:
    runs-on: ubuntu-latest
    name: 'Deploy Nikola to GitHub Pages'
    steps:
    - name: Check out
      uses: actions/[email protected]
    - name: Build and Deploy Nikola
      uses: getnikola/[email protected]

There might be a newer version of the action available, you can check the latest version in the getnikola/nikola-action repo on GitHub.

By default, the action will install the latest stable release of Nikola[extras]. If you want to use the bleeding-edge version from master, or want to install some extra dependencies, you can provide a requirements.txt file in the repository.

Commit everything to GitHub:

git add .
git commit -am "Automate builds with GitHub Actions"

Hopefully, GitHub will build your site and deploy. Check the Actions tab in your repository or your e-mail for build details. If there are any errors, make sure you followed this guide to the letter.