How mitsuhiko/minijinja works
MiniJinja is a Jinja-compatible template engine, with Rust as its core implementation and a separate native Go implementation. The main workflow is to supply templates and context to an environment, resolve a named template, compile its syntax, evaluate it with runtime values, and produce rendered output. The repository also provides expression evaluation, extensions, reload and embedding utilities, a CLI, and language bindings. Edges reflect the documented Rust API and sampled source; several CLI, binding, and core internals are represented by their tree paths, but their unsampled call wiring is not expanded.
Main entry points: environment.rs Environment · vm/mod.rs Evaluator · compiler/mod.rs Compiler · minijinja.go Go template engine
Components 26
Rust engine
- Environment
minijinja/src/environment.rs - Template loading
minijinja/src/loader.rs - Compiler
minijinja/src/compiler/mod.rs - Lexer
minijinja/src/compiler/lexer.rs - Parser
minijinja/src/compiler/parser.rs - Code generation
minijinja/src/compiler/codegen.rs - Template
minijinja/src/template.rs - Evaluator
minijinja/src/vm/mod.rs - Runtime context
minijinja/src/vm/context.rs - Values and objects
minijinja/src/value/mod.rs - Filters and functions
minijinja/src/filters.rs - Rendered output
minijinja/src/output.rs - Errors
minijinja/src/error.rs - Expression evaluation
minijinja/src/expression.rs
Engine utilities
- Extra utilities
minijinja-contrib/src/lib.rs - Auto reloader
minijinja-autoreload/src/lib.rs - Embedded templates
minijinja-embed/src/lib.rs
Language interfaces
- CLI
minijinja-cli/src/main.rs - JavaScript WASM
minijinja-js/src/lib.rs - Python binding
minijinja-py/src/lib.rs - C binding
minijinja-cabi/src/lib.rs
Go engine
- Go template engine
minijinja-go/minijinja.go - Go lexer
minijinja-go/internal/lexer/lexer.go - Go parser
minijinja-go/internal/parser/parser.go - Go values
minijinja-go/value/value.go
Other components
- Application
Connections 33
- Application → Environment: supplies templates
- Environment → Template loading: loads templates
- Environment → Template: gets template
- Template → Compiler: compiles source
- Compiler → Lexer: tokenizes source
- Compiler → Parser: parses tokens
- Compiler → Code generation: generates instructions
- Template → Evaluator: renders template
- Evaluator → Runtime context: resolves context
- Runtime context → Values and objects: reads values
- Evaluator → Filters and functions: invokes functions
- Evaluator → Rendered output: writes output
- Evaluator → Errors: reports failures
- Application → Expression evaluation: evaluates expression
- Expression evaluation → Evaluator: evaluates instructions
- Application → Extra utilities: registers utilities
- Extra utilities → Environment: adds filters
- Application → Auto reloader: acquires environment
- Auto reloader → Environment: creates environment
- Application → Embedded templates: loads bundle
- Embedded templates → Environment: adds templates
- Application → CLI: renders via CLI
- CLI → Environment: uses engine
- Application → JavaScript WASM: calls binding
- JavaScript WASM → Environment: wraps engine
- Application → Python binding: calls binding
- Python binding → Environment: wraps engine
- Application → C binding: calls binding
- C binding → Environment: wraps engine
- Application → Go template engine: renders template
- Go template engine → Go lexer: tokenizes source
- Go template engine → Go parser: parses templates
- Go template engine → Go values: uses values