For the complete documentation index, see llms.txt. This page is also available as Markdown.

Custom Theme

Customize UI widgets. You can change the colors, the typography, and much more.

Basic usage

To customize the UI widgets, you need to specify a theme JSON object either in the Appmixer constructor:

const appmixer = new Appmixer({
    theme: {
        variables: {
            font: {
                family: "sans-serif"
            },
            colors: {
                neutral: "orange"
            }
        }
    }
});

and/or use the option with individual widgets:

const flowManager = appmixer.ui.FlowManager({
    el: "#my-flow-manager",
    theme: {
        variables: {
            colors: {
                neutral: "purple"
            }
        }
    }
});

Usage with multiple themes

If you wish to switch between themes, use the set("theme") method, this will automatically re-render the UI applying your new theme:

Variables

The easiest way to change the overall styling is to use the theme variables. The following example shows a complete list of variables that you can set in your theme to match your product branding:

Shapes

Shapes of connectors in diagrams are customizable by choosing a preset in your theme.

Change the values of the entries to switch between presets. Here are built-ins per shape type:

The -vertical presets select the top-to-bottom layout, which keeps the Designer on the previous diagram — the new diagram supports left-to-right layouts only. See Designer → Diagram.

action

action-vertical

action-dark

action-vertical-dark

trigger

trigger-vertical

trigger-dark

trigger-vertical-dark

selection

selection-vertical

selection-dark

selection-vertical-dark

action/trigger

action-vertical/trigger-vertical

action-dark/trigger-dark

Special version of actions and triggers that works better on dark backgrounds.

action-vertical-dark/trigger-vertical-dark

Special version of vertical actions and triggers that works better on dark backgrounds.

Advanced UI Styling

The theme JSON object references the entire Appmixer SDK UI in a complex tree of selectors. Elements use a hash symbol (#) prefix and dynamic states use the at sign (@). Each branch in the tree may hold nested selectors and any valid CSS properties for the element. The selectors are available for advanced customizations, but the structure may change between the Appmixer versions.

While the advanced theme styling gives you the most flexibility in customizing Appmixer UIs, we cannot guarantee that in some cases, the structure and nesting of the selectors might change between Appmixer versions. It is therefore recommended to use theme.variables instead.

Colors

The numbers in the names of colors refer to a foreground opacity of the color over the base background color:

  • neutral96 is a foreground color with 96% opacity over the background neutral00.

  • Some colors need a negative color NG on top. For example, a white text on a blue button.

Font

The numbers in size of the font refer to the defaults in pixels: size13 variable default is 13px.

Scrollbars

Appmixer widgets render thin, theme-coloured scrollbars instead of the browser's native ones. The difference is most visible on Windows, where native scrollbars are wide and grey. The thumb colour comes from the theme's scrollbarColor property and defaults to neutral32 over a transparent track — it is derived from the palette, so a custom theme adapts automatically.

Because scrollbar-color is an inherited CSS property, it is set on the root that anchors each part of the UI. There are three such roots, and a theme that overrides only some of them leaves the rest unthemed:

Theme path
Applies to

ui.mixins['#container'].scrollbarColor

Scrollable areas inside a normal widget.

ui.mixins['#widgetModal'].scrollbarColor

Widgets rendered inside a modal, which have no #container ancestor.

ui['#scrollbars'].scrollbarColor

Overlays teleported to document.body — modals, popovers, the Automation Hub dialog, the flow logs popover and the field editor overlay.

The third one is a top-level scope, not a mixin: teleported overlays render outside the widget subtree, so neither mixin can reach them.

The colour can also be set per widget, for example under '#Designer'. Setting scrollbarColor: 'auto' restores the browser's native thumb colour, and the native width can be restored from the host page:

Complete Theme Object

For reference, we prepared a dark theme for all the Appmixer UI widgets that you can use as a quick overview of all the UI elements that you can set your custom theme for:

Screenshots of the dark theme for some of the UI widgets:

FlowManager Dark Theme
Designer Dark Theme
Insights Logs Dark Theme

Last updated

Was this helpful?