---
title: "Feature: #108726 - Introduce Fluid f:render.record ViewHelper"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:feature-108726-1769503907"
source: "Changelog/14.2/Feature-108726-IntroduceFluidRenderRecordViewHelper.rst"
typo3-version: "14.2"
typo3-major: 14
type: "feature"
issue: 108726
forge: "https://forge.typo3.org/issues/108726"
tags: ["Frontend", "ext:fluid"]
rendered: "2026-09-23T15:30:34+00:00"
---

# Feature: #108726 - Introduce Fluid f:render.record ViewHelper {#feature-108726-1769503907}

See [forge#108726](https://forge.typo3.org/issues/108726)

## Description {#description}

Instead of using the `<f:cObject>` ViewHelper to render database records,
the new `<f:render.record>` ViewHelper can be used.

It allows records to be rendered while enabling other extensions to modify the
output via PSR-14 event listeners.

This is especially useful for adding debugging wrappers or additional HTML
structure around content elements.

By default, the ViewHelper renders the record as is, but event listeners
can listen to the
`\TYPO3\CMS\Fluid\Event\ModifyRenderedRecordEvent` and modify the
output.

Usage with the `record-transformation` data processor:

```typoscript
dataProcessing {
    10 = record-transformation
}
```

**MyContentElement.fluid.html**

```html
<f:render.record record="{record}" />
or
{record -> f:render.record()}
```

You can render not only `tt_content` records, but any database record by
defining the rendering in TypoScript.

```typoscript
# Example TypoScript configuration for rendering custom records
sys_category = FLUIDTEMPLATE
sys_category {
  file = EXT:my_extension/Resources/Private/Templates/Category.html
  layoutRootPaths.10 = EXT:my_extension/Resources/Private/Layouts/
  partialRootPaths.10 = EXT:my_extension/Resources/Private/Partials/
  dataProcessing.1421884800 = record-transformation
}

# Example TypoScript configuration for special record types
tx_myextension_domain_model_product = COA
tx_myextension_domain_model_product.default = FLUIDTEMPLATE
tx_myextension_domain_model_product.default {
  templateName >
  templateName.ifEmpty.cObject = TEXT
  templateName.ifEmpty.cObject {
    field = record_type
    required = 1
    case = uppercamelcase
  }
  # for record_type = 'mainProduct' the template file my_extension/Resources/Private/Templates/Product/MainProduct.html will be used
  layoutRootPaths.10 = EXT:my_extension/Resources/Private/Layouts/
  partialRootPaths.10 = EXT:my_extension/Resources/Private/Partials/
  templateRootPaths.10 = EXT:my_extension/Resources/Private/Templates/Product/
  dataProcessing.1421884800 = record-transformation
}
```

## Impact {#impact}

Theme creators are encouraged to use the `<f:render.record>` ViewHelper
to allow other extensions to modify the output via event listeners.
