General discussion of themes, skins, and other customization.
Phabricator has very limited support for customizing themes / skins. Broadly, there are two separate technical approaches here, and our thinking differs on them:
- Custom Themes: One approach is to provide support for user-defined custom themes, where, e.g., users write CSS and have full control over how Phabricator looks.
- Prebuilt Themes / Non-CSS Customization: Another approach is for us to prebuild specific themes, which you can select in the UI. These would not be user-defined.
It is unlikely that we provide any support for writing custom CSS for a very long time, and may not ever formally support it. The major reason behind this is that Phabricator's UI changes very quickly. Here are some screenshots from about a little more than a year ago:
Although much of the basic layout hasn't changed, almost every UI element has. The changes beneath the skin (to the CSS and HTML) have usually been more dramatic than the surface-level changes, to support things like responsive design and UI standardization.
If we'd had theming support a year ago, everyone who had written custom CSS would have had their theme completely broken multiple times. If we provided support today, everyone's themes would almost certainly break a dozen times in the next year. There's no way we can avoid this while still moving the software forward as quickly as we do: providing custom CSS support basically makes all of our CSS and HTML a public-facing API, but an API which is highly unstable, has huge surface area, and is impossible to document or version effectively.
We can provide prebuilt themes, or let users customize the UI by setting options instead of writing arbitrary CSS, without creating these hazards. However:
- Many requests for theming support are motivated by wanting custom themes ("I want Phabricator to look like my company's other tools"), which is especially not well supported by pre-built themes.
- The primary use case for pre-built themes that we've received requests for is differentiating between multiple installs (e.g., production and development), not changing aesthetics.
Overall, the value of prebuilt themes is unclear. They also create some ongoing costs: if an element supports themes and needs to be updated, every theme needs to be updated too, or at least tested. This adds another variable to the test matrix for UI elements (which are already variant across browsers, and across devices).
The Way Forward
We are unlikely to provide custom themes any time soon (e.g., very unlikely in 2014, still quite unlikely in 2015). If you want fully custom themes, your best bet is to maintain local patches on top of Phabricator which change the CSS. This will be a hassle (if they're extensive, your themes will break, frequently), but whatever pain you encounter is a million times less than the pain we're avoiding by not supporting these, and we can use that time and effort to build applications and features instead. Some installs, like Blender, maintain local patches today and seem successful. Many other tools in this space, like Atlassian's suite and GitHub Enterprise, do not appear to offer significant support for fully custom theme development. Presumably, they've arrived at the same conclusions we have about the cost/value tradeoff of supporting this.
We provide limited support for prebuilt themes and other option-based customization, starting with custom header colors in D7731. We may expand this over time, but are more likely to provide minor options (e.g., changing or adding a custom brand logo) than more extensive changes (e.g., "wood theme" to make everything look like it's made out of wood).