---
title: "Feature: #108832 - Introduce UserSettings object for backend user profile settings"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:feature-108832-1738500000"
source: "Changelog/14.2/Feature-108832-IntroduceUserSettingsObjectForBackendUserProfileSettings.rst"
typo3-version: "14.2"
typo3-major: 14
type: "feature"
issue: 108832
forge: "https://forge.typo3.org/issues/108832"
tags: ["Backend", "PHP-API", "ext:core"]
rendered: "2026-10-01T16:39:42+00:00"
---

# Feature: #108832 - Introduce UserSettings object for backend user profile settings {#feature-108832-1738500000}

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

## Description {#description}

A new `\TYPO3\CMS\Core\Authentication\UserSettings` object provides structured access to backend user
profile settings defined in `$GLOBALS['TYPO3_USER_SETTINGS']`.

### UserSettings object {#usersettings-object}

The `\TYPO3\CMS\Core\Authentication\UserSettings` object can be retrieved via the backend user:

```php
/** @var \TYPO3\CMS\Core\Authentication\UserSettings $userSettings */
$userSettings = $GLOBALS['BE_USER']->getUserSettings();

// Check if a setting exists
if ($userSettings->has('colorScheme')) {
    $scheme = $userSettings->get('colorScheme');
}

// Get all settings as an array
$allSettings = $userSettings->toArray();

// Typed access via dedicated methods
$emailOnLogin = $userSettings->isEmailMeAtLoginEnabled();
$showUploadFields = $userSettings->isUploadFieldsInTopOfEBEnabled();
```

The class implements `\Psr\Container\ContainerInterface` with `has()`
and `get()` methods. The `get()` method throws
`\TYPO3\CMS\Core\Authentication\Exception\UserSettingsNotFoundException`
if the setting does not exist.

### New JSON storage with backward compatibility {#new-json-storage-with-backward-compatibility}

Profile settings are now stored in a new `be_users.user_settings` JSON
field, providing a structured and queryable format. For backward compatibility,
the existing serialized `uc` blob continues to be written alongside:

```php
// Writing still uses the uc mechanism
$GLOBALS['BE_USER']->uc['colorScheme'] = 'dark';
$GLOBALS['BE_USER']->writeUC();
// Both uc (serialized) and user_settings (JSON) are updated
```

An upgrade wizard, "Migrate user profile settings to JSON format", migrates
existing settings from the `uc` blob to the new `user_settings` field.

## Impact {#impact}

Backend user profile settings can now be accessed via the
`\TYPO3\CMS\Core\Authentication\UserSettings` object, providing
type safety and IDE support. The new JSON storage format improves data
accessibility while maintaining full backward compatibility through dual-write
to both storage formats.
