Welcome to Foliant!

Foliant is a all-in-one documentation authoring tool. It lets you produce standalone documents in pdf and docx, as well as websites, from single Markdown source.

Foliant is a higher order tool, which means it uses other programs to do its job. For pdf and docx, it uses Pandoc, for websites it uses MkDocs.

Foliant preprocessors let you include parts of documents in other documents, show and hide content with flags, render diagrams from text, and much more.

Logo made by Hand Drawn Goods from www.flaticon.com.

Who Is It for?

You’ll love Foliant if you:

  • need to ship documentation as pdf, docx, and website forms
  • want to use Markdown with consistent extension system instead of custome syntax for every new bit of functionality
  • like reStructuredText’s extensibility and Asciidoc’s flexibility, but actually would rather use Markdown
  • want a tool that you can actually write custom extensions for without dealing with something as overengineered as Sphinx
  • have documentation spread across many repos and want to reuse parts between documents



  • Allow to specify custom options for EscapeCode preprocessor as the escape_code.options config parameter value.
  • Pass the quiet flag to BaseParser() as an optional argument for using in config extensions.


  • Add escape_code config option. To use it, escapecode and unescapecode preprocessors must be installed.


  • Process attribute values of pseudo-XML tags as YAML.
  • Allow single quotes for enclosing attribute values of pseudo-XML tags.
  • Add !project_path and !rel_path YAML tags.


  • Restore quiet mode.
  • Add the output() method for using in preprocessors.


  • Remove spinner made with Halo.
  • Abolish quiet mode because it is useless if extensions are allowed to write anything to STDOUT.
  • Show full tracebacks in debug mode; write full tracebacks into logs.


  • CLI: If no args are provided, print help.
  • Fix tags searching pattern in _unescape preprocessor.


  • Allow to override default config file name in CLI.
  • Allow multiline tags. Process true and false attribute values as boolean, not as integer.
  • Add tests.
  • Improve code style.


  • Breaking change. Add logging to all stages of building a project. Config parser extensions, CLI extensions, backends, and preprocessors can now access self.logger and create child loggers with self.logger = self.logger.getChild('newbackend').
  • Add pre backend with pre target that applies the preprocessors from the config and returns a Foliant project that doesn't require any preprocessing.
  • make now returns its result, which makes is easier to call it from extensions.


  • Fix critical issue when config parsing would fail if any config value contained non-latin characters.


  • Use README.md as package description.


  • Fix critical bug with CLI module caused by missing version definition in the root __init__.py file.


  • Complete rewrite.