---
title: "Architecture"
manual: "StyleX Connector"
version: "1.1"
permalink: "https://docs.typo3.org/permalink/skom/stylex-connector:architecture@1.1"
source: "Architecture/Index.rst"
rendered: "2026-11-01T18:26:19+00:00"
---

# Architecture {#architecture}

## Manifest loading {#manifest-loading}

`StylexManifestService` collects paths from `StylexRegistry` and then adds
the Extension Manager `manifestPath` according to `manifestPathMode`. It resolves `EXT:`
paths with TYPO3's file utility and accepts absolute paths too.

The service reads the `styles` object from every valid manifest and merges
them in registration order. A later manifest replaces a complete entry with
the same key. Missing files, malformed entries and unintended collisions produce bounded
logger-backed diagnostics with owner and path. Rendering keeps available
styles; `stylex:validate` applies the strict release policy.

## Caching {#caching}

Outside Development, the service stores the merged styles in TYPO3's
`stylex_manifest` cache. The cache is a `VariableFrontend` with a
`FileBackend` and belongs to the `all` and `pages` cache groups. Its
default lifetime is one day. Ordered owners, override permissions, normalized
paths and SHA-256 file content hashes identify the cache entry. Content hashing
reads each artifact once per service instance even on a cache hit. JSON parsing
happens only on a miss. Incomplete loads never populate the persistent cache.

The service loads the manifest at most once per request after a cache miss.
Use `StylexManifestService::clearCache()` only from PHP code that has a
reason to force a reload. Normal deployment work should flush TYPO3 caches
after replacing generated assets.

## Class resolution {#class-resolution}

`StylexManifestService::getClasses()` flattens comma-separated style keys.
For compiled entries it keeps a map of opaque conflict identifier to class name.
Later keys replace the previous value for the same identifier; null removes it. Complete recipes concatenate their whole class lists without conflict resolution. The result removes duplicate
classes before returning a space-separated string.

The ViewHelper passes base keys, matching `when` keys, and an optional
`else` fallback to this method. It HTML-escapes the returned string before
Fluid puts it in an attribute.

The canonical PHP namespace remains `Vendor\StylexConnector`. Composer
autoloads `Configuration/Compatibility.php` to provide explicit Skom aliases
even before TYPO3 bootstrap. The bootstrap also loads that file for classic
extension installations. Both namespaces share the same registry and DI services.
