Pure-functional language bindings to Harfbuzz; the "text-shaping" library deciding which "glyphs" should represent each few consecutive chars.
4fd909d1 — Adrian Cochrane 6 months ago
Fix & expand type signatures.
ac0a6b05 — Adrian Cochrane 6 months ago
Add more documentation.
be566265 — Adrian Cochrane 6 months ago
Benchmark performance of shaping individual words.


browse  log 



You can also use your local clone with git send-email.

#Pure-functional Harfbuzz language bindings.

Git repo Issue Tracker Hackage

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 practically any writing system and written language.

NOTE: You may need to install Harfbuzz 3.3.0 (Jan 2022) or newer from source, it hasn't been widely packaged yet.

These APIs map closely to those Harfbuzz 3.3.0 exposed, but tweaked to be pure-functional & reuse common Haskell datatypes. They throw HarfbuzzError should they run out of memory, though that should be extremely rare & otherwise contain no side-effects.


  • Harfbuzz 3.3.0 or greater
  • LibStdC++ (for Text dependency)
  • Cabal

Cabal is capable of installing the few other dependencies.

For normal use please install via Hackage.


Please see the Haddock documentation for API usage.

Contains a demo program in Main.hs, which can be run via cabal run, that textually outputs the shaping data for given text under the Lora font. Commandline arguments, if any, are the text to be rendered. Otherwise uses "Testing, testing".


Please send patches to our issue tracker by either:

Whichever you find most convenient.

If you'd prefer to not make your email address public please contact alcinnz@argonaut-constellation.org !