JDNEER Themes Brings Soft Dark Modes to FreeScout, One User at a Time

JD's JDNEER Themes 1.0.0 gives every FreeScout user their own soft dark theme: Slate, Graphite, Nord, Mocha, or Auto to follow the system. Light stays the default and untouched, admins can set a default, and theme choices live in the module's own table.

Project card for JDNEER Themes v1.0.1 with a cropped FreeScout conversation screenshot in the Nord theme
Card: THE JDNEER, with a Nord theme screenshot from the project repository.

Anyone who spends long days in a help desk knows what a bright white screen feels like by evening. JD's new module for FreeScout, JDNEER Themes, gives every FreeScout user their own soft dark theme. Version 1.0.0 arrived on October 5 (changelog).

The idea is simple. Light stays FreeScout's default and is left completely untouched. Nothing changes for anyone until they pick a theme, and users who stay on Light don't even load the theme stylesheet. Everyone else gets four dark themes to choose from: Slate, Graphite, Nord and Mocha. There is also Auto, which follows the operating system and switches to a chosen dark theme when the computer goes into dark mode (README).

FreeScout conversation list in the Slate dark theme
Slate

Every agent picks their own

Each user sets a theme under Profile, Appearance, and the page shows live previews before anything is saved. Admins can set the defaults for everyone under Settings, Appearance, covering the default theme, Auto dark, the theme accent and dark mail, and the default theme is also used on the login page. Each user can still override any of these for themselves under Profile, Appearance (changelog).

Two options sit next to the theme picker, both off by default. Out of the box, the dark themes take their brand color from FreeScout's own Header Color setting, which gives a tinted navbar, a brand line and brand-colored buttons. A switch lets users take the theme's own accent instead. The second option shows email bodies in theme colors too. By default, messages sit on a dimmed light card, so HTML emails keep the look their senders intended (README).

FreeScout conversation list in the Graphite dark theme
Graphite

The details that make dark mode work

A dark theme is only as good as its worst corner, and JD paid attention to the parts that usually break. Notices, notes, quoted mail, blocked image placeholders, module cards and the notification bell all get readable dark styling, and notes keep a warm orange tint so they still stand out. Tags with bright colors get dark text, so every tag stays readable. The signature preview always shows Light colors, because that is how recipients will see it (changelog).

The themes are not hand-painted guesses. A small generator builds them from FreeScout's own stylesheets, pinned to a specific FreeScout release and checked against SHA-256 hashes, and the build fails if it meets a color it can't map or a combination that misses its contrast checks. The mockups shown here are rendered the same way, from FreeScout 1.8.244's stylesheets with invented data (README).

FreeScout conversation list in the Nord dark theme
Nord

Installing it

JDNEER Themes needs FreeScout 1.8.0 or later, is tested with 1.8.244, and needs a browser with CSS color-mix() support, which any current browser has. Installing means downloading the zip and its SHA256SUMS file from the repository's releases, checking the download, unpacking it into FreeScout's Modules folder, handing the folder to the web server's user, and activating JDNEER Themes under Manage, Modules (README).

The module stays out of FreeScout's data. Theme choices live in its own table, and nothing in FreeScout itself is modified (changelog). Deactivating it puts everyone back on Light right away, and reinstalling brings everyone's choices back. The generator and theme sources are MIT licensed, while the generated stylesheets, being derived from FreeScout's own CSS, ship under the AGPL v3 like FreeScout itself (README).

FreeScout conversation list in the Mocha dark theme
Mocha

Update: Version 1.0.1 followed on October 15. The themes are unchanged; the module simply moved from a shared bundle into its own repository, so updating is optional and touches no data (release notes). Its former bundle mate, Conversation Relations, got its own home at the same time.