Software development library to render text onto bitmaps, and other font-related operations
Lower case e, is, and w subpixel rendered with FreeType
FreeType is a popular software development library used to render text onto bitmaps, and which provides support for other font-related operations. The FreeType font rasterization engine is free and open-source software with the source code dual-licensed under a BSD-like license and the GPL. FreeType supports a number of font formats, including TrueType, Type 1, and OpenType, and "is designed to be small, efficient, highly customizable, and portable while capable of producing high-quality output (glyph images)."
An ability to access the embedding and subsetting restriction information of fonts was added in 2.3.8.
Support for applying a special filter to bitmaps generated by 'FT_Render_Glyph' if one of FT_RENDER_MODE_LCD and FT_RENDER_MODE_LCD_V has been selected was added in 2.3.0, while LCD-optimized rendering was disabled in all default builds of the library. LCD filter became normalized and color-balanced in 2.6.2. The 'Harmony' hinting method, which replicates the result of ClearType subpixel hinting with a light 3-tap filter without using ClearType techniques, became the default subpixel hinting method in 2.8.1. Since the ClearType-related patents expired, ClearType is available to use in 2.10.3.
- The TrueType bytecode interpreter was turned off in 2.0 Beta 8, and then it was turned off again in 2.0.2. The TrueType bytecode interpreter has been fixed to produce exactly the same output as FreeType 1.x in 2.1.0. The unpatented hinter became default in 2.3.0, which detects the need of the hinter by font name. The ability to detect patented bytecode instructions and toggling of unpatented hinter were added in 2.3.5. The TrueType bytecode interpreter was enabled by default in 2.4.0. TrueType subpixel hinting support is implemented in 2.4.11. The subpixel hinting mode in version 40 of the bytecode engine was added in 2.6.4, and was disabled in 2.6.5, then enabled by default in 2.7. The 'GETVARIATION' bytecode operator was implemented in 2.7.
- The PostScript hinter was removed in 2.0.5. A new PostScript hinter was introduced in 2.0.6 to support native hints in PostScript Type 1, PostScript CID, and CFF/CEF. The hinting engine was updated in 2.1.3. A new CFF parsing and hinting engine by Dave Arnold was introduced in 2.4.12. 126.96.36.199 enables this by default. The old CFF engine was disabled by default. CFF stem darkening can be configured via 'darkening-parameters' property. The CFF Stem darkening behaviour became configurable at build time in 2.5.4. The CFF operator 'random' is supported in 2.8, completing support of all CFF opcodes. The ability to control pseudo-random number generation for the 'random' operator was added in 2.8. Support of Type 1 font using Adobe CFF engine was added in 2.9. Starting in 2.9, PostScript names for named instances in a variation font is changed to algorithmically-derived PostScript name by default, unless the named instance is set with 'FT_Set_Named_Instance' and the font has corresponding entries in its 'fvar' table.
- New auto-hinting module was added in 2.0 Beta 8. Hinting engine was updated in 2.1.3. In 2.1.8, autohinting is disabled for glyphs that are vertically distorted or mirrored. Auto-hinter was replaced by auto-fitter in FreeType 2.1.10. A new algorithm for CJK fonts was introduced in FreeType 2.2, based on Akito Hirai's patch. It only works for fonts with a Unicode character map. Improved support for serifs, corner cases, and spacing adjustments were introduced in 2.3.2. When computing blue zones, single-point contours are ignored in 2.3.3. In 2.3.5, default hinter for non-Latin scripts was switched to CJK hinting module. In 2.4.5, if automatic hinting is not explicitly disabled, Auto-hinter is used if a TrueType-based font doesn't contain native hints. In 2.5.1, Auto-hinter rendering for TrueType fonts was improved, especially in the range 20–40 ppem. Support of HarfBuzz library 0.9.19 or newer was added in 2.5.3. Auto-hinting was added to Devanagari and Telugu (experimental) scripts in 2.5.4. Auto-hinting was added to Arabic and Thai scripts in 2.6. Auto-hinting was added to Lao script, with Arabic script support being enhanced in 2.6.1. Stem darkening was added in 2.6.2 but disabled by default. Auto-hinting was added to Armenian, Cherokee, Ethiopic, Georgian, Gujarati, Gurmukhi, Malayalam, Sinhala, Tamil scripts in 2.6.4. Auto-hinting was added to Adlam, Avestan, Bamum, Buhid, Carian, Chakma, Coptic, Cypriot, Deseret, Glagolitic, Gothic, Kayah, Lisu, N'Ko, Ol Chiki, Old Turkic, Osage, Osmanya, Saurashtra, Shavian, Sundanese, Tai Viet, Tifinagh, Unified Canadian Syllabics, Vai in 2.8. Disabled 'Light' auto-hinting mode using TrueType metrics for TrueType fonts by default in 2.8. A mode to display light auto-hinting with sub-pixel positioning was added to 'ftdiff' in 2.8. In 2.9.1, auto-hinter script ranges were updated for Unicode 11, with new scripts for Georgian Mtavruli.
Screenshot of MacType config windows, a frontend of FreeType
Adobe's new SING Glyphlet format was introduced in FreeType 2.2.
- Support of BDF format was added in 2.1.1, which includes support of anti-aliased bitmaps. Added support of retrieve BDF properties in 2.1.4-rc1. Added support of SETWIDTH_NAME and ADD_STYLE_NAME properties in 2.1.8. In 2.1.9, the DEFAULT_CHAR property (if available) is used to select a glyph shape for the undefined glyph. In 2.1.10, FT_Set_Pixel_Sizes and FT_Set_Char_Size were changed to select the font's actual font dimensions and 'nominal' size respectively, with the width parameter being ignored; the BDF driver no longer converts all returned bitmaps with a depth of 2bpp or 4bpp to a depth of 8bpp. Support for the whole Unicode encoding range was added in 2.4.9. An ability to use the values of the 'SIZE' keyword to process fonts without 'POINT_SIZE', 'RESOLUTION_X', or 'RESOLUTION_Y' properties was added in 2.8.1.
- Native support of gzip-compressed font files was added in 2.1.3. Support to retrieve PCF properties was added in 2.1.4-rc1. In 2.2.8, FreeType added support of the SETWIDTH_NAME and ADD_STYLE_NAME properties, and bitmap fonts compressed with the LZW algorithm. In 2.1.10, FT_Set_Pixel_Sizes and FT_Set_Char_Size were changed to select the font's actual font dimensions and 'nominal' size respectively, with the width parameter being ignored. Support showing more 'colourful' family names was added in 2.7.1, with the feature made optional in 2.8.
- Portable Font Resource (PFR)
- Starting from 2.1.3, FreeType supported embedded bitmaps and returns correct kerning metrics for all glyphs. An ability to return the font family and style names when they're available was added in 2.1.4-rc2.
- CID and CFF/Type2/CEF drivers were added in 2.0 Beta 8. Improved support for synthetic (transformed) fonts was added in 2.0.2. Type 42 font driver was added in 2.1.1. Support of CFF fonts containing a subset of their reference charset was added in 2.1.4-rc1. In 2.1.8, FreeType added support of hexadecimal format of data after the `StartData' command in CID-keyed Type 1 fonts, and embedded bitmaps in SFNT-based CFF fonts. Access to CID registry ordering supplement was added in 2.3.6. Access CID-keyed CFF fonts via CID values via 'FT_Get_CID_Is_Internally_CID_keyed' and 'FT_Get_CID_From_Glyph_Index' were added in 2.3.9. Retrieving dictionary keys in Type 1 fonts via new 'FT_Get_PS_Font_Value' API was added in 2.4.8. CFF engine supports all Type 2 operators except 'random' in 2.6.3. Track kerning support for AFM file is added in FreeType 2.2.
- Support of OpenType 1.3 formats 8, 10, 12 was added in 2.0.5. Support of TrueType or OpenType fonts embedded in PDF documents without 'cmap', 'post' and 'name' was added in 2.0.8. Support of fonts with broken name tables with invalid entries and wild offsets was added in 2.0.9. Support certain 'broken' fonts that load under Windows without problems in 2.1.3. Support for TrueType tables without a 'hmtx' table when using incremental interface was added in 2.1.4-rc1, and the depth of composite glyphs is limited. Support for tables 'avar', 'cvar', 'fvar', and 'gvar' was added in 2.1.9. Setting family and style in SFNT fonts is handled by TT_NAME_ID_PREFERRED_FAMILY and TT_NAME_ID_PREFERRED_SUBFAMILY strings in 2.1.10. In 2.1.10, FT_Sfnt_Table_Info API was added to retrieve name and size information of SFNT tables, and API FT_OpenType_Validate was added to validate OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF). Bit 1 in the 'head' table of TrueType fonts is supported in FreeType 2.2. Support of loading TrueType name encoded in UTF-16 was added in 2.3.0, and TrueTypeGX validator (gxvalid) started checking the order of glyph IDs in the kern table. Microsoft Unicode cmaps in TrueType fonts became preferred over Apple cmaps by default in 2.3.6. 'MATH' OpenType table validation and cmap 14 support were added in 2.3.6. Ability to pass the dropout mode to the B&W rasterizer was added in 2.3.7. Experimental Type 1 and CID-keyed Type 1 fonts in an SFNT wrapper was added in 2.3.8 (tables 'TYP1' and 'CID ' are passed to the PS Type 1 and CID-keyed PS font drivers). Support for SFNT cmap 13 table format was added in 2.3.10. Support of TrueType fonts without family name via detection of lengths and checksums of Type42-persistent subtables ('cvt ', 'fpgm', and 'prep') was added in 2.4.4, as well as proper support of UVS (TrueType/OpenType cmap format 14). Support for OpenType collections and CFF fonts within an SFNT wrapper are added in 2.4.11. Support of 'CBDT', 'CBLC' tables (embedded coloured bitmaps) were added in 2.5.0. Support of Apple's 'sbix' color bitmap format, and 'OS/2' SFNT table version 5 were added in 2.5.1. In 2.6, advance widths and side bearing values in CFFs (wrapped in an SFNT structure) are now always taken from the 'hmtx' table, and PostScript font name of a CFF font (wrapped in an SFNT structure) is now always taken from the 'name' table. Support of CFF2 font format from OpenType 1.8 was added in 2.7.1. Support for 'VVAR' and 'MVAR' tables (also enabled support of OpenType Variation Fonts), 'Format 1' SFNT 'name' table, OpenType version 1.8.1 were added in 2.8. Ability to access the 'flags' field of a variation axis, synthesizing a missing Unicode cmap for TrueType fonts if glyph names are available, were added in 2.8.1.
- Windows raster font (.FON)
- Windows FNT/FON driver was added in 2.0 Beta 8. Windows FNT specific API was added in 2.1.4-rc1. Support of Windows raster font files in PE executable format was added in 2.3.5.
- Support of WOFF font format was added in 2.5.1.
A TrueType name table loader which supports 'buggy' Asian fonts was added in 2.1.1, which ignores empty name entries, invalid pointer offsets and a few other incorrect subtleties. In addition, name strings are now loaded on demand, which reduces the memory load of many faces. Support of managing UCS-4 character codes in the CMap cache was added in 2.1.4-rc2. In 2.1.8, support of deinstallation of faces, and deleting all 'idle' nodes that correspond to a given FTC_FaceID was added. In the Type 1 loader, top-level dictionaries were properly skipped starting from 2.3.0 An ability to use fractional pixel sizes in the cache was added in 2.3.5. >An ability to extract advance values of glyphs without loading their outlines was added in 2.3.8. Incremental font loading is enabled by default in 2.3.12.
- An automatic build on AIX systems was added in 2.0.4.
- Amiga / MorphOS
- Support for Amiga was added in 2.0.5.
- Support for building FreeType on the 16-bit Atari using the PureC compiler was added in 2.1.8.
- BeOS-specific files were added in 2.0.3.
- Support for EPOC was re-added in 2.0.2.
- Support for Symbian was added in 2.3.6.
- Support for building the PFR driver with Visual C++ was added in 2.1.2.
- In 2.1.0, FreeType License was updated to include a proposed preferred disclaimer.
- ftvalid sources, used by ftlayout code, were relicensed to 'Old-Style' MIT licence in 2008-01-03.
Work on the FreeType rendering engine was started in 1995 by David Turner with the intent to provide TrueType font support for the OS/2 operating system, including an interpreter for handling TrueType bytecode. Originally written in the Pascal programming language it was ported in 1997 by Robert Wilhelm to C. Later, Werner Lemberg joined the team and he is still a maintainer of Freetype.
FreeType 1 had support only for the TrueType font format but it included an extension to support OpenType text layout features.
Major rewrite 2.0
Version 2.0 of FreeType was announced back in 1998, with development release made available in 1999, and a final release available in 2000, providing a complete rewrite to make it more modular. FreeType 2 brought support for more font formats and an evolved source code which the developers stated was "simpler and more powerful". FreeType 2 is not backward-compatible with FreeType 1 but the developers stated that moving from FreeType 1 to FreeType 2 poses little difficulty. As text layout processing was not an objective of FreeType 2, however, the OpenType text layout functionality of FreeType 1 was removed in FreeType 2. A very evolved form of the OpenType text layout functionality of FreeType 1 is used in the Pango text layout library. The HarfBuzz project is further evolving that functionality with a complete rewrite offered as a standalone library with a less restrictive license than Pango's license.
In 1999, the Freetype project was informed by Apple Incorporated that FreeType was infringing patents related to TrueType font hinting. Following that, Freetype deactivated by default or worked around patent relating technologies. Therefore, several open source projects, such as FreeBSD or Linux, had FreeType included with font hinting functionality disabled or degraded to avoid the issue of software patents held by Apple Inc.
Since May 2010, all conflicting software patents related to font hinting have expired, allowing FreeType's TrueType font hinter to be used in open source. Many of the operating systems which disabled the renderer now give the user the option to enable it. In Fedora, freetype-freeworld was switched from the proprietary yum repository to the free repository.
Since August 2019, all conflicting software patents related to ClearType color filtering have expired, allowing FreeType to use ClearType color filtering method in 2.10.3.
CFF engine donation
In 2013 Adobe donated a CFF rendering engine to the FreeType project which integrated it and made it the default with version 2.5.
- FreeType is used as a font renderer in Android.
- Apple uses FreeType in iOS and macOS next to Apple Advanced Typography.
- In 2007, Sun Microsystems switched from using a proprietary font rasterizer to using FreeType in the OpenJDK Java development kit.
- Sony ships FreeType with its PlayStation 3, PlayStation 4, and PlayStation Vita consoles.
- FreeType is used as a font renderer in ReactOS.
As well as being used by the major free software desktop systems, FreeType has been used as a rasterization engine for some modern video games, and Opera for the Wii.
On Windows, projects like gdipp and MacType aim to override the system renderer with FreeType.