Minecraft Custom Font Resource Pack: Unicode Glyphs
Use a minecraft custom font resource pack to show images in chat and menus with bitmap providers and private-use unicode characters.
Updated 5 Nov 2026Written for Minecraft 26.33 min read
Written for Minecraft 26.3.
A minecraft custom font resource pack lets you print your own images as text characters. You define a font with a bitmap provider, give each image a private-use unicode character, then type that character in chat, a menu title or an item name.
Before you start
A resource pack. See Pack basics.
Your glyph images as a PNG. You can build the sheet and JSON with our font generator.
A namespace, for example
mypack.
Define the font
Save your image as
assets/mypack/textures/font/icons.png.Create
assets/mypack/font/icons.json.Add a bitmap provider as below.
{
"providers": [
{
"type": "bitmap",
"file": "mypack:font/icons.png",
"ascent": 7,
"height": 8,
"chars": ["\uE000\uE001"]
}
]
}The image is cut into an even grid. chars has one string per row, and the grid has as many columns as the longest string has characters. Here the image has two glyphs in one row, so each takes half the width.
Keys
file: the PNG, in the formnamespace:font/name.png, read from the textures folder.chars: the characters mapped to each grid cell. Use private-use characters from U+E000 so they never clash with real text.ascent: how far the glyph sits above the baseline. Vanilla uses 7 with height 8.height: the glyph's scale. It defaults to 8. Keep it equal to the glyph's pixel height or a power of it, or it looks warped.
If the grid does not divide evenly, pad with \u0000. Glyphs can be up to 256 by 256 pixels. White pixels can be tinted by the text colour.
Show it in game
Any text component takes a font key. It defaults to minecraft:default. Point it at your font and use the character:
/tellraw @a {"text":"\uE000 Welcome","font":"mypack:icons"}The font applies to the whole component, including the words. For one icon in normal text, put the icon in its own component and leave the rest on the default font.
The space provider
A space provider sets the width of characters that draw nothing. It has an advances object mapping a character to a width. The default font declares a space as 4. If you build a font with no space glyph, add one or text will collapse.
{
"type": "space",
"advances": { " ": 4 }
}Negative widths are treated as 0 in chat, so shifting text left needs another approach.
Check it worked
Reload the pack with F3 + T.
Run the
/tellrawcommand. You should see your image.Try it in a menu title or item name through a custom item name.
Common problems
A square or question mark appears
The character is not in any provider of that font, or the font key in the text is wrong.
Nothing shows and the text is the default font
The component is missing its font key, or the font file name does not match.
The glyph is squashed or too small
Check height against the real pixel height and make sure every row in chars has the same number of characters.
Players on other clients see boxes
The pack did not load for them. Require it in server.properties and test with a fresh account.
Unicode characters count as text. Players can copy them, and they can show as boxes in logs and Discord relays that lack the pack.