As themes become more ambitious, we’ve been looking for ways to allow them to manipulate core server-side behavior. While they will never be given the same level as control as plugins, we can provide some predefined hooks for themes to manipulate.
Introducing: theme modifiers ![]()
They are specified using the modifiers key in your theme’s about.json file.
For a 100% up-to-date list of modifiers, check the database schema at the bottom of theme_modifier_set.rb, but here’s a quick summary of what we have so far:
-
serialize_topic_excerptsboolean (default false) - always include excerpts when serializing topic lists -
csp_extensionsstring array - add directives to the CSP. Works the same as the old “extend_content_security_policy” theme-setting method. But remember, simple\u003cscript src=\"\"\u003etags are allowed automatically. -
svg_iconsstring array - a list of icons which should be included in the icon subset -
topic thumbnailsarray of dimensions - request additional resolutions in the topic thumbnail set. Note that they are generated asynchronously, so you must fall-back to the original image if your requested size is not provided. More information available in the commit message -
serialize_post_user_badgesstring array - a list of badge names (matching entries in the badges table) to serialize alongside post data. When configured, the system includes the specified user badges with each post for client-side rendering.
One theme making heavy use of these new hooks is Topic List Thumbnails - check out the code to see how it works.
Setting-dependent modifiers
Theme modifiers can also be configured to pull their value from a theme setting, allowing site operators to override modifier behavior without editing the theme’s code. To make a modifier depend on a setting, use this syntax in your about.json:
{
"modifiers": {
"modifier_name": {
"type": "setting",
"value": "setting_name"
}
}
}
For example, if you have a theme setting called show_excerpts and want it to control the serialize_topic_excerpts modifier:
In settings.yml:
show_excerpts:
default: false
In about.json:
{
"modifiers": {
"serialize_topic_excerpts": {
"type": "setting",
"value": "show_excerpts"
}
}
}
When the show_excerpts setting is changed, the modifier value will automatically update to match. This provides flexibility for site operators to customize theme behavior through the admin UI.
\u003csmall\u003eThis document is version controlled - suggest changes on github.\u003c/small\u003e

