Introduction

The philosophy of DSH is “everything is a plugin”. If you use dsh web and want your deployed service to display your own brand identity, a common hassle is manually preparing favicon, sidebar logo, collapsed sidebar icons, and other multi-size images, then handling restarts, caching, and frontend resource replacement.

Below introduces dawsondx/dsh-custom-logo. This plugin’s approach is to directly upload two images: one square and one wide, automatically handling and replacing DSH’s favicon and sidebar logo, without manually preparing any sized slices.

What is this

dsh-custom-logo is a DSH web plugin, maintained by dawsondx, and licensed under MIT. The package.json version in current documentation is 1.0.2, and the plugin has no third-party dependencies.

After installation, an extra “Brand Settings” section will appear in the dsh settings modal, alongside “General / Models / Plugins”. You only need to select images in this section, and the plugin will complete the brand replacement.

Core Features

The two images correspond to three brand locations:

  • Browser tab: The square image is centered and cropped into a favicon, with the bookmark icon updated synchronously.
  • Expanded sidebar: The wide image is scaled proportionally, replacing the native text label with a height of 42px.
  • Collapsed narrow bar: The square image is scaled down to a 36px circular icon.

Image processing is all done on the browser side. After upload, the page refreshes automatically to take effect; no need to restart the service or manually prepare slices of different sizes.

The server will write the images into the branding directory under the dsh user directory:

<DSH_HOME>/branding/

The specific files are:

logo-128.png
logo-64.png
logo-wide.png

The write operation uses an atomic disk write method. Every time an index request is made, the plugin dynamically injects the favicon and custom CSS Logo, and adds to the resource URL:

?v=<mtime>

to bust cache automatically.

Brand images are saved in the dsh user directory, not inside the plugin package. Therefore, plugin upgrades won’t lose brand images; dsh upgrades won’t overwrite this plugin. The plugin is mounted via the user profile’s patch layer, and the CSS anchor uses stable properties.

The settings panel supports both Chinese and English, following the dsh interface language. The current images on the two cards will be previewed as thumbnails.

Installation and Enablement

The recommended installation command marked in the README is:

dsh plugin --profile web add dsh-custom-logo

After installation, restart dsh:

dsh start --profile web

If you have your own startup script, you can also use it.

After starting, open the dsh settings modal, select “Brand Settings” in the left navigation, and you can start uploading brand images.

Typical Usage

First, prepare two PNG images: one square image for the favicon, and one wide image for the expanded sidebar.

  1. Open the settings modal and select “Brand Settings” in the left navigation.
  2. Select the square PNG image in the “Web Icon” card; the plugin will automatically process and refresh.
  3. Select the wide PNG image in the “Sidebar Logo” card; the plugin will automatically process and refresh.
  4. Re-upload anytime if unsatisfied; click “Restore Default” to return to the dsh default branding.

If there is no change on the page after upload, perform a hard refresh first:

Ctrl+Shift+R

A wide image is suggested to have a ratio close to 3:1, for example:

126×42
540×180

Wider images will be narrowed proportionally by height without distortion. The collapsed narrow bar will display a 36px circular icon; it is recommended that the main graphic does not touch the edge too closely.

Use Cases and Notes

This plugin is suitable for developers using dsh web who want to replace the default DeepSeek Harness branding with their own identity. Since the plugin runs with the current dsh process permissions, you should check the source code, license, and dependencies before installing. The plugin is licensed under MIT, with zero third-party dependencies mentioned in the documentation.

Security aspects to note:

  • The upload/reset interface only accepts loopback sources and validates the peer socket address, rather than the forgeable Host header.
  • Only accepts PNG and validates file magic numbers.
  • Maximum single upload is 8MB.
  • Uses a filename whitelist and does not accept arbitrary path writes.

The uninstall command is:

dsh plugin --profile web remove dsh-custom-logo

Then delete the brand image files in the user directory:

~/.dsh/branding/logo-*.png

to revert.

Conclusion

The value of dsh-custom-logo is quite direct: no need to modify frontend resources or manually slice images, just use two PNG images to replace the dsh web favicon and sidebar branding with your own identity, and complete upload, reset, and restore defaults through the dsh settings modal.

  • GitHub: https://github.com/dawsondx/dsh-custom-logo.git
  • Community Directory: Search for plugin name dsh-custom-logo (directory page URL not provided in this article’s info)