Obra

Liquid for JetBrains IDEs

First-class Liquid support for every JetBrains IDE, from WebStorm to RubyMine. Built for Shopify theme development, and just as at home in a Jekyll codebase.

Start your free 14-day trial Then $12, once · no subscription


A Shopify theme section open in a JetBrains IDE with the Obra Liquid plugin: highlighting across {% paginate %}, {% for %} and {% render %}, the theme's sections, snippets and blocks directories in the project tree, and the CSS inside {% stylesheet %} treated as real CSS.
Editing a Liquid template with the plugin enabled.

Liquid, as your IDE sees it

Every token below is coloured by the same lexer that ships inside the plugin — the same four states, the same keyword tables, the same fold regions. Switch themes, collapse a block, read the edge cases.

{% comment %}
  Shopify's new theme architecture, announced at DotDev 2026.
  Page structure moves out of JSON templates and back into Liquid.
{% endcomment %}
{% doc %}
  Renders a product grid that JavaScript can refresh in place.

  @param {collection} collection - The collection to render
  @param {string} [class] - Optional wrapper class

  @example
  {% partial 'product-grid' %}{% endpartial %}
{% enddoc %}

{% partial 'product-grid' %}
  {% for product in collection.products %}
    {% block 'product-card', block.settings.product: product %}
      

{{ product.title | escape }}

{% endblock %} {% endfor %} {% endpartial %} {% content_for 'blocks' %}
{% comment %}
  Filters chain left to right. The name after a pipe is a filter,
  whatever else it spells — `default` here is a filter, not a keyword.
{% endcomment %}
{% assign title = product.title | strip | truncate: 60 %}

{{ product.price | money_with_currency }}
{{ product.featured_image | image_url: width: 800 | image_tag }}
{{ product.tags | join: ", " | upcase }}
{{ shop.name | default: "Our store" }}

{% if product.available and product.price < 5000 %}
  {{ 'products.on_sale' | t }}
{% endif %}
{% for variant in product.variants limit: 3 %}
  {% unless variant.available %}
    {{ variant.title }}
  {% else %}
    {{ forloop.index }}. {{ variant.title }} — {{ variant.price | money }}
  {% endunless %}
{% else %}
  

Nothing in stock yet.

{% endfor %} {% case product.type %} {% when 'Shirt' %} {% render 'size-guide', kind: 'tops' %} {% when 'Mug', 'Bottle' %} {% render 'care-instructions' %} {% else %} {% render 'generic-details' %} {% endcase %}
{% comment %} sections/featured-collection.liquid {% endcomment %}
{%- paginate collection.products by 12 -%}
  {% for product in collection.products %}
    {% render 'product-card', product: product %}
  {% endfor %}

  {{ paginate | default_pagination }}
{%- endpaginate -%}

{% style %}
  .featured { gap: {{ section.settings.gap }}px; }
{% endstyle %}

{% schema %}
  {
    "name": "Featured collection",
    "settings": [
      { "type": "range", "id": "gap", "label": "Gap", "default": 16 }
    ]
  }
{% endschema %}

Try the arrows in the gutter. They mark exactly what the editor folds — every paired tag, from if and for through schema and paginate to the new block, partial and doc — plus {% comment %} blocks.


Use cases

Which kind of Liquid are you writing?

Theme development: the plugin reads the theme layout, not just the syntax.

  • Sections, snippets, blocks and schemas
  • The theme tags announced at DotDev 2026
  • Shopify objects and their properties, with docs on hover
  • render and section paths resolve to the file
  • Real languages inside the tag bodies: JSON in {% schema %}, CSS in {% stylesheet %}, JS in {% javascript %}

Jekyll and other Liquid projects. Paths resolve relative to the file, with no theme layout assumed.

  • Jekyll tags alongside the core Liquid ones
  • The site, page, post and paginator objects
  • YAML front matter
  • The same lexer either way

New — announced at DotDev 2026

Ready for Shopify's new theme architecture

Shopify's theme developer preview moves page structure out of JSON templates and back into Liquid. We shipped support the week it was announced — highlighting, folding, bracket matching, autocomplete and live templates for every new tag.

{% partial 'product-grid' %}
  {% for product in collection.products %}
    {% block 'product-card', block.settings.product: product %}
      <h2>{{ product.title }}</h2>
    {% endblock %}
  {% endfor %}
{% endpartial %}

These tags are a Shopify developer preview, so the syntax may still shift. We track it as it changes.


Works with your JetBrains IDE


What you get

Syntax highlighting

Proper highlighting for Liquid tags, filters, and expressions inside .liquid and .html files.

Jump to definition

-click (or Ctrl-click) on an {% include %}, {% render %}, or {% section %} path to open the referenced template instantly.

Template-aware editing

Bracket matching and indentation that understands Liquid blocks.

Code folding

Collapse {% if %}, {% for %}, {% case %}, and comment sections to keep long themes readable.

Live templates

Type a short abbreviation and Tab to expand it into a full Liquid tag — conditionals, loops, assignments, and renders.

Autocomplete that knows Liquid

Tags, filters and Shopify objects offered in the right place — filters only after a |, object properties after a ., with parameter info and quick docs. Coverage of Shopify’s filter set is still growing.

Mixed languages, understood

Each language in a file gets real editor support — the HTML around the tags, and JSON, CSS or JS inside them. To the IDE, {% schema %}{ "gap": 16 }{% endschema %} is genuine JSON.

Lightweight

No bloat. Install it, restart, get back to writing templates.


Fourteen days free, then pay once

Every install starts with a free 14-day trial — the whole plugin, nothing held back. Keep it and you buy it a single time on the JetBrains Marketplace — a perpetual licence, so all future updates are included. No subscription and no renewal.

Licence type

$12 once

For individual customers.

$24 once, per seat

For businesses and organisations. One licence per developer — pick the number of seats at checkout, or request a volume quote.

JetBrains handles licensing and billing. The exact terms for each licence type are on the Marketplace listing.

Start the free trial


Help & FAQ

Which IDEs are supported?

Twelve of them: IntelliJ IDEA, WebStorm, PhpStorm, PyCharm, RubyMine, GoLand, RustRover, CLion, Rider, DataGrip, DataSpell, and Android Studio. The plugin depends only on the platform, language, and XML modules, so it installs on any IntelliJ-based IDE that ships them.

Is it available?

Yes. It’s on the JetBrains Marketplace — open Settings → Plugins → Marketplace, search for Liquid for Shopify & Jekyll, and click Install.

What does it cost?

$12 for an individual, or $24 per seat for an organisation — a one-time purchase with a perpetual licence and every update included. There’s a 14-day free trial, and it’s never a subscription.

Which file extensions does it recognise?

Out of the box, the plugin handles .liquid files. You can also associate .html or any custom extension with the Liquid file type via Settings → Editor → File Types.

Does it work with Shopify themes?

Yes. Shopify themes are the primary target — sections, snippets, and layouts are all recognised. Jekyll and other Liquid-based site generators work too.

Where can I report a bug or request a feature?

Email hello@obra.studio with as much detail as you can: IDE version, plugin version, and a minimal template that reproduces the issue.