Free (libre) font editor for Windows, Mac OS X and GNU+Linux

Related tags


FontForge CI Build status Coverity Scan Build Status

FontForge Logo

FontForge is a free (libre) font editor for Windows, Mac OS X and GNU+Linux. Use it to create, edit and convert fonts in OpenType, TrueType, UFO, CID-keyed, Multiple Master, and many other formats. — homepage — font creation manual

Getting help

The bug tracker is for reporting bugs, not for asking questions. Please direct questions to one of the following:

Installation & contributing — developer instructions to build from source — a list of installation dependencies — contributing guidelines

  • Handle foreign data in U. F. O..

    Handle foreign data in U. F. O..

    This uses the PyTuple, which has no matching entity in X. M. L., as a special container for unrecognized data in python_persistent, allowing FontForge to round-trip that data in the top-level lib.plist and in the lib data for individual glifs.

    opened by frank-trampe 148
  • Improved mac dmg

    Improved mac dmg

    I've made some improvements to make the dmg look more like other apps with a custom background + link to applications folder + online install instructions. If @monkeyiq could test the pretty-dmg branch

    opened by larsenwork 120
  • Unicode tooltips empty

    Unicode tooltips empty

    Built from today’s git head, fontforge doesn’t show any content in the unicode tooltips. Please revert to LibUnicodeNames, the latest changes seem rather destructive to things that weren’t broken before.

    opened by georgd 118
  • Make comb. chars always superior to spacing chars

    Make comb. chars always superior to spacing chars

    Combining characters are superior in some cases to spacing characters but not others. For example, combining macron (U+304) is superior to macron (U+AF), yet combining dieresis (U+308) is inferior to dieresis (U+A8).

    This situation is untenable. It makes it impossible, while designing a font, to know which character will be used when FontForge builds an accented glyph without digging through the source code. Furthermore, the logical case, to use the combining character first, is rarely done.

    Apparently this is due to some restriction of Type1 fonts according to George in 2001. I fixed his reported restriction in this same commit by just dissolving the reference if the character referred to is between 0x300 and 0x345.

    Some, such as @frank-trampe, might say that dissolving the reference “breaks” something. But nothing is broken. No function of a Type 1 font changes if a reference is used or not. Type 1 fonts never were a first class format for storing font data—and certainly haven't become one— that's what SFD is for. The only discernible difference therefore is a small increase in filesize.

    I confirmed:

    • generated PFA (PostScript type 1) fonts still work; FontForge shows the dissolved references as expected when a problem character is referred to.
    • if you want to use dieresis you can tell FontForge to in “Glyph Info → Components” and it will work.
    • that this closes #3708, the issue is solved.

    I encourage my fellow members to support this change. As an author of five and counting open source fonts made only using FontForge and FontTools, I can unequivocally say that sacrificing the file size of a subset of Type 1 fonts is worth the benefit this change provides.

    • [x] Bug fix (non-breaking change which fixes an issue)
    • [x] Breaking change (fix or feature that would cause existing functionality to change)
    • [x] I have read the CONTRIBUTING guidelines.
    opened by ctrlcctrlv 101
  • 2015-06 Release

    2015-06 Release

    We skipped a May release, so I suggest we cut a new release for June ASAP :)

    opened by davelab6 90
  • New problem in fontforge-cygwin_2014_01_04: Generate('a.ttf') takes 2x as much memory as the version of 2012

    New problem in fontforge-cygwin_2014_01_04: Generate('a.ttf') takes 2x as much memory as the version of 2012

    For my files, this does not matter: my workflow separates Generate() into a separate call fontforge -lang ff -c "Load($1); Generate($2)" and for me, the question is about using 500MB of memory vs 1100MB of memory; not a problem with this machine. However, people with larger runs may get into problems on 32bit machines, more complicated fonts, and/or more complicated scripts.

    opened by ilyaza 90
  • MAC: Crash on scrolling on Fontview

    MAC: Crash on scrolling on Fontview

    FF crashes while scrolling on Font View with this( file opened

    18-Oct -14 Version on OSX 10.9.5

    Homebrew I-crash 
    opened by pathumego 76
  • New splash screen and about dialog

    New splash screen and about dialog

    This closes #3055.

    This commit does the following:

    Console mode changes

    The first line when you run FontForge, which was:

    Copyright (c) 2000-2018 by George Williams. See AUTHORS for Contributors.

    Is now:

    Copyright (c) 2000-2019. See AUTHORS for Contributors.

    This will no longer need to be updated randomly whenever we remember to do it. I baked the current year in at compile time by editing and adding a new variable for it. Why did I remove George's name? He is the main contributor but hasn't been around for seven years. It's time for him to become just another contributor in AUTHORS.

    Splash screen changes

    I only made the changes for which there was consensus in #3055. I:

    • Changed the image to a newer one which I (previously @probonopd, but I changed it in made.
    • Made the Git hash use a monospace font so it's small enough to fit in one line.
    • Changed references which made it seem like this is George's software alone. I love the story of this project, you all know that, I love FontForge history, I run, I've been trying to get @davelab6 to talk with me on video to flesh out more of the history for my website, so I was very respectful of George while editing the text, making very conservative edits to the history in the about dialog.

    Old dialog

    Dialog in this commit

    Previously, with the word FontForge more towards the right and different text

    Previously, though cancelled due to consensus

    How I changed it

    In case this needs to be done again, I used gdb to change the image. First, I loaded a BMP image in fontforge_main (startui.c) and set a breakpoint right after loading it. I just made a GImage containing the output of GImageReadBmp("/tmp/ff.bmp") called splashimage.

    The following gdb settings make things a lot easier:

    • set pagination off
    • set max-value-size unlimited
    • set print elements 0
    • set print repeats 0

    Then I issued command:

    p/x *((*splashimage)

    You have to either catch the output by telling gdb it needs to log...or you can just set your console to unlimited scrollback and copy it.

    I got the number 568500 by multiplying two numbers together found in the struct:

    (gdb) p (*(*splashimage).u.image)
    $46 = {image_type = it_true, delay = 0, width = 379, height = 375, bytes_per_line = 1516, 
      data = 0x15554f5b6010 "\336\236O", clut = 0x0, trans = 4294967295}

    568500 = 1516 × 379

    I then pasted all the values into splashimage.c as needed. Done and dusted.

    opened by ctrlcctrlv 75
  • FF compiled with Python 3 extension loads

    FF compiled with Python 3 extension loads "empty" fontforge module.

    I am trying to compile fontforge from source with Python 3. I recently manged to compile it on Ubuntu workstation and now have to install it on a Debian or Ubuntu Server and run into a strange error.

    I am using the Version as imho this one has the import psMat problem solved.

    My compile steps:

    PYTHON="python3" ./configure
    make -j3
    make install

    The relevant configure output:

      Source code location	.
      Build code location	
      Destination prefix	/usr/local
      Compiler		gcc -std=gnu99 -std=gnu99
    Summary of optional features:
      real (floating pt)	double
      programs		yes
      native scripting	yes
      python scripting	yes
      python extension	yes
      freetype debugger	no
      raw points mode	no
      tile path		no
      gb12345 encoding	no
      potrace or autotrace	yes

    But when I do python3 -c "import fontforge; f = fontforge.font()" it results in:

    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    AttributeError: 'module' object has no attribute 'font'

    A python3 -c "import fontforge; print(dir(fontforge))" gives a: ['__doc__', '__loader__', '__name__', '__package__', '__path__', '__spec__'] Somehow the fontforge module is empty?

    More details make install outputs an

    Libraries have been installed in:

    And indeed:

    ls -la /usr/local/lib/python3.4/site-packages
    total 48
    drwxr-sr-x 2 root staff  4096 Nov 30 21:53 .
    drwxrwsr-x 4 root staff  4096 Nov 30 21:53 ..
    -rwxr-xr-x 1 root staff  1429 Nov 30 21:53
    -rwxr-xr-x 1 root staff 13992 Nov 30 21:53
    -rwxr-xr-x 1 root staff  1405 Nov 30 21:53
    -rwxr-xr-x 1 root staff 13968 Nov 30 21:53

    I tried it on Debian 8 and Ubuntu 16.04. I also tried it with the additional --enable-python-scripting --enable-pyextension --enable-python-extension options for ./configure. Also a ldconfig after make install didn't help. When I did install it on my Workstation I did use a Virtual Enviroment and a custom--prefix. However, I also also tried this on the Debian server but without success. The servers have been fresh installs before testing. I also tried with the latest version from git.

    Does anybody has an idea what is wrong with my installation process?

    Update I did another test, this time with an virtual env again. When I did a

    python -c "import fontforge;print(fontforge)" 
    <module 'fontforge' (namespace)>

    it seems that an import fontforge doesn't load the .so file but the fontforge directory in /root/venv/lib/python3.4/site-packages which contains the .so file.

    Moving those .so files to the parent dir and remove the fontforge dir:

    mv /root/venv/lib/python3.4/site-packages/fontforge/* /root/venv/lib/python3.4/site-packages
    rm /root/venv/lib/python3.4/site-packages/fontforge

    But now:

    python -c "import fontforge" 
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    ImportError: cannot open shared object file: No such file or directory

    But the file is in /usr/local/lib.

    Update 2 If I add /usr/local/lib/python3.4/site-packages to the sys.path everything looks fine.

    python3 -c "import sys; sys.path.append('/usr/local/lib/python3.4/site-packages'); import fontforge; f=fontforge.font(); print(f)";
    <Font: Untitled1>
    opened by tobltobs 69
  • Redesign the menu structures of the 3 main windows

    Redesign the menu structures of the 3 main windows

    EDIT: @pathumego, @davelab6 and @larsenwork are currently trying to figure things out in this google doc. Feel free to comment and make suggestions there.

    EDIT: The latest updates #2734

    What we're trying to do (WIP)

    • [x] Making the 3 menus identical (except for what's grey'd out)
    • [x] Rearranging items so things are easier to find
    • [x] Renaming items to more understandable names
    • [x] No level below top-level -> submenu -> item
    • [ ] Updating tooltip text #2259
    • [x] Re-arrange/name right click menus incl. #2261

    Removing some items

    • [x] Browse web (broken)
    • [x] X-resource editor (

    What we later need a software developer for

    • [ ] Implement the changes (or tell us how) - #2734
    opened by davelab6 68
  • while inside a secondry layer, don't copy the anchor information

    while inside a secondry layer, don't copy the anchor information

    hi when we are inside anywhere but the fore layer, it seems completely irrelevant to copy/paste anchors information(which placed in the fore layer) with outlines/components(of the same secondary layer) to/from clipboard. the result of copy/paste anchors always grabbed from and affected on the fore layer even when we copy/past contents from the other layers.

    opened by aminabedi68 0
  • Will fontforge support .glyphs format in future?

    Will fontforge support .glyphs format in future?

    • Provide a general summary of the issue in the Title above.
    • Before you open an issue, please check if a similar issue already exists or has been closed before.


    Mark with [x] to select. Leave as [ ] to unselect.

    When reporting a bug/issue:

    • [ ] Screenshot
    • [ ] The FontForge version and the operating system you're using
    • [ ] The behavior you expect to see, and the actual behavior
    • [ ] Steps to reproduce the behavior
    • [ ] (optional) Possible solution/fix/workaround

    When you open an issue for a change/improvement/feature request:

    • [ ] A description of the problem you're trying to solve, including why you think this is a problem
    • [ ] If the feature changes current behavior, reasons why your solution is better
    • [ ] (optional) Possible solution/fix/workaround

    I realize a bunch of Japanese fonts have been released recently, their sources are in .glyphs format.

    I do not have Mac machine, can Fontforge open such format?

    feature someday-maybe 
    opened by extc 1
  • Conversion of

    Conversion of "Extra Bold" PostScript Type 1 to OTF sets wrong weight "700 Bold"

    I converted a bunch of old BitStream Fonts of 1990-1992 to OTF. I used this description:

    It seems that all "Extra Bold" and "Extra Bold Condensed" fonts are given the wrong weight "700 Bold" instead of "800 Extra Bold". Thus there are usually two "700 Bold" fonts in the set. The Extra Bold's must be adapted in the "OS/2" settings first, before they can be imported (to KDE Plasma 4 in this case).


    TYPEFACE: Humanist 521 Extra Bold Bitstream Font Number: 0294

    *** For Windows *** Typeface: Humanst521 XBd BT Style: plain

    PostScript Type 1 font filename: 0294a___.PFB

    TYPEFACE: Humanist 521 Extra Bold Condensed Bitstream Font Number: 0497

    *** For Windows *** Typeface: Humanst521 XBdCn BT Style: plain

    PostScript Type 1 font filename: 0497a___.PFB

    Please check if there is a bug on FontForge side. If not, consider a heuristic that checks the font name for "Extra Bold".

    FontForge Version: 20200314 on OpenSuse 15.2.


    [x] The Fonts CD was purchased by me around 1994. [x] The copyright description does not prohibit the conversion. For private purposes of course.

    opened by hayosc 1
  • Is it necessary to create a font to start in an empty glyph window?

    Is it necessary to create a font to start in an empty glyph window?

    Good morning all, I created a font made directly in fontforge. My problem is that after generating this font for testing, after installing it seems to be successful on Windows 10, there is no change in the texts I type with my text apps (Libre Office or Open Office). Yet in the font preview window, my new or transformed glyphs appear, but when I type my text, it's as if they don't exist, it's the original letters of Liberation Serif that are written ... I saved my font as .ttf and .otf, that doesn't change anything.

    I would point out that having only a few glyphs to edit, I worked from the start from the glyph window in a copy of the Liberation Serif font, as most of the letters and other signs were not intended for change shape in this project.

    I then ask myself this question: Should I start my project in an empty glyphs window? What makes me ask this question is that in my attempts to install my font, from the viewport, Windows always sends me back to the Liberation Serif font telling me that it already exists and asking if I want to replace it, although I gave different names to my files of transformed font generated…?

    Another side question: It seems that the copy pasted does not work from a glyph window (the one of Liberation serif) to another glyph window (the empty one of a new font), so how to import existing glyphs internally, au even within Fontforge so as not to have to redo all the glyphs?

    This last operation may seem easy for many of you, but it is very complicated for me, so thank you for your help Goodbye

    opened by egfontforgeA 1
  • Stop installing application icons to the legacy pixmaps location

    Stop installing application icons to the legacy pixmaps location

    The /usr/share/pixmaps location is considered a legacy location for application icons; since the application icons are already installed in the global XDG hicolor theme, then:

    • drop the XPM icons, as they are redundant with the PNG icons in the XDG hicolor icon theme
    • stop installing the 32px PNG
    opened by pinotree 0
  • Accents in metrics windows

    Accents in metrics windows

    Thank you for your availability. I'm progressing little by little since my last visit, I created some glyphs so I needed the metrics window. I noticed that the accents (the circumflex accents in this case) did not appear in this window when I typed a letter that normally has them. I used 2 keyboards or keyboard layouts to see what it would look like, AZERTY normal (French Belgium) and AZERTY global. Thinking that this could possibly come from a poorly controlled transformation on my part in the current font, I also opened another font in which I had not made any transformation. The result is the same, the accent never appears. Does anyone have an explanation and a solution? Thanks in advance, see you later

    opened by egfontforgeA 0
  • Glyphs in multiple classes cause a hang

    Glyphs in multiple classes cause a hang

    I think there are two issues here, but I'll keep it as one report for now.

    FontForge and operating system versions FontForge 20201107 Windows 10, Version 10.0.19043 Build 19043 Ubuntu 21.04

    Screenshot The bugs I am reporting occur within the Kerning by Classes editor. image

    Expected behaviour Add a character to a class in kerning by classes. If I add the same character to another class, FF should detect the duplication and offer me the choices of remove from this class or remove from other class. image

    Actual behaviour Whilst this occurs for every other character I've used so far, occasionally there is an error with the ă abreve character. FF does not detect that it already exists in another class, and thus adds it to the new class. It does not display the character's name in the class list. (This did not happen every time, but in my recent tests, it has occurred every time.) Upon clicking the class entry, the kerning by classes window hangs. image The window can be closed, and FF remains functional unless I try to edit the data of the same lookup table again. If I click the edit data button, the whole FF application hangs.

    Steps to reproduce the behaviour

    1. Create a series of classes.
    2. One class must contain ă (abreve).
    3. Add ă (abreve) to another class.
    4. Popup dialog demanding the creator to choose which class does not appear.
    5. Click on the list entry that you just added ă abreve to.
    6. Interface should hang. You can close the window, and FF will still function.
    7. Attempting to load the kerning by classes editor again will cause FF to hang entirely.

    Another method, if the editor doesn't allow you to add ă twice

    1. Open the .sfd file in a text editor. (Close FF.)
    2. Find section KernClass2:
    3. Add abreve into at least two classes.
    4. Add 7 to the number at the beginning of the line. [This tells FF how many characters to parse for the class group.)
    5. Save, and load the file in FF.

    So, the two issues I think occur here are:

    1. Kerning by Classes character adding does not correctly/consistently filter/detect characters from existing classes.
    2. FontForge hangs when trying to load the class that the duplicate character was just added to, instead of handling the situation gracefully.

    Possible solution/fix/workaround

    1. Character detection & removal: There could be a preliminary check before loading the class list, and a warning/error popup with the option buttons, just as already occurs when adding the characters to the class. This would prevent FF from reaching the stage of its process hanging.

    2. Duplicate character class membership hang: I don't think FF needs to hang in this situation. I think it could be handled by prioritising the classes, either using a default fallback to alphabetical prioritisation as a temporary workaround; or with a priority based on class importance or recency. Ideally, there should be no duplicate characters, but on the event that FF fails to detect duplication, or the event that the source file contains duplicate characters, then FF should handle the situation more gracefully than just hanging out!

    According to Wikipedia, it appears that ă abreve is only used in 3 languages and the transliteration of Bulgarian Cyrillic into Latin. Perhaps there is a deeper bug around the handling of this character, which may have got overlooked due to its uncommonness. The other Vietnamese characters in my font were handled fine, but most of them are just unixxxx character names so the processing of these names is probably simple and standard.

    opened by farran 4
  • Overhaul the unicode support library

    Overhaul the unicode support library

    This is a continuation of the charsets/iconv overhaul, extending to the code-genned stuff under the Unicode folder.

    The original motivation was to shrink the size of the code-genned data (which used plain old arrays covering only the BMP), and also to make the process of updating this support layer not so cryptic/painful. To update now consists primarily of running one Python file (, and it will do everything for you, including fetching all required data.

    But I think there are several more benefits that were picked up along the way as a consequence.


    • The unicode functions now supports the full unicode range, not just the BMP(!!)
    • It uses multi-stage lookup tables (same as what Python does) to reduce table sizes
    • NamesList support is fully integrated
    • There is minimal manual intervention required to update this layer
    • Updated to Unicode 13.0.0

    In terms of space savings, the complete layer, including the NamesList integration is around ~700kb, which comes in under the original size of the old Unicode implementation (~1.5-2mb), which excluded NamesList support. This is also all done with constant-time lookup tables, so negligible difference in speed (not that that was/is a concern anyway).

    I was originally going to make the nameslist support optional (allowing to still use libuninameslist), but that ended up being more effort than it was worth, and this also aligns with something that has been discussed prior anyway (see also #3861). Basically if I can get this functionality in, in under the space used previously, I don't see why this should ever be disabled. This integration also makes sense in the fact that it actually matches up with the version of Unicode that FontForge has been built with.

    While this is all well and good, I have also removed some functions: namely those relating to ligatures/fractions. As to why: when you sit down and look at what it's doing, none of it is actually well defined in terms of normative Unicode properties. The decompositions provided by is_Ligature.c is primarily derived from the NFKD sequences, which are already recorded in unialt.c.

    What remains are manual 'decompositions', most of which I find questionable - i.e. the first one I come across, suggests that U+04a4 is composed of U+041d, and U+0413, but if you read up on what that character provides, you realise that it cannot actually be composed of either.

    The exposed functions are also extremely low level, to the point of exposing the internal implementation details of how the data is organised (in tables, this is also true for the poorly named 'Names2' functions, which really only just extract the formal alias from the annotation). Prove me wrong, but I have yet to see any living example of scripts that make use of these functions.

    Type of change

    • Bug fix
    • New feature
    • Breaking change

    Closes #2566

    See also: #2570, although this doesn't really aim to address the issues laid out there.

    opened by jtanx 4
  • Shortcuts Copy-Paste

    Shortcuts Copy-Paste

    The program does not support old Ctrl-Ins/Shift-Ins options, only Ctrl-C/Ctrl-V, but when the keyboard layout is Russian, copying is impossible, only through the menu.

    opened by Dimon-II 0
  • Make sure FontForge can cleanly convert bitmap fonts to OT Bitmap format

    Make sure FontForge can cleanly convert bitmap fonts to OT Bitmap format

    This is a note from a couple years ago:

    I thought we might already have some related reports (#4419 might be one) but maybe not many.

    Basically, HarfBuzz and perhaps other shapers are reducing or eliminating their support for various bitmap font formats, but HarfBuzz at least supports bitmap fonts in an OpenType wrapper. FontForge is an obvious conversion tool but apparently things are a bit rocky.

    Given our own unifont challenges noted in #4704 it would be good if FontForge could cleanly convert the more common bitmap font formats (especially BDF) to OpenType.

    opened by skef 4
Free (libre) font editor for Windows, Mac OS X and GNU+Linux
Free (libre) font editor for Windows, Mac OS X and GNU+Linux

FontForge FontForge is a free (libre) font editor for Windows, Mac OS X and GNU+Linux. Use it to create, edit and convert fonts in OpenType, TrueType,

null 3.8k Jun 3, 2021
Helping to catalog, preserve and free the artifacts you need to produce music.

Musical Artifacts Helping to catalog, preserve and free the artifacts you need to produce music. Donate via Paypal Donate via Bitcoin Read the wiki Is

Lucas 58 Jun 6, 2021
A Hassle-Free Way to Self-Host Google Fonts. Get eot, ttf, svg, woff and woff2 files + CSS snippets

google-webfonts-helper A Hassle-Free Way to Self-Host Google Fonts This service might be handy if you want to directly download all .eot, .woff, .woff

Mario Ranftl 8.2k Jun 6, 2021
Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support

antimicro ?? Important update ?? This repo is currently unmaintained. The code hasn't been updated for a while. But not all is lost, antimicro has a f

null 1.4k Jun 5, 2021
Popcorn Time is a multi-platform, free software BitTorrent client that includes an integrated media player ( Windows / Mac / Linux ) A Butter-Project Fork

Popcorn Time A multi-platform, free software BitTorrent client that includes an integrated media player. Visit the project's website at popcorntime.ap

Popcorn Software 6k Jun 4, 2021
Multi-platform app that allows your devices to communicate

KDE Connect - desktop app KDE Connect is a multi-platform app that allows your devices to communicate (eg: your phone and your computer). (Some) Featu

KDE GitHub Mirror 1.1k Jun 7, 2021
Calibre OPDS (and HTML) PHP Server : web-based light alternative to Calibre content server / Calibre2OPDS to serve ebooks (epub, mobi, pdf, ...)

COPS COPS stands for Calibre OPDS (and HTML) Php Server. See : COPS's home for more details. Don't forget to check the Wiki. Why ? In my opinion Calib

Sébastien Lucas 1.2k Jun 2, 2021
Read-only mirror of

GPARTED ======= Gparted is the GNOME Partition Editor for creating, reorganizing, and deleting disk partitions. A hard disk is usually subdivided int

GNOME Github Mirror 169 Jun 6, 2021
🎧 Kaku is a highly integrated music player supports different online platform like YouTube, SoundCloud, Vimeo and more. Available on Mac, Windows and Linux.

Kaku Kaku is a highly integrated music player that supports different online platforms like YouTube, SoundCloud, Vimeo and more. Available on Windows,

Chia-Lung Chen 1k Jun 2, 2021
Flash OS images to SD cards & USB drives, safely and easily.

Etcher Flash OS images to SD cards & USB drives, safely and easily. Etcher is a powerful OS image flasher built with web technologies to ensure flashi

balena 20.6k Jun 6, 2021
Mirror of The GTK+ Remmina Remote Desktop Client

Remmina remote desktop client Use other desktops remotely, from a tiny screen or large monitors. RDP, VNC, SPICE, NX, XDMCP, SSH and EXEC network prot

null 1.6k Jun 5, 2021
Online genealogy

webtrees - online collaborative genealogy Contents License Coding styles and standards Introduction System requirements Internet browser compatibility

Greg Roach 550 Jun 7, 2021
Display and control your Android device

scrcpy (v1.17) Read in another language This application provides display and control of Android devices connected on USB (or over TCP/IP). It does no

Genymobile 49.4k Jun 4, 2021