Skip to content

feat: add general settings to core PreferencesController #6111

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

fabiobozzo
Copy link
Contributor

@fabiobozzo fabiobozzo commented Jul 14, 2025

Explanation

Current State

MetaMask's general settings (theme, locale, currency, etc.) are currently managed differently across platforms:

  • Extension: Stored in the extension's PreferencesController
  • Mobile: Managed through Redux state

This architectural difference creates challenges for implementing cross-platform settings synchronization, as there's no single source of truth for these preferences.

Solution

This PR adds general settings properties to the core PreferencesController to establish a centralized foundation for settings sync:

  • currentLocale - User's preferred language
  • theme - UI theme preference (light/dark/auto)
  • useBlockie - Identicon style preference
  • currentCurrency - Display currency for fiat conversions
  • showNativeTokenAsMainBalance - Balance display preference
  • hideZeroBalanceTokens - Token list filtering preference

Each property includes:

  • Appropriate default values
  • Setter methods following existing patterns
  • Full JSDoc documentation
  • Comprehensive test coverage

Next Steps

This lays the groundwork for unified settings management:

  • Extension: Will be updated to consume these settings from the core controller instead of maintaining its own copies
  • Mobile: Will bridge these settings from Redux state to the core controller for synchronization

This approach ensures all platforms use a consistent source of truth while maintaining backward compatibility during the transition.

References

IDENTITY-172

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed, highlighting breaking changes as necessary
  • I've prepared draft pull requests for clients and consumer packages to resolve any breaking changes

@fabiobozzo
Copy link
Contributor Author

@metamaskbot publish-preview

Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "0.4.0-preview-32f9004a",
  "@metamask-previews/accounts-controller": "31.0.0-preview-32f9004a",
  "@metamask-previews/address-book-controller": "6.1.1-preview-32f9004a",
  "@metamask-previews/announcement-controller": "7.0.3-preview-32f9004a",
  "@metamask-previews/app-metadata-controller": "1.0.0-preview-32f9004a",
  "@metamask-previews/approval-controller": "7.1.3-preview-32f9004a",
  "@metamask-previews/assets-controllers": "71.0.0-preview-32f9004a",
  "@metamask-previews/base-controller": "8.0.1-preview-32f9004a",
  "@metamask-previews/bridge-controller": "35.0.0-preview-32f9004a",
  "@metamask-previews/bridge-status-controller": "35.0.0-preview-32f9004a",
  "@metamask-previews/build-utils": "3.0.3-preview-32f9004a",
  "@metamask-previews/chain-agnostic-permission": "1.0.0-preview-32f9004a",
  "@metamask-previews/composable-controller": "11.0.0-preview-32f9004a",
  "@metamask-previews/controller-utils": "11.11.0-preview-32f9004a",
  "@metamask-previews/delegation-controller": "0.5.0-preview-32f9004a",
  "@metamask-previews/earn-controller": "3.0.0-preview-32f9004a",
  "@metamask-previews/eip1193-permission-middleware": "1.0.0-preview-32f9004a",
  "@metamask-previews/ens-controller": "17.0.1-preview-32f9004a",
  "@metamask-previews/error-reporting-service": "2.0.0-preview-32f9004a",
  "@metamask-previews/eth-json-rpc-provider": "4.1.8-preview-32f9004a",
  "@metamask-previews/foundryup": "1.0.0-preview-32f9004a",
  "@metamask-previews/gas-fee-controller": "24.0.0-preview-32f9004a",
  "@metamask-previews/json-rpc-engine": "10.0.3-preview-32f9004a",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.7-preview-32f9004a",
  "@metamask-previews/keyring-controller": "22.1.0-preview-32f9004a",
  "@metamask-previews/logging-controller": "6.0.4-preview-32f9004a",
  "@metamask-previews/message-manager": "12.0.2-preview-32f9004a",
  "@metamask-previews/multichain-api-middleware": "1.0.0-preview-32f9004a",
  "@metamask-previews/multichain-network-controller": "0.9.0-preview-32f9004a",
  "@metamask-previews/multichain-transactions-controller": "3.0.0-preview-32f9004a",
  "@metamask-previews/name-controller": "8.0.3-preview-32f9004a",
  "@metamask-previews/network-controller": "24.0.0-preview-32f9004a",
  "@metamask-previews/notification-services-controller": "14.0.0-preview-32f9004a",
  "@metamask-previews/permission-controller": "11.0.6-preview-32f9004a",
  "@metamask-previews/permission-log-controller": "3.0.3-preview-32f9004a",
  "@metamask-previews/phishing-controller": "13.0.0-preview-32f9004a",
  "@metamask-previews/polling-controller": "14.0.0-preview-32f9004a",
  "@metamask-previews/preferences-controller": "18.4.1-preview-32f9004a",
  "@metamask-previews/profile-sync-controller": "21.0.0-preview-32f9004a",
  "@metamask-previews/rate-limit-controller": "6.0.3-preview-32f9004a",
  "@metamask-previews/remote-feature-flag-controller": "1.6.0-preview-32f9004a",
  "@metamask-previews/sample-controllers": "1.0.0-preview-32f9004a",
  "@metamask-previews/seedless-onboarding-controller": "2.0.1-preview-32f9004a",
  "@metamask-previews/selected-network-controller": "23.0.0-preview-32f9004a",
  "@metamask-previews/signature-controller": "31.0.1-preview-32f9004a",
  "@metamask-previews/token-search-discovery-controller": "3.3.0-preview-32f9004a",
  "@metamask-previews/transaction-controller": "58.1.1-preview-32f9004a",
  "@metamask-previews/user-operation-controller": "37.0.0-preview-32f9004a"
}

Comment on lines +288 to +293
currentLocale: 'en',
theme: 'auto',
useBlockie: false,
currentCurrency: 'USD',
showNativeTokenAsMainBalance: false,
hideZeroBalanceTokens: false,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where are those default values coming from?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants