System Settings
Last updated Oct 20th, 2026 | Page history | Improve this page | Report an issue
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$186 per month—let's make that $500!
Learn moreSystem settings are site-wide configuration values. Edit them in System → System Settings. In templates, read a setting as [[++key]]; in PHP, use $modx->getOption('key').
Overriding Settings (Inheritance)¶
A setting can be overridden at four levels. For a signed-in user, MODX checks them in this order:
- User setting
- User group setting
- Context setting (in the manager, usually
mgr) - System setting
Creating a System Setting in the Manager¶
Open System → System Settings and click Create.

Parameters¶
| Field | Purpose |
|---|---|
| Key | Unique name used in [[++key]] and getOption(). |
| Name | Label in the settings grid; can be localized. |
| Field Type | xtype used to render the field; see Types of System Settings. |
| Namespace | Folder inside core/components/, as with Custom Manager Pages. |
| Area Lexicon Entry | Groups settings that share the same value. |
| Value | Default value. |
| Description | Help text; can be localized. |
Localization¶
The Name and Description come from lexicon entries:
- Name:
setting_+ key - Description:
setting_+ key +_desc
For a package, these entries live in core/components/<namespace>/lexicon/<language>/default.inc.php:
$_lang['setting_quip.emailsFrom'] = 'From Email';
$_lang['setting_quip.emailsFrom_desc'] = 'The email address to send system emails from.';
Reading a Setting in Code¶
Pass the setting key to getOption():
$siteStartId = $modx->getOption('site_start');
getOption() reads the settings cache, not the database.
Saving a Setting in Code¶
A value from getOption() is cached and read-only. To change a setting, load its modSystemSetting object, update and save it, then clear the cache.
Update the object¶
use MODX\Revolution\modSystemSetting;
$setting = $modx->getObject(modSystemSetting::class, 'site_name');
if ($setting) {
$setting->set('value', 'My New Site Name');
$setting->save();
}
Clear the cache¶
Saving does not refresh the settings cache. Clear system_settings; add resource if the value is used on the front end:
$modx->cacheManager->refresh([
'system_settings' => [],
'resource' => [],
]);
Read setting metadata¶
use MODX\Revolution\modSystemSetting;
$setting = $modx->getObject(modSystemSetting::class, 'site_name');
print_r($setting->toArray());
Listing Related Settings¶
Group settings by area or by key prefix.
By area¶
use MODX\Revolution\modSystemSetting;
$relatedSettings = $modx->getCollection(modSystemSetting::class, ['area' => 'mail']);
foreach ($relatedSettings as $setting) {
print $setting->get('value');
}
By key prefix¶
use MODX\Revolution\modSystemSetting;
$query = $modx->newQuery(modSystemSetting::class);
$query->where(['key:LIKE' => 'quip.%']);
$relatedSettings = $modx->getCollection(modSystemSetting::class, $query);
foreach ($relatedSettings as $setting) {
print $setting->get('value');
}
Creating a Setting in Code¶
use MODX\Revolution\modSystemSetting;
$setting = $modx->newObject(modSystemSetting::class);
$setting->set('key', 'mykey');
$setting->set('value', 'my_value');
$setting->set('xtype', 'textfield');
$setting->set('namespace', 'my_namespace');
$setting->set('area', 'MyArea');
$setting->save();
$modx->cacheManager->refresh(['system_settings' => []]);
Add matching lexicon entries so the setting gets a label and description:
$_lang['setting_mykey'] = 'Name of My Setting';
$_lang['setting_mykey_desc'] = 'Description of my key';
To print a setting label in a template or a Custom Manager Page, call the lexicon tag with the setting topic:
[[!%setting_emailsender? &topic=`setting` &namespace=`core` &language=`en`]]
Types of System Settings¶
The xtype attribute sets the field used in the manager:
| xtype | Field |
|---|---|
combo-boolean |
Yes/No; stores 1 or 0 |
textfield |
Single-line text |
textarea |
Multi-line text |
text-password |
Masked text |
numberfield |
Number |
modx-combo-language |
Language picker |
modx-combo-source |
Media Source picker |
modx-combo-template |
Template picker |
modx-combo-content-type |
Content type picker |
modx-combo-charset |
Character set picker |
modx-combo-rte |
Rich-text editor picker |
modx-combo-context |
Context picker |
modx-combo-namespace |
Namespace picker |
modx-combo-manager-theme |
Manager theme picker |
Settings List¶
- access_category_enabled
- access_context_enabled
- access_resource_group_enabled
- allow_duplicate_alias
- allow_forward_across_contexts
- allow_manager_login_forgot_password
- allow_multiple_emails
- allow_tags_in_post
- allow_tv_eval
- anonymous_sessions
- archive_with
- automatic_alias
- automatic_template_assignment
- auto_check_pkg_updates
- auto_check_pkg_updates_cache_expire
- auto_isfolder
- auto_menuindex
- base_help_url
- blocked_minutes
- cache_action_map
- cache_alias_map
- cache_context_settings
- cache_db
- cache_db_expires
- cache_db_session
- cache_db_session_lifetime
- cache_default
- cache_disabled
- cache_format
- cache_handler
- cache_json
- cache_json_expires
- cache_lang_js
- cache_lexicon_topics
- cache_noncore_lexicon_topics
- cache_resource
- cache_resource_clear_partial
- cache_resource_expires
- cache_scripts
- cache_system_settings
- clear_cache_refresh_trees
- compress_css
- compress_js
- compress_js_groups
- compress_js_max_files
- concat_js
- confirm_navigation
- container_suffix
- context_tree_sortby
- context_tree_sortdir
- context_tree_sort
- cultureKey
- custom_resource_classes
- date_timezone
- debug
- default_content_type
- default_context
- default_duplicate_publish_option
- default_media_source
- default_media_source_type
- default_per_page
- default_template
- default_username
- editor_css_path
- editor_css_selectors
- emailsender
- emailsubject
- enable_dragdrop
- enable_gravatar
- enable_template_picker_in_tree
- error_log_filename
- error_log_filepath
- error_page
- extension_packages
- failed_login_attempts
- feed_modx_news
- feed_modx_news_enabled
- feed_modx_security
- feed_modx_security_enabled
- fe_editor_lang
- filemanager_path
- filemanager_path_relative
- filemanager_url
- filemanager_url_relative
- forgot_login_email
- form_customization_use_all_groups
- forward_merge_excludes
- friendly_alias_lowercase_only
- friendly_alias_max_length
- friendly_alias_realtime
- friendly_alias_restrict_chars
- friendly_alias_restrict_chars_pattern
- friendly_alias_strip_element_tags
- friendly_alias_translit
- friendly_alias_translit_class
- friendly_alias_translit_class_path
- friendly_alias_trim_chars
- friendly_alias_word_delimiters
- friendly_alias_word_delimiter
- friendly_url_prefix
- friendly_url_suffix
- friendly_urls
- friendly_urls_strict
- global_duplicate_uri_check
- hidemenu_default
- inherit_parent_template
- inline_help
- link_tag_scheme
- locale
- lock_ttl
- log_deprecated
- log_level
- log_snippet_not_found
- log_target
- login_background_image
- login_help_button
- login_logo
- mail_charset
- mail_dkim_domain
- mail_dkim_identity
- mail_dkim_passphrase
- mail_dkim_privatekeyfile
- mail_dkim_privatekeystring
- mail_dkim_selector
- mail_encoding
- mail_smtp_auth
- mail_smtp_autotls
- mail_smtp_helo
- mail_smtp_hosts
- mail_smtp_keepalive
- mail_smtp_pass
- mail_smtp_port
- mail_smtp_secure
- mail_smtp_single_to
- mail_smtp_timeout
- mail_smtp_user
- mail_use_smtp
- main_nav_parent
- manager_date_format
- manager_datetime_empty_value
- manager_datetime_separator
- manager_direction
- manager_favicon_url
- manager_html5_cache
- manager_js_cache_file_locking
- manager_js_cache_max_age
- manager_js_document_root
- manager_js_zlib_output_compression
- manager_language
- manager_lang_attribute
- manager_login_url_alternate
- manager_logo
- manager_theme
- manager_time_format
- manager_tooltip_delay
- manager_tooltip_enable
- manager_use_fullname
- manager_week_start
- mgr_source_icon
- mgr_tree_icon_context
- modx_browser_default_sort
- modx_browser_default_viewmode
- modx_browser_tree_hide_files
- modx_browser_tree_hide_tooltips
- modx_charset
- new_file_permissions
- new_folder_permissions
- package_installer_at_top
- parser_recurse_uncacheable
- password_generated_length
- password_min_length
- passwordless_activated
- passwordless_expiration
- photo_profile_source
- phpthumb_allow_src_above_docroot
- phpthumb_cache_maxage
- phpthumb_cache_maxfiles
- phpthumb_cache_maxsize
- phpthumb_cache_source_enabled
- phpthumb_document_root
- phpthumb_error_bgcolor
- phpthumb_error_fontsize
- phpthumb_error_textcolor
- phpthumb_far
- phpthumb_imagemagick_path
- phpthumb_nohotlink_enabled
- phpthumb_nohotlink_erase_image
- phpthumb_nohotlink_text_message
- phpthumb_nohotlink_valid_domains
- phpthumb_nooffsitelink_enabled
- phpthumb_nooffsitelink_erase_image
- phpthumb_nooffsitelink_require_refer
- phpthumb_nooffsitelink_text_message
- phpthumb_nooffsitelink_valid_domains
- phpthumb_nooffsitelink_watermark_src
- phpthumb_zoomcrop
- preserve_menuindex
- principal_targets
- proxy_auth_type
- proxy_host
- proxy_password
- proxy_port
- proxy_username
- publish_default
- quick_search_in_content
- quick_search_result_max
- rb_base_dir
- rb_base_url
- request_controller
- request_method_strict
- request_param_alias
- request_param_id
- resource_static_allow_absolute
- resource_static_path
- resource_tree_node_name
- resource_tree_node_name_fallback
- resource_tree_node_tooltip
- richtext_default
- search_default
- send_poweredby_header
- server_offset_time
- server_protocol
- session_cookie_domain
- session_cookie_httponly
- session_cookie_lifetime
- session_cookie_path
- session_cookie_samesite
- session_cookie_secure
- session_enabled
- session_gc_maxlifetime
- session_handler_class
- session_name
- set_header
- settings_version
- show_tv_categories_header
- signupemail_message
- site_name
- site_start
- site_status
- site_unavailable_message
- site_unavailable_page
- static_elements_automate_chunks
- static_elements_automate_plugins
- static_elements_automate_snippets
- static_elements_automate_templates
- static_elements_automate_tvs
- static_elements_basepath
- static_elements_default_category
- static_elements_default_mediasource
- static_elements_html_extension
- strip_image_paths
- symlink_merge_fields
- syncsite_default
- topmenu_show_descriptions
- tree_default_sort
- tree_root_id
- tvs_below_content
- udperms_allowroot
- ui_debug_mode
- unauthorized_page
- upload_files
- upload_file_exists
- upload_maxsize
- upload_translit
- upload_translit_restrict_chars_pattern
- user_nav_parent
- use_alias_path
- use_browser
- use_context_resource_table
- use_editor
- use_frozen_parent_uris
- use_multibyte
- use_weblink_target
- webpwdreminder_message
- welcome_action
- welcome_namespace
- welcome_screen
- welcome_screen_url
- which_editor
- which_element_editor
- xhtml_urls
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$186 per month—let's make that $500!
Learn more










