Files
backstage/docs/getting-started/app-custom-theme.md
T
Remi Kristelijn 36e233cb02 fix: missing code
Signed-off-by: Remi Kristelijn <remi.kristelijn@theapsgroup.com>
2021-04-09 09:11:50 +02:00

4.0 KiB

id, title, description
id title description
app-custom-theme Customize the look-and-feel of your App Documentation on Customizing look and feel of the App

Backstage ships with a default theme with a light and dark mode variant. The themes are provided as a part of the @backstage/theme package, which also includes utilities for customizing the default theme, or creating completely new themes.

Creating a Custom Theme

The easiest way to create a new theme is to use the createTheme function exported by the @backstage/theme package. You can use it to override so basic parameters of the default theme such as the color palette and font.

For example, you can create a new theme based on the default light theme like this:

import { createTheme, lightTheme } from '@backstage/theme';

const myTheme = createTheme({
  palette: lightTheme.palette,
  fontFamily: 'Comic Sans MS',
  defaultPageTheme: 'home',
});

If you want more control over the theme, and for example customize font sizes and margins, you can use the lower-level createThemeOverrides function exported by @backstage/theme in combination with createMuiTheme from @material-ui/core. See the @backstage/theme source and the implementation of the createTheme function for how this is done.

You can also create a theme from scratch that matches the BackstageTheme type exported by @backstage/theme. See the material-ui docs on theming for more information about how that can be done.

Using your Custom Theme

To add a custom theme to your Backstage app, you pass it as configuration to createApp.

For example, adding the theme that we created in the previous section can be done like this:

import { createApp } from '@backstage/core';

const app = createApp({
  apis: ...,
  plugins: ...,
  themes: [{
    id: 'my-theme',
    title: 'My Custom Theme',
    variant: 'light',
    theme: myTheme,
  }]
})

Note that your list of custom themes overrides the default themes. If you still want to use the default themes, they are exported as lightTheme and darkTheme from @backstage/theme.

Example of a custom theme

const themeOptions = createThemeOptions({
  palette: {
    ...lightTheme.palette,
    primary: {
      main: '#123456',
    },
    secondary: {
      main: '#123456',
    },
    error: {
      main: '#123456'
    },
    warning: {
      main: '#123456',
    },
    info: {
      main: '#123456',
    },
    success: {
      main: '#123456',
    },
    background: {
      default: '#123456',
      paper: '#123456',
    },
    banner: {
      info: '#123456',
      error: '#123456'
      text: '#123456'
      link: '#123456',
    },
    errorBackground: '#123456'
    warningBackground: '#123456'
    infoBackground: '#123456'
    navigation: {
      background: '#123456',
      indicator: '#123456'
      color: '#123456'
      selectedColor: '#123456',
    },
  },
  defaultPageTheme: 'home',
  fontFamily: 'Comic Sans',
  /* below drives the header colors */
  pageTheme: {
    home: genPageTheme(['#123456','#123456'], shapes.wave),
    documentation: genPageTheme(['#123456','#123456'], shapes.wave2),
    tool: genPageTheme(['#123456','#123456'], shapes.round),
    service: genPageTheme(['#123456','#123456'], shapes.wave),
    website: genPageTheme(['#123456','#123456'], shapes.wave),
    library: genPageTheme(['#123456','#123456'] shapes.wave),
    other: genPageTheme(['#123456','#123456'], shapes.wave),
    app: genPageTheme(['#123456','#123456'], shapes.wave),
    apis: genPageTheme(['#123456','#123456'], shapes.wave),
  },
});