Font
The font is the typeface that Minecraft uses. It was first added in Java Edition Classic 0.0.2a and has seen many revisions and additions since. Its design has been present in all ports of the game.
In Java Edition, the font’s name is Minecraft Seven. It contains 2,426 characters. Multiple fonts can be defined and referenced with resource packs.
Fonts available[edit | edit source]
Java Edition[edit | edit source]
By default, Java Edition includes 4 fonts.
- default
This is the default font used in almost every scenario. It references 4 files
ascii.pngaccented.pngnonlatin_european.pngunifont.zip
- alt
This is the font used in the Enchanting Table's GUI when an item is able to be enchanted. When mapped to the ASCII layout, only the characters A-Z are textured. Lowercase a-z is an exact copy of the uppercase.
It references ascii_sga.png.
- uniform
This is the font used when the "Force Unicode Font" option in Language is ON.
It references unifont.zip.
- illageralt
This is a "secret" font not used anywhere in the game. It is a reference to Illageralt, a Minecraft Dungeons rune-line alphabet. It can be used only with the "font" JSON text key.[a]
It references asciillager.png.
Bedrock Edition[edit | edit source]
In Bedrock Edition, there are 2 default fonts. Many other font resources are used regardless of the font setting. Unlike in Java Edition, the font can be swapped out with a built-in setting.
The font can be changed in for touchscreens, or
for controllers, and then the gear icon.
- Mojangles
The official name of the font used in Bedrock. It is used almost everywhere. Metadata indicates it was first made by 4J Studios around 2011.
- Noto Sans
This is the Noto Sans font. It is used in some text boxes, and is the default fallback font.
Resources[edit | edit source]
Java Edition[edit | edit source]
ascii.png
This contains the most-used characters and some other symbols. Its filename is a misnomer: it does not contain solely ASCII characters. In particular:
- Glyphs U+0020 SPACE through U+007E ~ TILDE display the Wikipedia: Basic Latin Unicode block characters; this mirrors ASCII.
- Glyphs U+007F DELETE through U+00FF ÿ LATIN SMALL LETTER Y WITH DIAERESIS display the Code page 437 characters.
!"#$%&'()*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
`abcdefghijklmno
pqrstuvwxyz{|}~
£ ƒ
ªº ¬ «»
░▒▓│┤╡╢╖╕╣║╗╝╜╛┐
└┴┬├─┼╞╟╚╔╩╦╠═╬╧
╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀
∅∈
≡±≥≤⌠⌡÷≈°∙ √ⁿ²■
accented.png
This contains mostly versions of letters with accents, diacritics, or ligatures. However, it also contains some exceptions such as circled numbers and letters.
ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ ÐÑÒÓÔÕÖÙÚÛÜÝàáâã äåæçìíîïñòóôõöùú ûüýÿĀāĂ㥹ĆćĈĉĊċ ČčĎďĐđĒēĔĕĖėĘęĚě ĜĝḠḡĞğĠġĢģĤĥĦħĨĩ ĪīĬĭĮįİıĴĵĶķĹĺĻļ ĽľĿŀŁłŃńŅņŇňŊŋŌō ŎŏŐőŒœŔŕŖŗŘřŚśŜŝ ŞşŠšŢţŤťŦŧŨũŪūŬŭ ŮůŰűŲųŴŵŶŷŸŹźŻżŽ žǼǽǾǿȘșȚțΆΈΉΊΌΎΏ ΐΪΫάέήίΰϊϋόύώЀЁЃ ЇЌЍЎЙйѐёђѓїћќѝўџ ҐґḂḃḊḋḞḟḢḣḰḱṀṁṖṗ ṠṡṪṫẀẁẂẃẄẅỲỳèéêë ʼnǧǫЏḍḥṛṭẒỊịỌọỤụ№ ȇƔɣʃ⁇DZDzdzDŽDždžLJLjNJNjnj ℹᵫꜲꜳꜴꜵꜶꜷꜸꜺꜼꜽꝎꝏꝠꝡ fflstᚡᚵƠơƯưẮắẤấẾếốỚ ớỨứẰằẦầỀềồỜờỪừẢả ẲẳẨẩẺẻổỞỂểỈỉỎỏỔở ỦủỬửỶỷẠạẶặẬậẸẹỆệ ỘộỢợỰựỴỵỐƕẪẫỖỗữ☞ ☜☮ẴẵẼẽỄễỒỠỡỮỸỹҘҙ ҠҡҪҫǶ⚠⓪①②③④⑤⑥⑦⑧⑨ ⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⒶⒷⒸⒹⒺ ⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊ ⓋⓌⓍⓎⓏⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚ ⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ◌̧ ʂʐɶǍǎǞǟǺǻȂȃȦȧǠǡḀ ḁȀȁḆḇḄḅᵬḈḉḐḑḒḓḎḏ ḌᵭḔḕḖḗḘḙḜḝȨȩḚḛȄȅ ȆᵮǴǵǦḦḧḨḩḪḫȞȟḤẖḮ ḯȊȋǏǐȈȉḬḭǰȷǨǩḲḳḴ ḵḺḻḼḽḶḷḸḹⱢḾḿṂṃᵯṄ ṅṆṇṊṋǸǹṈṉᵰǬǭȬȭṌṍ ṎṏṐṑṒṓȎȏȪȫǑǒȮȯȰȱ ȌȍǪṔṕᵱȒȓṘṙṜṝṞṟȐȑ ṚᵳᵲṤṥṦṧṢṣṨṩᵴṰṱṮṯ ṬẗᵵṲṳṶṷṸṹṺṻǓǔǕǖǗ ǘǙǚǛǜṴṵȔȕȖṾṿṼṽẆẇ ẈẉẘẌẍẊẋȲȳẎẏẙẔẕẐẑ ẓᵶǮǯẛꜾꜿǢǣᵺỻᴂᴔꭣȸʣ ʥʤʩʪʫȹʨʦʧꭐꭑ₧Ỻאַאָƀ ƂƃƇƈƊƋƌƓǤǥƗƖɩƘƙƝ ƤƥɽƦƬƭƫƮȗƱƜƳƴƵƶƢ ƣȢȣʭʮʯﬔﬕﬗﬖﬓӐӑӒӓӶ ӷҔҕӖӗҼҽҾҿӚӛӜӝӁӂӞ ӟӢӣӤӥӦӧӪӫӰӱӮӯӲӳӴ ӵӸӹӬӭѶѷӔӺԂꚂꚀꚈԪԬꚄ ԄԐӠԆҊӃҞҜԞԚӅԮԒԠԈԔ ӍӉԨӇҤԢԊҨԤҦҎԖԌꚐҬꚊ ꚌԎҲӼӾԦꚔҴꚎҶӋҸꚒꚖꚆҌ ԘԜӕӻԃꚃꚁꚉԫԭꚅԅԑӡԇҋ ӄҟҝԟԛӆԯԓԡԉԕӎӊԩӈҥ ԣԋҩԥҧҏԗԍꚑҭꚋꚍԏҳӽӿ ԧꚕҵꚏҷӌҹꚓꚗꚇҍԙԝἈἀἉ ἁἊἂἋἃἌἄἍἅἎἆἏἇᾺὰᾸ ᾰᾹᾱΆάᾈᾀᾉᾁᾊᾂᾋᾃᾌᾄᾍ ᾅᾎᾆᾏᾇᾼᾴᾶᾷᾲᾳἘἐἙἑἚ ἒἛἓἜἔἝἕῈΈὲέἨἠῊὴἩ ἡἪἢἫἣἬἤἭἥἮἦἯἧᾘᾐᾙ ᾑᾚᾒᾛᾓᾜᾔᾝᾕᾞᾖᾟᾗΉήῌ ῃῂῄῆῇῚὶΊίἸἰἹἱἺἲἻ ἳἼἴἽἵἾἶἿἷῘῐῙῑῒΐῖ ῗῸὸΌόὈὀὉὁὊὂὋὃὌὄὍ ὅῬῤῥῪὺΎύὙὑὛὓὝὕὟὗ ῨῠῩῡϓϔῢΰῧὐὒὔῦὖῺὼ ΏώὨὠὩὡὪὢὫὣὬὤὭὥὮὦ Ὧὧᾨᾠᾩᾡᾪᾢᾫᾣᾬᾤᾭᾥᾮᾦ ᾯᾧῼῳῲῴῶῷ☯☐☑☒ƍƺⱾȿ ⱿɀᶀꟄꞔᶁᶂᶃꞕᶄᶅᶆᶇᶈᶉᶊ ᶋᶌᶍꟆᶎᶏᶐᶒᶓᶔᶕᶖᶗᶘᶙᶚ ẚ⅒⅘₨₯
nonlatin_european.png
This contains many accented characters and most of the miscellaneous symbols. Contrary to its name, it also includes characters that are non-European,[1] and some obscure Latin script characters.
¡‰·₴≠¿×ØÞһðøþΑΒ ΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣ ΤΥΦΧΨΩαβγδεζηθικ λμνξοπρςστυφχψωЂ ЅІЈЉЊЋАБВГДЕЖЗИК ЛМНОПРСТУФХЦЧШЩЪ ЫЬЭЮЯабвгдежзикл мнопрстуфхцчшщъы ьэюяєѕіјљњ–—‘’“” „…⁊←↑→↓⇄+ƏəɛɪҮүӨ өʻˌ;ĸẞß₽€ѢѣѴѵӀѲѳ ⁰¹³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁱ™ ʔʕ⧈⚔☠ҚқҒғҰұӘәҖҗҢ ңҺאבגדהוזחטיכלמם נןסעפףצץקר¢¤¥©®µ ¶¼½¾·‐‚†‡•‱′″‴‵‶ ‷‹›※‼‽⁂⁈⁉⁋⁎⁏⁑⁒⁗℗ −∓∞☀☁☈Є☲☵☽♀♂⚥♠♣♥ ♦♩♪♫♬♭♮♯⚀⚁⚂⚃⚄⚅ʬ⚡ ⛏✔❄❌❤⭐⸘⸮⸵⸸⹁⹋⥝ᘔƐ߈ ϛㄥⱯᗺƆᗡƎℲ⅁ꞰꞀԀꝹᴚ⟘∩ Ʌ⅄ɐɔǝɟᵷɥᴉɾʞꞁɯɹʇʌ ʍʎԱԲԳԴԶԷԹԺԻԼԽԾԿՀ ՁՂՃՄՅՆՇՈՉՋՌՍՎՏՐՑ ՒՓՔՕՖՙաբգդեզէըթժ իլխծկհձղճմյնշոչպ ջռսվտրցւփքօֆևשתԸ ՚՛՜՝՞՟ՠֈ֏¯ſƷʒǷƿȜ ȝȤȥ˙Ꝛꝛ‑⅋⏏⏩⏪⏭⏮⏯⏴⏵ ⏶⏷⏸⏹⏺⏻⏼⏽⭘▲▶▼◀●◦◘ ⚓⛨IJijljꜨꜩꜹꜻfffiflffiſt�Ե Պᚠᚢᚣᚤᚥᚦᚧᚨᚩᚪᚫᚬᚭᚮᚯ ᚰᚱᚲᚳᚴᚶᚷᚸᚹᚺᚻᚼᚽᚾᚿᛀ ᛁᛂᛃᛄᛅᛆᛇᛈᛉᛊᛋᛌᛍᛎᛏᛐ ᛑᛒᛓᛔᛕᛖᛗᛘᛙᛚᛛᛜᛝᛞᛟᛠ ᛡᛢᛣᛤᛥᛦᛧᛨᛩᛪ᛫᛬᛭ᛮᛯᛰ ᛱᛲᛳᛴᛵᛶᛷᛸ☺☻¦☹ך׳״װ ױײ־׃׆´¨ᴀʙᴄᴅᴇꜰɢʜᴊ ᴋʟᴍɴᴏᴘꞯʀꜱᴛᴜᴠᴡʏᴢ§ ɱɳɲʈɖɡʡɕʑɸʝʢɻʁɦʋ ɰɬɮʘǀǃǂǁɓɗᶑʄɠʛɧɫ ɨʉʊɘɵɤɜɞɑɒɚɝƁƉƑƩ ƲႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮ ႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾ ႿჀჁჂჃჄჅჇჍაბგდევზ თიკლმნოპჟრსტუფქღ ყშჩცძწჭხჯჰჱჲჳჴჵჶ ჷჸჹჺ჻ჼჽჾჿתּשׂפֿפּכּײַיִ וֹוּבֿבּꜧꜦɺⱱʠʗʖɭɷɿʅʆ ʓʚ₪₾֊ⴀⴁⴂⴃⴄⴅⴆⴡⴇⴈⴉ ⴊⴋⴌⴢⴍⴎⴏⴐⴑⴒⴣⴓⴔⴕⴖⴗ ⴘⴙⴚⴛⴜⴝⴞⴤⴟⴠⴥ⅛⅜⅝⅞⅓ ⅔✉☂☔☄⛄☃⌛⌚⚐✎❣♤♧♡♢ ⛈☰☱☳☴☶☷↔⇒⇏⇔⇵∀∃∄∉ ∋∌⊂⊃⊄⊅∧∨⊻⊼⊽∥≢⋆∑⊤ ⊥⊢⊨≔∁∴∵∛∜∂⋃⊆⊇□△▷ ▽◁◆◇○◎☆★✘₀₁₂₃₄₅₆ ₇₈₉₊₋₌₍₎∫∮∝⌀⌂⌘〒ɼ ƄƅẟȽƚƛȠƞƟƧƨƪƸƹƻƼ ƽƾȡȴȵȶȺⱥȻȼɆɇȾⱦɁɂ ɃɄɈɉɊɋɌɍɎɏẜẝỼỽỾỿ Ꞩꞩ𐌰𐌱𐌲𐌳𐌴𐌵𐌶𐌷𐌸𐌹𐌺𐌻𐌼𐌽 𐌾𐌿𐍀𐍁𐍂𐍃𐍄𐍅𐍆𐍇𐍈𐍉𐍊🌧🔥🌊 ⅐⅑⅕⅖⅗⅙⅚⅟↉🗡🏹🪓🔱🎣🧪⚗ ⯪⯫Ɑ🛡✂🍖🪣🔔⏳⚑₠₡₢₣₤₥ ₦₩₫₭₮₰₱₲₳₵₶₷₸₹₺₻ ₼₿
unifont.zip
This contains the "unihex" characters. Inside of it are 2 files: a copy of the GNU General Public License version 2, and unifont_all_no_pua-15.0.06.hex. The latter file is a copy of GNU Unifont 15.0.06 and contains glyph definitions for 112,990 characters.
ascii_sga.png
This is the Standard Galactic Alphabet mapped to the ASCII layout. Only uppercase and lowercase A-Z are mapped, and the uppercase and lowercase are identical.
ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
asciillager.png
This is a near-exact mirror of the rune-like font used in Minecraft Dungeons.
!,-.0123456789?a bcdefghijklmnopq rstuvwxyzABCDEFG HIJKLMNOPQRSTUVW XYZ
Bedrock Edition[edit | edit source]
- default8.png (and related)
A modified copy of the Java Edition 1.12.2 font. The U+00A9 © COPYRIGHT SIGN has been changed. The file ascii_sga.png also reflects Java Edition; it is the SGA minecraft:alt font used when enchanting.
ÀÁÂÈÊËÍÓÔÕÚßãõğİ
ıŒœŞşŴŵžȇ§©
!"#$%&'()*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
`abcdefghijklmno
pqrstuvwxyz{{!}}~⌂
ÇüéâäàåçêëèïîìÄÅ
ÉæÆôöòûùÿÖÜø£Ø×ƒ
áíóúñѪº¿®¬½¼¡«»
░▒▓│┤╡╢╖╕╣║╗╝╜╛┐
└┴┬├─┼╞╟╚╔╩╦╠═╬╧
╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀
αβΓπΣσμτΦΘΩδ∞∅∈∩
≡±≥≤⌠⌡÷≈°∙·√ⁿ²■
Characters U+00C0 À LATIN CAPITAL LETTER A WITH GRAVE through U+00A9 © COPYRIGHT SIGN are actually mapped to the C0 control codes (U+0000..U+001F). The U+007F DELETE character is mapped to the U+U+2302 ⌂ HOUSE character instead. Despite the upper two rows and ⌂ appearances, they are mapped to the characters U+0000..U+001F and U+007F. This means that typing a control character instead shows a character that is unlike the expected representation. Most fonts either show nothing, or a box with the abbreviation inside, as does GNU Unifont. The glyph_##.png files reflect Java Edition's Legacy Unicode provider. They cover characters U+0000..U+D7AF, some of U+E000..U+E1FF, and U+F900..U+FFFF.
There exist 2 Private Use Area sheets: glyph_E0.png glyph_E1.png. E0 contains glyphs for control icons, such as and
. E1 contains glyphs for miscellaneous icons, including the minecoin and Agent icon. E0 characters are categorized in
emoticons.json.[2]
E1:
- minecraft-ten.ttf
A TrueType font, named "Minecraft Ten". Metadata indicates it was made by Canada Type in 2018. Likely to be a commission from Mojang, as Canada Type does not list it for purchase/licensing on their website.
smooth/
Appears to be a version of Roboto generated with msdfgen. Contains only Unicode codepoints U+0000..U+04FF and U+2000..U+20FF. It is unknown what parameters were used to generate it. Unknown where this is used, if at all.
Providers[edit | edit source]
A font is constructed from a list of providers, sources that provide characters to use. Different providers use different formats and methods of constructing characters. The default font uses all except for 1, ttf.
Bitmap provider[edit | edit source]
The bitmap provider defines simple bitmap glyphs – glyphs from textures. It references a single PNG file, a list of the characters it applies to, an optional height, and an ascent.
Textures may be any size, and glyphs may be any color. White glyphs can be colored any other color in-game. Other colors retain that tint when re-colored. Black glyphs always appear black. The glyph's widths are automatically determined based on the last right-most column of pixels containing any alpha value above 0. Glyphs themselves must not be larger than 512×512 pixels. The chars field is a list of strings. The characters inside each string entry inside this list are mapped to the corresponding positions in the referenced file. The texture is divided evenly according to the number of strings in the list, and the length of the longest string in that list.
Since Java Edition 1.16 Pre-release 7, UTF-16 codepoints encoded in UTF-8 sequences can be used by use of surrogate pairs. To convert a character into a surrogate pair, one can use the following equations, where C is the codepoint in decimal:
- High Surrogate (first codepoint):
((C - 65536) - (C % 1024)) ÷ 1024 + 55296 - Low Surrogate (second codepoint):
(C % 1024) + 56320
When the length of either the list or the strings is not a divisor of the resource's dimensions, it can result in an unexpected division of glyphs. The Unicode escape \u0000 can be used to add padding in the list. Padding acts as a "dummy character", so that the glyph data at that corresponding position in the file is not assigned a character.
The height field is the scale of the resulting glyph. This scale should generally match the a glyph's individual height, or be a power of it. While heights outside of this recommended range are allowed and are valid, the resulting glyphs declared inside the provider appears warped when rendered in-game. The height field is optional. When not defined, it defaults to 8, regardless of the underlying texture resolution.
The ascent field is the amount of vertical shifting is applied to the glyph. In typography, the ascent is the distance above the baseline to the cap height (top of glyph). The baseline in a glyph is the line where the descender begins. For example, in the lowercase letter y, the bottom end of the y extends past the baseline. In Vanilla, when the height is 8, the ascent is most often 7, as the descender is 1.
Space provider[edit | edit source]
The space provider defines the width of a character's glyph. It is the most simple provider: it contains only the character widths.
The keys of the advances are the characters, and the values are the widths. The keys must be only 1 grapheme long (multi-byte character still count as one character, like U+1F525 🔥 FIRE, which is encoded as 0xF0 0x9F 0x94 0xA5). Values must be an integer whose absolute value is less than or equal to 256. Negative values are forced to 0 when typed in chat. Although it is intended to be used for whitespace characters (characters that have "WSpace=Y" in Unicode), it can be used for any character, as long as there is no prior definition of that character's glyph.
By default, the game has two widths defined:
- U+0020 <SPACE> SPACE is 4
- U+200C <ZWNJ> ZERO WIDTH NON-JOINER is 0
TTF provider[edit | edit source]
The ttf provider embeds already-compiled TrueType and OpenType fonts.[b] It contains 5 fields.
The file field is a resource location to a file ending in .ttf. Path is relative from /assets/minecraft/font/.
The shift field is an array of two integers. It defines how much each glyph contained in this TrueType font is to be moved horizontally and vertically, respectively. The first element controls the horizontal shifting (positive is leftward, negative is rightward). The second element controls the vertical shifting (positive is downward, negative is upward).
The size field is similar to a bitmap provider's height field. This is a divisor by which the em-size of the font's glyphs are to be divided and then fitted into the bitmap grid. This value can vary greatly across different fonts.
The oversample field is the resolution to render at. Values that don't match the glyph's native em sizing division or DPI cause it to be anti-aliased.
The skip field is either a list of strings, or a string of the characters to which this font has no assignment. If it is a list of strings, the strings are concatenated together and then act as if it were originally a string. This allows the same input as a bitmap provider's chars.
Legacy Unicode provider[edit | edit source]
The legacy_unicode provider is similar to the bitmap provider in that it loads glyphs from only textures. This format is deprecated, and is prioritized only when the "Force Unicode Font" option is turned on. It acts as a "fallback" for glyphs that no other provider has defined a texture for.
It uses a system of templates to create and add high amounts of characters. Templates are name-based, and are all PNG files. Each template file must have equal width and height. The template numbering scheme works based off of the Unicode BMP. The number used is equal to a BMP codepoint's high byte.[c][d] These template textures are called "pages". Template page "22" must cover characters U+2200 to U+22FF. Page numbers go from 00 to FF. Characters beyond U+FFFF cannot be changed through this provider. By default, each glyph is 16×16 pixels wide, so each individual template page is 256×256 pixels (16 glyphs on each line, 16 lines). Its default textures are an outdated version of GNU Unifont.[3]
The template field is a string that references a set of files. The string %s must be included in this field. %s is replaced with every valid page number, in hexadecimal.
The sizes field references a binary resource that contains the widths of each glyph. Most often, this file is called glyph_sizes.bin; this is its default name.
Each character width is one byte large. The high nibble[e] records the starting position, while the lower nibble records the ending position in the 16×16 glyph grid. For this reason, the file must be 0xFFFF bytes long (65535 in decimal).
A specific character's width is determined by finding its codepoints byte. The character 'A' has a codepoint of U+0041, so byte offset 0x41 (65 in decimal) would be addressed. A square character occupying the entire grid (pixel width #1 [0, 0x0] through #16 [15, 0xF]) would have a value of 0x0F (15 in decimal).
Widths cannot extend past 16 pixels, and characters whose codepoints are greater than U+FFFF are not handled.
Some codepoints are invalid on their own. These are the surrogate pairs; they are used to encode codepoints higher than U+FFFF in UTF-8.
This means that the template pages D8 D9 DA DB DC DD DE DF are invalid and cannot be used.
It was removed in 23w17a.
Unihex provider[edit | edit source]
The unihex provider is a replacement for the Legacy Unicode provider, introduced in 23w17a. It uses the GNU Unifont .hex format. It references a ZIP archive that contains a number of .hex files.
The hex_file field is a resource location to a .ZIP archive file. It must be openable by Java's ZipFile. Inside, there must be at least 1 .hex file at the root of the archive. Subdirectories are not walked through and filenames with an extension different from ".hex" are ignored. Filenames must follow normal file resource name rules.
In each .hex file is 1 or more glyph definitions. A glyph definitions is 1 line only, and follows the format codepoint:data. The codepoint is the Unicode codepoint, without the U+ or 0x. It must have 4, 5, or 6 digits. The data is a hexadecimal number that encodes the glyph data. Glyphs are always 16 pixels high. Glyphs can be 8, 16, 24, or 32 pixels wide.[f]
The size_overrides field is a list of compounds that define custom widths for a range of characters. Each element in this list must be a compound. Inside of each compound are 4 fields. from is the starting character for the range at which this size override applies to. to is the ending character for this range. Both from and to must be 1 character. left is the position of the left-most column of glyphs in range. right is the position of the right-most column of glyphs in range. Both left and right cannot be less than 0 or greater than 32.
Reference provider[edit | edit source]
The reference provider serves one purpose: to include another provider only once. It can be used to include providers from other fonts in other resource packs.
Referenced providers are guaranteed to be loaded only once, no matter how many times they are included.
The id field is a resource location to another font file.
Filters[edit | edit source]
All font providers can be selectively included depending upon toggle-able buttons in-game.
Right now, these buttons are hardcoded, preventing the extension of these font filtering capabilities beyond the preset options provided. Two buttons exist, located in Language -> Font Settings. They are "Force Uniform" and "Japanese Glyph Variants".
Emoji support[edit | edit source]
Minecraft has included textures for a number of emojis. The earliest emoji textures were for ☺☻.
Since 1.15, this support has expanded. Emojis are monochromatic and behave just as any other character. The game does not support modifiers, such as skin tone, joining, or emoji presentation. The skin tone modifiers U+1F3FB..U+1F3FF 🏻 🏼 🏽 🏾 🏿 do not apply colored skin tones to their applicable emojis, and instead show tones as their Unifont glyphs. Joining multiple emojis via U+200D ZERO WIDTH JOINER to create 1 single emoji is not supported; multi-sequence emoji such as 👨👩👧 instead show as 👨👩👧 with dotted boxes showing ZWJ between them. Variation selectors, which control presentation, are displayed as dotted boxes with VSnumber.
As of 1.20.2, Minecraft has support for 43 emoji.
☀ ☁ ☂ ☃ ☄ ☑ ☔ ☠ ☮ ☯ ☹ ☺ ♀ ♂ ♠ ♣ ♥ ♦ ⚓ ⚔ ⚗ ⚠ ⚡ ⛄ ⛈ ⛏ ✉ ✔ ❣ ❄ 🔥 🌊 🗡 🏹 🪓 🔱 🎣 🧪 ✂ 🍖 🪣 🔔 ⏳
Bedrock Edition does not support any character above U+FFFF, which includes many modern emoji. It does not include any textures for emojis below that either; only those provided by GNU Unifont below U+FFFF are included and visible.
Special characters[edit | edit source]
In Java Edition, there are 2 characters that are accessible only through technical means. The first is U+FFFD � REPLACEMENT CHARACTER, which appears when either the U+FFFD character is typed, or there is an invalid UTF-8 multi-byte sequence. The second is the "notdef" character,[g] seen when a character that has no texture in the currently-used font is typed. It is hardcoded and cannot be modified through resource packs. It is sometimes called "tofu" in the typographical community because of its similarity in shape to a block of tofu.
In Bedrock Edition, a character with no texture data appears as a blank space. The U+FFFD � REPLACEMENT CHARACTER shown belongs to GNU Unifont.
Bold text[edit | edit source]
Experience bar text[edit | edit source]
Shadow[edit | edit source]
In most places text is rendered, a shadow appears beneath every character.
This shadow is a copy of the character's glyph, with the red, green, and blue values divided by 4 and positioned 12.5% south-east of the character, relative to its spacing.
Regardless of the resolution of the character's texture, the shadow is always moved by 12.5%.
In the default font (assets/minecraft/textures/font/ascii.png), the shadow position is moved 1 pixel down and to the right.
For pixels where the glyph overlaps with the shadow, the above glyph's channels have 1 subtracted from them. For example, in areas where a white (#FFFFFF) glyph's pixel overlaps a shadow's, the white pixel becomes #FEFEFE.
Glowing text[edit | edit source]
Glow Ink Sac applied on a sign causes a character to create eight copies of itself in all eight directions. This results in the font appearing to have a thick outline. Glowing text always renders with an emissive texture, so it appears bright in darkness. The text takes priority over the outline; outlines appear below a character's pixels if they conflict. However, it is a rendering effect that does not actually emit any light. The player can use a black ink sac on the sign to remove the glow.
In a sign's block data, front_text or back_text's has_glowing_text controls whether the text glows.
See also[edit | edit source]
History[edit | edit source]
| Java Edition Classic | |||||
|---|---|---|---|---|---|
| 0.0.2a | Added the default ASCII font called default.gif.
{"type": "java Classic", "version": "0.0.2a", "exp": "", "snap": "", "content": "Added the default ASCII font called <code>default.gif</code>."} | ||||
| 0.0.17a | The characters 0 and O now display differently.
{"type": "java Classic", "version": "0.0.17a", "exp": "", "snap": "", "content": "The characters <code>0</code> and <code>O</code> now display differently."} | ||||
| Java Edition | |||||
| 1.1 | 11w49a | Added Unifont to fully support multi-languages.
{"type": "java", "version": "1.1", "exp": "", "snap": "11w49a", "content": "Added Unifont to fully support multi-(link to language article, displayed as languages)."} | |||
| 1.5 | 13w09a | The font texture is now able to be changed in a resource pack.
{"type": "java", "version": "1.5", "exp": "", "snap": "13w09a", "content": "The font texture is now able to be changed in a resource pack."} | |||
Added support for glyph resolutions above 16×16.
{"type": "java", "version": "1.5", "exp": "", "snap": "13w09a", "content": "Added support for glyph resolutions above 16×16."} | |||||
| 1.6.2 | reupload | Fixed distorted font when HD font is used.[4]
{"type": "java", "version": "1.6.2", "exp": "", "snap": "reupload", "content": "Fixed distorted font when HD font is used."} | |||
| 1.13 | pre6 | The ASCII font has changed and new characters have been added.
{"type": "java", "version": "1.13", "exp": "", "snap": "pre6", "content": "The ASCII font has changed and new characters have been added."} | |||
Characters such as .,()*|{}ªº"' are thinner.
{"type": "java", "version": "1.13", "exp": "", "snap": "pre6", "content": "Characters such as <span style=\"font-family: monospace, monospace;\">.,()*|{}ªº\"'</span> are thinner."} | |||||
The U+00A9 © COPYRIGHT SIGN has changed.
{"type": "java", "version": "1.13", "exp": "", "snap": "pre6", "content": "The <span style=\"font-family: monospace, monospace;\">U+00A9 © COPYRIGHT SIGN</span> has changed."} | |||||
Some math symbols (±≥≤÷≈°ⁿ²) have changed.
{"type": "java", "version": "1.13", "exp": "", "snap": "pre6", "content": "Some math symbols (<span style=\"font-family: monospace, monospace;\">±≥≤÷≈°ⁿ²</span>) have changed."} | |||||
accented.png and nonlatin_european.png has been added.
{"type": "java", "version": "1.13", "exp": "", "snap": "pre6", "content": "<code>accented.png</code> and <code>nonlatin_european.png</code> has been added."} | |||||
Fonts are now saved as TrueType font files.
{"type": "java", "version": "1.13", "exp": "", "snap": "pre6", "content": "Fonts are now saved as TrueType font files."} | |||||
| pre7 | Reverted TrueType font.
{"type": "java", "version": "1.13", "exp": "", "snap": "pre7", "content": "Reverted TrueType font."} | ||||
Retroactively removed TrueType font file from pre-6.
{"type": "java", "version": "1.13", "exp": "", "snap": "pre7", "content": "Retroactively removed TrueType font file from pre-6."} | |||||
| 1.14.2 | Pre-Release 2 | Added a default Vietnamese font.
{"type": "java", "version": "1.14.2", "exp": "", "snap": "Pre-Release 2", "content": "Added a default Vietnamese font."} | |||
Changed a character in default Armenian font.
{"type": "java", "version": "1.14.2", "exp": "", "snap": "Pre-Release 2", "content": "Changed a character in default Armenian font."} | |||||
Added missing glyphs in default Hebrew and Armenian fonts.
{"type": "java", "version": "1.14.2", "exp": "", "snap": "Pre-Release 2", "content": "Added missing glyphs in default Hebrew and Armenian fonts."} | |||||
Added Runic alphabet to the default font.
{"type": "java", "version": "1.14.2", "exp": "", "snap": "Pre-Release 2", "content": "Added Runic alphabet to the default font."} | |||||
| Pre-Release 2 | Added a default Vietnamese font.
{"type": "java", "version": "1.14.2", "exp": "", "snap": "Pre-Release 2", "content": "Added a default Vietnamese font."} | ||||
Changed a character in default Armenian font.
{"type": "java", "version": "1.14.2", "exp": "", "snap": "Pre-Release 2", "content": "Changed a character in default Armenian font."} | |||||
Added missing glyphs in default Hebrew and Armenian fonts.
{"type": "java", "version": "1.14.2", "exp": "", "snap": "Pre-Release 2", "content": "Added missing glyphs in default Hebrew and Armenian fonts."} | |||||
Added Runic alphabet to the default font.
{"type": "java", "version": "1.14.2", "exp": "", "snap": "Pre-Release 2", "content": "Added Runic alphabet to the default font."} | |||||
| Pre-Release 4 | Added more characters to the default font.
{"type": "java", "version": "1.14.2", "exp": "", "snap": "Pre-Release 4", "content": "Added more characters to the default font."} | ||||
Corrected several glyphs.
{"type": "java", "version": "1.14.2", "exp": "", "snap": "Pre-Release 4", "content": "Corrected several glyphs."} | |||||
| 1.15 | Pre-release 6 | Changed the textures of ßβ.
{"type": "java", "version": "1.15", "exp": "", "snap": "Pre-release 6", "content": "Changed the textures of <span style=\"font-family: monospace, monospace;\">ßβ</span>."} | |||
| 1.15 | More math symbols have changed.[show]
∞∅∈∩√⌠⌡
accented.png and nonlatin_european.png have more characters.
{"type": "java", "version": "1.15", "exp": "", "snap": "", "content": "<div style=\"\" class=\"collapsible collapsed collapsetoggle-inline\">\n<div>More math symbols have changed.</div>\n<div class=\"collapsible-content\" style=\"\"><span style=\"font-family: monospace, monospace;\">∞∅∈∩√⌠⌡</span>\n</div>\n</div> <code>accented.png</code> and <code>nonlatin_european.png</code> have more characters."} | ||||
| 1.16 | 20w17a | Raw JSON text format now has a font key, which defines the font to use for that component. Default is minecraft:default.
{"type": "java", "version": "1.16", "exp": "", "snap": "20w17a", "content": "(link to Raw JSON text format article, displayed as Raw JSON text format) now has a <code>font</code> key, which defines the font to use for that component. Default is <code>minecraft:default</code>."} | |||
Added the unihex provider.
{"type": "java", "version": "1.16", "exp": "", "snap": "20w17a", "content": "Added the <code>unihex</code> provider."} | |||||
The full range of Unicode is now supported in font definitions.
{"type": "java", "version": "1.16", "exp": "", "snap": "20w17a", "content": "The full range of Unicode is now supported in font definitions."} | |||||
| Pre-release 7 | accented.png and nonlatin_european.png have more characters.[show]´¨ᴀʙᴄᴅᴇꜰɢʜᴊᴋʟᴍɴᴏᴘꞯʀꜱᴛᴜᴠᴡʏᴢ {"type": "java", "version": "1.16", "exp": "", "snap": "Pre-release 7", "content": "<div style=\"\" class=\"collapsible collapsed collapsetoggle-inline\">\n<div><code>accented.png</code> and <code>nonlatin_european.png</code> have more characters.</div>\n<div class=\"collapsible-content\" style=\"\"><span style=\"font-family: monospace, monospace;\">\n´¨ᴀʙᴄᴅᴇꜰɢʜᴊᴋʟᴍɴᴏᴘꞯʀꜱᴛᴜᴠᴡʏᴢ<br/>\n§ɱɳɲʈɖɡʡɕʑɸʝʢɻʁɦʋɰɬɮʘǀǃǂǁɓ<br/>\nɗᶑʄɠʛɧɫɨʉʊɘɵɤɜɞɑɒɚɝƁƉƑƩƲႠႡ<br/>\nႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳ<br/>\nႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅჇ<br/>\nჍაბგდევზთიკლმნოპჟრსტუფქღყშ<br/>\nჩცძწჭხჯჰჱჲჳჴჵჶჷჸჹჺ჻ჼჽჾჿתּשׂפֿפּכּײַיִוֹוּבֿבּ<br/>\nꜧꜦɺⱱʠʗʖɭɷɿʅʆʓʚ₪₾֊ⴀⴁⴂⴃⴄⴅⴆ<br/>\nⴡⴇⴈⴉⴊⴋⴌⴢⴍⴎⴏⴐⴑⴒⴣⴓⴔⴕⴖⴗ<br/>\nⴘⴙⴚⴛⴜⴝⴞⴤⴟⴠⴥ⅛⅜⅝⅞⅓⅔✉☂☔☄⛄<br/>\n☃⌛⌚⚐✎❣♤♧♡♢⛈☰☱☳☴☶☷↔⇒⇏⇔⇵<br/>\n∀∃∄∉∋∌⊂⊃⊄⊅∧∨⊻⊼⊽∥≢⋆∑⊤⊥⊢⊨≔∁<br/>\n∴∵∛∜∂⋃⊆⊇□△▷▽◁◆◇○◎☆★✘₀₁₂₃₄<br/>\n₅₆₇₈₉₊₋₌₍₎∫∮∝⌀⌂⌘〒ɼƄƅẟȽƚƛ<br/>\nȠƞƟƧƨƪƸƹƻƼƽƾȡȴȵȶȺⱥȻȼɆɇȾⱦɁ<br/>\nɂɃɄɈɉɊɋɌɍɎɏẜẝỼỽỾỿꞨꞩ𐌰𐌱𐌲𐌳𐌴𐌵𐌶𐌷<br/>\n𐌸𐌹𐌺𐌻𐌼𐌽𐌾𐌿𐍀𐍁𐍂𐍃𐍄𐍅𐍆𐍇𐍈𐍉𐍊🌧🔥🌊</span>\n</div>\n</div>"} | ||||
| 1.18 | 21w37a | Added the illageralt font, from Minecraft Dungeons.
{"type": "java", "version": "1.18", "exp": "", "snap": "21w37a", "content": "Added the <code>illageralt</code> font, from ''(link to Minecraft Dungeons article, displayed as Minecraft Dungeons)''."} | |||
| 1.19 | 22w11a | Added the space provider.
{"type": "java", "version": "1.19", "exp": "", "snap": "22w11a", "content": "Added the <code>space</code> provider."} | |||
Rendering of the space glyph is no longer hardcoded; it needs to be declared manually in the font.
{"type": "java", "version": "1.19", "exp": "", "snap": "22w11a", "content": "Rendering of the space glyph is no longer hardcoded; it needs to be declared manually in the font."} | |||||
| 1.20 | 23w17a | Removed the legacy_unicode provider.
{"type": "java", "version": "1.20", "exp": "", "snap": "23w17a", "content": "Removed the <code>legacy_unicode</code> provider."} | |||
Added the unihex provider.
{"type": "java", "version": "1.20", "exp": "", "snap": "23w17a", "content": "Added the <code>unihex</code> provider."} | |||||
Added the reference provider.
{"type": "java", "version": "1.20", "exp": "", "snap": "23w17a", "content": "Added the <code>reference</code> provider."} | |||||
Updated GNU Unifont to 15.0.01.
{"type": "java", "version": "1.20", "exp": "", "snap": "23w17a", "content": "Updated GNU Unifont to 15.0.01."} | |||||
| Pre-release 5 | Updated GNU Unifont to 15.0.03.
{"type": "java", "version": "1.20", "exp": "", "snap": "Pre-release 5", "content": "Updated GNU Unifont to 15.0.03."} | ||||
| release | Updated GNU Unifont to 15.0.06.
{"type": "java", "version": "1.20", "exp": "", "snap": "release", "content": "Updated GNU Unifont to 15.0.06."} | ||||
| 1.20.3 | 23w45a | Updated GNU Unifont to 15.1.04.
{"type": "java", "version": "1.20.3", "exp": "", "snap": "23w45a", "content": "Updated GNU Unifont to 15.1.04."} | |||
| 1.20.5 | 24w06a | Added font variant filters to font providers.
{"type": "java", "version": "1.20.5", "exp": "", "snap": "24w06a", "content": "Added font variant filters to font providers."} | |||
| Pocket Edition Alpha | |||||
| v0.1.0 | Added the default ASCII font called default8.png.
{"type": "pocket Alpha", "version": "v0.1.0", "exp": "", "snap": "", "content": "Added the default ASCII font called <code>default8.png</code>."} | ||||
| v0.11.0 | build 1 | Added Unifont to fully support multi-languages.
{"type": "pocket Alpha", "version": "v0.11.0", "exp": "", "snap": "build 1", "content": "Added Unifont to fully support multi-languages."} | |||
Trivia[edit | edit source]
- The general typographic design has been present in many previous games by Markus Persson, such as Legend of the Chambered.
- According to the Bedrock Edition Chat Settings and the Bedrock Edition game files, the name of the font used by Bedrock Edition is called "Mojangles".
- According to Java Edition 1.13-pre6, the name of the font used by Java Edition is called "Minecraft Seven".
- The copyright symbol
©was often misinterpreted in other resource packs because of a texture error. This was fixed in 1.13. - The characters U+00B8 CEDILLA
¸and U+0327 COMBINING CEDILLA◌̧used to be swapped. - Although not in the changelog or specification, the default copy of the
unihexprovider also includes a __ranges field in the entries of size_overrides. It is a list of strings, being the Unicode block names of the applying range. - The New Nintendo 3DS Edition's font is a combination of the pre-1.12 JE font and some select characters from GNU Unifont. In addition, the ® sign was changed.
Gallery[edit | edit source]
-
Side-by-side comparison of glowing text versus normal text on a sign.
-
Formatted text in a book.
-
Formatted text in chat.
-
The collection of the emojis in Java Edition.
-
A diagram of typography terms and their relation to the font.
-
Example of how multi-sequence emojis do not render correctly. This is the emoji 👨👩👧. The [ZWJ] are U+200D ZERO WIDTH JOINER
-
Side-by-side comparison of � and the notdef character.
References[edit | edit source]
- ↑ For example,
{"text": "Here and there", "font": "illageralt"} - ↑ Despite its name, the TTF provider accepts OpenType ("otf") fonts.
- ↑ "High byte" refers to the first byte in a multi-byte sequence. For example, the high byte of
0xABCDis0xAB. - ↑ For codepoints with digits less than 4, they are padded with 0. For example,
0xF3would be padded to0x00F3: page 00. Likewise,0xFAEis0x0FAE: page 0F. - ↑ A nibble is "half" of a byte. For example, in the byte 0xAB, A is the high nibble and B is the low nibble.
- ↑ Because the height is always 16, the width can be calculated. It is always equal to
len(data) // 4. - ↑ Is not an actual Unicode character. "notdef" refers to the name given to it in font formats.
External links[edit | edit source]
| [hide] | |
|---|---|
| General mechanics | |
| Survival | |
| Combat | |
| Environment | |
| Movement | |
| User interface | |
| Visuals | |