Mister Download Manager
  1. Home
  2. Themes

The same window, your way

View → Theme changes how MDM looks at once and keeps everything where it was. Pick one of the built-in looks, each with a light and a dark side, or make your own in a text file.

9 built-in themes · light and dark

Make your own theme

A theme is one small text file, in TOML (or JSON). It names only what it changes; everything else comes from the theme it builds on. You don't need to build MDM or know how to program.

  1. Make it

    Start with a few colours, then add more as you go:

    name = "Harbour"
    inherits = "classic"
    icons = "color"
    
    [seeds.light]
    background = "#eef3f6"
    surface = "#ffffff"
    text = "#11202b"
    accent = "#0f6c8c"
    
    [seeds.dark]
    background = "#14212a"
    surface = "#0e171d"
    text = "#e8f0f4"
    accent = "#5cc3e6"
    
    [sizes]
    radius = 6
    
    [controls]
    focus = "ring"
    • inherits is the theme yours starts from: classic (the default), high-contrast, metro, adwaita, breeze, luna, aero, aqua, or another theme file in the same folder.
    • [seeds] are a handful of colours (background, surface, header, text, accent, selection, error, warning, success) that MDM spreads over every control. [seeds.light] and [seeds.dark] give each side its own.
    • [colors] sets single colour roles on both sides, [light] and [dark] on one side only: #rrggbb, or #rrggbbaa with transparency.
    • [sizes] are corner radii, border widths, font sizes and row heights, in pixels. [controls] chooses the shape of text boxes, check boxes, buttons, progress bars, scroll bars, the focus mark and the title bar.
    • icons is color, mono or accent. A theme in a folder of its own (my-theme/theme.toml) can bring its icons in icons/16 and icons/24, each named for what it shows (tb-add-url.svg, cat-music.png); -symbolic ones take the theme's text colour.
    • contrast = "high" strengthens every edge and text colour on top.

    A key MDM doesn't know, or a value it can't read, is skipped and written to MDM's log (the logs folder beside the themes folder), so a file made for a newer MDM still loads. The built-in themes are written the same way: read them on GitHub.

    Every colour role (156)
    KeyWhat it colours
    windowWindows' and dialogs' background
    textText and glyphs
    text.disabledDisabled text, the one grey of every greyed control and label
    text.mutedSecondary text: notes, sizes, versions
    linkText that opens something
    errorError text
    error.strongA failed check's message in Options (connection, browser and helper tests)
    warningWarning text
    successSuccess text (a matching checksum)
    reach.nearA download's server near by its round trip (under 60 ms), in Properties
    reach.mediumA server at a medium round trip (60 to 150 ms)
    reach.farA server far by its round trip (over 150 ms)
    flag.edgeThe thin edge around a country's flag
    accentThe accent: focus lines, open and default controls, filters, links' focus
    focus.ringThe dotted keyboard focus rectangle
    selectionA selection's fill: rows, a chosen day, selected text
    selection.textText on the selection
    selection.mutedSecondary text on the selection
    selection.inactiveA selected row in a list without the focus
    selection.focusThe focused row's dotted outline on a selected row
    group.lineA group box's frame
    etch.shadowAn etched separator's shadow line
    etch.lightAn etched separator's highlight line
    tab.pageA tab page's body
    tabAn unselected tab, and the page's shadow
    tab.hotA tab under the pointer
    chevronA drop-down's or spin box's arrow
    chevron.disabledA greyed arrow
    subtle.hotA part with no face of its own (an arrow, a column header) under the pointer
    subtle.pressedSuch a part pressed or open
    highlight.hotA calendar's day or arrow under the pointer, a drop target
    highlight.pressedA calendar's day or arrow pressed
    fieldA text box's or a list's inside
    field.borderA text box's border
    field.bottomA text box's bottom line while it can be typed in
    field.disabledA greyed text box's inside
    field.disabled.borderA greyed text box's border
    field.readonlyA read-only text box's inside
    field.readonly.borderA read-only text box's border
    combo.chevronA drop-down's chevron
    combo.arrow.hotAn editable drop-down's arrow zone under the pointer
    combo.arrow.pressedAn editable drop-down's arrow zone pressed or open
    buttonA button's face
    button.hotA button's face under the pointer
    button.pressedA button's face pressed
    button.borderA button's border
    button.bottomA button's bottom edge
    button.textA button's text
    button.text.pressedA button's text pressed
    button.default.borderThe default button's border
    button.default.bottomThe default button's bottom edge
    button.disabledA greyed button's face
    button.disabled.borderA greyed button's border
    button.accentAn accent button's face
    button.accent.hotAn accent button's face under the pointer
    button.accent.pressedAn accent button's face pressed
    button.accent.bottomAn accent button's bottom edge
    button.accent.textAn accent button's text
    button.accent.text.pressedAn accent button's text pressed
    button.glowThe glow inside a button under the pointer, where the style draws one (Luna; transparent: none)
    glossThe shine glossy parts blend toward at their top: buttons, boxes, bars and title bars (Luna, Aero, Aqua)
    checkAn unchecked box's or radio's inside
    check.hotIts inside under the pointer
    check.pressedIts inside pressed
    check.borderAn unchecked box's or radio's border
    check.border.hotIts border under the pointer
    check.border.pressedIts border pressed
    check.border.disabledA greyed unchecked box's border
    check.onA checked box's or radio's accent
    check.on.hotThe checked accent under the pointer
    check.on.pressedThe checked accent pressed
    check.on.disabledA greyed checked box's fill
    check.markThe tick or dot on the checked accent
    progress.trackA progress bar's track
    progress.barA progress bar's fill
    meter.trackA meter's track (a download's part done)
    meter.edgeA meter's edge
    meter.fillA meter's fill
    listThe download list's background
    list.frameA list's, a table's or a box's outline
    gridGrid lines between a list's rows in dialogs
    list.gridThe download list's grid lines
    headerEvery list's and table's column headers
    header.lineA header's bottom line in dialogs' lists
    header.sepThe dividers between column headers
    table.lineThe dividers in the link grabber's and Add torrent's tables
    header.sortedThe sorted column's header
    header.sort-arrowThe sort chevron
    row.pressedA list row pressed
    chip.webThe download list's Web chip
    chip.torrentThe download list's Torrent chip
    chip.textText on a chip
    list.drag-ghostA column header being dragged
    list.marqueeThe rubber band that selects rows
    list.marquee.borderThe rubber band's edge
    scroll.trackA scroll bar's track
    scroll.cornerWhere two scroll bars meet
    scroll.thumbA scroll bar's thumb and arrows
    scroll.thumb.hotThe thumb or an arrow under the pointer
    scroll.thumb.pressedThe thumb or an arrow pressed or dragged
    menubarThe menu bar
    menubar.bottomThe menu bar's last row
    menubar.lineThe line under the menu bar
    menubar.hotA menu title under the pointer
    menubar.openThe open menu's title
    menuA menu's background
    menu.itemA menu item
    menu.hotA menu item under the pointer
    menu.borderA menu's and a popup's frame
    menu.sepA menu's separators
    menu.textA menu's text
    menu.glyphBullets, ticks and submenu arrows
    menu.text.disabledA greyed menu item
    toolbar.lineThe toolbar's top line
    toolbar.line.lightThe highlight under it
    toolbar.hotA toolbar button under the pointer
    toolbar.hot.faintA split button's other part while one is under the pointer
    toolbar.pressedA toolbar button pressed
    toolbar.hot.edgeA hot toolbar button's edge
    toolbar.hot.borderA hot toolbar button's border (transparent: none)
    toolbar.split.shadowA split button's divider at rest: its shadow
    toolbar.split.lightThe divider's highlight
    toolbar.text.disabledA greyed toolbar label
    toolbar.arrowA drop-down button's arrow
    icon.disabledA greyed icon's ink (its start)
    icon.disabled.endA greyed icon's ink (its end)
    treeThe categories tree's background
    tree.linesThe tree's dotted connectors
    tree.expanderThe tree's chevrons, where the variant draws them
    tree.frameThe categories pane's frame
    progress.statusThe progress window's Status value
    progress.label.disabledA greyed label in the progress window
    segments.borderThe segment bar's frame
    segments.cornerThe segment bar's corner pixels
    pieces.haveA torrent piece that is here
    pieces.partialA square standing for pieces partly here
    pieces.missingA piece not here yet
    captionA title bar MDM draws itself
    caption.textIts title and glyphs
    caption.text.inactiveIts title and glyphs while the window isn't the active one, and a greyed button's
    caption.hotA caption button under the pointer (a tint over the bar)
    caption.pressedA caption button pressed (a tint over the bar)
    caption.buttonA caption button at rest, where the style shows one (a tint over the bar; transparent: none)
    caption.closeClose under the pointer
    caption.close.textClose's glyph under the pointer
    caption.inactiveA title bar MDM draws, while its window isn't the active one (transparent: as when active)
    drop-target.edgeThe drop target's edge at rest
    egui.panelegui's panel background
    egui.windowTooltips' background
    egui.window.borderTooltips' border
    egui.textTooltips' text
    egui.selection.textSelected text's ink in egui's boxes
    egui.extremeegui's darkest (or lightest) background
    egui.faintegui's faint background
    egui.widgetegui's widgets at rest
    egui.widget.borderTheir border (transparent: none)
    Every size (26)
    KeyWhat it sets
    radiusCorner radius of buttons, text boxes and drop-downs
    radius.buttonCorner radius of a glossy push button (Luna, Aero; Aqua's are round at the ends)
    radius.partCorner radius of a tinted part (an arrow zone, a spin button)
    radius.checkCorner radius of a check box
    radius.flyoutCorner radius of a popup in a window (a calendar, a filter box)
    radius.menu-itemCorner radius of a menu item under the pointer
    radius.eguiCorner radius of egui's own widgets
    radius.popupCorner radius of tooltips
    borderWidth of a control's border
    focus-lineHeight of a focused text box's accent line
    chevron.widthStroke width of a drop-down's chevron
    font.dialogDialog text (Tahoma in IDM's dialogs)
    font.dialog.boldOptions pages' titles
    font.titleA window's headline (Tahoma Bold): the browser extension's, the helpers'
    font.codeA sign-in code to type at a service's page
    font.uiMenus and the main window's text (Segoe UI)
    font.ui.boldBold headings in the main window
    font.smallegui's small text
    font.bodyegui's body text: tooltips, multi-line boxes
    font.headingegui's headings
    list.rowHeight of a row in the download list
    list.headerHeight of the download list's column headers
    tooltip.widthWhere a tooltip's text wraps
    tooltip.margin-xA tooltip's left and right padding
    tooltip.margin-topA tooltip's top padding
    tooltip.margin-bottomA tooltip's bottom padding
    Every control style (7)
    KeyIts styles
    field-focusline, border, ring
    checkfluent, square, adwaita, breeze, luna, aero, aqua
    buttonfluent, breeze, luna, aero, aqua
    progressline, bar, blocks, gloss
    scrolloverlay, classic
    captionsystem, metro, adwaita, breeze, luna, aero, aqua
    focusdotted, ring, frame

    Or let an AI assistant write it

    Copy this prompt into your AI assistant and describe the look you want at its end. It gives the assistant the format, the keys and the rules: readable text and a visible focus in both sides, and nothing copied from anyone else's artwork. Look at both sides yourself before you share the result.

    You are making a theme file for Mister Download Manager (MDM), a free, open-source download manager. Write one TOML file, named after the theme in lower case with dashes (for example harbour.toml). Reply with the file only, in one code block, then one line on how to install it.
    
    THE FORMAT
    A theme names only what it changes; everything else comes from the theme it inherits.
    - name = "Display name"
    - inherits = "classic" (the default), "high-contrast", "metro", "adwaita", "breeze", "luna", "aero" or "aqua"
    - icons = "color" | "mono" | "accent"
    - contrast = "high" (optional: strengthens every edge and text colour)
    - [seeds] a few colours MDM spreads over every control: background, surface, header, text, accent, selection, error, warning, success. Use [seeds.light] and [seeds.dark] to give each side its own.
    - [colors] single colour roles for both sides; [light] and [dark] for one side only. Role names are dotted and must be quoted when they contain a dot, e.g. "button.hot" = "#e5f1fb". Useful roles: window, text, text.muted, link, accent, focus.ring, selection, selection.text, field, field.border, button, button.hot, button.pressed, button.border, button.text, check.on, check.mark, progress.bar, list, header, menubar, menu, menu.hot, menu.text, toolbar.hot, tree, caption, caption.text, scroll.thumb, gloss (the shine glossy parts blend toward), button.glow. "segments.done" takes one colour or a list of 13 (top to bottom).
    - [sizes] in pixels, 0 to 400: radius, radius.button, radius.check, radius.menu-item, radius.popup, border, focus-line, list.row, list.header, font.ui, font.dialog.
    - [controls] shapes: field-focus = line | border | ring; check = fluent | square | adwaita | breeze | luna | aero | aqua; button = fluent | breeze | luna | aero | aqua; progress = line | bar | blocks | gloss; scroll = overlay | classic; focus = dotted | ring | frame; caption = system | metro | adwaita | breeze | luna | aero | aqua.
    - Colours are "#rrggbb" or "#rrggbbaa". Unknown keys are skipped, so only use the names above.
    
    THE RULES
    1. Make both a light and a dark side: give [seeds.light] and [seeds.dark] (or [light] and [dark]) their own colours, and check each side on its own.
    2. Text must be easy to read: at least 4.5:1 contrast for text against its background (text on window and field, button.text on button, menu.text on menu, selection.text on selection, caption.text on caption), in both sides.
    3. The keyboard focus must be easy to see: accent and focus.ring at least 3:1 against what they sit on.
    4. Disabled text stays readable but clearly dimmer than normal text.
    5. Clean room: no artwork, icons, logos, fonts or text copied from any other program or company. If the theme needs icons, describe original ones to draw, never copy existing ones, and note their source and licence in a SOURCES.txt.
    6. Keep the layout: a theme changes colours, sizes and control shapes only.
    
    After the file, list each text and background pair you checked with its contrast ratio, for both sides.
    
    THE LOOK I WANT:
  2. Try it, without building MDM

    Put the file in MDM's themes folder. View → Theme → Open themes folder opens it, and makes it the first time. It is in MDM's data folder:

    Windows
    %APPDATA%\misterdownloadmanager\themes
    Linux
    ~/.local/share/misterdownloadmanager/themes
    macOS
    ~/Library/Application Support/misterdownloadmanager/themes
    Portable copy
    data\themes beside the program

    Within two seconds it shows in View → Theme, under the built-in themes, by the name it gives itself. Pick it and the whole window changes at once. After you edit the file, pick it again in View → Theme to see the change. View → Dark Mode support and Always dark switch between its light and dark side.

    View → Theme → Add a theme file… does it for you: pick the file anywhere, and MDM copies it into the themes folder and uses it at once.

    Already have a Base16 or pywal scheme?

    It's a theme already. A Base16 or Base24 scheme (.yaml) or pywal's colors.json, added the same way, changes MDM's colours and nothing else: the scheme's backgrounds behind the list and the windows, its text kept readable (4.5:1 or more), its blue on the focus, the selection and the progress bar. Once wal has run, View → Theme lists pywal, read from ~/.cache/wal/colors.json (%USERPROFILE%\.cache\wal\colors.json on Windows), and MDM follows each new wallpaper's colours within two seconds. The guide shows which colour goes where.

  3. Share it

    Made something others would like? Open a pull request on GitHub that adds it to crates/app/assets/themes, with:

    • the .toml file, and its folder of icons if it has one;
    • screenshots of the main window in its light and its dark side;
    • a SOURCES.txt beside any icons, saying who drew them and under which licence. Icons must be your own or under a licence that lets MDM share them (GPL-3.0), never copied from another program.

    Not sure yet? Show it in the discussions first. The contributing guide explains how pull requests work here.

Free, open source, no ads, no trial.

Download Mister Download Manager