Fontconfig.Org

Fontconfig is a library for configuring and customizing font access.


Important Addresses

Please report technical issues and questions to fontconfig@fontconfig.org

That list can also be used for application and library implementation issues.

You can subscribe to that list here.

I've also set up a bugzilla database that you can add bugs to here

And, there's a (currently empty) wiki. I'll see if I can't figure out how to set that up in the next few weeks, of course anyone with a wiki-clue is welcome to help out as well; anyone can register and edit pages. I'd like to get FAQs uploaded there.

You can find instructions for accessing fontconfig CVS at keithp.com here. The module name is (oddly enough) fontconfig.

Documentation

It's amazing but true, there is primitive documentation available for fontconfig.

About Fontconfig

Fontconfig can:

Fontconfig does not:

About Xft

The current version of Xft (2.0) provides a client-side font API for X applications. It uses Fontconfig to select fonts and the X protocol for rendering them. When available, Xft uses the Render extension to accelerate text drawing. When Render is not available, Xft uses the core protocol to draw client-side glyphs. This provides completely compatible support of client-side fonts for all X servers.

Drawing anti-aliased text with the core protocol involves fetching pixels from the destination, merging in the glyphs and shipping them back. This can be a performance problem when the latency between client and server is high. Drawing non-AA text with the core protocol can be done by just sending the glyphs from the client to the server. This eliminates any latency effects and makes rendering speed depend only on bandwidth. Careful protocol selection can make the bandwidth scale linearly with the pixel size of the glyphs, so performance is acceptable, even with relatively large glyphs.

When using legacy X servers (those without Render support) across a network, disabling anti-aliased text will improve text performance so that applications are reasonably usable even if completely dependent on client-side fonts.

The many faces of Xft

There are three very different libraries name Xft. The original 1.0 Xft library shipped with XFree86 4.0.2 and included a private configuration mechanism via the XftConfig file. For X servers without the Render extension, Xft 1.0 used core X fonts instead of client-side fonts. This was supposed to allow applications to code to a common API and run with all X servers.

Early in the deployment of Xft 1.0, it became abundantly clear that another custom X-specific font configuration mechanism was a really bad idea. Both KDE and Pango ended up stealing pieces of Xft to configure fonts. KDE created a GUI Xft configuration tool by stealing the XftConfig parsing code, Pango stole most of Xft so that the XftConfig file could be shared between the Xft and FreeType2 backends. Fontconfig was designed to solve both of these problems.

The other problem in Xft 1.0 was the use of core X fonts when the server wasn't blessed with the Render extension. This meant that applications couldn't count on client-side fonts when using the high-level Xft APIs. As client-side fonts provide significant value beyond anti-aliased glyphs, it again became obvious that this design was flawed.

The Xft 1.0 API abstracted configuration details sufficient to permit a binary compatible version, Xft 1.1, to be developed which replaces the XftConfig configuration file with calls in to the Fontconfig library. Unfortunately, the Xft 1.0 API didn't sufficiently hide the rendering details making it impossible to provide for client-side fonts in servers without the Render extension. This means that Xft 1.1 shares font configuration, but isn't really usable on servers without Render.

Xft 2.0 hides most of the underlying system details so that developers can confidently use it's API to access client-side fonts in any X environment.

2.2 Release

We're almost ready for release 2.2 of fontconfig. As XFree86 4.3 contains up-to-date versions of the X related libraries (Xrender, Xft and Xft1), release 2.2 is likely to contain just fontconfig. Pull prereleases from here, they'll be numbered 2.1.9x.

2.1 Release

I've gathered up current CVS (as of 2002-11-21) and put together fcpackage 2.1. This fixes various issues:

Get release 2.1 here.

2.0 Release

The first release of Fontconfig is 2.0. Yes, this should by all rights be named 1.0, but there was an earlier library used by XFree86 called 'Xft' which had a 1.0 release and as fontconfig now ships version 2 of Xft, it made some (small) amount of sense to just label the whole mess 2.0.

Get release 2.0 here.


Related Bits

Here's some fontconfig related stuff.

Gtk+

Current Gtk+ and Pango CVS use Fontconfig and Xft2; please fetch bits from gnome.org.

Mozilla

This directory holds recent builds of Mozilla with Fontconfig and Xft2 support. At some point, this will be surplanted by official Mozilla bits.

Qt 3

This directory holds a patch which makes Qt 3 use Fontconfig and Xft2 instead of Xft1. Trolltech is busy integrating this support into a future Qt release.

Web Fonts

These are the Microsoft web fonts.

Related Sites

XFree86

XFree86 ships a version of fontconfig, but it's not tracking fontconfig CVS.

FreeType

FreeType is a free, high-quality portable font engine used by Xft to rasterize fonts. While Fontconfig doesn't expose any FreeType dependencies on applications, it does use FreeType internally to get font information from font files.

Notes

Fontconfig CVS can be found at cvs.fontconfig.org, which is currently pointed at keithp.com. The module name is 'fontconfig'. You can find information about that repository here.

Questions and comments about fonts in XFree86 may be directed at the fonts@xfree86.org mailing list.

This package contains a source tarball of fontconfig and Xft along with the modern version of Xft1 and Xrender. Fontconfig and Xft can be built using the usual './configure && make && make install' routine while Xrender and Xft1 use 'xmkmf -a && make && make install'.

When using ./configure, you'll probably want to set paths to the usual values, on most systems that's probably best done with './configure --sysconfdir=/etc --prefix=/usr'

Please find versions of the fcpackage tar file in the pub directory, each version is listed with the year-month-day.hour-minute it was built.