--- id: plugin-theme title: 'Theme Plugin' --- ## What's a theme plugin? {#whats-a-theme-plugin} Verdaccio uses by default a [custom UI](https://www.npmjs.com/package/@verdaccio/ui-theme) that provides a good set of feature to visualize the packages, but might be case your team needs some custom extra features and here is where a custom theme is an option. The plugin store static assets that will be loaded in the client side when the page is being rendered. ### How a theme plugin load phase works? ```mermaid stateDiagram-v2 state if_loads <> state if_load_fails <> start : Verdaccio start Yes: Loading custom plugin No: Custom plugin not found Yes_loads: Plugin loads successfully No_loads: Plugin fails on load load_default: Load default theme (@verdaccio/theme-ui) Crash: Verdaccio stops [*] --> start start --> if_loads if_loads --> No: false if_loads --> Yes : true Yes --> if_load_fails No --> load_default if_load_fails --> No_loads: false if_load_fails --> Yes_loads : true No_loads --> Crash ``` ### How the assets of the theme loads? {#loads} :::caution By default the application loads on `http://localhost:4873`, but in cases where a resverse proxy with custom domain are involved the assets are loaded based on the property `__VERDACCIO_BASENAME_UI_OPTIONS.base` and `__VERDACCIO_BASENAME_UI_OPTIONS.basename`, thus only one domain configuration can be used. :::caution The theme loads only in the client side, the application renders HTML with `