Crate shtola[][src]

Expand description

With Shtola, you can build your own static site generators easily. All that Shtola itself does is read files and frontmatter, run them through a bunch of user-provided plugins, and write the result back to disk.

As a demonstration of Shtola’s basic piping feature, see this example:

use shtola::Shtola;

let mut m = Shtola::new();

A “plugin” is just a boxed function that takes a RefMut to an IR (intermediate representation) struct. The plugin may modify the IR freely:

use shtola::{Plugin, ShFile, RefIR};

fn plugin() -> Plugin {
  Box::new(|mut ir: RefIR| {
    ir.files.insert("myFile".into(), ShFile::empty());


pub use log;
pub use serde_json as json;



Configuration struct.

A hash map implemented with quadratic probing and SIMD lookup.

The intermediate representation that’s passed to plugins. Includes global metadata, the files with frontmatter and the global config.

Shtola’s file representation, with frontmatter included.

The main library struct.

A middleware chain.

Type Definitions

Convenience type to return from plugin functions.

Convenience type for a RefMut<IR>.