Use Markdown with MiniJinja Templates in Rust
September 2025
---
[dependencies]
anyhow = "1.0.98"
markdown = "1.0.0"
minijinja = { version = "2.9.0", features = ["custom_syntax", "loader", "builtins", "json"] }
---
#![allow(warnings)]
use anyhow::Result;
use minijinja::context;
use minijinja::Environment;
use minijinja::syntax::SyntaxConfig;
fn main() -> Result<()> {
let mut env = get_env();
let example = r#"
[! filter markdown|safe !]
# Hello, markdown
this is some markdown
[! endfilter !]
"#;
env.add_template("example", example).unwrap();
let tmpl = env.get_template("example").unwrap();
let output = tmpl.render(context!()).unwrap();
println!("{}", output);
Ok(())
}
pub fn mj_markdown(value: String) -> String {
markdown::to_html(&value)
}
pub fn get_env() -> Environment<'static> {
let mut env = Environment::new();
env.set_syntax(
SyntaxConfig::builder()
.block_delimiters("[!", "!]")
.variable_delimiters("[@", "@]")
.comment_delimiters("[#", "#]")
.build()
.unwrap(),
);
env.add_filter("markdown", mj_markdown);
env
}
<h1>Hello, markdown</h1>
<p>this is some markdown</p>