A static website and blog generator

Overview

Nikola, a Static Site and Blog Generator

In goes content, out comes a website, ready to deploy.

Why Static Websites?

Static websites are safer, use fewer resources, and avoid vendor and platform lock-in. You can read more about this in the Nikola Handbook

What Can Nikola Do?

It has many features, but here are some of the nicer ones:

Nikola Architecture

https://getnikola.com/images/architecture.png

Installation Instructions

Assuming you have pip installed:

pip install Nikola

For optional features:

pip install "Nikola[extras]"

For tests:

pip install "Nikola[extras,tests]"

For more information, see https://getnikola.com/

Comments
  • ```EarlyTask``` plugins

    ```EarlyTask``` plugins

    Hi,

    I'd like to have a plugin category EarlyTask, for tasks which are executed before the site is rendered (i.e. an analogue to LateTask). I personally need that for a plugin (or better, combination of plugins) I wrote, currently I used the Task plugin class but it happens that some tasks are run after page compiling, while my page compiling plugin needs their result -- and so it fails.

    Does anyone mind if I add something like that? Or would it be better to have a general priority system, so you can assign a task a priority (usual tasks could get 10, and late tasks 100, so you could add a task with priority 2 and one with priority 7 to ensure that the one with priority 2 appears in the task list before the one with priority 7 and before all regular rendering tasks and late tasks)?

    (I have the vague feeling that I already read something about EarlyTasks somewhere here, but I cannot remember where. So it's probably not my own idea :) )

    Cheers, Felix

    enhancement question idea 
    opened by felixfontein 71
  • URLs for sites not in the webserver root are broken [was: The image url is not correct.]

    URLs for sites not in the webserver root are broken [was: The image url is not correct.]

    My site is in a subfolder, such as http://www.abc.com/blog/. The url of image in the gallery is not correct. If I put a jpg file in galleries/software/screen.jpg, after building, the url will be http://www.abc.com/galleries/software/screen.jpg. In face it should be http://www.abc.com/blog/galleries/software/screen.jpg.

    The images in the posts are good.

    Nikola version 6.2.1

    bug 
    opened by ghost 47
  • Support for EarlyTasks.

    Support for EarlyTasks.

    The earlytask_impl branch implements support for EarlyTasks in Nikola, which are tasks that are executed before Nikola scans for posts. See #1562 for more details. After some testing (sorry it took so long) I think it works rather well now, so it's time to start a PR :-)

    What this branch improves over current Nikola:

    • there's a better separation between Tasks and LateTasks: LateTasks won't be processed before Tasks aren't done; this makes in particular a difference when multithreading/multiprocessing is used;
    • scanning for posts is now collected to happen at precisely one place: in stage 0, which is before the stage where all Task objects are processed, and after all EarlyTask objects are processed;

    What this branch requires:

    • an up-to-date version of doit

    What this branch cannot deliver at the moment:

    • nikola build <filename> does not work without further support in doit (see https://github.com/pydoit/doit/issues/20, haven't had time to really work on it yet);
    • nikola build <taskname> only works for tasks named after the plugin itself, and not for (potential) otherwise named tasks created by the plugins;
    • when running nikola in parallel (via -n 4 for example), one has to tell doit (via -P thread) to use threads instead of processes.

    (fixes #1553 and #1562)

    Review on Reviewable

    enhancement breaks backwards compatibility 
    opened by felixfontein 36
  • First shot on #993 for taxonomies, in particular archives.

    First shot on #993 for taxonomies, in particular archives.

    • [x] I’ve read the guidelines for contributing.
    • [x] I updated AUTHORS.txt and CHANGES.txt (if the change is non-trivial) and documentation (if applicable).
    • [x] I tested my changes.

    This PR adds functionality to the taxonomy system to be able to reference translated classifications in taxonomies, with an example how to use this for archives. See #993.

    The generated archives currently look ugly due to no CSS :)

    enhancement BLOCKER i18n 
    opened by felixfontein 32
  • Python 3 is BATSHIT INSANE

    Python 3 is BATSHIT INSANE

    Random rebuilds on my blog:

    • [x] tag indexes rebuild all the time
    • [x] galleries rebuild at random (self.kw changes sometimes)
    • blog posts/pages, mainly related to those galleries, rebuild when galleries get rebuilt (sounds sane)

    I have no idea where to start debugging this shit. I’m running Nikola from github master.

    Database diffs hint at sorting issues: https://gist.github.com/754d0a351618099f7d4c and https://gist.github.com/7611c1fe09ddf9d6680a Note that dict order is RANDOM in Python 3.

    cc @felixfontein (you messed with all this recently, didn’t you?)

    bug 
    opened by Kwpolska 32
  • Make github pages deploy seamless

    Make github pages deploy seamless

    I am not knowledgeable enough of git to handle this, all recipes I've seen look like a complicated mess (but it's all on me! really!).

    So, let's fix it the right way: why not have a nikola github-deploy command that does The Right Thing (tm) using just a github username or whatever in conf.py?

    Looking forward to it :-)

    enhancement 
    opened by ralsina 32
  • Provide conda packages

    Provide conda packages

    I'm looking for conda packages, but can find only pretty old ones here: https://anaconda.org/search?q=nikola. Any plans to provide more recent ones regularly?

    PR exists feature request 
    opened by deeplook 31
  • Incremental build seems not to be working

    Incremental build seems not to be working

    Environment

    Python Version: Python 3.5.2

    Nikola Version: Nikola v8.0.1

    Operating System: Ubuntu 16.04

    Description:

    If I run nikola build twice in a row, according to this page I would expect it to do nothing; and yet:

    $ nikola build 2>&1 | wc -l
    1910
    

    It is less than a full rebuild:

    $ nikola build -a 2>&1 | wc -l
    4077
    

    If I compare the actual output, it seems that the incremental rebuild doesn't do the render_posts:cache/posts/... tasks and the render_taxonomies:output/... for the atom and xml feeds.

    Do I have some configuration or template in my site that makes Nikola misbehave? Are there some ways to debug this?

    For the record, the source of my site is here.

    bug 
    opened by mardy 31
  • Experiments for generalization of taxonomies.

    Experiments for generalization of taxonomies.

    This is about #2107. I added a new plugin category, Taxonomy, as well as two plugins which take care to classify posts with all Taxonomy plugins and render all associated pages for them.

    The next step is re-implementing the following plugins with this framework and see if it works:

    • archive
    • authors
    • indexes (needs to be split up into two plugins, one for the main index and one for section indexes)

    It's not possible to recreate the tags plugin with this framework as it contains the option (which is even default!) to put tags and categories onto the same overview page. But that problem will be solved in v8 anyway when categories go away :)

    in progress 
    opened by felixfontein 29
  • UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-4: ord inal not in range(256)

    UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-4: ord inal not in range(256)

    i use win7 with python 2.7.9 when i installed nikola and use "nikola help" command, cmd.exe tells:

    Traceback (most recent call last): File "D:\Python27\lib\runpy.py", line 162, in run_module_as_main "main", fname, loader, pkg_name) File "D:\Python27\lib\runpy.py", line 72, in run_code exec code in run_globals File "D:\Python27\Scripts\nikola.exe__main.py", line 9, in File "D:\Python27\lib\site-packages\nikola__main__.py", line 158, in main site = Nikola(**config) File "D:\Python27\lib\site-packages\nikola\nikola.py", line 658, in init self.tzinfo = dateutil.tz.gettz(self.config['TIMEZONE']) File "D:\Python27\lib\site-packages\dateutil\tz.py", line 964, in gettz tz = tzwin(name) File "D:\Python27\lib\site-packages\dateutil\tzwin.py", line 92, in init self._stdname = keydict["Std"].encode("iso-8859-1") UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-4: ord inal not in range(256)

    someone else's bug 
    opened by xh84 29
  • Static comments

    Static comments

    Hi,

    I saw that there once was a discussion on static comments (#719). At that time, the idea was more or less dropped, as far as I understand. I'd like to revive it to some extend :) Namely, I want to convert some of my WordPress blogs including all comments. I don't want to use any JavaScript or any 3rd party system which requires access to another server, and I also don't want to just drop the comments. I'm not sure what to do about commenting in the future, but for now (also due to a very low volume of comments), I'd be perfectly happy with static comments. The problem is that it looks like I need a bit of support by Nikola to do this. In particular, I need that for every created post object, one function is called. From what I understand, there's no way to do that with the current plugin types, so I need a new one for precisely this.

    Adding that is quite simple (also adding support for static comments in galleries, this requires essentially one call per gallery). The question is how far should this go, i.e. whether there should be more support for static comments or not. The bare minimum is a plugin category which is called once per Post object (for both posts and stories) and once per gallery (with the chance to return something which is added to the gallery's context). With that foundation, doing everything else in a plugin (or multiple plugins) and themes is definitely possible. A more deluxe solution would be to add basic support to Nikola, in form of a Comment class collecting some information on comments. Then it would be much easier to support generic static comments in a theme without knowing which static comments plugin the user might use (maybe also none at all). Of course, one question is: how many such plugins will there be after all? Probably not many. Maybe only one. So I'm really not sure if it's worth that trouble to add such things. Maybe it's better to only implement the minimal foundation and leave everything else to plugins?

    What do you think? Do you want such a feature at all? And if you want it, do you want more a minimalist, or more a deluxe version?

    Thanks and all the best, Felix

    opened by felixfontein 29
  • Shortcodes in included rst files are not rendered

    Shortcodes in included rst files are not rendered

    Environment.

    $ python -V
    Python 3.10.8
    
    $ pip freeze | grep Nikola
    Nikola==8.2.3
    
    $ cat /etc/os-release
    NAME="Arch Linux"
    PRETTY_NAME="Arch Linux"
    ID=arch
    BUILD_ID=rolling
    ANSI_COLOR="38;2;23;147;209"
    HOME_URL="https://archlinux.org/"
    DOCUMENTATION_URL="https://wiki.archlinux.org/"
    SUPPORT_URL="https://bbs.archlinux.org/"
    BUG_REPORT_URL="https://bugs.archlinux.org/"
    PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/"
    LOGO=archlinux-logo
    
    $ uname -a
    Linux p 6.0.11-arch1-1 #1 SMP PREEMPT_DYNAMIC Fri, 02 Dec 2022 17:25:31 +0000 x86_64 GNU/Linux
    

    Description.

    Trying to include other rst file doesn't reder shorcodes:

    $ grep -E 'include|example' pages/index.rst 
    .. include:: ./includes/definiciones.rst
    Esto es otra cosa: |example|
    
    $ cat includes/definiciones.rst
    .. |example| replace::
       {{% raw %}} <span class="logo"/> {{% /raw %}}
    

    This doesn't render raw shortcode, only include the text as it is: {{% raw %}} <span class="logo"/> {{% /raw %}}.

    I think the problem is that Nikola only render shortcodes of the main rst file and not of the included files.

    Although include directive (https://docutils.sourceforge.io/docs/ref/rst/directives.html#including-an-external-document-fragment) permits specify parser parameter. If this parser may be Nikola Parser, the problem should be resolved. Something like this:

    .. include::  ./includes/definiciones.rst
       :parser: nikolaParser
    

    Is there anyway of render includes files?

    Regards.

    feature request 
    opened by orencio 4
  • Navigation-Link to /#some-anchor resolves wrong

    Navigation-Link to /#some-anchor resolves wrong

    Environment

    Nikola v8.2.3

    Description:

    When defining

    NAVIGATION_LINKS = {
        DEFAULT_LANG: (
            ("/", "Home"),
            ("/#some-anchor", "Subsection"),
        ),
    }
    

    this link for “Subsection“ is resolved wrong for sibling pages of /index.html.

    • Correct: /index.html: href="#some-anchor"
    • Wrong: /other-page.html: href="#some-anchor" — leading slash is missing
    • Correct: /dir/page.html: href="/#some-anchor" — leading slash is here

    I tried different work-arounds, like /./#some-anchor without success.

    bug 
    opened by htgoebel 2
  • nikola auto loops infinitely

    nikola auto loops infinitely

    Environment

    Python Version: 3.7.13

    Nikola Version: 8.2.3

    Operating System: Debian

    Description:

    When I run nikola auto for my site and load the local url in the browser, sometimes after making some changes to a blog post the site will reload over and over again.

    In the terminal where nikola auto is running I can see it refreshing a lot of the posts/taxonomies and site xml files. I end up having to interrupt the process, restart it, and reload my browser.

    Let me know if there's anything I can do to help debug this!

    bug 
    opened by catlee 0
  • doc: Small additions linking templates/themes to demo site.

    doc: Small additions linking templates/themes to demo site.

    Pull Request Checklist

    • [x] I’ve read the guidelines for contributing.

      since the change is trivial, I abstreined from creating an issue first.

    • [x] I updated AUTHORS.txt and CHANGES.txt (if the change is non-trivial) and documentation (if applicable).

      not applicable

    • [x] I tested my changes.

    Description

    Adds a few lines of text pointing from the templates/themes section to the demo site section. I was missing such a link.

    opened by htgoebel 4
  • Add Customized Slug or Translation for Authors

    Add Customized Slug or Translation for Authors

    Requested Feature: Add Customized Slug or Translation for Authors

    Related Area: authors, categories, tags, slug, unidecode, translatable

    Do you want to contribute this yourself as a pull request? (don’t worry about it if you don’t want to/can’t — someone else can take care of it)

    • [x] Yes, I have already written code for it (link if available and feasible)
    • [ ] Yes, I don’t have code ready yet (that’s okay!)
    • [ ] No (that’s okay too!)

    conf.py

    AUTHOR_CUSTOMIZED_SLUGS = {
        "en": {"Yamada Taro": "yamada-taro"},
        "zh_cn": {"山田太郎": "yamada-taro"},
        "ja": {"山田 太郎": "yamada-taro"},
        "ko": {"야마다 다로": "yamada-taro"},
    }
    

    plugins/task/authors.py

        def get_path(self, classification, lang, dest_type='page'):
            """Return a path for the given classification."""
            if self.site.config['SLUG_AUTHOR_PATH']:
                # Modified
                if 'AUTHOR_CUSTOMIZED_SLUGS' in self.site.config and \
                    lang in self.site.config['AUTHOR_CUSTOMIZED_SLUGS'] and \
                    classification in self.site.config['AUTHOR_CUSTOMIZED_SLUGS'][lang]:
                    slug = self.site.config['AUTHOR_CUSTOMIZED_SLUGS'][lang][classification]
                else:
                    slug = utils.slugify(classification, lang)
            else:
                slug = classification
            return [self.site.config['AUTHOR_PATH'](lang), slug], 'auto'
    

    Does this feature affect backwards compatibility? If yes, in what way?

    Probably not. Just like post titles, user could choose to use or not to use customized slugs. Nikola should work as usual, if a user chooses not to use customized slugs. But I am not sure about translatable strings.

    Rationale and full description: (why should it be added to Nikola?)

    There is a very complicated issue in romanizing / slugifying Japanese. See Japanese Kanji is transliterated as Chinese in Frequently Asked Questions of Unidecode at https://github.com/avian2/unidecode

    Due to the reason above, I found it difficult to write authors in Japanese. Of course I can write their names in English (romanization), but it’s just not perfect.

    On the other hand, if I write their names in Japanese, their names will be either slugified using Chinese pronunciations (e.g. 山田太郎 -> shan-tian-tai-lang), which is totally wrong, or kept intact as Japanese, which causes %-escaped URLs.

    To solve the issue, I have two suggestions.

    1. Add customized slug for authors. If we can give an author called 山田太郎 a customized slug yamada-taro, then we can get a correct, simple URL yamada-taro (generated from customized slug), while seeing their real name in Japanese (the author name set in posts or BLOG_AUTHOR) in HTML.
    2. Add translatable string for authors. If we can give an author called Yamada Taro a translation 山田太郎, then we can get a correct, simple URL yamada-taro (generated from Yamada Taro, the name set in posts or BLOG_AUTHOR), while seeing their real name in Japanese (generated from translated string) in HTML.

    PS: Categories and tags in Japanese have similar issues, as you can see here https://org-technology.com/categories/index.html (科学技術計算 is slugified as ke-xue-ji-shu-ji-suan, instead of kagaku-gijutsu-keisan), but I haven’t looked into it so I’m not sure if there is already a solution for categories and tags.

    Update: I have implemented customized slugs for authors. It seems to be the easier way of two, and it works fine for me.

    feature request 
    opened by ChenZheChina 0
  • Show count against tag/category

    Show count against tag/category

    Requested Feature: (short description) Screenshot 2022-05-14 at 13 30 21

    In tags page, currently only tags/categories are shown.

    Does this feature affect backwards compatibility? If yes, in what way?

    No

    Do you want to contribute this yourself as a pull request? (don’t worry about it if you don’t want to/can’t — someone else can take care of it)

    • [x] Yes, I don’t have code ready yet (that’s okay!)

    Rationale and full description: (why should it be added to Nikola?)

    Screenshot 2022-05-14 at 13 26 49

    Most of the blogging platforms(like blogger, wordpress) have this feature by default. Having count against tag/cateogry gives a glimpse on how many items are present against each tag.

    There are nikola plugins that do generate tag count, tag cloud etc. Some of them just generate json files. Users have to setup custom code for front end.

    Since nikola already generates taxanomies, showing count along with it will provide better insights by default.

    feature request 
    opened by ChillarAnand 4
Releases(v8.2.3)
  • v8.2.3(Aug 1, 2022)

    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.

    Source code(tar.gz)
    Source code(zip)
  • v8.2.2(May 1, 2022)

    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)
    Source code(tar.gz)
    Source code(zip)
  • v8.2.1(Apr 23, 2022)

    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.

    Source code(tar.gz)
    Source code(zip)
  • v8.2.0(Dec 27, 2021)

    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.
    Source code(tar.gz)
    Source code(zip)
  • v8.1.3(Feb 13, 2021)

    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)
    Source code(tar.gz)
    Source code(zip)
  • v8.1.2(Nov 15, 2020)

    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
    Source code(tar.gz)
    Source code(zip)
  • v8.1.1(Jul 5, 2020)

    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)
    Source code(tar.gz)
    Source code(zip)
  • v8.1.0(Jun 27, 2020)

    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()
    Source code(tar.gz)
    Source code(zip)
  • v8.0.4(Feb 25, 2020)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v8.0.4. This release fixes a few small bugs, including a date glitch that appeared around New Year’s Eve.

    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

    Nikola now supports Python 3.5 or newer. If you are on 3.4, please upgrade to a newer release of Python.

    Bugfixes

    • Fix hiding future posts in sitemaps for posts without pretty URLs (Issue #3339)
    • Pass the correct parameters to shortcodes in jupyter notebooks
    • Fix handling of conflicts between posts/pages and indexes generated by CATEGORY_PAGES_FOLLOW_DESTPATH
    • Fix default date format to yyyy-MM-dd to avoid bug with ISO years (Issue #3337)
    • Remove extra_header and extra_footer from base theme due to incompatibility with Mako. The blocks are still available in bootstrap4 and bootblog4. (Issue #3319 via #3291)
    • Show tracebacks when conf.py cannot be imported
    • Fix loading complex config files that import modules (Issue #3314)
    • Fix behavior of header demotion for negative values
    • If FILE_METADATA_REGEXP is set, load metadata from the filename first, then continue with the other sources (Issue #3344)
    Source code(tar.gz)
    Source code(zip)
  • v8.0.3(Nov 2, 2019)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v8.0.3. This release fixes a few bugs, including a notable one with galleries not working on mobile.

    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 Friulian translation by aoanla
    • Add extra_header and extra_footer blocks to templates (Issue #3291)
    • Add REST_FILE_INSERTION_ENABLED config option to enable or disable reST external file inclusion directives (Issue #3311)

    Bugfixes

    • Support Markdown v3.x (Issue #3173)
    • Fix galleries in Firefox Mobile and when resizing window (Issue #3258)
    • Output <code> tag for double backticks in reST (Issue #3276)
    • Fully switch to HTML5 writer for reST (Issue #3276, getnikola/plugins#294)
    • Make ipynb listings work again
    • Correctly link to listings with spaces in their names
    • import_wordpress plugin doesn't require anymore a translation and can use nikola's default if none provided
    • Wordpress+qtranslate import (--qtranslate option) now works with more recent versions of plugins from the qtranslate family (namely qtranslate-X)
    • Fixed a wordpress import exception when image metadata has floats formated with ',' instead of '.'
    Source code(tar.gz)
    Source code(zip)
  • v8.0.2(Feb 22, 2019)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v8.0.2. This is a quality-of-life release with a handful of bug fixes, two new translations and a few extra features.

    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. (Python 3-only since v8.0.0.)

    Changes

    • Make ARCHIVE_PATH, ARCHIVE_FILENAME translatable (Issue #3234)
    • Support configuring Isso via GLOBAL_CONTEXT['isso_config'] (Issue #3225)
    • Handle fragments in doc role (Issue #3212)
    • Slugify references in doc role.
    • Add Interlingua translation by Alberto Mardegan
    • Add Afrikaans translation by Friedel Wolff
    • Support for docutils.conf (Issue #3188)

    Bugfixes

    • Avoid random rebuilds with sites whose locales are not fullly supported, and random rebuilds on multilingual sites using Python 3.4/3.5 (Issue #3216)
    • Apply modifications to default_metadata before copying it to other languages
    • Make Commento comments work (Issue #3198)
    • Correctly handle separators in the relative path given to "ignored_assets" key in theme meta files (Issue #3210)
    • Fix error when nikola new_post receives directory name as path (Issue #3207)
    • Add slashes to paths with query strings in nikola serve only if there isn’t one before ?
    • Read listings files as UTF-8
    • Set one-file status basing on default language only (Issue #3191)
    • Don’t warn if post status is set to published explicitly (Issue #3181)
    • Remove mention of Twitter cards requiring an opt-in. This is not true anymore - anyone can use them.
    • fancydates now workwith listdate items (eg. archives)
    • bootstrap4 and bootblog4 themes no longer load moment.js when fancydates are off. (Issue #3231)
    Source code(tar.gz)
    Source code(zip)
  • v8.0.1(Sep 30, 2018)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v8.0.1. Some bugs were fixed; more importantly, we pinned down the Markdown package version due to incompatibilities.

    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. (Python 3-only since v8.0.0.)

    Changes

    • Not compatible with Markdown 3.x yet, this release pins the requirement down to 2.x (until we get 3.x support done)

    Features

    • Make URL displayed by nikola auto and nikola serve clickable (Issue #3166)

    Bugfixes

    • Pandoc compiler was passing deleted argument (Issue #3171)
    • Make nikola version --check work again (Issue #3170)
    • Set logging level for reST to warning in order to limit noise
    • Fix docinfo removal for sites that use reST docinfo metadata (Issue #3167)
    Source code(tar.gz)
    Source code(zip)
  • v8.0.0(Sep 10, 2018)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v8.0.0. After 15 months in development, we’ve created our best release ever, with new features, many bugs squashed, and some improvements under the hood.

    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==8.0.0.

    If you want to upgrade to Nikola v8, make sure to read the Upgrading blog post.

    Changes

    Important compatibility changes

    • Rename crumbs.tmpl to ui_helper.tmpl and the breadcrumbs bar function to breadcrumbs (your templates may need changing as well)
    • Rename post.is_mathjax to post.has_math. Themes using post.is_mathjax must be updated; it is recommended that they are changed to use math_helper.tmpl.
    • Reading reST docinfo metadata, including first heading as title, requires USE_REST_DOCINFO_METADATA now (Issue #2987)
    • RSS feeds might have changed their places due to RSS_PATH behavior changes (you may need to change RSS_PATH, RSS_FILENAME_BASE)
    • Atom feeds for archives and Atom pagination are no longer supported (Issue #3016)
    • Sections are replaced by categories (Issue #2833)
    • You need <a class="reference"> (instead of image-reference) to activate the lightbox now
    • Date formatting now uses the Babel library, you might need to change BABEL_FORMAT (Issues #2606, 3121)
    • The first heading in a reST document is not removed anymore by default unless USE_REST_DOCINFO_METADATA is enabled (Issues #2382, #3124)

    Features

    • Add Malayalam translation by Nemo Dicto
    • Add Vietnamese translation by Hoai-Thu Vuong
    • Don’t generate gallery index if the destination directory is site root and it would conflict with blog index (Issue #3133)
    • All built-in themes now support updated timestamp fields in posts. The update time, if it is specified and different from the posting time, will be displayed as "{postDate} (${messages("updated")} {updateDate})". If no update time is specified, the posting time will be displayed alone.
    • All built-in themes now support the DATE_FANCINESS option.
    • Theme bundles are now parsed using the configparser module and can support newlines inside entries as well as comments
    • Make bootstrap4 navbar color configurable with THEME_CONFIG['navbar_light'] (Issue #2863)
    • New data_file option for chart shortcode and directive (Issue #3129)
    • Show the filename of the missing file when nikola serve can't find a file (i.e. when an 404 error occurs).
    • Better error messages for JSON download failures in nikola plugin and nikola theme (Issue getnikola/plugins#282)
    • Use Babel instead of the locale module to better handle localizations (Issues #2606, #3121)
    • Change DATE_FORMAT formats to CLDR formats (Issue #2606)
    • Add NAVIGATION_ALT_LINKS option, displayed on the right side in bootstrap4/bootblog4 (Issue #3030)
    • Added documentation of Post objects to list of template variables (Issue #3003)
    • Support featured posts in bootblog4 (Issue #2964)
    • Add THEME_CONFIG setting that themes can use in any way
    • Use youtube-nocookie.com for better privacy in youtube reST directive and improve the appearance of the player
    • Support hackerthemes.com themes and renamed bootswatch_theme command subtheme (Issue #3049)
    • Add DISABLE_MAIN_ATOM_FEED setting (Issue #3016, Issue #3039)
    • Add ATOM_FILENAME_BASE setting (defaults to index for existing sites, but feed for new sites) (Issue #3016)
    • Add CATEGORY_DESTPATH_AS_DEFAULT, CATEGORY_DESTPATH_TRIM_PREFIX, CATEGORY_DESTPATH_FIRST_DIRECTORY_ONLY settings, as part of replacing sections with categories (Issue #2833)
    • Tags draft, private and mathjax are no longer treated special if USE_TAG_METADATA is set to False (default for new sites) (Issue #2761)
    • Replace draft and private tags with a status meta field (supports published, featured, draft, private) and mathjax with .. has_math: yes (Issue #2761)
    • Rename TAG_PAGES_TITLESTAG_TITLES, TAG_PAGES_DESCRIPTIONSTAG_DESCRIPTIONS.
    • Rename CATEGORY_PAGES_TITLESCATEGORY_TITLES, CATEGORY_PAGES_DESCRIPTIONSCATEGORY_DESCRIPTIONS.
    • Produce a better error message when a template referenced in another template is missing (Issue #3055)
    • Support captioned images and image ordering in galleries, as well as arbitrary metadata through a new metadata.yml file (Issue #3017, Issue #3050, Issue #2837)
    • New ATOM_PATH setting (Issue #2971)
    • Make crumbs available to all pages
    • Allowing to customize RSS and Atom feed extensions with RSS_EXTENSION, ATOM_EXTENSION settings (Issue #3041)
    • Allowing to customize filename base appended to RSS_PATH with RSS_FILENAME_BASE setting (Issue #3041)
    • Use basic ipynb template by default for slightly better appearance and behavior
    • Fixing behavior of RSS_PATH to do what the documentation says it does (Issue #3024)
    • Add support for fragments in path handlers (Issue #3032)
    • New METADATA_VALUE_MAPPING setting to allow for flexible global modification of metadata (Issue #3025)
    • New smartjoin template function/filter that joins lists and leaves strings as-is (Issue #3025)
    • Explain index.html conflicts better (Issue #3022)
    • Recognize both TEASER_END and (new) END_TEASER (Issue #3010) (warning: if you perform manual splits, the regex change means new indexes must be used)
    • New MARKDOWN_EXTENSION_CONFIGS setting (Issue #2970)
    • Replace flowr.js with justified-layout.js by Flickr (does not require jQuery!)
    • bootblog4 is the new default theme (Issue #2964)
    • New bootstrap4 and bootblog4 themes (Issue #2964)
    • New Thai translation by Narumol Hankrotha and Jean Jordaan
    • Support for Commento comment system (Issue #2773)
    • New PRESERVE_ICC_PROFILES option to control whether ICC profiles are preserved when copying images.
    • Use baguetteBox in Bootstrap theme (part of Issue #2777)
    • New default-config command to generate a clean configuration.
    • New thumbnail shortcode similar to the reStructuredText thumbnail directive (via Issue #2809)
    • Rewrite nikola auto with asyncio and aiohttp (Issue #2850)
    • New listings shortcode similar to the reStructuredText listings directive (Issue #2868)
    • Switch to reStructuredText’s new HTML 5 renderer (Issue #2874)
    • Deprecate html4css1.css in favor of rst_base.css (Issue #2874)
    • Add support for MetadataExtractor plugins that allow custom, extensible metadata extraction from posts (Issue #2830)
    • Support YAML and TOML metadata in 2-file posts (via Issue #2830)
    • Renamed UNSLUGIFY_TITLESFILE_METADATA_UNSLUGIFY_TITLES (Issue #2840)
    • Add NIKOLA_SHOW_TRACEBACKS environment variable that shows full tracebacks instead of one-line summaries
    • Use PRETTY_URLS by default on all sites (Issue #1838)
    • Feed link generation is completely refactored (Issue #2844)
    • Let path handlers return absolute URLs (Issue #2876)
    • Add BLOG_EMAIL to global context to make it available for templates (Issue #2968)

    Bugfixes

    • Use UTF-8 instead of system encoding for gallery metadata.yml file
    • Do not remove first heading in document (reST document title) if USE_REST_DOCINFO_METADATA is disabled (Issue #3124)
    • Remove NO_DOCUTILS_TITLE_TRANSFORM setting, this is now default behavior if USE_REST_DOCINFO_METADATA is disabled (Issue #2382, #3124)
    • Enforce trailing slash for directories in nikola auto (Issue #3140)
    • Galleries with baguetteBox don’t glitch out on the first image anymore (Issue #3141)
    • Pass arguments to youtube directive unchanged (Issue #3150)
    • Fix listing installed themes if theme directory is missing.
    • Watch correct output folder in nikola auto (Issue #3119)
    • Fix post fragment dependencies when posts are only available in a non-default language (Issue #3112)
    • Implement MARKDOWN_EXTENSION_CONFIGS properly (Issue #2970)
    • Ignore .DS_Store when processing listings (Issue #3099)
    • Remove redundant check for tag similarity (Mentioned in Issue #3123)
    • Improve appearance of bootblog4 on mobile (Issue #3069)
    • Make smartjoin more flexible (Issue #3080)
    • Make post-list and post_list synonymous (Issue #3083)
    • Support CATEGORY_DESTPATH_NAMES with pages following destpath
    • Make CATEGORY_PAGES_FOLLOW_DESTPATH more resilient (Issue #3081)
    • Guard against null items in gallery meta files (Issues #3076, #3077)
    • Respect USE_FILENAME_AS_TITLE in galleries with a meta file
    • Fix gallery metadata for multilingual sites (Issue #3078)
    • Fixes behavior for posts not available in default language (Issues #2956 and #3073)
    • Always follow FEED_LENGTH for Atom feeds
    • Apply filters to all Atom feeds
    • Read file metadata if compiler metadata exists and prefer it over compiler metadata (Issue #3008)
    • Rename DISABLE_INDEXES_PLUGIN_INDEX_AND_ATOM_FEED to DISABLE_INDEXES and DISABLE_INDEXES_PLUGIN_RSS_FEED to DISABLE_MAIN_RSS_FEED (Issue #3039)
    • Make chart shortcode its own plugin and make the reST directive depend on it.
    • Put post_list shortcode in its own plugin and make the reST directive depend on it.
    • Don’t silence syntax errors and other exceptions that occur while reading metadata
    • Use documented dateutil API for time zone list (Issue #3006)
    • Handle trailing slash redirects with query strings correctly in nikola serve (Issue #3000)
    • Fix w3c validation errors for itemscope entries in default themes
    • Hide “Incomplete language” message for overrides of complete languages
    • Handle '/' and other absolute paths better in POSTS / PAGES / TRANSLATIONS (Issue #2982)
    • Fix loading non-default languages
    • Support KaTeX for reST display math (Issue #2888)
    • Use npm for asset management instead of bower, which was deprecated (Issue #2790)
    • Properly handle SHOW_INDEX_PAGE_NAVIGATION with Jinja templates (Issue #2960)
    • Prevent crashes due to Windows-specific code in auto running on all platforms (Issue #2940)
    • Don’t run hyphenate on <pre> blocks (Issue #2939)
    • Make errors in reST display in logs again
    • Unquote paths given to link:// magic URLs (Issue #2934)
    • Specify UTF-8 input encoding for Mako as default (Issue #2930)
    • Don't trigger rebuilds in auto mode for files it's safe to ignore (Issue #2906)
    • Fix padding for Jupyter code blocks (Issue #2927)
    • Apply SCHEDULE_ALL to posts only (Issue #2921)
    • Restore version number to Bootswatch URLs (Issue #2916)
    • Do not strip trailing slash in slug magic links
    • Ignore empty tags in HTML metadata reader (Issue #2890)
    • Do not remove doctype if add_header_permalinks or deduplicate_ids are used
    • Handle empty slug metadata (Issue #2887)
    • Fix crash when compiling empty .html posts (Issue #2851)
    • Make failures to get source commit hash non-fatal in github_deploy (Issue #2847)
    • Less cryptic error when guessing format from extension in new_post fails
    • Use Jupyter name more consistently in docs
    • Support CODE_COLOR_SCHEME in Jupyter notebooks (Issue #2093)
    • Language was not passed to title and link generation for page indexes
    • Addressed issue with snaps not allowing certain functions to work properly.

    Removed conf.py settings

    The following settings have been removed. Nikola will now always behave as if the value was what is displayed afer the setting name.

    • FEED_PREVIEWIMAGE = True
    • SITEMAP_INCLUDE_FILELESS_DIRS = True
    • USE_OPEN_GRAPH = True
    • USE_BASE_TAG = False

    Removed features

    • Removed Colorbox, baguetteBox is used instead (Issue #2777)
    • Removed googleplus comments (no longer supported) (Issue #635)
    • Removed the slides directive for docutils, it will now be a separate plugin.
    • Dropped Python 2 and Python 3.3 support (oldest supported version is 3.4)
    • Removed nikola install_theme — use nikola theme instead
    • Droppped insecure post “encryption” feature
    • Stopped supporting all deprecated config options
    • Dropped annotations support (annotateit.org closed down in March 2017)
    • Removed taxonomy option also_create_classifications_from_other_languages (Issue #2785) and generate_atom_feeds_for_post_lists (Issue #3016)
    • Removed old 7-line metadata format (Issue #2839)
    • Atom feeds are now limited to one page (Issue #3016)
    • Removed sections (replaced by improved categories) (Issue #2833)
    • Moved tag_cloud_data.json generation to a separate tagcloud plugin (Issue #1696)
    • The webassets library is no longer required, we now manually bundle files (Issue #3074)
    Source code(tar.gz)
    Source code(zip)
  • v8.0.0rc1(Sep 8, 2018)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v8.0.0rc1. This is the end of the road to Nikola version 8. Within 48 hours, assuming there are no grave bugs reported in that timeframe, we intend to release v8 final.

    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==8.0.0rc1.

    If you want to upgrade to Nikola v8, make sure to read the Upgrading blog post.

    Changes

    Features

    • Add Vietnamese translation by Hoai-Thu Vuong
    • Don’t generate gallery index if the destination directory is site root and it would conflict with blog index (Issue #3133)
    • All built-in themes now support updated timestamp fields in posts. The update time, if it is specified and different from the posting time, will be displayed as "{postDate} (${messages("updated")} {updateDate})". If no update time is specified, the posting time will be displayed alone.
    • All built-in themes now support the DATE_FANCINESS option.
    • Theme bundles are now parsed using the configparser module and can support newlines inside entries as well as comments
    • Make bootstrap4 navbar color configurable with THEME_CONFIG['navbar_light'] (Issue #2863)

    Bugfixes

    • Use UTF-8 instead of system encoding for gallery metadata.yml file
    • Do not remove first heading in document (reST document title) if USE_REST_DOCINFO_METADATA is disabled (Issue #3124)
    • Remove NO_DOCUTILS_TITLE_TRANSFORM setting, this is now default behavior if USE_REST_DOCINFO_METADATA is disabled (Issue #2382, #3124)
    • Enforce trailing slash for directories in nikola auto (Issue #3140)
    • Galleries with baguetteBox don’t glitch out on the first image anymore (Issue #3141)

    Removed features

    • Moved tag_cloud_data.json generation to a separate tagcloud plugin (Issue #1696)
    • The webassets library is no longer required, we now manually bundle files (Issue #3074)
    Source code(tar.gz)
    Source code(zip)
  • v8.0.0b3(Aug 7, 2018)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v8.0.0b3. This is the third and hopefully final beta of Nikola v8. The big change in this release is the adoption of Babel to handle date translations (instead of relying on system locale, which didn’t work well for us). Other issues and bugs were fixed.

    Many themes in our Index have been ported for Nikola v8, but some of them are not yet there.

    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==8.0.0b3.

    If you want to upgrade to Nikola v8, make sure to read the Upgrading blog post.

    Changes

    Features

    • New data_file option for chart shortcode and directive (Issue #3129)
    • Show the filename of the missing file when nikola serve can't find a file (i.e. when an 404 error occurs).
    • Better error messages for JSON download failures in nikola plugin and nikola theme (Issue getnikola/plugins#282)
    • Use Babel instead of the locale module to better handle localizations (Issues #2606, #3121)
    • Change DATE_FORMAT formats to CLDR formats (Issue #2606)

    Bugfixes

    • Fix listing installed themes if theme directory is missing.
    • Watch correct output folder in nikola auto (Issue #3119)
    • Fix post fragment dependencies when posts are only available in a non-default language (Issue #3112)
    • Implement MARKDOWN_EXTENSION_CONFIGS properly (Issue #2970)
    • Ignore .DS_Store when processing listings (Issue #3099)
    • Remove redundant check for tag similarity (Mentioned in Issue #3123)
    Source code(tar.gz)
    Source code(zip)
  • v8.0.0b2(May 13, 2018)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v8.0.0b2. This release fixes some bugs found in v8.0.0b1, and adds a few new appearance features (featured posts, alternate navigation links)

    The final version of Nikola v8 should be out in early June. We welcome everyone to test it with their site and report any issues to make it the best release ever.

    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==8.0.0.b2.

    Changes

    Important compatibility changes not mentioned previously

    • You need <a class="reference"> (instead of image-reference) to activate the lightbox now

    Features

    • Add NAVIGATION_ALT_LINKS option, displayed on the right side in bootstrap4/bootblog4 (Issue #3030)
    • Added documentation of Post objects to list of template variables (Issue #3003)
    • Support featured posts in bootblog4 (Issue #2964)
    • Add THEME_CONFIG setting that themes can use in any way
    • Use youtube-nocookie.com for better privacy in youtube reST directive and improve the appearance of the player

    Featured post details: https://getnikola.com/handbook.html#featured-posts

    Bugfixes

    • Improve appearance of bootblog4 on mobile (Issue #3069)
    • Make smartjoin more flexible (Issue #3080)
    • Make post-list and post_list synonymous (Issue #3083)
    • Support CATEGORY_DESTPATH_NAMES with pages following destpath
    • Make CATEGORY_PAGES_FOLLOW_DESTPATH more resilient (Issue #3081)
    • Guard against null items in gallery meta files (Issues #3076, #3077)
    • Respect USE_FILENAME_AS_TITLE in galleries with a meta file
    • Fix gallery metadata for multilingual sites (Issue #3078)
    Source code(tar.gz)
    Source code(zip)
  • v8.0.0b1(May 5, 2018)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v8.0.0b1.

    Nikola v8.0.0b1 (Beta 1) is the first test release of the v8 series. The v8 series adds a ton of new features and fixes bugs, while also breaking backwards compatibility.

    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 (IPython) 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==8.0.0.beta1.

    Before upgrading to Nikola v8, make sure to read the “Upgrading” document.

    Changes in v8.0.0b1

    Important compatibility changes

    • Rename crumbs.tmpl to ui_helper.tmpl and the breadcrumbs bar function to breadcrumbs (your templates may need changing as well)
    • Rename post.is_mathjax to post.has_math. Themes using post.is_mathjax must be updated; it is recommended that they are changed to use math_helper.tmpl.
    • Reading reST docinfo metadata, including first heading as title, requires USE_REST_DOCINFO_METADATA now (Issue #2987)
    • RSS feeds might have changed their places due to RSS_PATH behavior changes (you may need to change RSS_PATH, RSS_FILENAME_BASE)
    • Atom feeds for archives and Atom pagination are no longer supported (Issue #3016)
    • Sections are replaced by categories (Issue #2833)

    Features

    • Support hackerthemes.com themes and renamed bootswatch_theme command subtheme (Issue #3049)
    • Add DISABLE_MAIN_ATOM_FEED setting (Issue #3016, Issue #3039)
    • Add ATOM_FILENAME_BASE setting (defaults to index for existing sites, but feed for new sites) (Issue #3016)
    • Add CATEGORY_DESTPATH_AS_DEFAULT, CATEGORY_DESTPATH_TRIM_PREFIX, CATEGORY_DESTPATH_FIRST_DIRECTORY_ONLY settings, as part of replacing sections with categories (Issue #2833)
    • Tags draft, private and mathjax are no longer treated special if USE_TAG_METADATA is set to False (default for new sites) (Issue #2761)
    • Replace draft and private tags with a status meta field (supports published, featured, draft, private) and mathjax with .. has_math: yes (Issue #2761)
    • Rename TAG_PAGES_TITLESTAG_TITLES, TAG_PAGES_DESCRIPTIONSTAG_DESCRIPTIONS.
    • Rename CATEGORY_PAGES_TITLESCATEGORY_TITLES, CATEGORY_PAGES_DESCRIPTIONSCATEGORY_DESCRIPTIONS.
    • Produce a better error message when a template referenced in another template is missing (Issue #3055)
    • Support captioned images and image ordering in galleries, as well as arbitrary metadata through a new metadata.yml file (Issue #3017, Issue #3050, Issue #2837)
    • New ATOM_PATH setting (Issue #2971)
    • Make crumbs available to all pages
    • Allowing to customize RSS and Atom feed extensions with RSS_EXTENSION, ATOM_EXTENSION settings (Issue #3041)
    • Allowing to customize filename base appended to RSS_PATH with RSS_FILENAME_BASE setting (Issue #3041)
    • Use basic ipynb template by default for slightly better appearance and behavior
    • Fixing behavior of RSS_PATH to do what the documentation says it does (Issue #3024)
    • Add support for fragments in path handlers (Issue #3032)
    • New METADATA_VALUE_MAPPING setting to allow for flexible global modification of metadata (Issue #3025)
    • New smartjoin template function/filter that joins lists and leaves strings as-is (Issue #3025)
    • Explain index.html conflicts better (Issue #3022)
    • Recognize both TEASER_END and (new) END_TEASER (Issue #3010) (warning: if you perform manual splits, the regex change means new indexes must be used)
    • New MARKDOWN_EXTENSION_CONFIGS setting (Issue #2970)
    • Replace flowr.js with justified-layout.js by Flickr (does not require jQuery!)
    • bootblog4 is the new default theme (Issue #2964)
    • New bootstrap4 and bootblog4 themes (Issue #2964)
    • New Thai translation by Narumol Hankrotha and Jean Jordaan
    • Support for Commento comment system (Issue #2773)
    • New PRESERVE_ICC_PROFILES option to control whether ICC profiles are preserved when copying images.
    • Use baguetteBox in Bootstrap theme (part of Issue #2777)
    • New default-config command to generate a clean configuration.
    • New thumbnail shortcode similar to the reStructuredText thumbnail directive (via Issue #2809)
    • Rewrite nikola auto with asyncio and aiohttp (Issue #2850)
    • New listings shortcode similar to the reStructuredText listings directive (Issue #2868)
    • Switch to reStructuredText’s new HTML 5 renderer (Issue #2874)
    • Deprecate html4css1.css in favor of rst_base.css (Issue #2874)
    • Add support for MetadataExtractor plugins that allow custom, extensible metadata extraction from posts (Issue #2830)
    • Support YAML and TOML metadata in 2-file posts (via Issue #2830)
    • Renamed UNSLUGIFY_TITLESFILE_METADATA_UNSLUGIFY_TITLES (Issue #2840)
    • Add NIKOLA_SHOW_TRACEBACKS environment variable that shows full tracebacks instead of one-line summaries
    • Use PRETTY_URLS by default on all sites (Issue #1838)
    • Feed link generation is completely refactored (Issue #2844)
    • Let path handlers return absolute URLs (Issue #2876)
    • Add BLOG_EMAIL to global context to make it available for templates (Issue #2968)

    Bugfixes

    • Fixes behavior for posts not available in default language (Issues #2956 and #3073)
    • Always follow FEED_LENGTH for Atom feeds
    • Apply filters to all Atom feeds
    • Read file metadata if compiler metadata exists and prefer it over compiler metadata (Issue #3008)
    • Rename DISABLE_INDEXES_PLUGIN_INDEX_AND_ATOM_FEED to DISABLE_INDEXES and DISABLE_INDEXES_PLUGIN_RSS_FEED to DISABLE_MAIN_RSS_FEED (Issue #3039)
    • Make chart shortcode its own plugin and make the reST directive depend on it.
    • Put post_list shortcode in its own plugin and make the reST directive depend on it.
    • Don’t silence syntax errors and other exceptions that occur while reading metadata
    • Use documented dateutil API for time zone list (Issue #3006)
    • Handle trailing slash redirects with query strings correctly in nikola serve (Issue #3000)
    • Fix w3c validation errors for itemscope entries in default themes
    • Hide “Incomplete language” message for overrides of complete languages
    • Handle '/' and other absolute paths better in POSTS / PAGES / TRANSLATIONS (Issue #2982)
    • Fix loading non-default languages
    • Support KaTeX for reST display math (Issue #2888)
    • Use npm for asset management instead of bower, which was deprecated (Issue #2790)
    • Properly handle SHOW_INDEX_PAGE_NAVIGATION with Jinja templates (Issue #2960)
    • Prevent crashes due to Windows-specific code in auto running on all platforms (Issue #2940)
    • Don’t run hyphenate on <pre> blocks (Issue #2939)
    • Make errors in reST display in logs again
    • Unquote paths given to link:// magic URLs (Issue #2934)
    • Specify UTF-8 input encoding for Mako as default (Issue #2930)
    • Don't trigger rebuilds in auto mode for files it's safe to ignore (Issue #2906)
    • Fix padding for Jupyter code blocks (Issue #2927)
    • Apply SCHEDULE_ALL to posts only (Issue #2921)
    • Restore version number to Bootswatch URLs (Issue #2916)
    • Do not strip trailing slash in slug magic links
    • Ignore empty tags in HTML metadata reader (Issue #2890)
    • Do not remove doctype if add_header_permalinks or deduplicate_ids are used
    • Handle empty slug metadata (Issue #2887)
    • Fix crash when compiling empty .html posts (Issue #2851)
    • Make failures to get source commit hash non-fatal in github_deploy (Issue #2847)
    • Less cryptic error when guessing format from extension in new_post fails
    • Use Jupyter name more consistently in docs
    • Support CODE_COLOR_SCHEME in Jupyter notebooks (Issue #2093)
    • Language was not passed to title and link generation for page indexes
    • Addressed issue with snaps not allowing certain functions to work properly.

    Removed conf.py settings

    The following settings have been removed. Nikola will now always behave as if the value was what is displayed afer the setting name.

    • FEED_PREVIEWIMAGE = True
    • SITEMAP_INCLUDE_FILELESS_DIRS = True
    • USE_OPEN_GRAPH = True
    • USE_BASE_TAG = False

    Removed features

    • Removed Colorbox, baguetteBox is used instead (Issue #2777)
    • Removed googleplus comments (no longer supported) (Issue #635)
    • Removed the slides directive for docutils, it will now be a separate plugin.
    • Dropped Python 2 and Python 3.3 support (oldest supported version is 3.4)
    • Removed nikola install_theme — use nikola theme instead
    • Droppped insecure post “encryption” feature
    • Stopped supporting all deprecated config options
    • Dropped annotations support (annotateit.org closed down in March 2017)
    • Removed taxonomy option also_create_classifications_from_other_languages (Issue #2785) and generate_atom_feeds_for_post_lists (Issue #3016)
    • Removed old 7-line metadata format (Issue #2839)
    • Atom feeds are now limited to one page (Issue #3016)
    • Removed sections (replaced by improved categories) (Issue #2833)
    Source code(tar.gz)
    Source code(zip)
  • v7.8.15(May 5, 2018)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v7.8.15. Nikola v7.8.15 is the last v7 maintenance release with a few more bug fixes.

    Install using pip install Nikola==7.8.15.

    Changes

    • Fix behavior for posts not available in default language (Issues #2956 and #3073)
    • Fix behavior of RSS_PATH to do what the documentation says it does (Issue #3024)
    • Use documented dateutil API for time zone list (Issue #3006)
    Source code(tar.gz)
    Source code(zip)
  • v7.8.14(Mar 31, 2018)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v7.8.14. This is a maintenance release for the v7 series.

    Future releases in the v7 series are going to be small maintenance releases that include bugfixes only, as work on v8.0.0 is underway. If you wish to test new features, you can install from the master branch on GitHub.

    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 or download tarballs on GitHub and PyPI.

    Changes

    • doit v0.31.0 compatibility (Issue #2980, #3004, v8 backport)
    Source code(tar.gz)
    Source code(zip)
  • v7.8.13(Mar 20, 2018)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v7.8.13. This is a maintenance release for the v7 series.

    Future releases in the v7 series are going to be small maintenance releases that include bugfixes only, as work on v8.0.0 is underway.

    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 or download tarballs on GitHub and PyPI.

    Changes

    • Add new Thai translation by Narumol Hankrotha and Jean Jordaan (v8 backport)
    • Hide “Incomplete language” message for overrides of complete languages
    • Restore ability to override messages partially
    Source code(tar.gz)
    Source code(zip)
  • v7.8.12(Mar 17, 2018)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v7.8.12. This is a maintenance release for the v7 series.

    Future releases in the v7 series are going to be small maintenance releases that include bugfixes only, as work on v8.0.0 is underway.

    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 or download tarballs on GitHub and PyPI.

    Changes

    • Fix loading non-default languages
    Source code(tar.gz)
    Source code(zip)
  • v7.8.11(Dec 29, 2017)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v7.8.11. This is a maintenance release for the v7 series.

    Future releases in the v7 series are going to be small maintenance releases that include bugfixes only, as work on v8.0.0 is underway.

    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 or download tarballs on GitHub and PyPI.

    Changes

    • Make errors in reST display in logs again
    • Restore version number to Bootswatch URLs (Issue #2916)
    Source code(tar.gz)
    Source code(zip)
  • v7.8.10(Sep 10, 2017)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v7.8.10. This is a maintenance release for the v7 series.

    Future releases in the v7 series are going to be small maintenance releases that include bugfixes only, as work on v8.0.0 is underway.

    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 or download tarballs on GitHub and PyPI.

    Changes

    • Fix crashes with Jinja2 themes and tag indexes (Issue #2900)
    • Ignore empty tags in HTML metadata reader (Issue #2890)
    • Fix crash when compiling empty .html posts (Issue #2851)
    Source code(tar.gz)
    Source code(zip)
  • v7.8.9(Jun 20, 2017)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v7.8.9. This is a maintenance release for the v7 series.

    Future releases in the v7 series are going to be small maintenance releases that include bugfixes only, as work on v8.0.0 is underway.

    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 or download tarballs on GitHub and PyPI.

    Changes

    • Restore missing unminified assets
    • Make failures to get source commit hash non-fatal in github_deploy (Issue #2847)
    • Fix a bug in HTML meta parsing that crashed on <meta> tags without name (Issue #2835)
    • Fix math not showing up in some circumstances (Issue #2841)
    Source code(tar.gz)
    Source code(zip)
  • v7.8.8(Jun 12, 2017)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v7.8.8. It fixes some bugs, some related to metadata support, while also adding more internationalization features.

    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 or download tarballs on GitHub and PyPI.

    Changes

    This release fixes two grave bugs in TOML metadata support (sorry!). The built-in themes have also been cleaned up and include less unused assets. In addition, taxonomies now support translations. HTML meta tags are also possible metadata sources. The default metadata format to generate can now be changed.

    Features

    • Providing infrastructure for taxonomies for classification pages to link to related classifications in other languages
    • Added alternate links (visible and header) for archives and authors (Issue #993)
    • Added options to add alternative links (visible and header) for tags, sections and categories.
    • New METADATA_FORMAT option to choose preferred metadata format (Nikola/YAML/TOML/Pelican) (Part of Issue #2801)
    • Extract metadata from HTML meta and title tags like Pelican (Issue #1923)
    • Update assets in the base and base-jinja themes and clean up code (Issue #2744)
    • Show captions in the base theme gallery (Part of issue #2777)

    Bugfixes

    • Fix two grave bugs in TOML metadata
    • Require just one line break after TOML/YAML metadata
    • Add alt attribute to images in galleries in base theme (Part of issue #2777)
    • Support empty lines in YAML/TOML metadata (Part of issue #2801)
    • Tests run on macOS.
    Source code(tar.gz)
    Source code(zip)
  • v7.8.7(Jun 5, 2017)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v7.8.7. This is a part-emergency bugfix, part-world domination 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 (IPython) 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 or download tarballs on GitHub and PyPI.

    Changes

    In an effort to improve interoperability with other static site generators, make importing data easier, and help with world domination, Nikola v7.8.7 ships with support for the following metadata formats:

    • reST-style comments (.. name: value — default format)
    • Two-file format (reST-style comments or 7-line)
    • Jupyter Notebook metadata
    • YAML, between --- (Jekyll, Hugo)
    • TOML, between +++ (Hugo)
    • reST docinfo (Pelican)
    • Markdown metadata extension (Pelican)

    In addition, Markdown is now enabled and required by default. More details: https://getnikola.com/handbook.html#metadata-formats

    The release also fixes two important bugs, one that crashes when trying to detect locale in some edge cases, and another which made some themes quietly leak template files. If you’re using a Jinja2-based theme that does not have its own parent file, please force a rebuild (nikola build -a).

    Features

    • Enable markdown by default (part of Issue #2809)
    • Allowing to register filters from plugins, and allowing to specify default filters as strings of the form filters.<name> (part of Issue #2475)
    • Support ignoring assets via ignore_assets theme meta field (Issue #2812)
    • Ignore unused Colorbox locales (Issue #2812)
    • Accept tag metadata as lists for YAML/TOML (Issue #2801)
    • Support for mapping metadata from other formats to Nikola names using the METADATA_MAPPING setting (Issue #2817)
    • Support for reStructured text docinfo metadata with USE_REST_DOCINFO_METADATA option, defaulting to False (Issue #1923)
    • New HIDE_REST_DOCINFO option, defaulting to False.
    • Support for Markdown Metadata for Pelican compatibility by adding 'markdown.extensions.meta' to MARKDOWN_EXTENSIONS (Issue #1923)
    • Support for YAML and TOML metadata (Issue #2801)

    Bugfixes

    • Use inheritance tree when looking for theme engine (Issue #2816)
    • Fix unbound variable error in locale guessing (Issue #2806)
    Source code(tar.gz)
    Source code(zip)
  • v7.8.6(May 26, 2017)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v7.8.6. It fixes some bugs and adds new features.

    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 (IPython) 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 or download tarballs on GitHub and PyPI.

    Or if you prefer, Snapcraft packages are now built automatically, and Nikola v7.8.6 will be available in the stable channel.

    Changes

    Features

    • Guess file format from file name on new_post (Issue #2798)
    • Use BaguetteBox as lightbox in base theme (Issue #2777)
    • New deduplicate_ids filter, for preventing duplication of HTML id attributes (Issue #2570)
    • Ported gallery image layout to base theme (Issue #2775)
    • Better error handling when posts can't be parsed (Issue #2771)
    • Use .theme files to store theme metadata (Issue #2758)
    • New add_header_permalinks filter, for Sphinx-style header links (Issue #2636)
    • Added alternate links for gallery translations (Issue #993)

    Bugfixes

    • Use locale.getdefaultlocale() for better locale guessing (credit: @madduck)
    • Save dependencies for template hooks properly (using .__doc__ or .template_registry_identifier for callables)
    • Enable larger panorama thumbnails (Issue #2780)
    • Disable archive_rss link handler, which was useless because no such RSS was ever generated (Issue #2783)
    • Ignore files ending wih "bak" (Issue #2740)
    • Use page.tmpl by default, which is inherited from story.tmpl (Issue #1891)

    Other

    • Limit Jupyter support to notebook >= 4.0.0 (it already was in requirements-extras.txt; Issue #2733)
    Source code(tar.gz)
    Source code(zip)
  • v7.8.5(May 12, 2017)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v7.8.5. It fixes some bugs and adds new features.

    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 (IPython) 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 or download tarballs on GitHub and PyPI.

    Changes

    Math support changes

    • If you edited templates related to indexes and posts (index.tmpl, post.tmpl, index_helper.tmpl, post_helper.tmpl) in your templates, you should adjust them to use math_helper.tmpl.
    • If you are using KaTeX, you should remove the CSS snippet from your configuration (templates), as that is now handled by Nikola.

    Features

    • Get rid of THEME_REVEAL_CONFIG_* settings, use global context instead (Issue #2485)
    • New emoji shortcode
    • Add SECTION_PATH support to move the section indexes to a user-defined location (Issue #2738)
    • Add a list of template variables to documentation (Issues #2328, #2712, #2259) and update the theming reference (Issue #2259)
    • Add {post_title} tag for Read More links (Issue #2709)
    • Include MathJax config only when needed (via Issue #2715)
    • Include KaTeX CSS automatically when needed (Issue #2715)
    • Split out math code into new math_helper.tmpl template (Issue #2715)
    • Added jpegoptim_progressive filter to convert jpeg images to progressive jpegs.

    Bugfixes

    • Open 127.0.0.1 when using nikola serve -b and default 0.0.0.0 hostname to avoid resolution issues — the site is still available on all interfaces (Issue #2755)
    • Don't break animated GIFs in postprocessing (Issue #2750)
    • More robust shortcodes, no need to escape URLs in reSt, work better with LaTeX, etc.
    • No longer creates empty subarchive pages, and no longer create broken archive navigation links on day level (Issue #2734)
    • Fixes post scanner plugin order (Issue #2720)
    • Rename POSTS_SECTION_ARE_INDEXES to POSTS_SECTIONS_ARE_INDEXES
    • Make date ranges work in shortcode-based post lists (Issue #2690)
    • Read data files only if Nikola configuration exists (Issue #2708)
    • Make PAGE_INDEX work with PRETTY_URLS (Issue #2705)
    • Fix PHP posts/pages not rendering on Windows (Issue #2706)
    • Improving support for PostScanner plugins by asking them which compilers are unused (Issue #2496)
    Source code(tar.gz)
    Source code(zip)
  • v7.8.4(Mar 26, 2017)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v7.8.4. It fixes some bugs and adds new features.

    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 (IPython) 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 or download tarballs on GitHub and PyPI.

    Changes

    Features

    • Refactor RSS feed generation to allow better plugin access
    • Add Jupyter config as dependency for jupyter posts (by @knowsuchagency)
    • Make nikola plugin --list-installed more readable (Issue #2692)
    • Accept now in post-list date conditions
    • Add RSS_COPYRIGHT, RSS_COPYRIGHT_PLAIN, and RSS_COPYRIGHT_FORMATS options in conf.py which can be disabled by specifying copyright_=False to generic_rss_renderer, or overriden by specifying an explicit value.
    • Write PID of detached nikola serve process to a file called nikolaserve.pid
    • Append file name (generated from title) if nikola new_post receives directory name as path (Issue #2651)
    • Add a require_all_tags parameter to the post-list directive to show only posts that have all specified tags. (Issue #2665)
    • Add META_GENERATOR_TAG option in conf.py allowing the meta generator tag to be disabled (Issue #2628)
    • Add YUI_COMPRESSOR_EXECUTABLE, CLOSURE_COMPILER_EXECUTABLE, OPTIPNG_EXECUTABLE, JPEGOPTIM_EXECUTABLE and HTML_TIDY_EXECUTABLE to configure executables for built-in filters. (Issue #2615)
    • Allow setting custom GUID in feeds (Issue #2378)

    Bugfixes

    • Remove misplaced and duplicated meta description tags (Issue #2694)
    • Fix crash if PAGE_INDEX is enabled and make them actually work (Issues #2646, #2702)
    • Ignore NEW_POST_DATE_PATH when creating pages (Issue #2699)
    • Ensure post.updated is timezone-aware (Issue #2698)
    • Pass previously missing post object and language to reST compiler and language to Markdown compiler (for shortcodes)
    • Fix crashes when rendering subcategories (Issue #2681)
    • Prevent writing cache files outside of the cache folder (Issue #2684)
    • Fix mimetype guessing in auto mode (Issue #2645)
    • Fix filters.html5lib_xmllike for laters html5lib (Issue #2648)
    • Skip the current post in post lists (Issue #2666)
    • Fix poor performance when compiling multiple markdown documents with the markdown compiler. (Issue #2660)
    • Fix crash if SHOW_INDEX_PAGE_NAVIGATION is True while INDEXES_STATIC is False. (Issue #2654)
    • Make NEW_POST_DATE_PATH follow rrule if it exists (Issue #2653)
    Source code(tar.gz)
    Source code(zip)
  • v7.8.3(Jan 13, 2017)

    On behalf of the Nikola team, I am pleased to announce the immediate availability of Nikola v7.8.3. This is an emergency bugfix release, which fixes a bug that prevented nikola new_page from working. There has also been a minor change to post sorting order (won’t affect most sites). The wheel packages have also been fixed (they now exist for Python 2 and 3, with correct doit versioning).

    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 (IPython) 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 or download tarballs on GitHub and PyPI.

    Changes

    Features

    • Sort posts chronologically with one unified function (easier to change). (Issue #2627)
    • Sort posts in the following order (most important last): source path (A-Z), title (A-Z), date (reverse chronological order), priority meta number (descending). (Issue #2627)

    Bugfixes

    • Fix a bug that prevents nikola new_page from working (Issue #2631)
    Source code(tar.gz)
    Source code(zip)
Owner
Nikola, a static site generator
Nikola, a static site generator
Project documentation with Markdown.

MkDocs Project documentation with Markdown. View the MkDocs documentation. Project release notes. Visit the MkDocs wiki for community resources, inclu

MkDocs 15.6k Jan 05, 2023
Kaktos is a python static site generator

Python static site generator κάκτος Kaktos is a python static site generator. The idea is create a simple static site generator for people that don't

Paulo Coutinho 4 Sep 21, 2022
Simple, lightweight, and magic-free static site/blog generator for Python coders

makesite.py Take full control of your static website/blog generation by writing your own simple, lightweight, and magic-free static site generator in

Sunaina Pai 1.7k Jan 01, 2023
Create a simple static website using python and jinja templates.

Simple Static Create a simple static website using python and jinja templates. Simple Static has four pieces: A build command that renders jinja templ

Hartley Brody 6 Sep 05, 2022
Static site generator that supports Markdown and reST syntax. Powered by Python.

Pelican Pelican is a static site generator, written in Python. Write content in reStructuredText or Markdown using your editor of choice Includes a si

Pelican dev team 11.3k Jan 04, 2023
A Python media index

pyvideo https://pyvideo.org is simply an index of Python-related media records. The raw data being used here comes out of the pyvideo/data repo. Befor

pyvideo 235 Dec 24, 2022
A python-based static site generator for setting up a CV/Resume site

ezcv A python-based static site generator for setting up a CV/Resume site Table of Contents What does ezcv do? Features & Roadmap Why should I use ezc

Kieran Wood 5 Oct 25, 2022
The lektor static file content management system

Lektor Lektor is a static website generator. It builds out an entire project from static files into many individual HTML pages and has a built-in admi

Lektor CMS 3.6k Dec 29, 2022
a static website generator to make beautiful customizable pictures galleries that tell a story

Prosopopee Prosopopee. Static site generator for your story. Make beautiful customizable pictures galleries that tell a story using a static website g

Bram 259 Dec 19, 2022
AutoLoader is a plugin for Pelican, a static site generator written in Python.

AutoLoader AutoLoader is a plugin for Pelican, a static site generator written in Python. AutoLoader is designed to autoload the other Pelican plugins

2 Nov 07, 2022
Tinkerer is a blogging engine/static website generator powered by Sphinx.

Tinkerer What is Tinkerer? Tinkerer is a blogging engine/static website generator powered by Sphinx. It allows blogging in reStructuredText format, co

Vlad Riscutia 307 Dec 06, 2022
Static site generator for designers. Uses Python and Django templates.

News Cactus 3 is out! We're happy to announce Cactus 3. It brings a set of great new features like asset fingerprinting, an asset pipeline, pretty url

3.4k Jan 01, 2023
dirmaker is a simple, opinionated static site generator for quickly publishing directory websites.

dirmaker is a simple, opinionated static site generator for publishing directory websites (eg: Indic.page, env.wiki It takes entries from a YAML file and generates a categorised, paginated directory

Kailash Nadh 40 Nov 20, 2022
A Python Static Website Generator

Version 0.8.9 Overview Hyde starter kit by merlinrebrovic is a really nice way to get started with hyde. Hyde layout for bootstrap by auzigog is also

Hyde - Static Website Generator 1.6k Jan 01, 2023
A static website generator for people who enjoy the simpler things in life.

A static website generator for people who enjoy the simpler things in life.

Darren Mulholland 93 Dec 22, 2022
Hobby Project. A Python Library to create and generate static web pages using just python.

PyWeb 🕸️ 🐍 Current Release: 0.1 A Hobby Project 🤓 PyWeb is a small Library to generate customized static web pages using python. Aimed for new deve

Abhinav Sinha 2 Nov 18, 2021
Simple Static Site Inductor Made in Python

sssimp 🐍 Simple Static Site Inductor Made in Python How to use Create a folder called input, inside create a folder called content and an empty file

Tina 11 Oct 09, 2022
Minimal Static Blog Generator in Python

Minimal Static Blog Generator in Python Simple static blog generator, written in Python, with the top Lighthouse scores. Missing 'Best Practices' and

Danial Goodwin 1 Apr 20, 2022
barely is a lightweight, but highly extensible static site generator written in pure python.

barely is a lightweight, but highly extensible static site generator. Explore the docs » Quickstart · See available Plugins · Report Bug · Request Fea

40 Dec 01, 2022
Jekyll is a simple, blog-aware, static site generator perfect for personal, project, or organization sites.

Jekyll Jekyll is a simple, blog-aware, static site generator perfect for personal, project, or organization sites. Think of it like a file-based CMS,

Jekyll 45.8k Dec 31, 2022