The FreeType project has successfully participated at Google Summer of Code. Here is our list of possible projects – if you more ideas, please write to our mailing list so that we can discuss your suggestions, eventually adding them to this page.
Note that starting with 2021 the time available for students has been halved. Most of our projects are modular, more or less, allowing students to propose a subset of the mentioned targets if this appears appropriate.
Before contacting us, however, you should get really acquainted with the topic you would like to start with – in particular, search the mailing list archive and/or do some googling! We don't want to answer questions like “I'm interested in your project, I want to contribute, please tell me what to do!” again and again…
Right now, FreeType's rendering results of the current development version are not systematically compared to a baseline version, using continuous integration (CI) or something similar. This is problematic, since rendering regressions can be very easily missed due to subtle differences.
However, a GSoC 2020 project now provides a good framework that can act as a starting point for better integration. In addition, we are moving to the gitlab instance of freedesktop.org; this implies that access to its CI abilities should be straightforward.
The idea is to select a representative set of reference fonts from font corpora (which already exist mainly for fuzzing). The fonts are used to produce glyph images for various sizes and rendering modes (anti-aliased, B/W, native hinting, auto-hinting, etc.). FreeType can already produce MD5 checksums of glyph images as part of its debugging output; these values should be compared against a baseline version of rendering results. If there are differences, HTML pages should be generated that contain comparison images of the baseline's and the current development version's rendering result, ideally indicating how large the differences between the images are by using some yet to be defined measure.
Difficulty: medium. Requirements: C, HTML, Unix build tools. Potential mentors: Werner Lemberg, Alexei Podtelezhnikov, Toshiya Suzuki (FreeType).
Due to historical reasons, FreeType's build systems
are strange to newcomers. The default one is based
support. Alternatives are generic build files
together with special support files
and some even more exotic, old platforms.
This project is intended to update the build systems. Here is a preliminary list of tasks.
cmakesupport, there are a bunch of issues in Freetype's bug tracker that should be taken care of.
Difficulty: medium. Requirements:
Various Unix and Windows build tools, in
meson. Potential mentors:
Werner Lemberg, Alexei Podtelezhnikov, Toshiya Suzuki
Raph Levien has
an experimental font renderer written in
describes some of its features in more detail. It
claims to be much faster than FreeType's anti-aliasing
rendering module due to SIMD optimizations.
Rust package is another rendering engine based on
font-rs, and it claims to be even faster
and is actively developed. You can find some additional
Another project inspired by
which takes advantages of GPU rendering.
The project is about implementing an
module in C that can take priority over the
native FreeType rasterizer. It should either wrap the
calls to a linked precompiled object or port the Rust
code to C. It requires in-depth feasibility
analysis of either approach and a good understanding
of FreeType's architectural details.
Difficulty: high. Requirements: Rust, C, Unix build tools. Potential mentors: Werner Lemberg, Alexei Podtelezhnikov, Toshiya Suzuki (FreeType), Raph Levien (Google).
Right now, FreeType comes with a suite of small
graphic tools to test and showcase the library, most
They natively work
on X11 and
GDI without any additional requirements. One
opportunity is to port them
This would involve implementing a small, low-level
driver to manage a basic window, together with
associated keyboard and resizing events.
Another opportunity is to work on a modern GUI tool
to showcase and test FreeType capabilities. A first
try to improve the demo program
which is based on the Qt
GUI toolkit, was started as
2019 project. However, the development is
The idea is to finish
handling all aspects of the other demo
programs. Currently, it only provides the
If the student prefers, the Qt toolkit could be replaced with GTK.
Difficulty: medium. Requirements: C, C++, Qt, Unix build tools. Potential mentor: Werner Lemberg, Alexei Podtelezhnikov (FreeType).
At smaller sizes, usually in the range 12ppem to 20ppem, it can happen that separate outlines of glyphs touch each other (mainly caused by rounding issues), making glyphs illegible. A typical example is glyph ‘i’, where the vertical space between the i-dot and the body must have a certain size to let the reader's eye separate the two parts. [Note that the auto-hinter's capability to hint glyphs smaller than 12ppem is very limited in general and thus not part of this project description.]
Another example is the tilde accent, ‘~’, used in languages like Spanish: Even at smaller sizes the wiggle of the accent shape must be prevented, otherwise it can happen that a character like ‘ã’ looks like ‘ā’.
There are numerous other cases where some knowledge of the shape of a given glyph might help the auto-hinter improve the hinting, irrespective of the font shape or family – the i-dot and its body must be separate for virtually all available fonts.
The project consists of the following parts.
Difficulty: medium to high. Requirements: C, and ideally some basic font hinting and rasterization knowledge. Potential mentors: Werner Lemberg, Alexei Podtelezhnikov (FreeType).
2018 project was a first try to integrate
into FreeType. This library contains mature support
for TeX's bitmap formats (in
TFM metric files
VF virtual fonts).
The project would be as follows.
Difficulty: medium (hard for VF support). Requirements: C, Unix build tools, knowledge of TeX infrastructure (using TeXLive is recommended). Potential mentor: Werner Lemberg (FreeType).
Do you have more ideas? Please write to our mailing list so that we can discuss your suggestions, eventually adding them to the list!
Last update: 28-Oct-2021