Jinja2 Enhance Install free
Pro · In development

Jinja2 templating that knows your backend.

The free extension ships syntax highlighting and variable checking today. Pro adds backend-resolved variables for Flask, Django, FastAPI, and Express — and is in active development.

Free is MIT and stays free. Pro is on the way — no Marketplace listing yet.

Free vs. Pro

Free is the foundation. Pro adds the backend-aware layer that eliminates false "undefined variable" warnings.

Free · MIT Always free, open source
  • Syntax highlighting
    Distinct colors for {% %} tags, {{ }} variables, and pipe filters inside HTML, style, and script blocks.
  • 10 built-in snippets
    for, if, ife, block, extends, include, set, macro, with, filter — all expandable in any HTML/Jinja2 file.
  • Jinja2 comment toggling
    Cmd+/ or Ctrl+/ wraps the selection in {# …
  • Variable checking (JHE0001)
    Flags undefined Jinja2 variables. Recognizes {% set %} and {% for %} bindings; allowlist suppresses backend-injected names.
  • Variable Panel
    Sidebar webview listing every variable used or set in the current template, with one-click jump to its origin.
  • 5 built-in themes
    Dark Default, Light Default, Dark/Light High Contrast, and Xuby Selection — plus full editor.tokenColorCustomizations support.
  • English & Spanish UI
    Localized command titles, settings, and panel copy in EN and ES.
Pro · In development Planned — not yet shipped:
  • Backend variable resolution
    Resolves variables from Flask, Django, FastAPI, Express, Nunjucks, and standalone Jinja2 render calls — no more false "undefined" warnings.
  • Go to backend definition
    F12 or Cmd+Click on any template variable jumps straight to the line in your Python or JavaScript source where it's declared.
  • Cross-file template tracking
    Resolves {% extends %} chains, {% include %} children, and inherited {% set %} variables — so child templates stop flagging variables defined in their base.
  • Imported macro resolution
    Both {% import "macros.html" as ns %} and {% from "macros.html" import card, modal as m %} are tracked across files.
  • Template path navigation
    F12 / Cmd+Click on any extends, include, or import path opens the resolved file. Auto-discovers templates/ roots; configurable.
  • Variable origin on hover
    Hover any variable to see whether it came from a backend call, an inherited base template, or an imported macro — with a click-to-jump link.
  • Smart lightbulb actions
    When JHE0001 fires but Pro finds the name elsewhere in the template hierarchy, the quick-fix offers "Go to inherited definition".

Features that pay for themselves

The differentiators — what makes a Pro license worth it on a real project.

Free

Variable checking (JHE0001)

Flags undefined Jinja2 variables. Recognizes {% set %} and {% for %} bindings; allowlist suppresses backend-injected names.

Variable checking runs on save (or on demand) and surfaces a JHE0001 diagnostic for any name your template references but never defines. The analyzer follows {% set %} assignments and loop variables, so you only see real misses — not false alarms on locals.

Names that come from your backend can be added to a workspace allowlist with one click via the Save variable quick fix.

Pro · planned

Backend variable resolution

Resolves variables from Flask, Django, FastAPI, Express, Nunjucks, and standalone Jinja2 render calls — no more false "undefined" warnings.

Pro parses your backend source to learn which variables each template actually receives. Flask render_template(), Django render(), FastAPI TemplateResponse, Express/Nunjucks res.render(), and standalone Jinja2 are all recognized.

Variables passed from the backend are no longer flagged as undefined, and the Variable Panel shows their origin alongside template-local bindings.

Pro · planned

Go to backend definition

F12 or Cmd+Click on any template variable jumps straight to the line in your Python or JavaScript source where it's declared.

Hover a variable, click the link (or hit F12), and Pro takes you to the exact render_template / render / TemplateResponse call site that supplies it. Works across files, across frameworks, and across multi-render templates that receive different variables from different routes.

Pro · planned

Cross-file template tracking

Resolves {% extends %} chains, {% include %} children, and inherited {% set %} variables — so child templates stop flagging variables defined in their base.

Pro builds a workspace-level template graph and walks the entire {% extends %} chain for each file. Variables defined in a base template are visible in every child; loop and block scopes are tracked correctly.

Two graph diagnostics catch structural problems early:

  • JHE1101 — unresolved template path in extends/include/import
  • JHE1102 — circular extends chain

See it in your editor

Free is shipping today. Pro is in development — these screenshots are from the live build.

VS Code editor showing Jinja2 syntax highlighting with distinct colors for tags, variables, and filters View full size
Free Syntax highlighting

Distinct colors for {% %}, {{ }}, and pipe filters — ships in the free extension today.

Animated demo: undefined variable warning, then quick-fix saves it to the workspace allowlist View full size
Free Variable checking + quick fix

JHE0001 catches undefined names; one-click "Save variable" adds it to your allowlist.

Hover popup over a Jinja2 variable showing a clickable link to the backend definition in app.py View full size
Pro · planned Hover → backend definition

F12 or Cmd+Click on any variable jumps to the render_template line that supplies it.

Backend Variables panel listing every variable a template receives from each render call site View full size
Pro · planned Backend Variables panel

Every backend-provided variable, grouped by name, with jump-to links per call site.

Pricing

Pay for what saves you time. Cancel any time.

Free

$0 / forever

The MIT extension. Everything you need for single-template work.

  • Syntax highlighting + 10 snippets
  • Variable checking (JHE0001)
  • Variable Panel sidebar
  • 5 themes + token customization
  • EN / ES localization

Pro

In development
$5 / per month (planned)

Backend-aware intelligence for real projects with multi-file templates. In development — not yet for sale.

  • Everything in Free
  • Backend variable resolution (Flask · Django · FastAPI · Express · Nunjucks)
  • Go to backend definition (F12 / Cmd+Click)
  • Cross-file extends/include/import tracking
  • Template-graph diagnostics (JHE1101 · JHE1102)
  • 7-day offline grace · single machine, swappable

Team

Coming soon
$12 / per month, per seat

Shared variable registries, audit reports, and monorepo support.

  • Everything in Pro
  • Shared workspace variable registry
  • Documentation & audit reports
  • Monorepo template-root config
  • Priority support

Pro and Team are not yet for sale — drop your email and we'll write when they launch. 14-day refund applies on first purchase.

Frequently asked

The questions we get most. Email us if you don't see yours.

Do I need Pro, or is Free enough?
Free is the right pick today — it ships syntax highlighting, snippets, and variable checking and is on the Marketplace now. Pro is in active development and will add backend-aware variable resolution, cross-file template tracking, and go-to-definition for projects with multiple templates and backend frameworks like Flask, Django, FastAPI, or Express. Drop your email on the pricing page to be notified at launch.
Can I run Free and Pro at the same time?
Once Pro ships, yes — it will be a separate Marketplace listing with its own publisher ID. Install both, and Pro layers backend-aware features on top of the free extension's syntax highlighting and diagnostics. They share the same regex analyzer package, so there's no duplication. For now, only Free is published.
Which backends does Pro understand?
Flask, Django, FastAPI, Express + Nunjucks, and standalone Jinja2 (Environment.get_template / Template render) are the planned set. Pro recognizes the standard render-call shapes for each and resolves the keyword arguments into template-visible variables. The list may grow during development based on early feedback.
How does Pro license activation work?
When Pro launches, purchasing will send a license key by email. You'll paste it into the Pro extension's activation prompt and that machine becomes licensed. Validation runs online roughly once a day, with up to 7 days of offline grace before the extension reverts to free behavior.
Can I move my license between machines?
At launch, a Pro license will activate one machine at a time. Deactivate from the source machine in the extension settings, then activate on the new one — no per-month limit on switching, no support ticket required.
When is the Team tier available?
Team ($12/month) is on the roadmap and adds shared variable registries, audit reports, and monorepo support. It is not live yet — if you'd like to be notified, send a note to the contact email below and we'll reach out at launch.
What's the refund policy?
When Pro is for sale, first-time purchases will be refundable for 14 days — email the contact address below with the order number and it's processed via Lemon Squeezy. After 14 days, cancel any time to stop the next renewal.