---
title: "The SXA pipelines"
slug: "the-sxa-pipelines"
abstract: "Understand how the SXA pipelines and their processors work."
---
# The SXA pipelines

Understanding how the SXA pipelines and their processors work provides you with an insight into how dependencies are rendered, how tokens for rendering variants are created, how CSS classes are generated, and so on.

A pipeline consists of a sequence of processors. A processor is a .NET class that implements a method. When a pipeline is invoked, the processors are run in order. You can extend and customize the pipelines by adding or replacing processors. Extending a pipeline involves modifying the pipeline definition located in a Sitecore patch file.

## resolveVariantTokens

The `resolveVariantTokens` pipeline is used to create tokens for rendering variants.

This pipeline includes the following processors:

| **Processor** | **Description** |
| --- | --- |
| ResolveIFileTypeIcon | Renders the span HTML element with the class according to the extension of the file. |
| ResolveItemId | Specifies the ID of the content item to be resolved. |
| ResolveItemName | Specifies the name of the content item to be resolved. |
| ResolveSize | Renders the file size. |

## decoratePage

The `decoratePage` pipeline is used to decorate the page `<body>` tag with attributes. These can be standard attributes, such as `id` or `class`, but you can also add custom data attributes.

## decorateRendering

The `decorateRendering` pipeline is used to decorate the rendering's outer <div> tag with attributes. These can be standard attributes, such as `id` or `class`, but you can also add custom data attributes.

```xml
<div class="component title">
<div class="component-content">
<h2 class="field-title">
Title of the page
</h2>
</div>
</div>

```

## mediaRequestHandler

The `mediaRequestHandler` pipeline is used in the SXA media requests handler. The `mediaRequestHandler` pipeline is defined in the `Sitecore.XA.Foundation.MediaRequestHandler.config` file.

This file extends the standard media request handler by adding a pipeline that implements custom functionalities such as the support of wireframe images or providing optimized assets.

This pipeline includes the following processors:

| **Processor** | **Description** |
| --- | --- |
| ParseMediaRequest | Checks if the HTTP request is a valid media type. If not, the pipeline is aborted. |
| GetMediaFromUrl | Determines the media item from the URL that is stored in HTTP request. |
| HandleErrors | Redirects the user to an error page. |

## resolveTokens

The `resolveTokens` pipeline is used to resolve tokens that can be used in queries. For example:

- `$compatibleThemes` - path to all themes.
- `$theme` - currently used theme.
- `$pageDesigns` - root of page designs (*sitecore/content/<site collection>/<site>/Presentation/Page Designs*).
- `$partialDesigns` - root of partial designs (*sitecore/content/<site collection>/<site>/Presentation/Partial Designs*).
- `$currenttemplate` - name of the current template.
- `$tenant` - path to the current site collection.
- `$site` - path to the current site.
- `$home` - path to the current site start item (by default: */sitecore/content/<site collection>/<site>/Home*).
- `$linkableHomes` - paths to home items from [linkable sites](https://doc.sitecore.com/xp/en/developers/sxa/104/sitecore-experience-accelerator/adjust-link-settings-to-enable-cross-site-linking.html "Adjust link settings to enable cross-site linking").
- `$templates` - path to the current site templates (*/sitecore/templates/Project/Site Collection*).
- `$siteMedia` - paths to media folders specified in `Additional Children` field on virtual media folder item.
- `$sharedSites` - for multiroot fields, resolves shared site for the current site collection.
- `$rvSystemTemplates` - list of templates defined in a configuration. These templates are used to feed the `AllowedInTemplates` field for rendering variants.
- `$xaRichTextProfile` - the `XA.Foundation.Editing.DefaultRichTextProfile` setting value.
- `$sitelang` - the default language for the context site, which is set on the site definition item.
- `$lang` - the context language.
- `$vf `\- the virtual folder for the context site.

By adding new processors to this pipeline, you can design new tokens.

This pipeline is defined in the `Sitecore.XA.Foundation.TokenResolution.config` file and includes the following processors:

| **Processor** | **Description** |
| --- | --- |
| CurrentTemplateToken | Determines the current tokens used. |
| EscapeQueryTokens | Used to escape tokens that are used in Sitecore queries. |

## assetService

The `assetService` pipeline is responsible for assets optimization. This pipeline includes the `AddEditingtheme` processor, which you can use to add a theme when you are in Edit mode.

```xml
<assetService>
        <processor type="Sitecore.XA.Foundation.Editing.Pipelines.AssetService.AddEditingTheme, Sitecore.XA.Foundation.Editing" />
      </assetService>

```

## getControlEditability

The `getControlEditability` pipeline is used to check if a rendering should be editable or not. It is defined in the `Sitecore.XA.Foundation.Editing.config` file. Used in `Editing`, `Composites`, `LocalDatasources`.

```xml
<getControlEditability>
        <processor type="Sitecore.XA.Foundation.Editing.Pipelines.GetControlEditability.IsRenderingInCurrentItemRenderings, Sitecore.XA.Foundation.Editing" />
      </getControlEditability>

```

It contains the `IsRenderingInCurrentItemRenderings` processor that checks the component XML to see if it contains other component (by unique ID).

## getRobotsContent

The `getRobotsContent` pipeline is used to extend the response provided to search crawler robots in the `robots.txt` file. The `Robots.txt` file is a simple text file on your site’s root directory that tells search engine robots what to crawl and what not to crawl on your site. The `getRobotsContent` pipeline contains the following processors:

| **Processor** | **Description** |
| --- | --- |
| GetContentFromSettings | Checks if the robots' content field is filled and uses its value. |
| GetDefaultRobotsContent | Checks the `robots.txt` file for a value when the robots' content field is empty. |
| AppendSitemapUrl | Adds the path of the `sitemap.xml` file to the robots' content field. |

## refreshHttpRoutes

The `refreshHttpRoutes` pipeline is used to refresh HTTP routes after changes in site configuration.

## resolveSearchQueryTokens

The `resolveSearchQueryTokens` pipeline is used to add search filters. This pipeline is defined in the `Sitecore.XA.Foundation.Search.config` file. By default, the following tokens are available:

- `TaggedTheSameAsCurrentPage|SxaTags`
- `TaggedWithAtLeastOneTagFromCurrentPage|SxaTags`
- `UnderCurrentPage`
- `ExcludeCurrentPage`
- `ItemsOfTheSameTemplateAsTheCurrentPage`
- `ItemsWithTheSameValueInField|FieldName`
- `CurrentLanguage`

## resolveBoostingQuery

The `resolveBoostingQuery` pipeline is used to add extension point that can be used to write your own search boosting rules and then use them in SXA. To do that you can write your own custom rule and use the `resolveBoostingQuerypipeline` to turn it into a query. This pipeline is defined in `Sitecore.XA.Foundation.Search.config` file and includes the following processor:

```

resolveBoostingQuery
    processor type="Sitecore.XA.Foundation.Search.Pipelines.ResolveBoostingQuery.ResolveFieldAndQueryMatchRule, Sitecore.XA.Foundation.Search" resolve="true" /
/resolveBoostingQuery

```

## encodeFacetValue

The `encodeFacetValue` pipeline is used in search logic to encode/escape facet values that are sent to search providers. It is used to escape special characters for Azure and Solr search. This pipeline is defined in the `Sitecore.XA.Foundation.Search.config` file.

```xml
<encodeFacetValue>
     <processor type="Sitecore.XA.Foundation.Search.Pipelines.EncodeFacetValue.EscapeValue, Sitecore.XA.Foundation.Search" resolve="true" />
</encodeFacetValue>

```

## getStyles

The `getStyles` pipeline is used to get all styles from current and shared sites. This pipeline is defined in the `Sitecore.XA.Foundation.Presentation.config` file and includes the following processors:

| Processor | Description |
| --- | --- |
| GetSiteStyles | Gets all styles on the site. |
| GetSharedStyles | Gets all styles on shared sites. |

## processSearchItems

The `processSearchItems` pipeline is triggered after the search results items return and before sending them to the browser. It can enrich search result items with models that can be rendered on the page using the `Model` and `Model Iterator` variant items.

The `ProcessSearchItemsArgs` pipeline contains two properties:

- `Items` - list of original items.
- `SearchItems` - list that contains `SearchItem` objects. This `SearchItem` object contains `Item` and `Model` (of type Object). Users can assign whatever they want to the Model property and use it in rendering variants.

## generateScribanContext

The `generateScribanContext` pipeline adds additional objects and functions to the Scriban context that you can use in Scriban templates. This pipeline adds `i_page`, `i_site` objects, or `sc_field` functions.

## getScribanItemMembers

The `getScribanItemMembers` pipeline extends item objects available in the Scriban templates (` i_page`, `i_site`, and so on) with additional properties. For example:

- `i_page.name` - returns page name
- `i_page.language` - returns page language name
- `i_home.version` - returns version number of home item