HarfBuzz

HarfBuzz is a text shaping library. Using the HarfBuzz library allows programs to convert a sequence of Unicode input into properly formatted and positioned glyph output—for any writing system and language.

The canonical source-code tree is available at github.com/harfbuzz/harfbuzz. See Downloading HarfBuzz for release tarballs.


I. User's manual
What is HarfBuzz?
What is text shaping?
Why do I need a shaping engine?
What does HarfBuzz do?
What HarfBuzz doesn't do
Why is it called HarfBuzz?
Installing HarfBuzz
Downloading HarfBuzz
Building HarfBuzz
Building on Linux
Building on Windows
Building on macOS
Configuration options
Getting started with HarfBuzz
An overview of the HarfBuzz shaping API
Terminology
A simple shaping example
Shaping concepts
Text shaping
Complex scripts
Shaping operations
Unicode character categories
Text runs
OpenType shaping models
Graphite shaping
AAT shaping
The HarfBuzz object model
An overview of data types in HarfBuzz
Objects in HarfBuzz
Object lifecycle management
User data
Blobs
Buffers, language, script and direction
Creating and destroying buffers
Adding text to the buffer
Setting buffer properties
Customizing Unicode functions
Fonts, faces, and output
Font and face objects
Customizing font functions
Font objects and HarfBuzz's native OpenType implementation
Working with OpenType Variable Fonts
Shaping and shape plans
Shaping and buffer output
OpenType features
Shaper selection
Plans and caching
Clusters
Clusters and shaping
Working with HarfBuzz clusters
A clustering example for levels 0 and 1
Reordering in levels 0 and 1
The distinction between levels 0 and 1
Level 2
Ligatures with combining marks in level 2
Reordering in level 2
Other considerations in level 2
Utilities
Command-line tools
hb-shape
hb-view
hb-subset
Common data types and APIs
Platform Integration Guide
GNOME integration, GLib, and GObject
FreeType integration
Uniscribe integration
Core Text integration
ICU integration
Python bindings
II. Reference manual
Core API
hb-blob — Binary data containers
hb-buffer — Input and output buffers
hb-common — Common data types
hb-draw — Glyph drawing
hb-deprecated — Deprecated API
hb-face — Font face objects
hb-font — Font objects
hb-map — Object representing integer to integer mapping
hb-set — Objects representing a set of integers
hb-shape-plan — Object representing a shaping plan
hb-shape — Conversion of text strings into positioned glyphs
hb-unicode — Unicode character property access
hb-version — Information about the version of HarfBuzz in use
OpenType API
hb-ot-color — OpenType Color Fonts
hb-ot-font — OpenType font implementation
hb-ot-layout — OpenType Layout
hb-ot-math — OpenType Math information
hb-ot-meta — OpenType Metadata
hb-ot-metrics — OpenType Metrics
hb-ot-name — OpenType font name information
hb-ot-shape — OpenType shaping support
hb-ot-var — OpenType Font Variations
Apple Advanced Typography API
hb-aat-layout — Apple Advanced Typography Layout
Integration API
hb-coretext — CoreText integration
hb-ft — FreeType integration
hb-glib — GLib integration
hb-graphite2 — Graphite2 integration
hb-icu — ICU integration
hb-uniscribe — Windows integration
hb-gdi — GDI integration
hb-directwrite — DirectWrite integration
Style API
hb-style — Font Styles
Subset API
hb-subset — Subsets font files.
API Index
Index of deprecated API
Index of new symbols in 4.3.0
Index of new symbols in 4.2.0
Index of new symbols in 4.1.0
Index of new symbols in 4.0.0
Index of new symbols in 3.4.0
Index of new symbols in 3.3.0
Index of new symbols in 3.1.0
Index of new symbols in 3.0.0
Index of new symbols in 2.9.1
Index of new symbols in 2.9.0
Index of new symbols in 2.8.2
Index of new symbols in 2.7.3
Index of new symbols in 2.6.8
Index of new symbols in 2.6.5
Index of new symbols in 2.6.3
Index of new symbols in 2.6.0
Index of new symbols in 2.5.0
Index of new symbols in 2.4.0
Index of new symbols in 2.3.0
Index of new symbols in 2.2.0
Index of new symbols in 2.1.0
Index of new symbols in 2.0.0
Index of new symbols in 1.9.0
Index of new symbols in 1.8.6
Index of new symbols in 1.8.5
Index of new symbols in 1.8.1
Index of new symbols in 1.8.0
Index of new symbols in 1.7.7
Index of new symbols in 1.7.2
Index of new symbols in 1.6.0
Index of new symbols in 1.5.0
Index of new symbols in 1.4.3
Index of new symbols in 1.4.2
Index of new symbols in 1.4.0
Index of new symbols in 1.3.3
Index of new symbols in 1.2.3
Index of new symbols in 1.1.3
Index of new symbols in 1.1.2
Index of new symbols in 1.0.5
Index of new symbols in 0.9.42
Index of new symbols in 0.9.41
Index of new symbols in 0.9.39
Index of new symbols in 0.9.38
Index of new symbols in 0.9.33
Index of new symbols in 0.9.31
Index of new symbols in 0.9.30
Index of new symbols in 0.9.28
Index of new symbols in 0.9.26
Index of new symbols in 0.9.22
Index of new symbols in 0.9.21
Index of new symbols in 0.9.20
Index of new symbols in 0.9.11
Index of new symbols in 0.9.10
Index of new symbols in 0.9.8
Index of new symbols in 0.9.7
Index of new symbols in 0.9.5
Index of new symbols in 0.9.2
Index of new symbols in 0.6.0
Annotation Glossary

The current HarfBuzz codebase is versioned 2.x.x and is stable and under active maintenance. This is what is used in latest versions of Firefox, GNOME, ChromeOS, Chrome, LibreOffice, XeTeX, Android, and KDE, among other places.

Prior to 2012, the original HarfBuzz codebase (which, these days, is referred to as harfbuzz-old) was derived from code in FreeType, Pango, and Qt. It is not actively developed or maintained, and is extremely buggy. All users of harfbuzz-old are encouraged to switch over to the new HarfBuzz as soon as possible.

To make this distinction clearer in discussions, the current HarfBuzz codebase is sometimes referred to as harfbuzz-ng.

For reference purposes, the harfbuzz-old source tree is archived here. There are no release tarballs of harfbuzz-old whatsoever.