Jinja Renderer
Renders a Jinja-style template against local JSON data. Supports a documented subset: variables,
dotted paths, filters, if/elif/else, and for loops.
There is no code execution, no eval, and no macros/include/extends.
Private by architecture:
All processing is 100% client-side memory. Your data never leaves this browser tab.
Template
0 lines · 0 charsTemplate (Jinja subset)
JSON data
0 lines · 0 charsJSON Context
Rendered output
0 charsOutput
Examples
1. Visual Component (HTML + CSS)
<style>
.card { font-family: sans-serif; padding: 20px; background: #18181b; color: #fff; border-radius: 12px; }
.name { font-size: 18px; font-weight: bold; color: #f97316; margin: 0; }
.tag { display: inline-block; padding: 2px 8px; background: #27272a; border-radius: 4px; font-size: 12px; margin: 2px; }
</style>
<div class="card">
<h3 class="name">{{ user.name }}</h3>
<p>{{ user.role|upper }}</p>
<div>
{% for skill in user.skills %}
<span class="tag">{{ skill }}</span>
{% endfor %}
</div>
</div> 2. Plain Text (Email / Notification)
Hello {{ name|upper }}!
{% if items %}
{% for item in items %}- {{ item }}
{% endfor %}
{% else %}
No items.
{% endif %} FAQ
- Which filters are supported?
upper,lower,trim,length,first,last,join(sep),default(value), andsafe(opts a single value out of escaping).- What is not supported?
- Macros,
{% include %},{% extends %}, arithmetic expressions, and arbitrary Python-style expressions. Unsupported syntax produces a clear error naming what was rejected, rather than silently misbehaving. - Is anything executed?
- No. There is no
evalor dynamic code execution anywhere in the renderer; it is a small hand-written interpreter for the subset above. - Should I turn off HTML escaping?
- Only for non-HTML output (plain text, code, config files) or when generating raw styled HTML where tags and CSS should not be escaped. For user-facing HTML templates with untrusted variables, leave escaping on.