- Home
- Plugins
- UI Enhancements
- dsh-page-zoom
dsh-page-zoom
centaurea5547196/dsh-page-zoom
Page zoom for the DSH Web UI: Ctrl+mouse wheel scales the entire interface in 5% steps (30%-200%), remembers the zoom level locally, and shows a magnifier with the percentage in the bottom-right corner.
Install
dsh plugin --profile web add github:centaurea5547196/dsh-page-zoomREADME
dsh-page-zoom
Page zoom for DeepSeek Harness / DSH Desktop.
Hold Ctrl and scroll the mouse wheel to scale the entire interface — sidebar, menus, settings, overlays and conversation alike. A magnifier glyph with the current percentage sits in the bottom-right corner.
English | 简体中文
Controls
| Gesture | Result |
|---|---|
Ctrl + mouse wheel up | Zoom in one step |
Ctrl + mouse wheel down | Zoom out one step |
- Step: 5% per wheel notch
- Range: 30% – 200%
- The level is remembered (
localStorage), so it survives a reload.
There are no buttons, no menus and no keyboard shortcuts — the readout is display-only.
The readout
-
Bottom-right corner, 12px / 10px from the edges.
-
A magnifier glyph, then the number. A bare
100%in a corner means nothing on its own; the glyph is the convention browsers and phones already use for this exact reading. -
Display only:
pointer-events: none, so it never intercepts a click and never gets in the way of the UI underneath. -
No box, no border, no background — it borrows the app's own font stack (
--dsw-font-family) and its muted tertiary label colour (--dsw-alias-label-tertiary), so it reads as part of the chrome rather than as a floating widget. -
Scaled with the page, not against it. The readout grows and shrinks with everything else, and so does its gap from the corner, so it stays proportional to the app's own layout: 47×13 at 100%, 93×26 at 200%, 12×4 at 30%. Whatever it does not cover at 100%, it does not cover at 200% either.
This works without any arithmetic because a fixed box's visual offset is the declared value multiplied by its own
zoomand by every ancestorzoom. Keeping the element's zoom at 1 and the declared inset constant is therefore already linear in the page zoom. Multiplying the value by the level as well makes it quadratic — a declared 24px renders as 48px at 200%. -
role="img"with anaria-label, deliberately notrole="status".statusis a live region, so a screen reader would interrupt with "Page zoom 105%", "Page zoom 110%" on every wheel notch.
Install
dsh plugin --profile desktop add github:Centaurea5547196/dsh-page-zoom
dsh plugin --profile web add github:Centaurea5547196/dsh-page-zoom
If git is not available on the machine, install from the release tarball
instead — dsh accepts a remote archive spec:
dsh plugin --profile desktop add https://github.com/Centaurea5547196/dsh-page-zoom/archive/refs/heads/main.tar.gz
How it works
Zoom is the CSS zoom property set on the document element, not
transform: scale. zoom reflows layout exactly like the browser's own zoom, so
fixed-position chrome keeps working. transform would leave fixed elements
clipped and would additionally turn the root into a containing block for every
position: fixed descendant.
DeepSeek Harness ships no page zoom of its own: the only typography setting is
ui-theme.fontSize, which affects conversation body text only — sidebar labels,
menus and settings chrome are fixed pixel sizes. This plugin adds the missing
gesture.
The listener sits on window in the bubble phase with { passive: false },
and it yields to any surface that already claimed the event
(event.defaultPrevented). That ordering matters: the sidebar's document preview
binds its own cursor-anchored Ctrl+wheel zoom on its scrollport and calls
preventDefault(). A capture-phase listener on document would fire before that
handler ever ran, and stopPropagation() there would kill the preview's zoom
outright. Being last in line keeps the preview working while every other surface
still falls through to page zoom. It also overrides the browser's native zoom
when the Harness is opened in a plain browser tab.
The whole thing is plain DOM — no React surface, no host-side code, no network
access, no storage beyond one localStorage key.
License
MIT
Related plugins
dsh-web (dsh-task-board)
zhu1090093659/dsh-web
dsh-web (dsh-web-all)
zhu1090093659/dsh-web
dsh-web-ui (dsh-task-board)
zhu1090093659/dsh-web-ui
dsh-web-ui (dsh-web-ui-all)
zhu1090093659/dsh-web-ui