[[_migrate_themes]] == Theme migration If you have created any custom themes they must be migrated to the new server. Any changes to the built-in themes might need to be reflected in your custom themes, depending on which aspects you have customized. You must copy your custom themes from the old server `themes` directory to the new server `themes` directory. After that you need to review the changes below and consider if the changes need to be applied to your custom theme. In summary: * If you have customized any of the changed templates listed below you need to compare the template from the base theme to see if there are changes you need to apply. * If you have customized any of the styles and are extending the {project_name} themes you need to review the changes to the styles. If you are extending the base theme you can skip this step. * If you have customized messages you might need to change the key or value or to add additional messages. ifeval::[{project_product}==true] Each step is described in more detail below the list of changes. include::rhsso/migrate_themes-changes-73.adoc[leveloffset=0] include::rhsso/migrate_themes-changes-72.adoc[leveloffset=0] include::rhsso/migrate_themes-changes-71.adoc[leveloffset=0] endif::[] === Migrating templates If you have customized any of the templates you need to carefully review the changes that have been made to the templates to decide if you need to apply these changes to your customized templates. Most likely you will need to apply the same changes to your customized templates. If you have not customized any of the listed templates you can skip this section. A best practice is to use a diff tool to compare the templates to see what changes you might need to make to your customized template. If you have only made minor changes it is simpler to compare the updated template to your customized template. However, if you have made many changes it might be easier to compare the new template to your customized old template, as this will show you what changes you need to make. The following screenshot compares the info.ftl template from the Login theme and an example custom theme: .Comparison of the updated version of a Login theme template with an example custom Login theme template image:images/theme-migration-meld-info-1.png[] From this comparison it is easy to identify that the first change (`Hello world!!`) was a customization, while the second change (`if pageRedirectUri`) is a change to the base theme. By copying the second change to your custom template, you have successfully updated your customized template. For the alternative approach the following screenshot compares the info.ftl template from the old installation with the updated info.ftl template from the new installation: .Comparison of the Login theme template from the old installation with the updated version of the Login theme template image:images/theme-migration-meld-info-2.png[] From this comparison it is easy to identify what has been changed in the base template. You will then manually have to make the same changes to your modified template. Since this approach is not as simple as the first approach, only use this approach if the first one is not feasible. === Migrating messages If you have added support for another language, you need to apply all the changes listed above. If you have not added support for another language, you might not need to change anything; you only have to make changes if you have changed an affected message in your theme. For added values, review the value of the message in the base theme to determine if you need to customize that message. For renamed keys, rename the key in your custom theme. For changed values, check the value in the base theme to determine if you need to make changes to your custom theme. === Migrating styles If you are inheriting styles from the keycloak or rh-sso themes you might need to update your custom styles to reflect changes made to the styles from the built-in themes. A best practice is to use a diff tool to compare the changes to stylesheets between the old server installation and the new server installation. For example, using the diff command: [source,bash,subs=+attributes] ---- $ diff {project_dirref}_OLD/themes/keycloak/login/resources/css/login.css \ {project_dirref}_NEW/themes/keycloak/login/resources/css/login.css ---- Review the changes and determine if they affect your custom styling.