Thanks to visit codestin.com
Credit goes to github.com

Skip to content

fontist/fontist

Repository files navigation

Fontist

Build Status Gem Version Pull Requests

Fontist lets you find and download fonts for Windows, Linux and Mac.

Fontist is designed to facilitate automated and unattended management of font installations on modern operating systems.

Fontist provides a repository of open Fontist Formulas that can be easily installed, and also supports private font formula repositories for private or licensed commercial fonts.

Learn more (and find your font) at fontist.org.

Installation

Install it directly as:

gem install fontist

Or use it as part of your bundle by adding this line to your application’s Gemfile:

gem "fontist"

And then execute:

bundle install

Fetch formulas

After installation, please fetch formulas via the fontist command:

fontist update

Dependencies

Depends on ffi-libarchive-binary which has the following requirements:

  • zlib

  • Expat

  • OpenSSL (for Linux only)

These dependencies are generally present on all systems.

Note
As of v2.1, Fontist uses modern, pure-Ruby font processing libraries: fontisan for font metadata extraction and collection handling (replacing the legacy ttfunk and extract_ttc gems), and marcel for MIME type detection (replacing mime-types). These changes improve cross-platform compatibility and eliminate external binary dependencies.

Prerequisites

Some of Fontist’s dependencies require native compilation during installation. The following build tools are required depending on your platform.

Ubuntu/Debian

sudo apt-get install build-essential ruby-dev git
  • build-essential provides gcc and g++ compilers needed for native gem extensions

  • ruby-dev provides Ruby headers required for gem compilation

  • git is required for fontist update and fontist repo commands

Fedora/RHEL/CentOS

sudo dnf install gcc gcc-c++ make ruby-devel git

For RHEL/CentOS 7 or earlier, use yum instead of dnf.

macOS

xcode-select --install

This installs the Xcode Command Line Tools which include:

  • clang compiler (compatible with gcc/g++)

  • git command-line tool

  • Required headers and libraries for native gem compilation

Windows

  1. Install Ruby using RubyInstaller with DevKit (select the "Ruby+Devkit" version)

  2. After installation, run the following in a command prompt to set up MSYS2:

    ridk install

    Select option 3 (MSYS2 and MINGW development toolchain) when prompted.

  3. Install Git for Windows

Optional: Fontconfig (Linux)

On Linux systems, if you want to use fontist fontconfig update to make Fontist fonts available to other applications, install fontconfig:

# Ubuntu/Debian
sudo apt-get install fontconfig

# Fedora/RHEL/CentOS
sudo dnf install fontconfig

Why are build tools needed?

Fontist depends on several gems that include native C/C++ extensions:

Gem Compiler Purpose

json

gcc

JSON processing

brotli (via fontisan)

gcc

WOFF2 font decompression

seven-zip (via excavate)

g++

7z archive extraction

libmspack (via excavate)

gcc

CAB/CHM archive extraction

ffi-libarchive-binary (via excavate)

gcc

Archive extraction (zip, tar, etc.)

Note
Some gems like nokogiri and ffi provide prebuilt binaries for common platforms, so they typically don’t require compilation.

Using the command-line interface (CLI)

The fontist command

These commands makes possible to operate with fonts via command line.

The CLI properly supports exit status, so in a case of error it returns a status code higher or equal than 1.

Searches are case-insensitive for ease of use.

All commands support the following global options:

--preferred-family

Search using the “preferred family” name of a font. (instead of the “default family” name, the default prior to Fontist v1.10.)

Note
See [preferred-family-change] for the differences between “preferred family” and “default family”.
-q, --quiet

Print as little information as possible, mostly critical errors.

-v, --verbose

Set the log level to debug. It prints formulas excluded during installation and information for developers of fontist.

-c, --no-cache

Prefer direct download even when a file is already cached in a system.

Install fonts: fontist install

Fontist checks whether this font is already installed, and if not, then installs the font and returns its installed paths.

The font name is the only argument to be supplied:

$ fontist install "segoe ui"
These fonts are found or installed:
- /Users/user/.fontist/fonts/SEGOEUI.TTF
- /Users/user/.fontist/fonts/SEGOEUIB.TTF
- /Users/user/.fontist/fonts/SEGOEUII.TTF
- /Users/user/.fontist/fonts/SEGOEUIZ.TTF

Multiple fonts can be installed in a single command:

$ fontist install "segoe ui" "roboto" "arial"
Successfully installed 3 font(s): segoe ui, roboto, arial

When installing multiple fonts, Fontist will continue installing remaining fonts even if one fails, and report all results at the end:

$ fontist install "segoe ui" "nonexistent font" "roboto"
Successfully installed 2 font(s): segoe ui, roboto
Failed to install 1 font(s):
  - nonexistent font: Font 'nonexistent font' not found...

By default, all matching styles (according to the font’s “default family” name) are installed.

Note
Prior to v1.10, the font’s “preferred family” name is used to match styles for search. See [preferred-family-change] for details of that change.

To install all fonts specified in a Fontist formula, use the -F, --formula option.

$ fontist install --formula 'courier_prime'
Downloading font ...
Installing font "courier_prime".
Fonts installed at:
- /Users/user/.fontist/fonts/Courier Prime Bold Italic.ttf
- /Users/user/.fontist/fonts/Courier Prime Bold.ttf
- /Users/user/.fontist/fonts/Courier Prime Italic.ttf
- /Users/user/.fontist/fonts/Courier Prime.ttf

Here, courier_prime is the filename of the formula located at the public Fontist Formula repository (courier_prime.yml).

You can also specify the human-readable name of the formula. This name is derived from the filename, with underscores replaced by spaces. It’s not case-sensitive, meaning you can use capital letters if you prefer.

$ fontist install --formula "Courier Prime"
$ fontist install --formula "Google/Noto Sans"

Installation by the formula name supports suggestions in CLI when input is partial:

$ fontist install --formula 'noto s'
Formula 'noto s' not found. Did you mean?
[0] Google/Noto Sans
[1] Google/Noto Serif
Please type number or press ENTER to skip installation:
Note
Specifying the font’s filename is not supported yet.

If there are several formulas with a requested font, then fontist searches for the newest version of the font among formulas with size below a limit (300 MB). This behavior can be changed with options.

Note
If styles of a font are spread among several formulas, then all available styles from all formulas would be installed.
Note
Some formulas may have the min_fontist attribute, which defines the minimum version of fontist by which they can be installed. If fontist is of a older version, then the formula is avoided to use. In order to see which formulas were excluded from the search, the -v, --verbose option can be specified.

Supported options:

-l, --location=LOCATION

Specify installation location: fontist (default), user, or system

-f, [--force]

Install even if already installed in system

-F, [--formula]

Install whole formula instead of a font

-a, [--accept-all-licenses]

Accept all license agreements

-h, [--hide-licenses]

Hide license texts

-p, [--no-progress]

Hide download progress

-V, [--version=VERSION]

Install particular version of a font

-s, [--smallest]

Install the smallest font by file size if several

-n, [--newest]

Install the newest version of a font if several

-S, [--size-limit=N]

Specify upper limit for file size of a formula to be installed (default is 300 MB)

-u, [--update-fontconfig]

Update Fontconfig

Note
The install command is similar to the Font.install library call.

Install locations

General

Fontist supports installing fonts to different named locations on a system.

Named locations

There are three types of named locations:

fontist (default)

the Fontist font library, a per-user directory managed by Fontist

  • By default located at ~/.fontist/fonts/{formula-key}/

  • No administrative permissions required

  • Fonts organized by formula to prevent naming conflicts

  • Can be customized via FONTIST_FONTIST_FONTS_PATH environment variable or the fontist_fonts_path configuration option

user

the platform-specific user font directory used by the system

  • No administrative permissions required

  • Available to current user only

  • macOS: ~/Library/Fonts/fontist

  • Linux: ~/.local/share/fonts/fontist

  • Windows: %LOCALAPPDATA%\Microsoft\Windows\Fonts\fontist

  • By default, Fontist uses a subdirectory fontist within the user font directory to avoid cluttering the main font directory.

  • Can be customized via FONTIST_USER_FONTS_PATH environment variable or the user_fonts_path configuration option

system

the platform-specific system font directory used by the system

  • Requires administrative/sudo permissions

  • Available to all users on the system

  • macOS: /Library/Fonts/fontist

  • Linux: /usr/local/share/fonts/fontist

  • Windows: %windir%\Fonts\fontist

  • The system location on macOS for supplementary fonts cannot be changed and is managed by the OS.

  • By default, Fontist uses a subdirectory fontist within the system font directory to avoid cluttering the main font directory.

  • Can be customized via FONTIST_SYSTEM_FONTS_PATH environment variable or the system_fonts_path configuration option

Example 1. Installing fonts to different locations
# Install to Fontist library (default)
fontist install "Roboto"

# Install to user font directory
fontist install "Roboto" --location=user
fontist install "Roboto" -l user  # Short form

# Install to system font directory (may require sudo)
fontist install "Roboto" --location=system
sudo fontist install "Roboto" --location=system  # Linux/macOS

The default installation location can be configured:

Example 2. Configuring a different default named installation location
# Via config file
fontist config set install_location user

# Via environment variable
export FONTIST_INSTALL_LOCATION=user
fontist install "Roboto"  # Installs to /custom/fontist/directory/fonts/roboto/

Installed font location

The exact path where a font is installed depends on the chosen named location:

  • For the fontist location, fonts are installed to the Fontist font library, which is by default at ~/.fontist/fonts/{formula-key}/, where {formula-key} is the unique key of the formula used to install the font (e.g., roboto/, lato/) to prevent filename conflicts between different font packages.

  • For the user and system locations, fonts are installed to the standard font directories used by the operating system directly at the platform-specific user or system font directory as individual font files. Fontist will create a subdirectory named fontist within these directories to avoid cluttering the main font directory. macOS, Windows and Linux all support installing fonts in a subdirectory.

  • For system location on macOS for supplementary fonts, the fonts are installed to to the proper OS-version-specific supplementary fonts directory (e.g. /System/Library/AssetsV2/com_apple_MobileAsset_Font{n}/). This is not configurable.

Font discovery

Fontist always searches for fonts in ALL locations regardless of where they were installed:

  • System font directories (platform-specific)

  • User font directories (platform-specific)

  • Fontist font library directory

This means fonts installed by other applications or the operating system are automatically discovered and can be used by Fontist on font reindexing.

Uninstall fonts: fontist uninstall

Uninstalls any font supported by Fontist.

Returns paths of an uninstalled font, or prints an error telling that the font isn’t installed or could not be found in Fontist formulas. Aliased as remove.

$ fontist uninstall "segoe ui"
These fonts are removed:
/Users/user/.fontist/fonts/SEGOEUII.TTF
/Users/user/.fontist/fonts/SEGOEUIZ.TTF
/Users/user/.fontist/fonts/SEGOEUIB.TTF
/Users/user/.fontist/fonts/SEGOEUI.TTF

Status: fontist status

Prints installed font paths with a corresponding formula.

$ fontist status "segoe ui"
Fonts found at:
- /Users/user/.fontist/fonts/SEGOEUII.TTF (from segoe_ui formula)
- /Users/user/.fontist/fonts/SEGOEUIZ.TTF (from segoe_ui formula)
- /Users/user/.fontist/fonts/SEGOEUIB.TTF (from segoe_ui formula)
- /Users/user/.fontist/fonts/SEGOEUI.TTF (from segoe_ui formula)

List: fontist list

Lists installation status of fonts supported by Fontist.

$ fontist list "segoe ui"
segoe_ui
 Segoe UI
  Regular (installed)
  Bold (installed)
  Italic (installed)
  Bold Italic (installed)
$ fontist list "roboto mono"
google/roboto_mono
 Roboto Mono
  Regular (not installed)
  Italic (not installed)

List installed font paths: fontist manifest locations

Returns locations of fonts specified in a YAML file as an input.

$ fontist manifest locations MANIFEST_FILE

MANIFEST_FILE is the location of a manifest file that contains specification of one or multiple font and font styles.

A manifest file manifest.yml could look like:

Segoe UI:
- Regular
- Bold
Roboto Mono:
- Regular

The following command will return the following YAML output:

$ fontist manifest locations manifest.yml
---
Segoe UI:
  Regular:
    full_name: Segoe UI
    paths:
    - "/Users/user/.fontist/fonts/SEGOEUI.TTF"
  Bold:
    full_name: Segoe UI Bold
    paths:
    - "/Users/user/.fontist/fonts/SEGOEUIB.TTF"
Roboto Mono:
  Regular:
    full_name: Roboto Mono Regular
    paths:
    - "/Users/user/.fontist/fonts/RobotoMono-VariableFont_wght.ttf"

If one or more of requested fonts are missing, the "3" error code would be returned, and a message printed:

$ fontist manifest locations manifest.yml
'Roboto Mono' 'Regular' font is missing, please run `fontist install 'Roboto Mono'` to download the font.
$ echo $?
3

Install fonts from manifest: fontist manifest install

You can install all fonts specified in the manifest file:

$ fontist manifest install --confirm-license manifest.yml

Where manifest.yaml is:

---
Segoe UI:
  Regular:
    full_name: Segoe UI
    paths:
    - "/Users/user/.fontist/fonts/SEGOEUI.TTF"
  Bold:
    full_name: Segoe UI Bold
    paths:
    - "/Users/user/.fontist/fonts/SEGOEUIB.TTF"
Roboto Mono:
  Regular:
    full_name: Roboto Mono Regular
    paths:
    - "/Users/user/.fontist/fonts/RobotoMono-VariableFont_wght.ttf"

OPTIONS:

-l, --location=LOCATION

Specify installation location: fontist (default), user, or system

--confirm-license

Accept all license agreements in the manifest

Work with fontist config: fontist config

Fontist supports system-wide settings for the following parameters:

install_location

Sets installation location (fontist, user, system) (default: fontist)

fonts_path

Sets path to the Fontist font library that fonts are installed to with the fontist kind of install_location (default: ~/.fontist/fonts)

open_timeout

Sets timeout for opening a connection during download (default: 60)

read_timeout

Sets timeout for reading the opened connection during download (default: 60)

Show current attributes in the config:

$ fontist config show
Current config:
read_timeout: 5

Assign a value to an attribute:

$ fontist config set read_timeout 60

Restore a default value of an attribute:

$ fontist config delete read_timeout

Work with Fontconfig: fontist fontconfig

fontconfig is a software designed to provide fonts to other programs. It is typically used on Linux, but also available on macOS and Windows. fontconfig is used by LibreOffice, GIMP, and many other programs.

It order to find Fontist fonts, fontconfig should be updated to include Fontist paths. It can be done with the --update-fontconfig option of the install command, or by calling the following command directly:

$ fontist fontconfig update

This command will create a Fontist-specific fontconfig config file at ~/.config/fontconfig/conf.d/10-fontist.conf.

To remove it, please use:

$ fontist fontconfig remove

Working with caches

General

Fontist implements two types of caches to optimize performance and reduce redundant downloads:

  • Download cache (~/.fontist/downloads): Font files downloaded by end users via fontist install

  • Import cache (maintainer-only) (~/.fontist/import_cache): Font archives downloaded during formula imports

These caches can be managed using the fontist cache command.

Clear download cache

The following commands will clear Fontist’s caches.

Clear download cache:

$ fontist cache clear
Cache has been successfully removed.

Clear import cache:

$ fontist cache clear-import
Import cache cleared: 128.7 MB

View cache information

$ fontist cache info
Font download cache:
  Location: /Users/user/.fontist/downloads
  Size: 45.3 MB
  Files: 12

Import cache:
  Location: /Users/user/.fontist/import_cache
  Size: 128.7 MB
  Files: 8

Manage system font index: fontist index

General

Fontist maintains an index of system fonts for fast lookups. The fontist index command provides tools to manage this index.

Rebuild index: fontist index rebuild

Rebuild the system font index from scratch:

$ fontist index rebuild
System font index rebuilt successfully

With verbose output to see progress and statistics:

$ fontist index rebuild --verbose
Rebuilding system font index from scratch...
--------------------------------------------------------------------------------
Using parallel processing with 8 cores
⠇ 2056/2056 ...Library/Fonts/Zapfino.ttf

================================================================================
Index Build Statistics:
================================================================================
  Total time:          2.30 seconds
  Total fonts:         2056
  Parsed fonts:        1
  Cached fonts:        2055
  Cache hit rate:      100.0%
  Errors:              0
  Avg time per font:   2.2958 seconds
================================================================================
System font index rebuilt successfully
Note
The first rebuild will parse all fonts and take 3-5 minutes. Subsequent rebuilds leverage file-level caching and complete in seconds if fonts haven’t changed.

Incremental build: fontist index build

Build or update the index incrementally (faster than rebuild):

$ fontist index build --verbose

Show index information: fontist index info

Display information about the current index:

$ fontist index info
System Font Index Information:
--------------------------------------------------------------------------------
  Path:       /Users/user/.fontist/system_index.default_family.yml
  Size:       576.41 KB
  Fonts:      2738
  Last scan:  2025-12-14 08:25:00
--------------------------------------------------------------------------------

Clear index: fontist index clear

Delete the system font index (will be rebuilt on next use):

$ fontist index clear
System font index cleared: /Users/user/.fontist/system_index.default_family.yml

Index command options

All fontist index commands support these options:

-v, --verbose

Show detailed progress and statistics

-o, --output=PATH

Save index to specified path (for inspection)

$ fontist index rebuild --verbose --output /tmp/my-index.yml

Help: fontist help

List of all commands could be seen by:

fontist help

Configuration with environment variables

By default Fontist uses the ~/.fontist directory to store fonts and its files. It could be changed with the FONTIST_PATH environment variable.

FONTIST_PATH=~/.fontist_new fontist update

Using the Ruby library

Fontist::Font

The Fontist::Font is your go-to place to deal with any font using Fontist.

This interface allows you to find a font or install a font.

Finding a font

The Fontist::Font.find interface can be used a find a font in your system.

It will look into the operating system specific font directories, and also the fontist specific ~/.fontist directory.

Fontist::Font.find(name)

# With location parameter (must be a Symbol)
Fontist::Font.find(name: "chrono", location: :user)
Fontist::Font.find(name: "chrono", location: :system)
Fontist::Font.find(name: "chrono", location: :fontist)

# Also supports parameterized name by providing a hash map `:name => alternative_name`
Fontist::Font.find(name: "dosis", name_alternative: "iceberg")
Fontist::Font.find(name: "segoe ui", name_alternative: "blackberry")
Fontist::Font.find(name: "segoe ui", name_alternative: "아이유")

# Also supports parameterized location by providing a hash map `:location => alternative_location`
Fontist::Font.find(name: "segoe ui", location_alternative: :user)
Fontist::Font.find(name: "segoe ui", location_alternative: :system)
Fontist::Font.find(name: "segoe ui", location_alternative: :fontist)
  • If Fontist finds a font, then it will return the paths.

  • Otherwise, it will either raise an unsupported font error, or trigger display of installation instructions for that specific font.

Example 3. Various methods of using Fontist::Font.install
Fontist::Font.install(name)
Fontist::Font.install("Roboto")

# With location parameter (must be a Symbol)
Fontist::Font.install(name: "Roboto", location: :user)
Fontist::Font.install(name: "Roboto", location: :system)
Fontist::Font.install(name: "Roboto", location: :fontist)

# With confirmation to accept licenses (for non-bsd fonts)
# Default for 'confirmation' is 'no'
Fontist::Font.install(name: "SampleMapfont", confirmation: "yes")

# With location and confirmation parameter
Fontist::Font.install(name: "SampleMapfont", location: :user, confirmation: "yes")

# With custom license acceptance action
# Passes font object to a proc for potential prompt
Fontist::Font.install(name: name, license_accept_action: proc)

List all fonts

The Fontist::Font interface exposes an interface to list all supported fonts.

This might be useful if want to know the name of the font or the available styles. You can do that by using:

Fontist::Font.all

The return values are model objects, so you can easily access their properties and perform operations on them.

Fontist::Formula

The fontist gem internally usages the Fontist::Formula interface to find a registered formula or fonts supported by any formula. Unless, you need to do anything with that you shouldn’t need to work with this interface directly. But if you do then these are the public interface it offers.

Find a formula

The Fontist::Formula.find interface allows you to find any of the registered formula. This interface takes a font name as an argument and it looks through each of the registered formula that offers this font installation. Usages:

Fontist::Formula.find("Calibri")

This method will search and return a Fontist formula for the provided keyword which allows for further processing, such as license checks or proceeding with installation of the font in your system.

List font styles supported by a formula

Normally, each font name can be associated with multiple styles or collection, for example the Calibri font might contains a regular, bold or italic styles fonts and if you want a interface that can return the complete list then this is your friend.

You can use it as following:

Fontist::Formula.find_fonts("Calibri")

List all formulas

The Fontist::Formula interface exposes an interface to list all registered font formula. This might be useful if want to know the name of the formula or what type fonts can be installed using that formula. Usages:

Fontist::Formula.all

The return values are model objects, so you can easily access their properties and perform operations on them.

Fontist::Manifest

Global options

Fontist can be switched to use the preferred family names. This format was used prior to v1.10.

Fontist.preferred_family = true

Locations

Fontist lets you find font locations from a defined manifest Hash in the following format:

{
  "Segoe UI"=>["Regular", "Bold"],
  "Roboto Mono"=>["Regular"]
}

Calling the following code returns a nested Hash with font paths and names. Font name is useful to choose a specific font in a font collection file (TTC).

manifest = Fontist::Manifest.from_hash(manifest)
manifest.locations
{
  "Segoe UI"=> {
    "Regular"=>{
      "full_name"=>"Segoe UI",
      "paths"=>["/Users/user/.fontist/fonts/SEGOEUI.TTF"]
    },
    "Bold"=>{
      "full_name"=>"Segoe UI Bold",
      "paths"=>["/Users/user/.fontist/fonts/SEGOEUIB.TTF"]
    }
  },
  "Roboto Mono"=> {
    "Regular"=>{
      "full_name"=>nil,
      "paths"=>[]
    }
  }
}

Install

Fontist lets you not only to obtain font locations but also to install fonts from the manifest:

user_manifest = Fontist::Manifest.from_file("manifest.yml")
user_manifest.install(confirmation: "yes")

It will install fonts and return their locations:

{
  "Segoe UI"=> {
    "Regular"=>{
      "full_name"=>"Segoe UI",
      "paths"=>["/Users/user/.fontist/fonts/SEGOEUI.TTF"]},
    "Bold"=>{
      "full_name"=>"Segoe UI Bold",
      "paths"=>["/Users/user/.fontist/fonts/SEGOEUIB.TTF"]
    }
  },
  "Roboto Mono"=> {
    "Regular"=>{
      "full_name"=>"Roboto Mono Regular",
      "paths"=>["/Users/user/.fontist/fonts/RobotoMono-VariableFont_wght.ttf"]
    }
  }
}

Support of YAML format

Both commands support a YAML file as an input with a from_file method. For example, if there is a manifest.yml file containing:

---
Segoe UI:
- Regular
- Bold
Roboto Mono:
- Regular

Then the following calls would return font names and paths, as from the from_hash method (see Install and Locations).

user_manifest = Fontist::Manifest.from_file("manifest.yml")
user_manifest.install(confirmation: "yes")

Fontist::Fontconfig

Fontist supports work with Fontconfig via the Ruby interface:

Fontist::Fontconfig.update              # let detect fontist fonts
Fontist::Fontconfig.remove              # disable detection
Fontist::Fontconfig.remove(force: true) # do not fail if no config exists

Platform-specific features

macOS supplementary fonts

General

macOS since 10.12 (Sierra) provides a "supplementary fonts" framework (shared with iOS) for dynamically downloading and installing a wide range of licensed fonts on demand.

These macOS-specific supplementary fonts can be installed through Fontist formulas.

A typical use for installing macOS add-on fonts is to allow CI jobs on macOS environments to use these specially-licensed fonts not available on other platforms.

This blog post describes how this works:

For example, the "Canela" font is a commercial font that comes free with macOS.

Run this command to install Canela on macOS.

$ fontist install Canela

The full list of available fonts on various macOS versions can be found on the Apple Support site:

Table 1. Apple supplementary fonts by macOS version
macOS Version Apple support link

26

Fonts included with macOS Tahoe

15

Fonts included with macOS Sequoia

14

Fonts included with macOS Sonoma

13

Fonts included with macOS Ventura

12

Fonts included with macOS Monteray

11

Fonts included with macOS Big Sur

10.15

Fonts included with macOS Catalina

10.14

Fonts included with macOS Mojave

10.13

Fonts included with macOS High Sierra

10.12

Fonts included with macOS Sierra

Warning
Fontist does not allow installing macOS-specific fonts on non-macOS platforms due to font license restrictions of those fonts.
Note

On macOS a supplementary font can be installed in two ways:

  • user applications are allowed to trigger the installation of these fonts when needed, as described in Apple’s "DownloadFont" sample.

  • through searching within Font Book.app, locating the desired font, and clicking "download".

Both ways will trigger a download from Apple’s Mobile Asset Server.

macOS supplementary font framework versioning

The macOS supplementary font catalog for each macOS version is bound to a specific framework version. Different framework versions contain different sets of fonts, and often different versions of the same fonts.

A macOS system is only able to download fonts from the catalog version corresponding to its framework version, and Fontist respects this limitation when installing these fonts.

In Fontist Formulas, each supplementary font is backed by a formula specifying the font framework version it belongs to, using the catalog_version attribute. As a result, the same supplementary font will use different formulas for different macOS versions.

Note
See Dynamically importing formulas from macOS for details on the mapping of framework versions to macOS versions.

When you install a macOS add-on font, Fontist automatically detects your macOS version and installs the appropriate font version:

$ fontist install "Al Bayan"
# On macOS 15: installs Font7 version formula
# On macOS 26: installs Font8 version formula

This ensures you always get the font version compatible with your system.

Fontist controls the macOS supplementary font framework versioning via platform tags on formulas.

The platform tag for macOS supplementary fonts follows the pattern: * macos-fontX: where X is the catalog version number (e.g. 3 to 8)

When installing fonts, Fontist checks version compatibility:

# On macOS 14.2 (Sonoma), trying to install a Font8-only formula:
$ fontist install "Font8OnlyFont"
Error: Font 'Font8OnlyFont' is only available for: macos-font8.
Your current platform is: macos. Your macOS version is: 14.2.1.
This font requires macOS 26.0 or later.
This font cannot be installed on your system.

If you encounter version compatibility issues, ensure you’re running a compatible macOS version for the requested font.

Windows platform

General

Fontist provides comprehensive Windows platform support, allowing installation and management of fonts on Windows 7 and later.

Windows font management differs from Unix systems in several key ways:

  • Uses backslash (\) as the path separator

  • Stores fonts in registry-based and directory-based locations

  • Requires different handling for file locking and permissions

  • Uses case-insensitive (but case-preserving) file system

Windows font locations

Fontist supports the following Windows font locations:

System fonts
  • C:\Windows\Fonts - Primary system font directory

  • Requires administrator privileges for installation

User fonts
  • %LOCALAPPDATA%\Microsoft\Windows\Fonts - Per-user font directory (Windows 10+)

  • No administrator privileges required

  • Fontist creates a fontist subdirectory to avoid cluttering the main directory

Fontist library
  • %USERPROFILE%\.fontist\fonts - Fontist-managed fonts

  • Default installation location

  • No administrator privileges required

Known Windows considerations

File locking

Windows uses stricter file locking than Unix systems. Fontist handles this with automatic retry logic when encountering locked files during cleanup operations.

Path handling

Fontist automatically handles Windows path separators and drive letters. Font paths are returned in Windows-native format (e.g., C:\Users\user\.fontist\fonts\font.ttf).

Registry integration

While Windows historically used registry-based font registration, modern Windows (10+) supports directory-based fonts. Fontist uses directory-based installation for maximum compatibility and ease of management.

Administrator privileges

Installation to the system location requires administrator privileges. Use the user or fontist locations for installations without administrative access.

Example 4. Installing fonts on Windows
# Install to Fontist library (default, no admin required)
fontist install "Roboto"

# Install to user fonts directory (no admin required, Windows 10+)
fontist install "Roboto" --location=user

# Install to system fonts directory (requires administrator)
# Run as Administrator
fontist install "Roboto" --location=system

Platform compatibility status

Windows Version Support Status Notes

Windows 11

✅ Fully Supported

All features available

Windows 10

✅ Fully Supported

User font directory available

Windows 8/8.1

✅ Supported

System and fontist locations only

Windows 7

⚠️ Limited Support

System and fontist locations only, extended support ended

Note
Fontist is tested on Windows 10 and later. Earlier versions may work but are not actively tested.

Custom Fontist repositories

General

A Fontist repository is a Git repo which contains YAML Formula files. Fontist Formulas can be created manually within a Fontist repository (see examples), or auto-generated from a font archive.

A Fontist repository can be accessed either through HTTPS or SSH. In case of SSH, a corresponding SSH key should be setup with ssh-agent in order to access this custom repository.

Registering a Fontist repository

The fontist repo setup command fetches a custom repository’s formulas, and stores the repository’s name and URL for later use.

The fontist repo setup command uses the following syntax.

fontist repo setup NAME URL

Internally, all custom Fontist repository information is stored at ~/.fontist/formulas/Formulas/private.

For example, given a Fontist repository called "acme" accessible via a URL or an SSH address:

fontist repo setup acme https://example.com/acme/formulas.git
# or
fontist repo setup acme [email protected]:acme/formulas.git

Listing custom Fontist repositories

fontist repo list

Installing fonts from a Fontist repository

Once the custom Fontist repository is setup, one can install fonts from the repo through its formulas:

fontist install "custom font"

Updating a registered Fontist repository

If the custom Fontist formula repository is updated, the repo update command is used to pull the newest changes:

fontist repo update NAME

For example, given a Fontist repository called "acme", the following command is used.

fontist repo update acme

Removing a registered Fontist repository

If there is a need to remove a registered Fontist repository, the repo can be removed with:

fontist repo remove acme

Private access

Custom Fontist formulas and Fontist repositories can be made private to require authentication.

For HTTPS and SSH Git Fontist repositories

Warning
Many online Git repositories only allow authentication for HTTPS, and do not allow authentication for SSH addresses.

There are two ways to turn your repository private. Repository may or may not support both, check your Repository Preference settings on your preferred Git platform.

  • HTTP Authentication: Turn the repository private on the Git platform, then call fontist repo setup with a Private Token (with "read_repository"). This allows you to pass the token as a URL parameter without re-entering a password.

For example, given a Fontist repository called acme_font_name accessible via https://user<Token>@example.com/acme/formulas.git, add https://user/<Token>@ as the --private-token to set up the private repo for Fontist:

user=your-user-token
fontist repo setup acme_font_name \
  https://example.com/acme/formulas.git?private_token=${user}

Authentication for private formulas or private formula repositories

Authorization of private archives in private formulas can be implemented with headers.

Here is an example which works with Github releases:

resources:
  fonts.zip:
    urls:
    - url: https://example.com/repos/acme/formulas/releases/assets/38777461
      headers:
        Accept: application/octet-stream
        Authorization: token ghp_1234567890abcdefghi

If the Fontist formula repository is a GitHub repo, a token can be obtained on the GitHub Settings > Tokens page. This token should have at least the repo scope for access to these assets.

Create Fontist formulas

General

Fontist formulas can be easily hand-crafted in YAML. However, the auto-generation method is recommended for data accuracy and convenience.

Auto-generate a Fontist formula from a font archive

A formula could be generated from a fonts archive.

The fontist create-formula command allows detecting all font files from a font archive in a multitude of formats (those supported by Excavate, including zip, 7z, gzip, tar, cab, exe).

The fontist create-formula command supports archives located at remote URLs or local file paths.

For file paths, specify the file path as argument:

wget https://www.latofonts.com/files/Lato2OFL.zip
fontist create-formula lato.zip

For URLs, simply specify the URL as the argument:

fontist create-formula https://www.latofonts.com/files/Lato2OFL.zip
# > file created at lato.yml because the file downloaded is lato.zip

To test out the created formula, one may copy the formula into the user’s private formula repository location.

fontist create-formula https://www.latofonts.com/files/Lato2OFL.zip
cp lato.yml ~/.fontist/formulas/Formulas/

Options for create-formula

The create-formula command supports several options to customize formula generation:

--name

Specify a custom formula name instead of auto-detecting from fonts.

fontist create-formula https://example.com/fonts.zip --name "My Custom Fonts"
--subdir

Extract fonts only from a specific subdirectory within the archive. Uses fnmatch patterns.

fontist create-formula https://example.com/fonts.zip --subdir "fonts/otf"
--file-pattern

Filter font files by pattern. Uses fnmatch patterns.

fontist create-formula https://example.com/fonts.zip --file-pattern "*.otf"
--name-prefix

Add a prefix to all font family names in the generated formula. This is useful for distinguishing compatibility or replacement fonts from original proprietary fonts.

fontist create-formula https://dl.winehq.org/wine/source/10.x/wine-10.18.tar.xz \
  --subdir fonts \
  --file-pattern '*.ttf' \
  --name-prefix 'Wine '

This will generate a formula where all fonts have names prefixed with "Wine ", making it clear these are Wine compatibility fonts rather than the original Microsoft fonts.

--mirror

Specify mirror URLs for the font archive (can be used multiple times).

fontist create-formula https://example.com/fonts.zip \
  --mirror https://mirror1.example.com/fonts.zip \
  --mirror https://mirror2.example.com/fonts.zip

Overriding font metadata in Fontist formulas

The fontist create-formula command creates font formulas using information embedded in the OTF metadata section.

However, some fonts (such as older fonts) often contain inconsistent or imperfect metadata information. Some fonts for example applies different OTF Family values for different font styles. This will result in all font styles not being registered in the same Family.

Fontist formula authors can rectify this situation by using the override: key, which allows the formula to override metadata information obtained from the font metadata.

Note
The override key does not cause any change in the font files, it is only for updating information used by Fontist internally.

The override key exists under the definition of individual font styles:

resources:
  ...
fonts:
- name: Original font name
  styles:
    - family_name: Original family name
      type: Original style
      override:
        family_name: Overridden family name
        type: Overridden style
        preferred_family_name: Overridden preferred family name

For example, the "Frutiger" fonts published by Adobe in 1994 use numbers to represent the individual font styles, and have those names embedded in the OTF Family field, such as "Frutiger 45 Light". These fonts also do not use the OTF Preferred Family field, which is a more recent addition to OTF, due to their age.

Here is how the override property can enforce all relevant styles to be registered under the same family name (by overriding the preferred_family_name value):

...
resources:
  ...
fonts:
- name: Frutiger 45 Light
  styles:
  - family_name: Frutiger 45 Light
    type: Regular
    full_name: Frutiger-Light
    post_script_name: Frutiger-Light
    override:
      preferred_family_name: Frutiger
  - ...

This fragment above will allow Fontist to generate correct indexes and allow installation of all Frutiger fonts with a single command:

$ fontist install "Frutiger" --preferred-family

To install all fonts from a formula, the -F, --formula option can be used:

$ fontist install --formula ms_truetype

Maintenance (for Fontist maintainers only!)

Warning
This section is only for Fontist maintainers.

Formulas versioning

To add a new attribute, change how formula is treated or completely replace the structure, there are 2 ways to change a formula format:

  1. Use the min_fontist attribute in a formula. It sets a requirement for fontist to install the formula only if its version is equal or more than a specified version.

  2. Use a new branch in the formulas repo, e.g. "v2", "v3", "v4", etc. After creating a new branch, it should be defined in Fontist.formulas_version

Note
Using a new branch would require all users to re-download the entire formulas repo. Since this method has a significant overhead, the former one (min_fontist) should be used whenever possible.

Import source architecture

General

Fontist imports font formulas from various external sources, and tracks the origin and metadata of these imported formulas using a polymorphic import_source attribute.

The import_source attribute contains metadata about where and when a font formula was imported from, enabling formula versioning, update detection, platform compatibility checks, and audit trails.

Import source types

Fontist supports multiple import source types, each with specific metadata:

macOS Supplementary Fonts

Uses multi-dimensional versioning with framework version, catalog posted date, and asset build ID.

Google Fonts

Tracks commit ID from the Google Fonts repository, API version, last modified date, and family ID.

SIL International Fonts

Records the version string and release date.

macOS import source

macOS supplementary fonts use multi-dimensional versioning:

Framework Version

Font7, Font8 - determines schema and parser

Catalog PostedDate

Version of catalog within framework

Asset Build ID

Individual package identifier

Example 5. Example import_source for macOS fonts
import_source:
  type: macos
  framework_version: 7
  posted_date: "2024-08-13T18:11:00Z"
  asset_id: "10m1360"

Framework-specific metadata (min/max macOS versions, parser classes) is stored in lib/fontist/macos_framework_metadata.rb.

Google Fonts import source

Example 6. Example import_source for Google Fonts
import_source:
  type: google
  commit_id: "abc123def456"
  api_version: "v1"
  last_modified: "2024-01-01T12:00:00Z"
  family_id: "roboto"

SIL import source

Example 7. Example import_source for SIL International fonts
import_source:
  type: sil
  version: "1.0.0"
  release_date: "2024-01-01"

Versioned filenames

Formulas with import sources use differentiation keys for filename generation:

Example 8. macOS formulas (versioned)
macos/
├── font7/
│   ├── al_bayan_10m1360.yml
│   ├── arial_unicode_ms_10m1361.yml
│   └── ...
└── font8/
    ├── sf_pro_26m2001.yml
    └── ...
Example 9. Google Fonts formulas (simple, not versioned)
google/
├── roboto.yml
├── open_sans.yml
├── noto_sans.yml
└── ...

Google Fonts formulas use simple filenames because Google Fonts is a live service that always points to the latest version. The commit_id in import_source is tracked for metadata and update detection purposes only, not for filename versioning.

Example 10. SIL formulas (versioned)
sil/
├── charis_sil_6.200.yml
├── andika_6.101.yml
└── ...

The filename format depends on the import source type:

  • macOS: {normalized_name}_{asset_id}.yml (e.g., al_bayan_10m1360.yml)

  • Google Fonts: {normalized_name}.yml (e.g., roboto.yml) - simple, no versioning

  • SIL: {normalized_name}_{version}.yml (e.g., charis_sil_6.200.yml)

This approach enables:

  • Multiple versions of the same font coexist (macOS, SIL)

  • Clear tracking of font updates (all sources)

  • Automatic update detection when catalogs refresh (all sources)

  • Platform-specific version selection (macOS)

  • Simple, consistent filenames for live services (Google Fonts)

Dynamically importing formulas from Google Fonts

General

Google Fonts provides the largest collection of freely and openly licensed fonts, including many that are widely used in web design and digital publishing.

Fontist’s formula library includes support for all fonts provided through Google Fonts, and maintains Fontist formulas for all such fonts.

Fontist supports importing fonts from Google Fonts in multiple formats:

TTF

(TrueType Font) Standard font files

VF

(Variable Fonts) Fonts with adjustable design axes (weight, width, slant, etc.)

WOFF2

(Web Open Font Format 2) Optimized web fonts

Data sources

Each Fontist Google Fonts formula is automatically generated and updated using two data sources:

Google Fonts API integration

Google Fonts API provides separate endpoints for TTF fonts, Variable Fonts, and WOFF2 web fonts. Fontist integrates data from these endpoints and merges them into a unified database.

The Google Fonts importer uses a layered, object-oriented architecture:

        ┌──────────────────────────┐
        │   FontDatabase           │
        │   (Single Entry Point)   │
        └───────────┬──────────────┘
                    │
      ┌─────────────┼─────────────┬─────────────┐
      ▼             ▼             ▼             ▼
┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐
│   Ttf    │  │    Vf    │  │  Woff2   │  │  Github  │
│  (API)   │  │  (API)   │  │  (API)   │  │  (Repo)  │
└──────────┘  └──────────┘  └──────────┘  └──────────┘

All 4 Data Sources Are Equal

Google Fonts importer architecture

The Google Fonts importer uses an ultra-simple architecture with FontDatabase as the single entry point and four equal data sources:

Models (lib/fontist/import/google/models/)

Data structures for font information

FontFamily

Unified font data (API + Github metadata)

Axis

Variable font axes information

FontVariant

Individual font file data

Data Sources (lib/fontist/import/google/data_sources/)

Four equal sources providing different information

Ttf

Fetches TTF URLs from Google Fonts API

Vf

Fetches variable font URLs + axes from Google Fonts API

Woff2

Fetches WOFF2 URLs from Google Fonts API

Github

Reads metadata from local google/fonts repository

Database (lib/fontist/import/google/font_database.rb)

Single entry point for all operations

  • Merges data from all 4 sources

  • Query methods: all_fonts, font_by_name, variable_fonts_only

  • Formula generation: to_formula(name), save_formulas(dir)

API (lib/fontist/import/google/api.rb)

Optional convenience facade for API-only operations

The Fontist Google Fonts can be used via Ruby library to query font data or generate formulas:

require 'fontist/import/google/font_database'

# Build database from all 4 sources (user must provide local path)
db = Fontist::Import::Google::FontDatabase.build(
  api_key: ENV['GOOGLE_FONTS_API_KEY'],
  source_path: '/path/to/google/fonts'  # Local checkout required
)

# Query merged data
roboto = db.font_by_name('Roboto')
puts roboto.designer      # From Github repository
puts roboto.axes.count    # From API (VF endpoint)

# Generate formulas
db.save_formulas('./formulas')  # All fonts
db.save_formulas('./formulas', family_name: 'Roboto')  # Single font

# API-only operations (no Github data)
families = Fontist::Import::Google::Api.items
variable_fonts = Fontist::Import::Google::Api.variable_fonts_only

For detailed usage examples, see Google Fonts Multi-Format Usage Guide.

Importing fonts from Google Fonts as Fontist Formulas

Prerequisites:

  1. Local git checkout of the google/fonts repository.

  2. Google Fonts Developer API key (set using export GOOGLE_FONTS_API_KEY=your_api_key).

To update Google Fonts formulas from a local checkout of the google/fonts repository:

# GOOGLE_FONTS_API_KEY must be set in the environment
fontist import google \
  --source-path /path/to/google/fonts \
  --output-path Formulas/google \
  --verbose \
  --import-cache /tmp/fontist-google-fonts-cache

git add Formulas/google
git commit -m "Google Fonts update"
git push

To import a single font for testing:

fontist import google \
  --font-family "Roboto" \
  --source-path /path/to/google/fonts \
  --verbose

Automated updates

Fontist uses a GHA workflow to check for updated fonts on Google Fonts daily.

New, updated, or removed fonts are automatically committed to the Fontist formula repository.

Dynamically importing formulas from SIL

SIL International is an internationally recognized faith-based nonprofit organization that serves language communities worldwide.

SIL provides a number of unique fonts that support smaller language communities that with Unicode code often not (yet) supported by mainstream fonts.

Fontist aims to support all SIL fonts and provides their formulas in the default Fontist formula repository.

They can be updated with:

cd Formulas
fontist import sil \
  --output-path Formulas/sil \
  --verbose \
  --import-cache /tmp/sil_import_cache

git add Formulas/sil
git commit -m "SIL fonts update"
git push

Importing a single SIL font for testing:

fontist import sil \
  --font-name "Andika" \
  --output-path Formulas/sil \
  --verbose \
  --import-cache /tmp/sil_import_cache

Dynamically importing formulas from macOS

macOS since 10.12 (Sierra) provides a "supplementary fonts" framework (shared with iOS) for dynamically downloading and installing additional fonts on demand.

There are two typical ways to install these supplementary fonts on macOS, both triggering a download from Apple’s Mobile Asset Server:

  • user applications are allowed to trigger the installation of these fonts when needed, as described in Apple’s "DownloadFont" sample.

  • through searching within Font Book.app, locating the desired font, and clicking "download".

In Fontist, these supplementary fonts can be installed non-interactively through Fontist formulas.

macOS supplementary fonts use the bundle identifier com.apple.MobileAsset.FontX, where X is the framework version, and is based on a specific asset framework location used by Apple.

OS version Asset framework location Font framework version

Platform tag

macOS 10.12 (Sierra)

/System/Library/Assets/

3

macos-font3

macOS 10.13 (High Sierra)

/System/Library/Assets/

4

macos-font4

macOS 10.14 (Mojave)

/System/Library/AssetsV2/

5

macos-font5

macOS 10.15 (Catalina)

/System/Library/AssetsV2/

6

macos-font6

macOS 11 (Big Sur)

/System/Library/AssetsV2/

6

macos-font6

macOS 12 (Monterey)

/System/Library/AssetsV2/

7

macos-font7

macOS 13 (Ventura)

/System/Library/AssetsV2/

7

macos-font7

macOS 14 (Sonoma)

/System/Library/AssetsV2/

7

macos-font7

macOS 15 (Sequoia)

/System/Library/AssetsV2/

7

macos-font7

macOS 26+ (Tahoe)

/System/Library/AssetsV2/

The corresponding asset catalog XML files are located at the root of each font framework version’s location in the OS:

Version 3

/System/Library/Assets/com_apple_MobileAsset_Font3/com_apple_MobileAsset_Font3.xml

Version 4

/System/Library/Assets/com_apple_MobileAsset_Font4/com_apple_MobileAsset_Font4.xml

Version 5

/System/Library/AssetsV2/com_apple_MobileAsset_Font5/com_apple_MobileAsset_Font5.xml

Version 6

/System/Library/AssetsV2/com_apple_MobileAsset_Font6/com_apple_MobileAsset_Font6.xml

Version 7

/System/Library/AssetsV2/com_apple_MobileAsset_Font7/com_apple_MobileAsset_Font7.xml

Version 8

/System/Library/AssetsV2/com_apple_MobileAsset_Font8/com_apple_MobileAsset_Font8.xml

Note
The Assets and AssetsV2 frameworks use a slightly different Plist schema.

In addition, these asset catalog XML files are also available for download from Apple’s Mobile Asset Server:

To update macOS formulas:

cd Formulas

# Download font catalogs
for font_version in 3 4 5 6 7 8; do
  curl -o com_apple_MobileAsset_Font${font_version}.xml \
    https://mesu.apple.com/assets/macos/com_apple_MobileAsset_Font${font_version}/com_apple_MobileAsset_Font${font_version}.xml

  fontist import macos \
    --plist com_apple_MobileAsset_Font${font_version}.xml \
    --output-path ./Formulas/macos/font${font_version} \
    --verbose \
    --import-cache /tmp/fontist-macos-cache \
    --force

  git add Formulas/macos/font${font_version}
done

git commit -m "Update macOS formulas"
git push

Importing a single macOS font for testing from a specific catalog:

fontist import macos \
  --plist com_apple_MobileAsset_Font7.xml \
  --font-name "Hiragino" \
  --output-path Formulas/macos/font7 \
  --verbose \
  --import-cache /tmp/fontist-macos-cache

Import cache management

General

During formula imports, Fontist is required to download font archives from various external sources for analysis to create accurate formulas.

To optimize performance and avoid redundant downloads, Fontist implements an import cache for storing downloaded font files at:

  • Import cache (~/.fontist/import_cache): Font archives downloaded during formula building

Cache management is managed through the fontist cache command.

Configuring import cache

CLI option
fontist import macos --import-cache /custom/path ...
fontist import google --import-cache /custom/path ...
fontist import sil --import-cache /custom/path ...
Ruby API
# Global setting
Fontist.import_cache_path = "/custom/import/cache"

# Per-import setting
Fontist::Import::Macos.new(
  plist_path,
  import_cache: "/custom/cache"
).call
Environment variable
export FONTIST_IMPORT_CACHE=/custom/import/cache
fontist import macos ...

Verbose mode

Use --verbose to see detailed cache operations:

$ fontist import macos --plist catalog.xml --verbose

OUTPUT includes:

  • Import cache location

  • Download URLs and cache status

  • Extraction directory locations

  • Cache cleanup notifications

Import command UI features

General

All import commands (macos, google, sil) provide a unified, professional interface with colored output and progress tracking.

Verbose mode

Enable --verbose to see detailed import progress:

fontist import macos --plist catalog.xml --verbose
fontist import google --source-path /path --verbose
fontist import sil --font-name "Andika" --verbose

Verbose output includes:

  • Paint-colored headers with Unicode box characters

  • Import cache location

  • Download URLs and cache status

  • Extraction directory paths

  • Real-time progress with percentages

  • Per-font status indicators

  • Detailed summary statistics

$ fontist import macos --plist catalog.xml --font-name "Hiragino" --verbose

════════════════════════════════════════════════════════════════════
  📦 macOS Supplementary Fonts Import
════════════════════════════════════════════════════════════════════

📦 Import cache: /Users/user/.fontist/import_cache
📁 Output path: /Users/user/.fontist/versions/v4/formulas/Formulas/macos/font7

(1/3) 33.3% | Hiragino Sans (2 fonts)
Downloading from: https://updates.cdn-apple.com/.../font.zip
  Cache location: /Users/user/.fontist/import_cache
  Extracting to: /var/folders/.../temp
  Extraction cache cleared
  ✓ Formula created: hiragino_sans_10m1044.yml (3.98s)

════════════════════════════════════════════════════════════════════
  📊 Import Summary
════════════════════════════════════════════════════════════════════

  Total packages:     3
  ✓ Successful:     3 (100.0%)

  🎉 Great success! 3 formulas created!

Development

Setup

Clone the repository.

git clone https://github.com/fontist/fontist

Setup your environment.

bin/setup

Run the test suite

bin/rspec

Formula storage

All official Fontist formulas are kept in the formulas repository.

If you’d like to add a new formula repository or change settings for an existing one, please refer to its documentation.

Releasing

Releasing is done automatically with GitHub Actions. Just bump and tag with gem-release.

For a patch release (0.0.x) use:

gem bump --version patch --tag --push

For a minor release (0.x.0) use:

gem bump --version minor --tag --push

Contributing

First, thank you for contributing! We love pull requests from everyone. By participating in this project, you hereby grant Ribose the right to grant or transfer an unlimited number of non exclusive licenses or sub-licenses to third parties, under the copyright covering the contribution to use the contribution by all means.

We are following Sandi Metz’s Rules for this gem, you can read the description of the rules here. All new code should follow these rules. If you make changes in a pre-existing file that violates these rules you should fix the violations as part of your contribution.

Here are a few technical guidelines to follow:

  1. Open an issue to discuss a new feature.

  2. Write tests to support your new feature.

  3. Make sure the entire test suite passes locally and on CI.

  4. Open a Pull Request.

  5. Squash your commits after receiving feedback.

  6. Party!

Credits

This gem is developed, maintained and funded by Ribose.

About

Install openly-licensed fonts on Windows, Linux and Mac!

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors 12

Languages