# Documentation * [coding](coding) * [crates](crates) * [errors](errors) * [files](files) * [logs](logs) * [matter](matter) * [state](matter) * [testing](testing) * [templating](templating) * [comparisons](comparisons) ## Implementation overview Implementation broadly has these steps: * The app launches and reads its configuration file; the implementation uses the `confy` crate. * The app parses its command line options; the implementation uses the `clap` crate. * The app creates a `config` struct that is used for all the rest of the work. * The app iterates on any input files; the implementation is a typical run loop. For each file: * The app reads the file markdown text. * The `MatterParser` code scans the text to discover any front matter text, such as with a HTML comment, JSON object, TOML configuration, or YAML document. If found, the code parses the front matter text to a `State` struct. * The app converts the Markdown content text to HTML, and inserts it into the state, in order to make the HTML available for the next steps. * The `Templater` code merges the HTML and the state, doing the variable substitution using the Tera templating engine or the Handlebars templating engine. * The app saves the result as a corresponding HTML file.