Skip to content

mapbox/node-fontnik

Folders and files

NameName
Last commit message
Last commit date
Apr 24, 2023
Oct 3, 2022
Oct 3, 2022
Oct 21, 2016
Mar 2, 2017
Apr 24, 2023
Jun 29, 2020
Oct 3, 2022
Nov 21, 2017
May 23, 2020
Apr 24, 2023
Jul 9, 2015
May 23, 2020
Jun 2, 2020
Apr 24, 2023
Oct 19, 2015
Apr 24, 2023
Aug 7, 2014
Apr 24, 2023
Oct 5, 2022
Apr 24, 2023
Oct 3, 2022
Apr 24, 2023
Apr 24, 2023
Apr 24, 2023

node-fontnik

NPM Build Status codecov

A library that delivers a range of glyphs rendered as SDFs (signed distance fields) in a protocol buffer. We use these encoded glyphs as the basic blocks of font rendering in Mapbox GL. SDF encoding is superior to traditional fonts for our usecase in terms of scaling, rotation, and quickly deriving halos - WebGL doesn't have built-in font rendering, so the decision is between vectorization, which tends to be slow, and SDF generation.

The approach this library takes is to parse and rasterize the font with Freetype (hence the C++ requirement), and then generate a distance field from that rasterized image.

See also TinySDF, which is a faster but less precise approach to generating SDFs for fonts.

Installing

By default, installs binaries. On these platforms no external dependencies are needed.

  • 64 bit OS X or 64 bit Linux
  • Node.js v8-v16

Just run:

npm install

However, other platforms will fall back to a source compile: see building from source for details.

Building from source

npm install --build-from-source

Building from source should automatically install boost, freetype and protozero locally using mason. These dependencies can be installed manually by running ./scripts/install_deps.sh.

Local testing

Run tests with

npm test

If you make any changes to the C++ files in the src/ directory, you'll need to recompile the node bindings (fontnik.node) before testing locally:

make

See the Makefile for additional tasks you can run, such as make coverage.

Background reading