Technical Anshu
Tutorials Blog
Ventoy Theme Guide

Ventoy Theme Fonts and Colours in theme.txt and ventoy.json

The wallpaper is only half the design. Fonts and colours decide whether the menu is readable - and they are split across theme.txt and ventoy.json. Here is which setting lives where, and the exact names to use.

By Technical AnshuVentoy Theme Guide7 minute read
Watch the video to see the theme files open while fonts and colours change

Wallpaper gets all the attention, but the text is what you actually read at boot time. Ventoy themes control fonts and colours in two places that work together: theme.txt decides which font and colours each element uses, and the theme block in ventoy.json can preload extra font files and recolour Ventoy's own version text. This guide covers both, with the exact property names.

Fonts and colours - the two files side by side
theme.txt
terminal-font: "Hack Regular 14" title-color: "#ffffff" + boot_menu { item_font = "Hack Regular 14" item_color = "#d7e3fc" selected_item_color = "#ffffff" }
ventoy.json - theme block
"fonts": [ "/ventoy/theme/mytheme/Hack-12.pf2", "/ventoy/theme/mytheme/Hack-14.pf2" ], "ventoy_color": "#ffffff"
theme.txt names the font and colours per element; ventoy.json preloads the PF2 files those names refer to
1

Fonts Are PF2 Files - Load Them First

GRUB does not use Windows TTF fonts directly in the menu; it uses compiled .pf2 font files. A theme usually ships its own - when you copy a GRUB theme, its pf2 files come with it. If your theme.txt asks for a font that was never loaded, GRUB quietly falls back to its built-in font and your design shifts. The fonts list in the theme block of ventoy.json preloads pf2 files by full path, exactly as in the panel above. List every size your theme.txt references, and keep the pf2 files inside the theme folder so the whole design travels as one folder.

2

Reference Fonts by Their Real Name

  1. Inside theme.txt, fonts are named as family, style and size - for example "Hack Regular 14" - not by file name
  2. terminal-font sets the global font; the boot menu block refines it with item_font for entries
  3. The name must match the font stored inside the pf2 file - renaming Hack-14.pf2 changes nothing, and guessing a name that does not exist gives you the fallback font
  4. Want a different typeface? Convert a TTF with GRUB's grub-mkfont tool (available with GRUB on Linux, for example grub-mkfont -s 14 -o MyFont-14.pf2 MyFont.ttf), or borrow pf2 files from another theme - for a stick you share commercially, respect the font's licence
3

Colours in theme.txt

Colour properties accept named colours ("white", "blue") or hex values like "#d7e3fc". The ones you will actually touch: desktop-color (the background behind the wallpaper), title-color for the heading, and inside the boot menu block, item_color for normal entries and selected_item_color for the highlighted one. Design rule that saves rework: pick colours against your real wallpaper, at your real gfxmode, on a real monitor - a combination that looks elegant on your editing screen can vanish on a dim customer display.

4

The Version Text Colour Lives in ventoy.json

The small version line at the bottom-left of the menu (for example 1.0.10 UEFI www.ventoy.net) is not styled by theme.txt at all. Its position and colour are theme-block options in ventoy.json: ventoy_left (default 5%), ventoy_top (default 95%) and ventoy_color (default #0000ff). Set the colour to match your wallpaper so the line sits quietly in the design - and remember it can be moved and recoloured, never removed by a setting.

One mode warning from Ventoy's own documentation: custom fonts and Unicode text display properly in GUI mode. In CLI or serial display modes, Unicode characters will not display normally - so if you brand the menu with non-English text, keep display_mode on GUI.

Watch the Full Setup in the Video

The video edits these same files live - keep it open beside this guide.

Watch Full Video
Frequently Asked Questions

Why does my theme ignore the font I set in theme.txt?

Almost always because the font was never loaded. theme.txt refers to fonts by their internal name (family, style, size), and the matching pf2 file must be loaded - by the theme itself or through the fonts list in ventoy.json. If the name does not match a loaded pf2, GRUB falls back to its built-in font without any error.

Can I use my favourite Windows font in the boot menu?

Not directly. The menu needs a compiled PF2 font, converted from a TTF with GRUB's grub-mkfont tool. After conversion, copy the pf2 into your theme folder, add it to the fonts list in ventoy.json, and reference its family-style-size name in theme.txt.

How do I change the colour of the small version text in the corner?

In the theme block of ventoy.json: ventoy_color sets its colour (default #0000ff), and ventoy_left and ventoy_top set its position (defaults 5% and 95%). The text itself is hard-coded in Ventoy and cannot be removed by any theme setting.

This guide is based on the Ventoy Custom Wallpaper Setup video by Technical Anshu - Add Your Branding - Stuck on a step? Ask in the video comments, help is always there.