Project documentation with Markdown.

Overview
Comments
  • Support theme localization (rework of #1778).

    Support theme localization (rework of #1778).

    This branch is an attempt to renew the efforts put by @anlau in #1778 in providing builtin theme localization support.

    mkdocs and readthedocs themes will support the 'locale' parameter which will use localized messages.po files to translate the theme templates.

    Contributors will thus be free to propose new messages.po for their own language.

    This PR proposes the 'en' (default) and 'fr' locales which should be compiled using : pybabel compile -d locales from the theme directory before they can be used.

    This code has also been tested and is compliant with the mkdocs-static-i18n plugin. The two of them combined provide a fully featured way to internationalize/localize your documentation.

    Update needed 
    opened by ultrabug 127
  • Plugin API.

    Plugin API.

    Hey Tom,

    I've worked on my own documentation generator for a while and used that but am in the process of upgrading it, so I wanted to see what was out there besides Sphinx (which is way to bloated). I came across this project and I really like the simplicity of it. One of the requirements I have for documentation is auto-module/class docs as a means to augment the prose style.

    I know you've already stated that you have no interest in that, but I was wondering if you'd be interested in allowing me to work with you on this project. I have all the code for generating docs that output a format like the ones used in Qt (http://qt-project.org/doc/qt-4.8/qdialog.html) from the python docs. I would propose simply adding a plugin architecture to mkdocs (similar to django/pyramid) that would allow a developer to run additional addons so as to not pollute the core of the project. Something like:

    site_name: my_site
    extensions:
           mkdocs_autodoc
    pages:
           - ['index.md', 'Introduction']
           - ['user-guide/creating.md', 'User Guide', 'Creating a new Marshmellow project']
           - ['autodoc:my_project', 'API', 'My Project']
    

    Where there would be a render hook that would dynamically generate the content from the my_project package as markdown files that could be then used and referenced from the prose style. I would be happy to work with you on the structure and provide the work I've been doing for the auto-class documentation as a plugin.

    Please let me know if this is something that you'd be interested in discussing, otherwise I may end up forking this project and implementing that as an option.

    Enhancement 
    opened by erichulser 88
  • Update Read The Docs theme with upstream

    Update Read The Docs theme with upstream

    The Upstream RTD theme has added some nice features for collapsing the navigation. You can see an example in pip Sphinx documentation. We have some users that could benifit from this, like GlusterFS, as they have many pages.

    As a side, I happen to think that it is a negative update for smaller projects so I could be tempted to make this optional. Perhaps with an extra: config value like "extra: collapsable_nav: True" which would be specific to this theme? It could either remove the feature totally or expand by default.

    Enhancement Theme-readthedocs 
    opened by d0ugal 68
  • Large search indexes can cause Lunr to freeze the page while it creates the index.

    Large search indexes can cause Lunr to freeze the page while it creates the index.

    When using readthedocs theme, search shows "no results" for a few seconds while search is being performed, and then results are loaded. However, few seconds are enough to convince the users nothing is found, and they move on.

    For example see: http://docs.datatorrent.com Try searching for "test" and you will see the following for a while:

    image

    Perhaps an indicator of search in progress can be added?

    Bug Plugin 
    opened by sashadt 56
  • Building hidden pages

    Building hidden pages

    Is it possible to tell mkdocs to build pages but not have them show up in the side bar? If it is possible, an example of how to do this in the documentation would be great.

    I asked this question here as well: https://groups.google.com/forum/#!topic/mkdocs/ILW9-SIdERs

    Enhancement 
    opened by jhamman 53
  • Display yaml properties in markdown

    Display yaml properties in markdown

    Summary

    It would be helpful to render yaml key-values in markdown.

    As now we have no convenient way to document for example configuration variables. These are common in technical documentation and displaying these variables as links is not really an option. Updating each document is time consuming comparing to the situation where we have these variables explicitly defined.

    Current problem

    If I change the development environment ip-address I need to go through all the documentation and update each document which refers to this ip-address.

    Example solution

    application-properties.yaml

    environment.development.ip: 127.0.0.1
    environment.development.port: 8000
    
    1. Connect to application server admin console and update the application.
    2. Test the application:
    $ curl  {{ environment.development.ip }} : {{ environment.development.port }} 
    

    would be rendered to:

    $ curl 127.0.0.1:8000
    

    Additional goals

    Additionally you could create an external yaml file which would have some or all the properties defined.

    Enhancement 
    opened by ghost 49
  • Include gh-import source in MkDocs to solve windows path issues.

    Include gh-import source in MkDocs to solve windows path issues.

    I wana publish my doc to a github page, i can't seem to get it to work with mkdocs gh-deploy but i know how to do with via

    Checking out the gh-pages branch and committing the site folder to GitHub.

    Bug 
    opened by w3guy 47
  • Reimplement livereload in a simpler and better way

    Reimplement livereload in a simpler and better way

    This discards the dependency on 'livereload' and 'tornado'. This implementation is based on stdlib http.server and is much smaller, while not being a downgrade in any way.

    This fixes #2061: multiple file changes no longer cause the site to repeatedly rebuild. It also makes reloads much more responsive; they're "instant" rather than being on a 1-second polling interval or such.

    I also was careful to keep backwards compatibility, including providing logging messages that feel just like the old ones.

    Each HTML page gets JavaScript injected into it (like before) but now, instead of connecting to WebSocket, it requests a long-polling endpoint, which blocks until a newer version ("epoch") of the site is available - then the page knows to reload itself. After a minute without events, the endpoint will just return the unchanged epoch (to avoid timeouts), then the page requests the same endpoint again. The "downtime" in between requests is not a problem because these are not events that need to be received in real time; the endpoint can instantly report that the latest version is newer than the one the page identified itself as.

    The reason to replace WebSocket isn't that it's bad or something, just that stdlib doesn't have it. But long-polling works completely fine here too.


    I am presenting this implementation here as part of the MkDocs repository itself. That is because this way people can try it easily, as well as review it easily, without external boilerplate. I also actually think that it would be good for MkDocs to have the flexibility provided by an inlined implementation. But if you think this should be made into a library, I'd be happy to provide that. In fact, I'll probably do that in any case. Just need a good name for it...

    opened by oprypin 42
  • Move builtin themes to external packages other than MkDocs and ReadTheDocs

    Move builtin themes to external packages other than MkDocs and ReadTheDocs

    This needs a few remaining things done:

    • [x] Fix the to theme issues https://github.com/mkdocs/mkdocs-bootswatch/issues/1 and https://github.com/mkdocs/mkdocs-bootstrap/issues/1
    • [x] Move MkDocs theme issues to the relevant repos
    • [x] Document how to make theme packages
    • [x] Add to the release notes
    Needs further review 
    opened by d0ugal 41
  • Search feature doesn't work off mkdocs master

    Search feature doesn't work off mkdocs master

    Reposting from https://groups.google.com/forum/#!msg/mkdocs/AmwN77dwcsE/oqxJ9YlyCSUJ

    I forked mkdocs from git master (in order to make some modifications, PR https://github.com/mkdocs/mkdocs/pull/752 pending), and search stopped working for me. It worked when using the released version of mkdocs; in both cases using Python 2.7.10 on OS X Yosemite.

    The error I get is

    [W 151117 14:26:20 web:1946] 404 GET /mkdocs/js/search-results-template.mustache (127.0.0.1) 5.50ms
    

    There is no additional info when running with debug on (mkdocs serve -v). On my docs site, there is no error message, only "Sorry, page not found" when trying to search for anything. The console shows:

    Failed to load resource: the server responded with a status of 404 (Not Found)  http://127.0.0.1:8000/mkdocs/js/search-results-template.mustache
    require.js:8 Uncaught Error: ./mkdocs/js/search-results-template.mustache HTTP status: 404
    

    Let me know if I can help debug this any better, thanks. Advice on a workaround would be great too, as I have to keep running mkdocs off master, and would like to have search.

    Bug 
    opened by dmehra 40
  • Enable GitHub Discussions for this Repository

    Enable GitHub Discussions for this Repository

    GitHub made their Discussions open Beta and I strongly believe that this repository could benefit from having this.

    Why? People like me feel kinda uncomfortable to use issues for asking basic questions regarding the software/tool in general and often don't like to use sites/services like IRC or similar. Having a discussion here would help us to more easily ask questions since it now would have a dedicated place for it and as an added bonus could be used as a nice collection of answers to questions someone might have.

    Needs design decision Process 
    opened by Andre601 36
  • Lost edit icon in mkdocs 1.4.2

    Lost edit icon in mkdocs 1.4.2

    Hi and many thanks for this very useful package.

    In last mkdocs version (1.4.2) the edit icon (pencil) disappeared. I tested back with mkdocs 1.4.1, the edit icon is there on top right of each page.

    The config on which I tested includes repo_url and edit_uri and my repo_url is starting by https://gitlab.com.

    opened by floriandeboissieu 0
  •  Warn when a plugin takes too long to build for live reload

    Warn when a plugin takes too long to build for live reload

    Description

    Live reload should be as fast as possible. It would be a good idea to time the different plugins at different stages of page building, so that a warning is issued if a plugin takes too long.

    Use Cases

    Mostly with large sites, and with a few heavy plugins. It would be useful which one is the slowest to replace it.

    Screenshots / Mockups

    WARNING  -  It seems that plugin aaa-bbb-plugin took 2.5 seconds to build a.md, this might slow down live reloads.
    
    opened by Emmanuel-Messulam 0
  • fix: do not warn when

    fix: do not warn when "!include" used in mkdocs.yaml

    My mkdocs.yaml has

    ---
    nav:
    - Reference:
      - Foo: foo.md
      - API: '!include ./api_mkdocs.yml'
    

    Running mkdocs build --strict results in the warning

    WARNING  -  A relative path to '!include ./api_mkdocs.yml' is included in the 'nav' configuration, which is not found in the documentation files
    

    api_mkdocs.yml is present and is later included in the navigation correctly. I'd like to suppress this error for all !include. I'm using this library as a pre-commit hook as implemented here. So this warning is causing my hook to fail.

    opened by davidxia 1
  • Customizing themes to avoid GDPR issues

    Customizing themes to avoid GDPR issues

    I guess this is more of a heads-up for those who don't know (or have chosen to ignore the issue), but resources like webfonts, CDN JS, CDN CSS, and so on doesn't float very well with GDPR.

    I ran into this when I started to put up a sample site to showcase MkDocs at Öppet Moln, a website in Swedish talking about open source alternatives. So I'm doing custom versions of some standard themes and download the required .js and .css files from their CDN and serving them locally.

    For the built-in/default/pre-packaged themes, it may be a good idea to do this (serve locally), to make it more GDPR friendly out of the box.

    opened by joho1968 0
  • Update documentation about packaging theme to use modern tools

    Update documentation about packaging theme to use modern tools

    The documentation about packaging theme refers to somewhat outdated tools and practices.

    I was wondering if you could update the documentation to use pyproject.toml and perhaps setup.cfg: https://packaging.python.org/en/latest/tutorials/packaging-projects/

    I have an example pyproject.toml file:

    [build-system]
    requires = ["setuptools"]
    build-backend = "setuptools.build_meta"
    

    And example setup.cfg:

    [metadata]
    name = mkdocs-<theme-name>
    version = attr: <theme_name>.__version__
    author = 
    author_email = 
    url = 
    description =  
    long_description = file: README.md
    long_description_content_type = text/markdown
    keywords = mkdocs
    license = MIT
    classifiers =
        Programming Language :: Python :: 3
        License :: OSI Approved :: MIT License
        Operating System :: OS Independent
    
    [options]
    packages = find:
    include_package_data = True
    zip_safe=False
    install_requires =
    	mkdocs-<theme-parent>
    
    [options.entry_points]
    mkdocs.themes =
    	<theme_name> = <theme_name>
    
    [options.extras_require]
    docs =
    	markdown-include
    	mkdocs
    
    [options.package_data]
    <theme_name> =
        *.html
         mkdocs_theme.yml
    
    opened by sumau 0
Releases(1.4.2)
  • 1.4.2(Nov 1, 2022)

    • Officially support Python 3.11 (#3020)

      Note: Simply upgrading to Python 3.11 can cut off 10-15% of your site's build time.

    • Support multiple instances of the same plugin (#3027)

      If a plugin is specified multiple times in the list under the plugins: config, that will create 2 (or more) instances of the plugin with their own config each.

      Previously this case was unforeseen and, as such, bugged.

      Now even though this works, by default a warning will appear from MkDocs anyway, unless the plugin adds a class variable supports_multiple_instances = True.

    • Bugfix (regression in 1.4.1): Don't error when a plugin puts a plain string into warnings (#3016)

    • Bugfix: Relative links will always render with a trailing slash (#3022)

      Previously under use_directory_urls, links from a sub-page to the main index page rendered as e.g. <a href="../.."> even though in all other cases the links look like <a href="../../">. This caused unwanted behavior on some combinations of Web browsers and servers. Now this special-case bug was removed.

    • Built-in "mkdocs" theme now also supports Norwegian language (#3024)

    • Plugin-related warnings look more readable (#3016)

    See commit log.

    Source code(tar.gz)
    Source code(zip)
  • 1.4.1(Oct 15, 2022)

    • Support theme-namespaced plugin loading (#2998)

      Plugins' entry points can be named as 'sometheme/someplugin'. That will have the following outcome:

      • If the current theme is 'sometheme', the plugin 'sometheme/someplugin' will always be preferred over 'someplugin'.
      • If the current theme isn't 'sometheme', the only way to use this plugin is by specifying plugins: [sometheme/someplugin].

      One can also specify plugins: ['/someplugin'] instead of plugins: ['someplugin'] to definitely avoid the theme-namespaced plugin.

    • Bugfix: mkdocs serve will work correctly with non-ASCII paths and redirects (#3001)

    • Windows: 'colorama' is now a dependency of MkDocs, to ensure colorful log output (#2987)

    • Plugin-related config options have more reliable validation and error reporting (#2997)

    • Translation sub-commands of setup.py were completely dropped. See documentation [1] [2] for their new replacements (#2990)

    • The 'mkdocs' package (wheel and source) is now produced by Hatch build system and pyproject.toml instead of setup.py (#2988)

    Other small improvements; see commit log.

    Source code(tar.gz)
    Source code(zip)
  • 1.4.0(Sep 27, 2022)

    Feature upgrades

    Hooks (#2978)

    The new hooks: config allows you to add plugin-like event handlers from local Python files, without needing to set up and install an actual plugin.

    See documentation.

    edit_uri flexibility (#2927)

    There is a new edit_uri_template: config.
    It works like edit_uri but more generally covers ways to construct an edit URL.
    See documentation.

    Additionally, the edit_uri functionality will now fully work even if repo_url is omitted (#2928)

    Upgrades for plugin developers

    Note: this release has big changes to the implementation of plugins and their configs. But, the intention is to have zero breaking changes in all reasonably common use cases. Or at the very least if a code fix is required, there should always be a way to stay compatible with older MkDocs versions. Please report if this release breaks something.

    Customize event order for plugin event handlers (#2973)

    Plugins can now choose to set a priority value for their event handlers. This can override the old behavior where for each event type, the handlers are called in the order that their plugins appear in the plugins config.

    If this is set, events with higher priority are called first. Events without a chosen priority get a default of 0. Events that have the same priority are ordered as they appear in the config.

    Recommended priority values: 100 "first", 50 "early", 0 "default", -50 "late", -100 "last".
    As different plugins discover more precise relations to each other, the values should be further tweaked.

    See documentation.

    New events that persist across builds in mkdocs serve (#2972)

    The new events are on_startup and on_shutdown. They run at the very beginning and very end of an mkdocs invocation.
    on_startup also receives information on how mkdocs was invoked (e.g. serve --dirtyreload).

    See documentation.

    Replace File.src_path to not deal with backslashes (#2930)

    The property src_path uses backslashes on Windows, which doesn't make sense as it's a virtual path.
    To not make a breaking change, there's no change to how this property is used, but now you should:

    • Use File.src_uri instead of File.src_path
    • and File.dest_uri instead of File.dest_path.

    These consistently use forward slashes, and are now the definitive source that MkDocs itself uses.

    See source code.

    As a related tip: you should also stop using os.path.* or pathlib.Path() to deal with these paths, and instead use posixpath.* or pathlib.PurePosixPath()

    MkDocs is type-annotated, ready for use with mypy (#2941, #2970)

    Type annotations for event handler methods (#2931)

    MkDocs' plugin event methods now have type annotations. You might have been adding annotations to events already, but now they will be validated to match the original.

    See source code and documentation.

    One big update is that now you should annotate method parameters more specifically as config: defaults.MkDocsConfig instead of config: base.Config. This not only makes it clear that it is the main config of MkDocs itself, but also provides type-safe access through attributes of the object (see next section).

    See source code and documentation.

    Rework ConfigOption schemas as class-based (#2962)

    When developing a plugin, the settings that it accepts used to be specified in the config_scheme variable on the plugin class.
    This approach is now soft-deprecated, and instead you should specify the config in a sub-class of base.Config.

    Old example:

    from mkdocs import plugins
    from mkdocs.config import base, config_options
    
    class MyPlugin(plugins.BasePlugin):
        config_scheme = (
            ('foo', config_options.Type(int)),
            ('bar', config_options.Type(str, default='')),
        )
    
        def on_page_markdown(self, markdown: str, *, config: base.Config, **kwargs):
            if self.config['foo'] < 5:
                if config['site_url'].startswith('http:'):
                    return markdown + self.config['baz']
    

    This code snippet actually has many mistakes but it will pass all type checks and silently run and even succeed in some cases.

    So, on to the new equivalent example, changed to new-style schema and attribute-based access:
    (Complaints from "mypy" added inline)

    from mkdocs import plugins
    from mkdocs.config import base, config_options as c
    
    class MyPluginConfig(base.Config):
        foo = c.Optional(c.Type(int))
        bar = c.Type(str, default='')
    
    class MyPlugin(plugins.BasePlugin[MyPluginConfig]):
        def on_page_markdown(self, markdown: str, *, config: base.MkDocsConfig, **kwargs):
            if self.config.foo < 5:  # Error, `foo` might be `None`, need to check first.
                if config.site_url.startswith('http:'):  # Error, MkDocs' `site_url` also might be `None`.
                    return markdown + self.config.baz  # Error, no such attribute `baz`!
    

    This lets you notice the errors from a static type checker before running the code and fix them as such:

    class MyPlugin(plugins.BasePlugin[MyPluginConfig]):
        def on_page_markdown(self, markdown: str, *, config: base.MkDocsConfig, **kwargs):
            if self.config.foo is not None and self.config.foo < 5:  # OK, `int < int` is valid.
                if (config.site_url or '').startswith('http:'):  # OK, `str.startswith(str)` is valid.
                    return markdown + self.config.bar  # OK, `str + str` is valid.
    

    See documentation.

    Also notice that we had to explicitly mark the config attribute foo as Optional.
    The new-style config has all attributes marked as required by default, and specifying required=False or required=True is not allowed!

    New: config_options.Optional (#2962)

    Wrapping something into Optional is conceptually similar to "I want the default to be None" -- and you have to express it like that, because writing default=None doesn't actually work.

    Breaking change: the method BaseConfigOption.is_required() was removed. Use .required instead. (#2938)
    And even the required property should be mostly unused now.
    For class-based configs, there's a new definition for whether an option is "required":

    • It has no default, and
    • It is not wrapped into config_options.Optional.

    New: config_options.ListOfItems (#2938)

    Defines a list of items that each must adhere to the same constraint. Kind of like a validated Type(list)

    Examples how to express a list of integers (with from mkdocs.config import config_options as c):

    Description | Code entry ----------- | ---------- Required to specify | foo = c.ListOfItems(c.Type(int)) Optional, default is [] | foo = c.ListOfItems(c.Type(int), default=[]) Optional, default is None | foo = c.Optional(c.ListOfItems(c.Type(int)))

    See more examples in documentation.

    Updated: config_options.SubConfig (#2807)

    SubConfig used to silently ignore all validation of its config options. Now you should pass validate=True to it or just use new class-based configs where this became the default.

    So, it can be used to validate a nested sub-dict with all keys pre-defined and value types strictly validated.

    See examples in documentation.

    Other changes to config options

    URL's default is now None instead of ''. This can still be checked for truthiness in the same way - if config.some_url: (#2962)

    FilesystemObject is no longer abstract and can be used directly, standing for "file or directory" with optional existence checking (#2938)

    Bug fixes:

    • Fix SubConfig, ConfigItems, MarkdownExtensions to not leak values across different instances (#2916, #2290)
    • SubConfig raises the correct kind of validation error without a stack trace (#2938)
    • Fix dot-separated redirect in config_options.Deprecated(moved_to) (#2963)

    Tweaked logic for handling ConfigOption.default (#2938)

    Deprecated config option classes: ConfigItems (#2983), OptionallyRequired (#2962), RepoURL (#2927)

    Theme updates

    • Styles of admonitions in "MkDocs" theme (#2981):

      • Update colors to increase contrast
      • Apply admonition styles also to <details> tag, to support Markdown extensions that provide it (pymdownx.details, callouts)
    • Built-in themes now also support these languages:

      • Russian (#2976)
      • Turkish (Turkey) (#2946)
      • Ukrainian (#2980)

    Future compatibility

    • extra_css: and extra_javascript: warn if a backslash \ is passed to them. (#2930, #2984)

    • Show DeprecationWarnings as INFO messages. (#2907)

      If any plugin or extension that you use relies on deprecated functionality of other libraries, it is at risk of breaking in the near future. Plugin developers should address these in a timely manner.

    • Avoid a dependency on importlib_metadata starting from Python 3.10 (#2959)

    • Drop support for Python 3.6 (#2948)

    Incompatible changes to public APIs

    • mkdocs.utils:
      • create_media_urls and normalize_url warn if a backslash \ is passed to them. (#2930)
      • is_markdown_file stops accepting case-insensitive variants such as .MD, which is how MkDocs build was already operating. (#2912)
      • Hard-deprecated: modified_time, reduce_list, get_html_path, get_url_path, is_html_file, is_template_file. (#2912)

    Miscellaneous

    • If a plugin adds paths to watch in LiveReloadServer, it can now unwatch them. (#2777)

    • Bugfix (regression in 1.2): Support listening on an IPv6 address in mkdocs serve. (#2951)

    Other small improvements; see commit log.

    Source code(tar.gz)
    Source code(zip)
  • 1.3.1(Jul 19, 2022)

    • Pin Python-Markdown version to <3.4, thus excluding its latest release that breaks too many external extensions (#2893)

    • When a Markdown extension fails to load, print its name and traceback (#2894)

    • Bugfix for "readthedocs" theme (regression in 1.3.0): add missing space in breadcrumbs (#2810)

    • Bugfix: don't complain when a file "readme.md" (lowercase) exists, it's not recognized otherwise (#2852)

    • Built-in themes now also support these languages:

      • Italian (#2860)

    Other small improvements; see commit log.

    Source code(tar.gz)
    Source code(zip)
  • 1.3.0(Mar 26, 2022)

    Feature upgrades

    • ReadTheDocs theme updated from v0.4.1 to v1.0.0 according to upstream (#2585)

      The most notable changes:

      • New option logo: Rather than displaying the site_name in the title, one can specify a path to an image to display instead.
      • New option anonymize_ip for Google Analytics.
      • Dependencies were upgraded: jQuery upgraded to 3.6.0, Modernizr.js dropped, and others.

      See documentation of config options for the theme

    • Built-in themes now also support these languages:

      • German (#2633)
      • Persian (Farsi) (#2787)
    • Support custom directories to watch when running mkdocs serve (#2642)

      MkDocs by default watches the docs directory and the config file. Now there is a way to add more directories to watch for changes, either via the YAML watch key or the command line flag --watch.

      Normally MkDocs never reaches into any other directories (so this feature shouldn't be necessary), but some plugins and extensions may do so.

      See documentation.

    • New --no-history option for gh_deploy (#2594)

      Allows to discard the history of commits when deploying, and instead replace it with one root commit

    Bug fixes

    • An XSS vulnerability when using the search function in built-in themes was fixed (#2791)

    • Setting the edit_uri option no longer erroneously adds a trailing slash to repo_url (#2733)

    Miscellaneous

    • Breaking change: the pages config option that was deprecated for a very long time now causes an error when used (#2652)

      To fix the error, just change from pages to nav.

    • Performance optimization: during startup of MkDocs, code and dependencies of other commands will not be imported (#2714)

      The most visible effect of this is that dependencies of mkdocs serve will not be imported when mkdocs build is used.

    • Recursively validate nav (#2680)

      Validation of the nested nav structure has been reworked to report errors early and reliably. Some edge cases have been declared invalid.

    Other small improvements; see commit log.

    Source code(tar.gz)
    Source code(zip)
  • 1.2.4(Mar 26, 2022)

    • Compatibility with Jinja2 3.1.0 (#2800)

      Due to a breaking change in Jinja2, MkDocs would crash with the message AttributeError: module 'jinja2' has no attribute 'contextfilter'

    Source code(tar.gz)
    Source code(zip)
  • 1.2.3(Oct 12, 2021)

    MkDocs 1.2.3 is a bugfix release for MkDocs 1.2.

    Aside: MkDocs has a new chat room on Gitter/Matrix. More details.

    Improvements:

    • Built-in themes now also support these languages:

      • Simplified Chinese (#2497)
      • Japanese (#2525)
      • Brazilian Portuguese (#2535)
      • Spanish (#2545, previously #2396)
    • Third-party plugins will take precedence over built-in plugins with the same name (#2591)

    • Bugfix: Fix ability to load translations for some languages: core support (#2565) and search plugin support with fallbacks (#2602)

    • Bugfix (regression in 1.2): Prevent directory traversal in the dev server (#2604)

    • Bugfix (regression in 1.2): Prevent webserver warnings from being treated as a build failure in strict mode (#2607)

    • Bugfix: Correctly print colorful messages in the terminal on Windows (#2606)

    • Bugfix: Python version 3.10 was displayed incorrectly in --version (#2618)

    Other small improvements; see commit log.

    Source code(tar.gz)
    Source code(zip)
  • 1.2.2(Jul 18, 2021)

    MkDocs 1.2.2 is a bugfix release for MkDocs 1.2 -- make sure you've seen the "major" release notes as well.

    • Bugfix (regression in 1.2): Fix serving files/paths with Unicode characters (#2464)

    • Bugfix (regression in 1.2): Revert livereload file watching to use polling observer (#2477)

      This had to be done to reasonably support usages that span virtual filesystems such as non-native Docker and network mounts.

      This goes back to the polling approach, very similar to that was always used prior, meaning most of the same downsides with latency and CPU usage.

    • Revert from 1.2: Remove the requirement of a site_url config and the restriction on use_directory_urls (#2490)

    • Bugfix (regression in 1.2): Don't require trailing slash in the URL when serving a directory index in mkdocs serve server (#2507)

      Instead of showing a 404 error, detect if it's a directory and redirect to a path with a trailing slash added, like before.

    • Bugfix: Fix gh_deploy with config-file in the current directory (#2481)

    • Bugfix: Fix reversed breadcrumbs in "readthedocs" theme (#2179)

    • Allow "mkdocs.yaml" as the file name when '--config' is not passed (#2478)

    • Stop treating ";" as a special character in URLs: urlparse -> urlsplit (#2502)

    • Improve build performance for sites with many pages (partly already done in 1.2) (#2407)

    Source code(tar.gz)
    Source code(zip)
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
A simple static site generator with deployment to S3/Cloudfront.

Stasis A simple static site generator with deployment to S3/Cloudfront. Features Stasis is a static website generator written in Python, using Pandoc

Scott Czepiel 56 Sep 29, 2022
Makes dynamic linked shit "static". Amazing

static.py What does it do? You give it a dynamically linked binary and it will make a directory that has all the dependencies (recursively). It also f

Stephen Tong 24 Dec 16, 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
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
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
A static website and blog generator

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 fe

Nikola, a static site generator 2.4k Jan 05, 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
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
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
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
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 declarative website generator designed for high-quality websites, with a focus on easy maintenance and localization.

Grow Grow is a declarative tool for rapidly building, launching, and maintaining high-quality static HTML. Easy installation Jinja template engine Con

Grow 385 Dec 03, 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
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
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
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
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
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
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