A configurable theme is a theme where only a subset of the files - the configuration file(s) - can be edited after copying the configurable theme.An example of a configurable theme is the The Help Center Theme, where after copying it, a user can only edit the theme-setting.properties file and add new files.

Creating a Configurable Theme

Only plugin themes can be used as configurable themes. A plugin theme can be created, for example, by downloading an existing theme as a plugin jar.

In the atlassian-plugin.xml file of the plugin theme the actual theme is defined in the scroll-viewport-theme tag:

<scroll-viewport-theme key="my-configurable-theme" name="My Configurable Theme">
	<resource name="css/app.css"    location="css/app.css"/>
	<resource name="js/app.js"		location="js/app.js"/>
	<resource name="config.txt"		location="config.txt"/>
</scroll-viewport-theme>
XML

In this example we have a theme with three files.


To make the theme configurable, a param tag with the name "configurable" and value "true" needs to be added somewhere in the scroll-viewport-theme tag like this:

<scroll-viewport-theme key="my-configurable-theme" name="My Configurable Theme">

	<param name="configurable">true</param>

	<resource name="css/app.css"    location="css/app.css"/>
	<resource name="js/app.js"		location="js/app.js"/>
	<resource name="config.txt"		location="config.txt"/>
</scroll-viewport-theme>
XML


Next, the configuration file(s) need to be marked as such by adding a config param to the file(s) like this:

<scroll-viewport-theme key="my-configurable-theme" name="My Configurable Theme">

	<param name="configurable">true</param>
	
	<resource name="css/app.css"    location="css/app.css"/>
	<resource name="js/app.js"		location="js/app.js"/>
	<resource name="config.txt"		location="config.txt">
		<param name="config">true</param>
	</resource>
</scroll-viewport-theme>
XML

When the plugin theme is copied, only the file config.txt can be edited in the editor.

Fallback to Original Files

When copying a configurable theme, only the configuration files are actually copied. For all other files, the copy of the theme falls back to the configurable plugin theme.

This means that if a non-configuration file in the original theme is changed, all copies of that theme automatically use that updated file.