promotional bannermobile promotional banner

SharedMedia Fonts Mono (Includes CJK)

Open source monospace fonts registered via LibSharedMedia-3.0. Covers Latin, Cyrillic (Russian), and CJK (Chinese, Japanese, Korean) for full international client support. Drop-in font source for any addon that lets you pick a custom font through LSM.

Same width, every glyph, every addon

Release Build

A World of Warcraft addon that registers a curated collection of open-source monospace fonts with LibSharedMedia-3.0 (LSM). Once installed, any addon that supports custom fonts through LSM (chat frames, unit frames, nameplates, action bars, etc.) can use these fonts directly from its font picker.

SharedMedia-Fonts-Mono-Logo

Includes full Latin and Cyrillic (Russian) coverage, plus Noto Sans Mono fonts for Korean, Simplified Chinese, and Traditional Chinese clients. Western and Russian clients also get Noto Sans Mono for CJK text in names and chat.

Typical Use Cases

  • Viewing Lua code (in-game editors, error viewers, debug consoles)
  • Consoles/chat frames where fixed-width output is required
  • Aligning tabular data (damage meters, DPS/HPS logs, stat comparisons)
  • Distinguishing similar characters (0/O, 1/l/I) in IDs, item links, or macros

Usage

Fetch fonts through standard LSM calls, or iterate this addon's catalog to build your own font picker.

Every font is registered under LSM's standard font media type, keyed by its LSM name (see Available Fonts), so a plain LSM:Fetch() is all it takes.

Fetching All Fonts

LSM:List() returns the registered names of a media type, sorted, and LSM:HashTable() maps each name to its path. Listing the standard font media type returns every font LSM knows about: these, LSM's built-in defaults, and those registered by other addons.

--- @type LibSharedMedia-3.0
local LSM = LibStub("LibSharedMedia-3.0")
local FONT = LSM.MediaType.FONT

--- @type string[]
local fontNames = LSM:List(FONT)
for _, name in ipairs(fontNames) do
  print(name, LSM:Fetch(FONT, name))
end

--- @type table<string, string>
local fonts = LSM:HashTable(FONT)
local jetBrainsMono = fonts["JetBrainsMono Medium"]

Mono fonts only: this addon also registers its fonts under font-mono (aliased as LSM.MediaType.FONT_MONO once it loads). It's not a standard LSM media type, so other addons won't look for it, but it lists just this addon's fonts for the client locale, keyed by display name (e.g. JetBrains Mono).

--- @type string[]
local monoFontNames = LSM:List("font-mono")
for _, name in ipairs(monoFontNames) do
  print(name, LSM:Fetch("font-mono", name))
end

--- @type table<string, string>
local monoFonts = LSM:HashTable("font-mono")
local jetBrainsMono = monoFonts["JetBrains Mono"]

Fetching Individual Fonts

Locale support is standard LSM behavior, so there's nothing to check on your side: each font is registered with the client locales it supports, and LSM skips any font that doesn't match the client. Fetching a skipped font returns LSM's default font, or nil if you pass true as the third argument (noDefault).

-- nil if not registered for this client's locale
local jetBrainsMono = LSM:Fetch(FONT, "JetBrainsMono Medium", true)

-- Western, Russian and Simplified Chinese clients
local notoSansMonoSC = LSM:Fetch(FONT, "NotoSansMonoCJKsc Regular")

Applying a Font to a FontString

A fetched font path, such as jetBrainsMono above, goes straight into SetFont() on any FontString.

--- @type FontString
local myFontString = UIParent:CreateFontString(nil, "OVERLAY")
myFontString:SetFont(jetBrainsMono, 12, "")

Iterating the Font Catalog

For ease of iteration, this addon provides SharedMediaFontsMono:ForEachFont(), a convenience method outside of LSM. It walks every SharedMediaFontsMono_Font in the catalog, so you can build UI around them without hardcoding names. The catalog covers all locales, so filter with font:supports(). Here's an example populating a Blizzard dropdown menu:

local dropdown = CreateFrame("Frame", "MyFontDropdown", UIParent, "UIDropDownMenuTemplate")
UIDropDownMenu_SetWidth(dropdown, 180)

UIDropDownMenu_Initialize(dropdown, function(_, level)
  SharedMediaFontsMono:ForEachFont(function(font)
    if not font:supports(GetLocale()) then return end

    local info = UIDropDownMenu_CreateInfo()
    info.text = font.name
    info.func = function()
      UIDropDownMenu_SetText(dropdown, font.name)
      myFontString:SetFont(font.path, 12, "")
    end
    UIDropDownMenu_AddButton(info, level)
  end)
end)

Default Font

A ready-to-use Font object (white text; JetBrains Mono on Latin and Russian clients, the matching Noto Sans Mono on Korean and Chinese clients) is registered globally as SharedMediaFontsMono_DefaultFont — handy for XML template inheritance or as a fallback in Lua.

<Font name="MyBaseFont" inherits="SharedMediaFontsMono_DefaultFont"/>
myFontString:SetFontObject(SharedMediaFontsMono_DefaultFont)

EmmyLua Annotation (For Development)

Available Fonts

The same fonts are registered under two media types, with different names for each.

General: font (LSM.MediaType.FONT)

The standard LSM media type, shared by every addon and font picker. Since this list mixes fonts from many sources, each name follows its font file, so the exact family and weight stay visible.

LSM Name File Name Clients
JetBrainsMono Medium JetBrainsMono-Medium.ttf Western, Russian
UbuntuSansMono Medium UbuntuSansMono-Medium.ttf Western, Russian
IBMPlexMono Medium IBMPlexMono-Medium.ttf Western, Russian
SourceCodePro Medium SourceCodePro-Medium.ttf Western, Russian
RobotoMono Medium RobotoMono-Medium.ttf Western, Russian
Inconsolata SemiCondensed Medium Inconsolata_SemiCondensed-Medium.ttf Western
NotoSansMonoCJKsc Regular NotoSansMonoCJKsc-Regular.otf Western, Russian, Simplified Chinese
NotoSansMonoCJKkr Regular NotoSansMonoCJKkr-Regular.otf Korean
NotoSansMonoCJKtc Regular NotoSansMonoCJKtc-Regular.otf Traditional Chinese

Mono only: font-mono (LSM.MediaType.FONT_MONO)

This addon's own media type, tailored for mono-only retrieval. It holds nothing but these fonts, so each one uses a plain display name.

Display Name File Name Clients
JetBrains Mono JetBrainsMono-Medium.ttf Western, Russian
Ubuntu Sans Mono UbuntuSansMono-Medium.ttf Western, Russian
IBM Plex Mono IBMPlexMono-Medium.ttf Western, Russian
Source Code Pro SourceCodePro-Medium.ttf Western, Russian
Roboto Mono RobotoMono-Medium.ttf Western, Russian
Inconsolata Inconsolata_SemiCondensed-Medium.ttf Western
Noto Sans Mono NotoSansMonoCJKsc-Regular.otf Western, Russian
Noto Sans Mono (Korean) NotoSansMonoCJKkr-Regular.otf Korean
Noto Sans Mono (Simplified Chinese) NotoSansMonoCJKsc-Regular.otf Simplified Chinese
Noto Sans Mono (Traditional Chinese) NotoSansMonoCJKtc-Regular.otf Traditional Chinese

Requirements

  • LibSharedMedia-3.0 (embedded or provided by another addon)
  • An addon with LibSharedMedia font support to select the fonts from

Font Sources

License

All Rights Reserved.

The bundled fonts are not covered by this; each ships under its own license in Assets/Fonts/Licenses.

Donations

If this addon has made your addon gameplay or development easier, consider supporting its development:

Author Notes

SharedMedia Fonts Mono (Includes CJK) Team

Forgeborn tier frameprofile avatar
  • 1
    Followers
  • 16
    Projects
  • 492.3K
    Downloads
Donate

More from kapresoftView all