fontmerge
fontmerge merges two font source files together, copying selected glyphs from a donor font into a host font, along with any necessary OpenType layout features. It is a font-merging toolkit that powers the fontmerge command-line tool.
Typical use cases include:
- Adding a set of glyphs (e.g. a Latin or Cyrillic extension) to an existing font.
- Copying glyphs selected by name or by Unicode codepoint from one source into another.
- Transporting OpenType layout rules (features, lookups, mark classes) alongside the glyphs they reference.
Merging is performed on font sources (Glyphs, UFO/DesignSpace, Babelfont JSON, ...) via the babelfont crate rather than on compiled binaries, so you keep full editability after the merge.
Command-line usage
Install the CLI with:
cargo install fontmerge
or from PyPI:
pip install fontmerge
Merge all of Donor.glyphs into Host.glyphs:
fontmerge Host.glyphs Donor.glyphs --output Merged.glyphs
Copy only specific glyphs by name:
fontmerge Host.glyphs Donor.glyphs --output Merged.glyphs --glyphs "A B C D"
Copy glyphs by Unicode codepoint (comma-separated, U+ prefix optional, ranges with a hyphen allowed):
fontmerge Host.glyphs Donor.glyphs --output Merged.glyphs --codepoints "U+0041-U+005A"
Exclude glyphs you don't want to bring across:
fontmerge Host.glyphs Donor.glyphs --output Merged.glyphs --glyphs "A B C" --exclude-glyphs "Aacute B"
By default, glyphs already present in the host font are skipped; use --existing-handling replace to overwrite them instead. Layout rules can be subset to the merged glyph set (default), closed over to pull in any extra glyphs referenced by rules (--layout-handling closure), or ignored entirely (--layout-handling ignore).
Using it as a library
The fontmerge crate is a mixed binary/library crate. Its library exposes the underlying merging routine so you can drive merges programmatically:
use babelfont::{load, SmolStr};
use fontmerge::{fontmerge, ExistingGlyphHandling, GlyphsetFilter, LayoutHandling};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// "Host" font receives glyphs; "donor" font contributes them.
let mut host = load("Host.glyphs")?;
let donor = load("Donor.glyphs")?;
// Select which glyphs to copy from the donor font.
let selection = GlyphsetFilter::new(
vec![SmolStr::new("A"), SmolStr::new("B")],
vec![],
vec![],
&mut host,
&donor,
ExistingGlyphHandling::Skip,
);
let merged = fontmerge(host, donor, selection, LayoutHandling::Subset, true)?;
merged.save("Merged.glyphs")?;
Ok(())
}
See the API documentation for details.
Status
fontmerge is in early development and its command-line interface and library API may change between releases.
License
fontmerge is available under the MIT or Apache-2.0 licenses, at your option. See LICENSE-MIT and LICENSE-APACHE.
Metadata
Release files for fontmerge 0.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| fontmerge-0.2.2.tar.gz | 1.8 MB | With provenance | Details for fontmerge-0.2.2.tar.gz |
Built distributions (wheels)
Total release size: 143.2 MB
Release files / fontmerge-0.2.2.tar.gz
| Download URL | fontmerge-0.2.2.tar.gz |
|---|---|
| Size | 1.8 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
048bc1d5f20353f8f3b404bd6cdc7d6dd8703cc9e4955245f99e40945c5e0e19
|
|
BLAKE2b-256 checksum How to use checksums |
235b87600ef4586da933cbbc2aa0c1c8cd2550a68622826e5c73604e41448d50
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logRelease files / fontmerge-0.2.2-py3-none-win_amd64.whl
| Download URL | fontmerge-0.2.2-py3-none-win_amd64.whl |
|---|---|
| Size | 16.7 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
8a82ed2d65f92906e6f665dfccdea5f0b34b0541ec8d7915f290187076e3d79e
|
|
BLAKE2b-256 checksum How to use checksums |
c64abb2357d22f01d5ff707f487ee470bb40dafe178b7731664c4626dab836e8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logRelease files / fontmerge-0.2.2-py3-none-win32.whl
| Download URL | fontmerge-0.2.2-py3-none-win32.whl |
|---|---|
| Size | 15.1 MB |
| Tags | Python 3 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
fb89d9895682138492772f12cabfa27a34817fcebeb66f01bf188a23d989548f
|
|
BLAKE2b-256 checksum How to use checksums |
b967d8b007df2815a87999fa44006d9fc16107f7a2c7caa07ad34ca91ad3f0f7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logRelease files / fontmerge-0.2.2-py3-none-musllinux_1_1_x86_64.whl
| Download URL | fontmerge-0.2.2-py3-none-musllinux_1_1_x86_64.whl |
|---|---|
| Size | 19.1 MB |
| Tags | Linux musl 1.1+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
7be084184d8d6e5ffae6e0055413f7c2be08225795909d1f284bca30e8bdcd2f
|
|
BLAKE2b-256 checksum How to use checksums |
37f27ed8aff9e838e53a4eecfeb7f0dfc363b32234b6d5976a63bdf7ba60d139
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logRelease files / fontmerge-0.2.2-py3-none-musllinux_1_1_aarch64.whl
| Download URL | fontmerge-0.2.2-py3-none-musllinux_1_1_aarch64.whl |
|---|---|
| Size | 18.2 MB |
| Tags | Linux musl 1.1+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
b1636678b5bc1012ce646b6da3bf3917e097cccf9a6feb7994ea9407f154e29a
|
|
BLAKE2b-256 checksum How to use checksums |
ec0e6f14b7fad4569008b9666ea431a67ba4629e58262384acd0547268e86362
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logRelease files / fontmerge-0.2.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | fontmerge-0.2.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 18.7 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
7289672a6fbbc216771647ddab25516036a1d78bd40e61b30c8d9bc040daef51
|
|
BLAKE2b-256 checksum How to use checksums |
c92c8739fa53f476bfd4fcb1791b114338e1b779777fcf078dc1487f34cf7261
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logRelease files / fontmerge-0.2.2-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
| Download URL | fontmerge-0.2.2-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl |
|---|---|
| Size | 18.5 MB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
facd26f12cf17131d8e26dbdc525e8e83bdaff4167312eaa2940db6f8a075fb4
|
|
BLAKE2b-256 checksum How to use checksums |
ce1430ba8880472c5c871db257e61f78da9c99969b6af882e98f107afe0a857f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logRelease files / fontmerge-0.2.2-py3-none-macosx_10_12_universal2.macosx_10_12_x86_64.macosx_11_0_arm64.whl
| Download URL | fontmerge-0.2.2-py3-none-macosx_10_12_universal2.macosx_10_12_x86_64.macosx_11_0_arm64.whl |
|---|---|
| Size | 35.1 MB |
| Tags | Python 3 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
dda556e2bc769b56a50625856e7118310f7a19398e528adceb05919aa6ba1646
|
|
BLAKE2b-256 checksum How to use checksums |
cac0fb006ebb9c8200731d1390c1c87c73e7ba2a69bb1e2b57f75a199d04bb20
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logSecurity for fontmerge 0.2.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 8 files in this release have been uploaded with provenance metadata.
Attestation for fontmerge-0.2.2.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.