# Bolder Storefronts — Liquid Reference

> Auto-generated on 2026-07-07 from source files.
> Do not edit by hand — run `ruby scripts/generate_docs.rb` to regenerate,
> or push a change to a source file and the GitHub Action will update automatically.

## Table of Contents

1. [Liquid Drops](#liquid-drops)
2. [Liquid Filters](#liquid-filters)
3. [Liquid Tags](#liquid-tags)

## Liquid Drops

Drops are Ruby objects exposed to Liquid templates.
Each entry lists the class, its parent, and all Liquid-accessible attributes and methods.

### AddonDrop
Inherits: `Liquid`

Represents an installed app or addon for the shop. Accessible via `shop.addons`. Use `key` to identify the addon and conditionally render its widgets.

**Methods:** `key`

### AddonsDrop
Inherits: `Liquid`

**Methods:** `has_console_login`, `liquid_method_missing(addon_key)`

### AddressDrop
Inherits: `Liquid`

Represents a postal address. Exposed on branch locations, customer records, and order shipments. Provides street, locality, region, and country data along with formatted display strings.

**Methods:** `as_json(opts = {})`, `id`, `place_id`, `latlong`, `has_coordinates`, `coordinates`, `name`, `street`, `street_1`, `street_2`, `locality_name`, `locality_id`, `region_name`, `region_code`, `country_name`, `country_code`, `postal_code`, `shortest`, `short`, `full`, `gmaps_link`, `gmaps_directions_link`, `to_s`

### AggregatesDrop
Inherits: `Liquid`

**Methods:** `collections`, `product_types`, `vendors`, `tags`, `attributes`

### AssetDrop
Inherits: `ModelDrop` | Includes: `ImageAspectRatio`

Represents a product image or file asset. Provides URL helpers for all standard image sizes and metadata about the file.

**Attributes:** `id`, `title`, `file_name`, `extension`, `description`, `seller_id`, `updated_on`, `image_width`, `image_height`

**Methods:** `self`, `to_s`, `webp`, `type`, `size`, `is_image`, `is_video`, `is_file`, `is_default_image`, `is_landscape_image`, `is_portrait_image`, `is_square_image`, `human_size`, `related_variant_id`, `has_variants`, `variants`, `available_variants`, `variant_ids`, `available_variant_ids`, `has_hotspots`, `hotspots_config`, `thumbnail`, `medium`, `small`, `large`, `original`, `base_name`, `actual_file_name`, `url`, `protected_path(size = 'original')`, `resizer`, `as_json(opts = {})`, `source_variants`

### AssetsDrop
Inherits: `ModelCollectionDrop`

**Methods:** `init_drop(model)`

### BlogDrop
Inherits: `ModelCollectionDrop`

Represents the blog section. Exposed as `blog` in blog templates. Provides access to paginated posts, calendar archives, and category tags. Can be filtered by date (year/month/day) or tag.

**Attributes:** `month_num`, `year`, `post_count`

**Methods:** `date`, `year`, `month`, `month_name`, `day`, `posts`, `each(&block)`, `calendar`, `categories`

### BlogTagDrop
Inherits: `ModelDrop`

**Attributes:** `name`, `slug`

**Methods:** `title`, `post_count`

### BlogTagsDrop
Inherits: `ModelCollectionDrop`

**Methods:** `slugs`, `include?(obj)`, `init_drop(model)`

### BranchDrop
Inherits: `ModelDrop`

Represents a physical store location (branch). Exposed as items in `shop.branches`, `shop.pickup_branches`, and `shop.shipping_branches`. Provides address, contact details, and fulfilment (pickup/shipping) availability.

**Attributes:** `id`, `name`, `type`, `stock_location_id`, `manager_name`, `email_address`

**Methods:** `images`, `main_image`, `has_main_image`, `address`, `phone_number`, `primary_number`, `secondary_number`, `shipping_paused`, `provides_shipping`, `pickup_paused`, `provides_pickup`, `has_delivery_windows`, `shipping_schedule`, `delivery_schedule`, `has_available_times`, `open_hours`, `as_json(opts = {})`

**Aliases:** `cover_image` → `main_image`, `has_cover_image` → `has_main_image`

### BranchesDrop
Inherits: `ModelCollectionDrop`

### CartDrop
Inherits: `Liquid`

Represents the current shopping cart. Exposed as `cart` in all Liquid templates. Use it to display item counts, totals, and line items.

**Methods:** `to_s`, `as_json`, `code`, `has_overbought_items`, `units`, `overbought_items`, `has_removed_items`, `removed_items`, `line_items`, `formatted_total`, `formatted_net_total`, `promotion`, `weight`, `discounts`, `discount_total`

### CartRequirementsDrop
Inherits: `Liquid`

**Methods:** `to_s`, `list`

### CollectionDrop
Inherits: `ModelWithServiceDrop` | Includes: `WithShopTags`, `WithRelations`, `ResourceImages`

Represents a product collection (category). Exposed as `collection` on collection pages and as items in `shop.collections` or `product.collections`. Use it to list the collection's products, images, and metadata.

**Attributes:** `id`, `slug`, `title`, `body`, `num_product_types`

**Translatable:** `title`, `body`

**Methods:** `type`, `to_param`, `name`, `translated_name`, `description`, `translated_description`, `images`, `product_types`, `vendors`, `description`, `first_product`, `has_products`, `size`, `products`, `available_products`, `has_attributes`, `meta_description`, `meta_fields`, `product_attributes`, `filterable_product_attributes`, `variant_options`, `promotions`, `each(&block)`, `ids_to_show_first`, `products_order_for_es`, `as_json`

**Aliases:** `attributes` → `meta_fields`

### CollectionsDrop
Inherits: `ModelCollectionWithProductsDrop`

### ColorMapDrop
Inherits: `Liquid`

**Methods:** `each(&block)`, `as_json(opts = {})`

### ContactGroupDrop
Inherits: `Liquid`

**Methods:** `to_s`, `id`, `name`, `provides_shipping`, `provides_pickup`, `shipping_branches`, `pickup_branches`, `price_list_id`

### ContactNumberDrop
Inherits: `Liquid`

**Methods:** `to_s`, `strip`, `type`, `url`, `format`

**Aliases:** `trim` → `strip`

### CustomerDrop
Inherits: `Liquid`

Represents the currently logged-in customer. Exposed as `customer` in all templates. Check `customer.is_logged_in` before accessing other properties. Nil if no customer session is active.

**Methods:** `name`, `full_name`, `first_name`, `last_name`, `email`, `company`, `company_id_number`, `last_logged_on`, `logged_in`, `is_logged_in`, `tags`, `tag_list`, `has_tags`, `has_price_list`, `has_contact_group`, `price_list`, `contact_group`, `price_list_id`, `contact_group_id`, `membership`, `has_membership`, `has_subscriptions`, `subscriptions`, `last_ordered_products`, `has_favorite_products`, `favorite_products`, `salesperson`, `wallet_points`, `promotions`, `cart_requirements`

### CustomerMembershipDrop
Inherits: `ModelDrop`

Represents the logged-in customer's active membership plan. Accessed via `customer.membership`. Use it to show plan-specific content or gating.

**Attributes:** `id`, `plan_id`, `plan_name`

**Methods:** `to_s`

### CustomerSubscriptionDrop
Inherits: `ModelDrop`

**Attributes:** `id`, `product_name`

**Methods:** `state`, `to_s`, `total_renewal_fee`, `last_payment_on`, `paid_setup_fee`, `next_payment_on`

### CustomerSubscriptionsDrop
Inherits: `ModelCollectionDrop`

### CustomizableProductBundleDrop
Inherits: `ProductBundleDrop`

### DateTimeDrop
Inherits: `Liquid`

Wraps a Ruby Time/DateTime for use in Liquid templates. Returned by date attributes such as `product.updated_on`, `post.published_on`, `promotion.starts_at`, etc. Supports Liquid's built-in `date` filter via `strftime`.

**Methods:** `to_s`, `wday`, `day`, `month`, `year`, `strftime(str)`, `date`, `time`, `unix`, `to_i`, `iso8601`

### DeliveryWindowScheduleDrop
Inherits: `ModelDrop`

**Methods:** `has_same_day_delivery`, `has_delivery_windows`, `available_delivery_windows(args = {})`

### DynamicLinkDrop
Inherits: `LinkDrop`

**Methods:** `title`, `slug`, `to_param`, `has_submenu`, `submenu`, `linkable`, `liquid_method_missing(meth)`, `linkable_url`

### DynamicMenuDrop
Inherits: `MenuDrop`

**Methods:** `title`, `slug`, `to_param`, `links`, `has_links`, `has_submenus`, `each(&block)`

### EmptyAssetsDrop
Inherits: `AssetsDrop`

**Methods:** `size`

### ExternalAssetDrop
Inherits: `AssetDrop`

**Methods:** `webp`, `has_hotspots`, `hotspots_config`, `url`, `stream`, `thumbnail`, `small`, `medium`, `large`, `original`, `protected_path(size = 'original')`, `resizer`

### FormDrop
Inherits: `SectionDrop`

Represents a contact or custom form page. Inherits page properties from SectionDrop. Exposes field groups (contact, company, custom), validation errors, and the form's POST endpoint. Use `sent` to check if the form was just submitted successfully.

**Attributes:** `referrer`

**Translatable:** `title`, `body`, `success_message`

**Methods:** `type`, `post_path`, `post_url`, `images`, `main_image`, `has_main_image`, `relations`, `has_relations`, `has_errors`, `sent`, `is_multipart`, `contact_fields`, `company_fields`, `custom_fields`, `has_address_fields`, `has_custom_fields`, `has_company_fields`, `errors`, `success_message`

**Aliases:** `cover_image` → `main_image`, `has_cover_image` → `has_main_image`

### FormFieldDrop
Inherits: `Liquid`

Represents a single form field within a FormDrop. Renders itself as an HTML input via the `html` method. Field type determines the subclass used: text, email, textarea, select, checkbox, file, etc.

**Methods:** `self`, `self`, `html`, `as_json(opts = {})`

### FormsDrop
Inherits: `ModelCollectionDrop`

**Methods:** `liquid_method_missing(item_slug)`

### GalleriesDrop
Inherits: `ModelCollectionDrop`

### GalleryDrop
Inherits: `ModelDrop` | Includes: `WithRelations`

Represents an image gallery. Iterable — loop over it to access GalleryItemDrop entries. Accessible via page relations or `shop.galleries`.

**Attributes:** `title`, `slug`

**Methods:** `name`, `to_s`, `items`, `links`, `has_items`, `has_links`, `size`, `first`, `last`, `first_item`, `last_item`, `to_a`, `each(&block)`, `as_json(opts = {})`

### GalleryItemDrop
Inherits: `LinkDrop`

**Methods:** `gallery`, `image`, `title`, `description`, `meta_fields`, `attributes`, `as_json(opts = {})`

### GiftCardDrop
Inherits: `ProductDrop` | Includes: `NonDeliverableProductMethods`, `NonStockTrackedProductMethods`

Represents a gift card product. Behaves like a ProductDrop but `is_gift_card` returns true and variant-selection methods return nil (gift cards use a custom denomination input instead).

**Methods:** `product_class`, `variants_count`, `is_gift_card`, `has_multiple_prices`

### KeyValuesDrop
Inherits: `Liquid`

**Methods:** `key`, `slug`, `name`, `type`, `values`, `mappings`, `size`, `is_boolean`, `as_json(opts = {})`

### LinkDrop
Inherits: `SectionDrop`

Represents a single navigation link. Inherits page properties from SectionDrop and adds URL resolution, external-link detection, and submenu support. Accessed as items within a MenuDrop.

**Methods:** `type`, `menu`, `html`, `url`, `target`, `path`, `is_external`, `linkable`, `to_param`, `has_submenu`, `has_submenu_with_links`, `submenu`, `liquid_method_missing(meth)`, `is_usable_as_filter`, `linkable_group_name`, `linkable_type`, `as_json(opts = {})`, `child_menu`, `dynamic_submenu`, `linkable_first(meth)`, `linkable_has?(meth)`, `is_http_uri_or_path?(str)`, `linkable_url`, `uri_or_url(&block)`, `path_and_query(uri)`, `current_host?(host)`, `liquify_linkables(obj)`, `liquify_linkable(item)`

### LinkableDrop
Inherits: `Liquid` | Includes: `LinkableEntity`

### LinksDrop
Inherits: `ModelCollectionDrop`

**Methods:** `init_drop(model)`

### MembershipPlanDrop
Inherits: `ModelDrop` | Includes: `NonDeliverableProductMethods`, `NonStockTrackedProductMethods`, `SubscribableDropMethods`

**Attributes:** `id`, `model`, `description`, `class_slug`, `slug`, `currency_code`

**Methods:** `is_blocked`, `is_bundle`, `is_gift_card`, `is_membership_plan`, `has_options`, `assets`, `images`, `variants`, `first_asset`, `first_image`, `first_file`, `vendor`, `product_type`, `google_category`, `has_tags`, `has_attributes`, `to_s`, `updated_on`, `meta_fields`, `attributes`, `membership_fees`, `url`, `path`, `price_includes_tax`, `has_sale_price`, `has_volume_discount`, `has_multiple_prices`, `price`, `regular_price`

**Aliases:** `name` → `model`, `title` → `model`

### MenuDrop
Inherits: `ModelDrop` | Includes: `WithRelations`

Represents a navigation menu containing an ordered list of links. Accessible via `shop.menus` or the `{% menu %}` tag. Iterate directly over a MenuDrop to loop through its links.

**Attributes:** `title`, `slug`

**Methods:** `name`, `links`, `has_links`, `has_submenus`, `each(&block)`, `as_json(opts = {})`

### MenusDrop
Inherits: `Liquid`

Represents a collection of menus for a shop.

**Methods:** `all`, `size`, `count`, `first`, `last`, `each(&block)`, `paginate(*args)`, `as_json(opts = {})`, `to_a`, `child_links_of(menu)`, `child_menus_of(link)`

### MetaFieldDrop
Inherits: `ModelDrop`

Represents a single custom metadata field on a product, collection, or page. Accessed via `product.meta_fields`, `product.attributes`, or `collection.meta_fields`. `to_s` (and `value`) returns the field's value formatted according to its type.

**Attributes:** `name`, `key`

**Methods:** `to_s`, `slug`, `field_type`, `is_featured`, `value`, `boolean_string`, `has_value`, `has_multiple_values`, `values`, `is_integer(value)`, `as_json(opts = {})`

### MetaFieldGroupDrop
Inherits: `ModelDrop`

**Attributes:** `name`, `key`

**Methods:** `to_s`, `name`, `slug`, `meta_fields`, `has_attributes`, `attributes`

### MetaFieldGroupsDrop
Inherits: `ModelCollectionDrop`

**Methods:** `each(&block)`, `to_a`, `init_drop(model)`

### MetaFieldsDrop
Inherits: `ModelCollectionDrop`

**Methods:** `all`, `present`, `get(field_name)`, `each(&block)`, `to_a`, `has_attributes`, `association`, `liquid_method_missing(field_name)`, `init_drop(model)`

### ModelCollectionDrop
Inherits: `Liquid`

Base class for collections of Liquid drops. Wraps an ActiveRecord association and provides iteration, size, and first/last methods.

**Methods:** `all`, `size`, `count`, `first`, `last`, `each(&block)`, `paginate(*args)`, `as_json(opts = {})`, `to_a`

### ModelCollectionWithProductsDrop
Inherits: `ModelCollectionWithServiceDrop`

**Methods:** `with_available_promotions`, `nonempty`, `slugs`, `include?(obj)`

### ModelCollectionWithServiceDrop
Inherits: `ModelCollectionDrop`

Extends ModelCollectionDrop with a service object for pagination and lazy loading.

**Methods:** `paginate(*args)`

### ModelDrop
Inherits: `Liquid` | Includes: `LinkableEntity`, `TranslatableDrop`

Base class for all Liquid drops representing a single model (product, collection, etc). Provides attribute delegation, JSON serialization, and i18n support.

**Attributes:** `title`, `description`, `to_param`

**Methods:** `as_json(options = {})`, `to_s`, `to_param`, `resource_name`, `keys`, `path`

### ModelWithServiceDrop
Inherits: `ModelDrop`

Extends ModelDrop with a service object for accessing API data. Used for lazy loading relationships and accessing shop context.

**Methods:** `to_liquid(service = nil)`, `shop`

### ModifierDrop
Inherits: `ModelDrop`

Represents a product modifier — an optional add-on a customer can select when ordering (e.g. gift wrapping, engraving, custom text). Exposed via `product.modifiers`. May carry an additional price and custom input fields collected at checkout.

**Attributes:** `id`, `name`, `slug`, `description`, `max_count`

**Methods:** `has_additional_price_global`, `additional_price_global`, `has_additional_price_per_unit`, `additional_price_per_unit`, `is_multipart`, `custom_fields`, `has_custom_fields`, `error_messages_for(key)`

### ModifiersDrop
Inherits: `ModelCollectionDrop`

### MoneyDrop
Inherits: `ModelDrop`

Represents a monetary value with currency-aware formatting. Returned by price attributes on products and variants. Supports arithmetic operators so you can add, subtract, multiply, and divide prices in Liquid.

**Attributes:** `cents`

**Methods:** `format`, `to_number`, `money`, `with_thousand_separator`, `without_symbol`, `without_symbol_with_thousand_separator`, `numeric`, `number`, `to_f`, `positive`, `zero`, `abs`, `currency_code`

**Aliases:** `to_s` → `format`

### NameSettingsDrop
Inherits: `Liquid`

**Methods:** `to_s`, `keys`, `has?(key)`, `get(key)`, `as_json(options = {})`

### PagesDrop
Inherits: `ModelCollectionDrop`

### PaginateableDrop
Inherits: `Liquid` | Includes: `Enumerable`

**Methods:** `total_entries`, `total_items`, `each(&block)`, `init_drop(model)`

### PaginateableWithServiceDrop
Inherits: `PaginateableDrop`

**Methods:** `init_drop(model)`

### PaymentMethodDrop
Inherits: `Liquid`

Represents a payment method available at checkout (e.g. credit card, bank transfer, PayPal). Exposed as items in `shop.payment_methods`. Includes logo URL and optional surcharge info.

**Methods:** `name`, `logo`, `has_surcharge`, `surcharge_amount`, `surcharge_type`, `token_based?`

### PaymentMethodsDrop
Inherits: `ModelCollectionDrop`

### PostDrop
Inherits: `ModelWithServiceDrop` | Includes: `WithShopTags`, `WithRelations`, `WithRelations`, `BlockRenderer`

Represents a single blog post. Exposed as `post` in blog post templates and as items in `blog.posts`. Supports navigation to previous/next posts.

**Attributes:** `id`, `title`, `slug`, `published_on`, `updated_on`, `user_name`, `user_email`

**Translatable:** `title`, `body`

**Methods:** `name`, `user_name`, `description`, `meta_description`, `previous`, `next`, `images`, `main_image`, `tag_list`, `has_main_image`, `path_segments`, `main_asset`

**Aliases:** `cover_image` → `main_image`, `has_cover_image` → `has_main_image`

### PostsDrop
Inherits: `ModelCollectionWithServiceDrop`

**Methods:** `tagged_with(tag_list)`, `liquid_method_missing(str)`, `latest(num)`

### PriceListDrop
Inherits: `Liquid`

Represents a customer-specific price list. Accessible via `customer.price_list`. When active, all product prices shown to the customer come from this list instead of public prices.

**Methods:** `to_s`, `id`, `name`, `tax_name`, `tax_rate`, `prices_include_tax`

### ProductAttributesDrop
Inherits: `ModelCollectionDrop`

used in ProductsDrop#attributes and in ShopDrop#variant_options and ShopDrop#product_attributes

**Methods:** `first`, `last`, `to_a`, `each(&block)`

### ProductBundleDrop
Inherits: `ProductDrop`

Represents a product bundle — a fixed or customizable set of products sold together. Inherits from ProductDrop; `is_bundle` returns true. Use `bundle_config` for the full JSON configuration needed by the add-to-cart form.

**Methods:** `product_class`, `is_bundle`, `variants_count`, `has_bundle_discount`, `bundle_price_mode`, `has_valid_volume_discount`, `has_dynamic_price`, `has_multiple_prices`, `is_single_item`, `savings_amount`, `unbundled_items_price`, `bundle_items`, `products_in_bundle`, `any_available`, `has_unlimited_stock`, `stock`, `weight_in_gr`, `has_custom_bundle_price`, `bundle_config`

### ProductBundleItemDrop
Inherits: `Liquid` | Includes: `TranslatableDrop`

**Methods:** `source`, `available`, `is_available`, `name`, `product_name`, `variant_name`, `translated_name`, `translated_product_name`, `translated_variant_name`, `image`, `bundle_item_product`, `bundle_item_variant`

### ProductBundleOptionDrop
Inherits: `Liquid` | Includes: `TranslatableDrop`

**Methods:** `is_optional`, `has_variable_count`, `bundle_items`, `translated_name`

### ProductComparisonTableDrop
Inherits: `ModelWithServiceDrop`

**Methods:** `title`, `description`, `products`, `products_count`, `attributes`

### ProductDrop
Inherits: `ModelWithServiceDrop` | Includes: `WithShopTags`, `WithRelations`, `SubscribableDropMethods`, `ProductWithOptionsDropMethods`, `VolumeDiscountable`

Represents a product in the store. Exposed as `product` in product and collection templates. Provides access to pricing, images, variants, inventory, tags, and promotional data.

**Attributes:** `id`, `title`, `slug`, `class_slug`, `description`, `short_description`, `currency_code`, `updated_on`, `cart_max_quantity`, `cart_quantity_multiple`

**Translatable:** `model`, `description`, `opt1_name`, `opt2_name`, `opt3_name`

**Methods:** `has_short_description`, `product_class`, `as_json(opts = {})`, `cart_json`, `selected_branch_id`, `contact_group_id`, `price_list_id`, `price_from_list`, `plans_with_access`, `is_restricted_to_members`, `accessible_to_customer`, `is_bundle`, `is_gift_card`, `is_membership_plan`, `is_intangible`, `is_deliverable`, `tracks_stock`, `is_blocked`, `notifies_when_restocked`, `is_dynamic_bundle`, `has_options`, `has_options_for_slideout`, `to_param`, `has_collections`, `first_collection`, `collections`, `tag_list`, `tags`, `first_tag`, `vendor`, `product_type`, `bundle_config`, `google_category`, `weight_in_gr`, `weight_in_kg`, `price_per_kg`, `meta_field_groups`, `attribute_groups`, `meta_fields`, `featured_meta_fields`, `attributes`, `has_attributes`, `meta_description`, `meta_keywords`, `can_show_price_publicly`, `has_dynamic_price`, `price_if_static`, `has_multiple_prices`, `price`, `price_for_meta`, `regular_price`, `sale_price`, `has_sale_price`, `is_sale_price_set`, `sale_price_starts_at`, `sale_price_ends_at`, `has_discount`, `discount_percentage`, `price_comparison`, `has_price_comparison`, `price_comparison_percentage`, `has_savings`, `savings_amount`, `savings_percentage`, `volume_discount_comparison_price`, `has_public_price`, `public_price`, `has_price_list_savings`, `price_list_savings_amount`, `price_list_savings_percentage`, `tax`, `price_with_tax`, `prices_from_lists`, `has_promotions`, `promotions`, `promotions_for_customer`, `promotions_as_count_group`, `promotions_as_count_group_for_widget`, `promotions_as_count_group_for_customer_in_widget`, `promotions_by_discount_group`, `has_modifiers`, `modifiers`, `has_similar_products`, `similar_products`, `has_related_products`, `related_products`, `has_matching_bundles`, `matching_bundles`, `minimum_stock`, `has_stock_in_multiple_branches`, `stock_in_branches`, `stock_in_selected_branch`, `stock`, `online_stock`, `all_stock`, `available_in_selected_branch`, `available_in_any_branch`, `available_online`, `any_available`, `is_available`, `not_available`, `shipping_option_couriers`, `has_estimated_days_to_delivery`, `estimated_days_to_delivery`, `available_for_shipping`, `available_for_pickup`, `has_unlimited_stock`, `has_unlimited_stock_by_selected_branch`, `variants`, `available_variants`, `unavailable_variants`, `variants_for_json(hide_unavailable: false, sort: false)`, `variants_count`, `has_variants`, `can_select_variant`, `initial_selected_variant`, `default_variant_id`, `available_variant_id`, `has_variant_options`, `available_variant_options_matrix`, `variant_options_matrix`, `variant_options_tree`, `variant_option_type`, `has_colors`, `has_color_variant_option`, `has_image_variant_option`, `color_map`, `variant_option_names`, `variant_option_name`, `custom_variant_option_name`, `assets`, `images`, `videos`, `files`, `asset_count`, `image_count`, `video_count`, `file_count`, `has_assets`, `has_images`, `has_videos`, `has_files`, `first_asset`, `first_image`, `first_video`, `first_file`, `cart_max_quantity_by_type`, `cart_quantity_multiple_by_type`, `unit_of_measure`, `unit_display_quantity`, `price_per_display_unit`, `has_volume_discount`

**Aliases:** `model` → `title`, `name` → `title`, `translated_title` → `translated_model`, `translated_name` → `translated_model`

### ProductGroupsDrop
Inherits: `Liquid`

**Methods:** `liquid_method_missing(str)`

### ProductSetDrop
Inherits: `ModelWithServiceDrop` | Includes: `WithRelations`, `ResourceImages`

Represents a saved product set — a dynamic collection defined by a search query. Exposed as items in `shop.product_sets`. Iterable directly to loop through its products.

**Attributes:** `name`, `slug`

**Translatable:** `name`

**Methods:** `to_param`, `has_products`, `products`, `each(&block)`

### ProductSetsDrop
Inherits: `ModelCollectionWithServiceDrop`

**Methods:** `slugs`, `include?(obj)`

### ProductStockInBranchDrop
Inherits: `Liquid`

**Methods:** `stock_location`, `branch`, `allows_negative_in_location`, `variant_stocks`, `method_missing(key, args = nil)`, `liquid_method_missing(key)`, `as_json(opts = {})`

### ProductTypeDrop
Inherits: `ModelWithServiceDrop` | Includes: `WithShopTags`, `WithRelations`, `WithRelations`, `ResourceImages`

Represents a product type classification (analogous to a category in other platforms). Exposed as `product_type` on type pages and via `product.product_type`. Can hold custom attributes shared by all products of that type.

**Attributes:** `id`, `name`, `description`, `slug`, `products_count`, `cart_max_quantity_per_product`, `cart_quantity_multiple`, `unit_of_measure`, `unit_display_quantity`, `to_param`

**Translatable:** `name`, `description`

**Methods:** `type`, `to_param`, `images`, `has_products`, `first_product`, `products`, `available_products`, `product_attributes`, `filterable_product_attributes`, `variant_options`, `scoped_tags`, `promotions`, `vendors`, `as_json`

**Aliases:** `title` → `name`, `short_description` → `name`

### ProductTypesDrop
Inherits: `ModelCollectionWithProductsDrop`

### ProductsDrop
Inherits: `ModelCollectionWithServiceDrop`

**Methods:** `include?(obj)`, `recently_updated`, `sorted_by`, `tagged_with`, `with_type`, `with_vendor`, `tags`, `attributes`, `attribute_list`, `variant_names`

### PromotionDrop
Inherits: `ModelDrop`

Represents a discount promotion. Exposed as items in `product.promotions`. Provides discount type, value, validity dates, and activation rules.

**Attributes:** `id`, `name`, `usage_count`, `usage_limit`, `remaining_uses`, `product_range_from`, `product_range_to`, `contact_tag`

**Methods:** `is_public`, `has_product_count_group`, `product_count_group`, `product_count_group_name`, `product_count_group_type`, `has_product_discount_group`, `product_discount_group`, `product_discount_group_name`, `product_discount_group_type`, `has_discount_group_filter`, `discount_group_filter_mode`, `discount_group_filter_interval`, `discount_group_filter_desc`, `price_range_from`, `price_range_to`, `discount_type`, `discount`, `discount_over(price)`, `starts_at`, `expires_at`, `is_expired`, `is_upcoming`, `is_cumulative`, `non_cumulative`, `activation_mode`, `is_automatic`, `by_code`, `for_payment_method`, `payment_method_name`, `for_fulfillment_method`, `for_shipping_option`, `for_local_pickup`, `fulfillment_method_name`, `fulfillment_method_desc`, `code`, `has_main_image`, `main_image`

**Aliases:** `has_cover_image` → `has_main_image`, `cover_image` → `main_image`

### PromotionsDrop
Inherits: `ModelCollectionDrop`

**Methods:** `association`, `liquid_method_missing(promo_name)`

### ProxyDrop
Inherits: `Liquid`

**Methods:** `liquid_method_missing(param)`

### ProxyWithServiceDrop
Inherits: `Liquid`

**Methods:** `each(&block)`, `liquid_method_missing(param)`

### RelationDrop
Inherits: `ModelWithServiceDrop`

**Attributes:** `name`, `description`, `slug`

**Methods:** `url`, `type`, `object`, `parent`, `child`, `has_products`, `products`

### RelationsDrop
Inherits: `ModelCollectionWithServiceDrop`

**Methods:** `init_drop(model)`

### SalespersonDrop
Inherits: `ModelDrop`

**Attributes:** `id`, `name`, `email`

### SectionDrop
Inherits: `ModelDrop` | Includes: `WithRelations`, `WithRelations`, `BlockRenderer`

Represents a static page (also called a section). Exposed as `page` in page templates. Pages can have images, custom meta fields, a body with Markdown/HTML, and related links. LinkDrop inherits from this class, so links share the same base properties.

**Attributes:** `title`, `sent`

**Translatable:** `title`, `body`, `success_message`

**Methods:** `slug`, `type`, `menu`, `name`, `description`, `images`, `main_image`, `has_main_image`, `has_attributes`, `meta_fields`, `meta_description`, `resource_name`

**Aliases:** `cover_image` → `main_image`, `has_cover_image` → `has_main_image`, `attributes` → `meta_fields`

### SentFormDrop
Inherits: `FormDrop`

A FormDrop variant returned after a form is successfully submitted. Identical to FormDrop but `sent` always returns true, so templates can show a success message.

**Methods:** `sent`

### ShipmentDrop
Inherits: `Liquid`

Represents an order shipment with fulfilment status and optional carrier tracking. Used in transactional email templates to display delivery progress, status bar, and tracking events.

**Methods:** `has_tracking`, `is_status_none`, `current_status`, `status`, `contact_name`, `localized_delivery_status`, `delivery_status`, `delivery_statuses`, `delivery_status_bar`, `tracking_data`, `courier_name`, `tracking_code`, `order_code`, `dest`

### ShippingScheduleDrop
Inherits: `ModelDrop`

**Methods:** `has_same_day_delivery`, `has_delivery_windows`, `available_delivery_windows(args = {})`

### ShopDrop
Inherits: `ModelDrop`

Represents the current shop (store). Exposed as `shop` in all Liquid templates. Provides access to store settings, branding assets, branches, and cart configuration.

**Attributes:** `name`, `short_name`, `description`, `subdomain`, `currency_code`, `custom_header`, `custom_footer`, `can_show_prices_publicly`, `unavailable_products_mode`, `checkout_orders_quote_flow`, `products_cross_stock_mode`

**Translatable:** `name`, `description`

### SortedTagsDrop
Inherits: `TagsDrop`

### StockLocationDrop
Inherits: `ModelDrop`

Represents the shop's inventory/stock location. Accessible via `shop.stock_location`. Used internally to scope stock queries; `name` is the only public attribute.

**Attributes:** `name`

### SubscriptionFeeDrop
Inherits: `Liquid`

Represents a subscription plan's fee structure — one-time setup fee plus a recurring renewal fee. Exposed as items in `product.subscription_fees` for subscribable products.

**Methods:** `id`, `setup_fee`, `renewal_fee`, `interval_label`, `payment_interval`, `variant_id`, `as_json(opts = {})`

**Aliases:** `interval` → `payment_interval`

### TagDrop
Inherits: `ModelWithServiceDrop` | Includes: `WithRelations`

Represents a product tag. Tags cross-categorize products across collections. Exposed as `tag` on tag pages and as items in `product.tags`.

**Attributes:** `name`, `slug`, `color`, `products_count`, `visible`, `icon`

**Methods:** `id`, `is_visible`, `type`, `to_param`, `title`, `has_products`, `first_product`, `products`, `available_products`, `promotions`, `as_json`

### TagsDrop
Inherits: `ModelCollectionWithProductsDrop`

### ThemeAssetDrop
Inherits: `Liquid` | Includes: `ImageAspectRatio`

**Methods:** `self`, `self`, `url`, `to_s`, `title`, `extension`, `base_name`, `human_size`, `geometry`, `resizer`, `is_landscape_image`, `is_portrait_image`, `is_square_image`, `has_variants`, `id`, `description`, `shop_id`, `related_variant_id`, `variants`, `variant_ids`, `thumbnail`, `medium`, `small`, `large`, `original`, `protected_path(size = 'original')`

### VariantDrop
Inherits: `ModelWithServiceDrop` | Includes: `VolumeDiscountable`

Represents a specific product variant — a unique combination of option values (e.g. "Blue / Large"). Provides pricing, stock, image, and option data for a single purchasable SKU.

**Attributes:** `title`, `id`, `sku`, `color`, `option_values`, `weight_in_grams`

**Translatable:** `opt1`, `opt2`, `opt3`

**Methods:** `translated_title`, `opt1`, `opt2`, `opt3`, `product`, `weight_in_gr`, `weight_in_kg`, `price_per_kg`, `has_color`, `online_stock`, `stock`, `is_available_if_no_stock`, `has_unlimited_stock`, `is_available`, `stock_in_selected_branch`, `has_volume_discount`, `raw_price`, `price`, `regular_price`, `sale_price`, `has_sale_price`, `discount_percentage`, `has_price_comparison`, `price_comparison`, `price_comparison_percentage`, `price_comparison_or_nil`, `public_price`, `tax`, `price_with_tax`, `related_assets`, `asset_ids`, `assets`, `images`, `files`, `asset_count`, `image_count`, `file_count`, `has_assets`, `has_images`, `has_files`, `first_asset`, `first_image`, `first_file`, `option_values`, `option_assets_ids`, `opt1_asset_id`, `variant_option1_image`, `option_images_urls`, `price_per_unit`, `price_per_display_unit`, `as_json(opts = {})`

**Aliases:** `name` → `title`

### VariantOptionBranchDrop
Inherits: `Liquid`

**Methods:** `key`, `options_count`, `option`, `options`, `has_multiple_options`, `variants`, `has_variants`

**Aliases:** `option` → `name`, `slug` → `key`

### VariantsDrop
Inherits: `ModelCollectionWithServiceDrop`

### VendorDrop
Inherits: `ModelWithServiceDrop` | Includes: `WithShopTags`, `WithRelations`, `WithRelations`, `ResourceImages`

Represents a product vendor or brand. Exposed as `vendor` on vendor pages and via `product.vendor`. Supports filtering and browsing products by brand.

**Attributes:** `id`, `name`, `slug`, `description`, `products_count`

**Translatable:** `name`, `description`

**Methods:** `type`, `to_param`, `images`, `has_products`, `first_product`, `products`, `available_products`, `product_types`, `product_attributes`, `filterable_product_attributes`, `variant_options`, `promotions`, `as_json`

### VendorsDrop
Inherits: `ModelCollectionWithProductsDrop`

### VolumeDiscountDrop
Inherits: `ModelWithServiceDrop`

Represents a volume (tiered) discount applied to a product or group of products. Accessible via `product.volume_discount`. Defines tiers, discount type, and how savings accumulate.

**Attributes:** `id`, `name`, `slug`, `discount_type`, `apply_mode`

**Methods:** `title`, `type`, `is_cumulative`, `cumulative_mode`, `repeating_tier`, `single_tier`, `apply_to_all`, `completing_mode_apply_individually`, `completing_mode_apply_globally`, `is_completing_mode`, `tiers`, `is_fixed`, `is_percentage`, `is_group_percentage`, `is_sale_price_trigger`, `first_tier`, `last_tier`, `each(&block)`, `has_products`, `products`, `products_count`

### VolumeDiscountWithPriceDrop
Inherits: `VolumeDiscountDrop`

**Methods:** `completing_first_price`, `first_tier_msg`, `tiers`

### VolumeDiscountsDrop
Inherits: `ModelCollectionWithProductsDrop`

**Methods:** `with_available_promotions`

## Liquid Filters

Custom filters extending Liquid's built-in set.

### ImageFilters

| Filter | Signature | Description |
|--------|-----------|-------------|
| `resized_image_url` | `resized_image_url(filename_with_extension, geometry_string)` | Returns a resized URL for a theme asset image file using the given geometry string (e.g. `"200x200"`). |
| `resize` | `resize(image, geometry_string)` | Resizes an image asset or asset URL to the given geometry string (e.g. `"300x"`, `"x200"`, `"100x100"`). Accepts an AssetDrop, LogoDrop, or plain filename string. |
| `greyscale` | `greyscale(image)` | Converts an image asset to greyscale via the resize server. |
| `webp` | `webp(image)` | Converts an image to WebP format, returning a WebP URL or setting the webp flag on the image object. |

### TextFilters

| Filter | Signature | Description |
|--------|-----------|-------------|
| `translate` | `translate(str, args = nil)` | defaults to given string if not found |
| `localize` | `localize(str, args = nil)` | like translate but for our system translations |
| `split_text` | `split_text(post_or_str, link_text = t('titles.read_more')` | Splits a post or string at the `<!--more-->` marker (or at max_length characters) and appends a "read more" link pointing to the post's URL. |
| `split` | `split(post_or_str, link_text = t('titles.read_more')` | — |
| `to_bool` | `to_bool(var)` | Returns the string `"true"` or `"false"` from any truthy/falsy value. |
| `to_slug` | `to_slug(str)` | Converts a string to a URL-safe slug (lowercase letters, digits, and hyphens). |
| `titleize` | `titleize(str)` | Converts a dashed, underscored, or dotted string into a human-readable capitalized title. |
| `to_money` | `to_money(str)` | Wraps a numeric amount in a MoneyDrop using the shop's currency, enabling price formatting filters. |
| `with_discount_from` | `with_discount_from(product_price, promo)` | Subtracts a promotion's discount from a product price and returns the discounted MoneyDrop. |
| `format_text` | `format_text(input)` | Renders a Markdown string or post body as HTML, converting single newlines to `<br>` tags. |
| `render_markdown` | `render_markdown(text, options = {})` | Renders a Markdown string as HTML using the Redcarpet library. |
| `simple_format` | `simple_format(text, options = {})` | Converts plain text into HTML by wrapping paragraphs and converting single newlines to <br> tags. |
| `simple_format` | `simple_format(text, options = {})` | Converts plain text into HTML by wrapping paragraphs and converting single newlines to <br> tags. |
| `to_json` | `to_json(obj)` | Converts an object to its JSON string representation. |
| `bool_to_yesno` | `bool_to_yesno(num)` | Converts 0 to a localized "No" string and 1 to "Yes"; passes other values through unchanged. |
| `json_escape` | `json_escape(text)` | Escapes a string for safe embedding inside a JSON string value (collapses whitespace and escapes quotes). |
| `escape_quotes` | `escape_quotes(str)` | Escapes double quotes in a string by prefixing them with a backslash. |
| `meta_escape` | `meta_escape(str, limit = nil)` | Strips HTML tags and escapes HTML entities for safe use in meta tag content attributes. |
| `escape_html` | `escape_html(text)` | Escapes HTML special characters (`&`, `<`, `>`, `"`) in a string. |
| `strip_tags` | `strip_tags(html)` | Removes all HTML tags from a string, returning plain text. |
| `print_if_equal` | `print_if_equal(text, one, two)` | Returns `text` if `one` equals `two`, otherwise returns nil. |
| `print_if_matches` | `print_if_matches(text, one, two)` | Returns `text` if `one` contains or matches `two` (supports regex strings like `/pattern/`). print_if_matches("selected", "something", "some") |
| `print_if_included` | `print_if_included(text, needle, haystack)` | Returns `text` if `needle` is included in `haystack` (array, hash, or string). Arguments can be passed in either order. print_if_included("checked", "things", ["list", "of", "things"]) or print_if_included("checked", ["list", "of", "things"], "things") |
| `print_if_filter_active` | `print_if_filter_active(text, params, link)` | Returns `text` if the given navigation link is currently active as a filter in the request params. |
| `if_current_page` | `if_current_page(text, link)` | Returns `text` if the current request path exactly matches the given link's path. |
| `if_within_section` | `if_within_section(text, link)` | Returns `text` if the current request path starts with or matches the given link's path. |
| `if_within_catalog` | `if_within_catalog(text)` | Returns `text` if the current path is within any catalog section (products, collections, types, tags, or vendors). |

### UrlFilters

| Filter | Signature | Description |
|--------|-----------|-------------|
| `image_url` | `image_url(product, size = 'large')` | Returns the URL for a product's first image at the given size (e.g. `"large"`, `"medium"`) or geometry string. |
| `asset_url` | `asset_url(filename_with_extension)` | Returns the CDN URL for a named theme asset file (e.g. `"logo.png"`, `"app.js"`). |
| `theme_asset_url` | `theme_asset_url(filename_with_extension)` | returns url and path for filename depending if asset or template exists or not if not, it will point to static.bootic.net/blank.type?original=missing.type if yes, it will point to themes.bootic.net/theme/:id/:name.:type |
| `protected_asset_path` | `protected_asset_path(filename_with_extension, size = 'original')` | — |
| `js_bundle_url` | `js_bundle_url(filenames)` | Returns a single bundled URL for a comma-separated list of JS filenames. |
| `css_bundle_url` | `css_bundle_url(filenames)` | Returns a single bundled URL for a comma-separated list of CSS filenames. |
| `scss_bundle_url` | `scss_bundle_url(filenames)` | Returns a single bundled URL for a comma-separated list of SCSS filenames. |
| `asset_url_no_timestamp` | `asset_url_no_timestamp(filename_with_extension)` | Returns the asset URL without the cache-busting timestamp query string. |
| `shared_url` | `shared_url(path)` | Returns a URL for a shared (cross-theme) path with the shop's last-refreshed timestamp appended. |
| `image_tag` | `image_tag(url_or_asset, alt_text = nil)` | Returns an `<img>` tag for the given URL or asset, with an auto-derived alt attribute. |
| `lazy_image_tag` | `lazy_image_tag(url_or_asset, alt_text = nil)` | Returns a lazy-loading `<img>` tag using `data-src` instead of `src` (for use with lazy-load JS libraries). |
| `image_tag_with_webp` | `image_tag_with_webp(url_or_asset, alt_text = nil)` | Returns a `<picture>` element with a WebP source and a fallback image source for browsers without WebP support. |
| `lazy_image_tag_with_webp` | `lazy_image_tag_with_webp(url_or_asset, alt_text = nil)` | Returns a lazy-loading `<picture>` element with WebP and fallback sources (uses `data-srcset`). |
| `stylesheet_tag` | `stylesheet_tag(url, media = 'all')` | Returns a `<link rel="stylesheet">` tag for the given CSS filename or URL. Supports comma-separated filenames for bundling in production, or individual tags in dev mode. |
| `stylesheet_tag_with_preload` | `stylesheet_tag_with_preload(url, media = 'all')` | Returns a preload `<link>` tag that loads the stylesheet asynchronously and applies it once loaded. |
| `javascript_tag` | `javascript_tag(url, append = '')` | Returns a `<script>` tag for the given JS filename or URL. Supports comma-separated filenames for bundling in production, or individual tags in dev mode. |
| `async_javascript_tag` | `async_javascript_tag(url)` | Returns an async/defer `<script>` tag for non-blocking JavaScript loading. |
| `tagged_resource_path` | `tagged_resource_path(resource, tag, page = 1)` | Returns the filtered URL for a resource (collection, type, or vendor) combined with a tag filter. |
| `typed_collection_path` | `typed_collection_path(collection, type, page = 1)` | Returns the URL for a collection filtered by a product type. |
| `tagged_collection_path` | `tagged_collection_path(collection, tag, page = 1)` | Returns the URL for a collection filtered by a tag. |
| `vendored_collection_path` | `vendored_collection_path(collection, vendor, page = 1)` | Returns the URL for a collection filtered by a vendor. |
| `tagged_typed_products_path` | `tagged_typed_products_path(type, tag, page = 1)` | Returns the URL for a product type filtered by a tag. |
| `vendored_typed_products_path` | `vendored_typed_products_path(type, vendor, page = 1)` | Returns the URL for a product type filtered by a vendor. |
| `tagged_vendored_products_path` | `tagged_vendored_products_path(vendor, tag, page = 1)` | Returns the URL for a vendor's products filtered by a tag. |
| `vendored_products_path` | `vendored_products_path(vendor, page = 1)` | Returns the URL for all products by a given vendor. |

### WillPaginateFilters

| Filter | Signature | Description |
|--------|-----------|-------------|
| `pagination` | `pagination(paginated_list, opts = {})` | Renders pagination for a paginated collection using the mode set in the theme's settings (`page_numbers`, `more_results`, or `next_page`). |
| `more_results` | `more_results(paginated_list, opts = {})` | Renders a "Load more" button that appends the next page of results via AJAX. Falls back to numbered page links when the visitor navigates directly to a non-first page. |
| `page_numbers` | `page_numbers(paginated_list, opts = {})` | Renders numbered page links with previous/next labels (classic pagination). |
| `next_page` | `next_page(paginated_list, opts = {})` | Renders previous/next page links only (no numbered page links). |

## Liquid Tags

Custom Liquid block/inline tags.

| Tag | Class | Description |
|-----|-------|-------------|
| `{% add_to_cart %}` | `AddToCartTag` | — |
| `{% add_to_cart_in_branch %}` | `AddToCartInBranchTag` | — |
| `{% add_to_cart_js %}` | `AddToCartJsTag` | Renders JavaScript bindings for the add-to-cart interaction. |
| `{% add_to_cart_no_variants %}` | `AddToCartNoVariantsTag` | Renders a simplified Add to Cart button, automatically selecting the first available variant. |
| `{% async_partial %}` | `AsyncPartialTag` | Loads a partial template asynchronously via AJAX, deferring its render until after page load. |
| `{% bootic_footer %}` | `BooticFooterTag` | Injects shared JavaScript files required for cart and variant functionality. Use the 'v2' parameter for the current module system. |
| `{% bootic_header %}` | `BooticHeaderTag` | Injects shared CSS, RSS links, OpenGraph tags, and JSON-LD structured data. Use the 'v2' parameter for current functionality. |
| `{% bootic_js %}` | `BooticJsTag` | Includes the JavaScript runtime for Bolder's module and cart system. |
| `{% branch_chooser %}` | `BranchChooserTag` | Renders a UI for customers to select their preferred pickup or delivery branch. |
| `{% bundle_option_configurator %}` | `BundleOptionConfiguratorTag` | Renders the option selector for configuring a customisable product bundle. |
| `{% cart_table %}` | `CartTableTag` | Renders the static (non-JavaScript) cart items table. |
| `{% cart_table_template %}` | `CartTableTemplateTag` | Injects the JavaScript template used by the dynamic cart renderer. |
| `{% comments %}` | `CommentsTag` | Renders a customer reviews/comments section for the current product or post. |
| `{% compare_products %}` | `CompareProductsTag` | Renders a product comparison widget allowing customers to compare multiple products. |
| `{% contact_form_fields %}` | `ContactFormFieldsTag` | Renders the standard contact form fields (name, email, message, etc.). |
| `{% currency_select %}` | `CurrencySelectTag` | Renders a currency selector dropdown for multi-currency stores. |
| `{% current_description %}` | `CurrentDescriptionTag` | Renders a meta description for the current page, suitable for use in a <meta name="description"> tag. |
| `{% current_title %}` | `CurrentTitleTag` | Renders an appropriate page title for the current page (product name, collection name, shop name, etc.). |
| `{% delivery_setup %}` | `DeliverySetupTag` | Deprecated. Previously rendered the delivery and pickup setup flow. |
| `{% dynamic_cart_table %}` | `DynamicCartTableTag` | Renders the interactive shopping cart table with live updates. Requires the cart object; intended for use in cart.html. |
| `{% embed_form %}` | `EmbedFormTag` | Renders an embeddable contact form (inherits field rendering from ContactFormFieldsTag). |
| `{% find_in_block %}` | `FindInBlockTag` | Finds and exposes a specific item from a collection within a Liquid block. |
| `{% fulfillment_info %}` | `FulfillmentInfoTag` | Renders fulfilment method information (shipping or pickup options) for the current product or cart. |
| `{% include_optional %}` | `IncludeOptionalTag` | Includes a Liquid partial template if it exists; silently skips if the file is not found. |
| `{% include_partial %}` | `IncludePartialTag` | Includes a Liquid partial template by filename. |
| `{% language_select %}` | `LanguageSelectTag` | Renders a language/locale selector dropdown for multi-language stores. |
| `{% loop %}` | `LoopTag` | Iterates over a collection rendering each item through a reusable partial template. Example: {% loop products in 'product_item' %} |
| `{% navigation_path %}` | `NavigationPathTag` | Renders breadcrumb navigation for the current page. |
| `{% notify_restocked_form %}` | `NotifyRestockedFormTag` | Renders a form allowing customers to sign up for back-in-stock notifications for an out-of-stock product. |
| `{% product_comparison_table %}` | `ProductComparisonTableTag` | Renders a side-by-side attribute comparison table for selected products. |
| `{% product_filters %}` | `ProductFiltersTag` | Renders a filter panel for narrowing product listings by tag, type, vendor, or collection. |
| `{% promotions_for %}` | `PromotionsForTag` | Renders the active promotions applicable to a given product or the current cart. |
| `{% random_number %}` | `RandomNumberTag` | Outputs a random integer between the given min and max values, useful for randomised layouts. |
| `{% render_component %}` | `RenderComponentTag` | Renders a registered Vue or Web Component by name. |
| `{% sale_price_countdown_for %}` | `SalePriceCountdownForTag` | Renders a countdown timer showing the time remaining until a product's sale price expires. |
| `{% shipping_calculator %}` | `ShippingCalculatorTag` | Renders a modal for calculating shipping costs by region. |
| `{% signup_form %}` | `SignupFormTag` | Renders a customer account registration form. |
| `{% stock_status %}` | `StockStatusTag` | Renders a label showing the product's current stock availability (in stock, low stock, out of stock). |
| `{% subscribe_form %}` | `SubscribeFormTag` | Renders a newsletter or mailing-list subscription form. |
| `{% toggle_quote_cart %}` | `ToggleQuoteCartTag` | Toggles the cart between standard purchase mode and quote-request mode. |
| `{% unit_price %}` | `UnitPriceTag` | Renders the product's selling price, including comparison/sale price markup if applicable. |
| `{% variant_colors %}` | `VariantColorsTag` | Renders colour swatch inputs for selecting product colour variants. |
| `{% volume_discount_table %}` | `VolumeDiscountTableTag` | Renders a tiered quantity-pricing table for a product's volume discount. |

