Modular Font Editor K

Modular Font Editor K (MFEK) is an open source (Apache 2.0 licensed) modular font editor. It attempts to apply the Unix adage that each program should “do one thing and do it well” to a GUI font editor.

MFEK is still alpha, and many parts are missing (including a good website!). You can help!

Why MFEK?

To pull all modules, why not use this script?

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/MFEK/docs/master/blob/pull_all_modules.sh)"

To see who wrote an MFEK module, check its AUTHORS file. The two main authors of MFEK are Fredrick R. Brennan (@ctrlcctrlv) and Matthew Blanchard (@MatthewBlanchard).

Current roadmap as of 2022-12-25

Roadmap key

Current roadmap as of 2022-12-25

Modular programs

In development

  • MFEKglif (.glif editor w/planned Spiro support)
  • MFEKstroke (applies different kinds of strokes to .glif files with open contours)
  • MFEKmetadata (UFO metadata querier)
  • MFEKabout (MFEK's about screen)

Planned

  • MFEKufo (a launcher for MFEKglif that displays all glyphs)
  • MFEKdesignspace (design space XML creator/editor)
  • MFEKtransform (transform, skew glyphs w/CLI options / GUI)
  • MFEKinterpolate (an interpolation confirmer / tester)
  • MFEKmetrics (load UFO file into HarfBuzz and output typed text, edit horizontal/vertical kerning and bearings)
  • MFEKopentype (OpenType layout editor based on @simoncozens' ideas)
  • MFEKexport (frontend to fontmake)

Far off

  • MFEKpshints (Add PostScript hints to glyphs and test them)
  • MFEKtruetype (basically would be an open source version of Visual TrueType (VTT))

Libraries

In development

  • glifparser.rlib (a .glif parser)
    • integer-or-float.rlib (implements a .glif data type)
    • (We need this because Norad has no support for <lib> in .glif files, and due to how they went about implementing Norad, fixing that is trickier than having my own glyph parser. Furthermore, as I plan to support Spiro, B-Splines, etc., through UFO format extensions, I should have one anyway.)
  • icu-data.rlib (Unicode ICU data without C libicu, currently only encodings)
  • ipc.rlib (very basic inter-process communication functions)
  • math.rlib (implements algorithms for MFEKstroke: Pattern-Along-Path, Variable/Constant Width Stroke, etc.)

Planned

  • libskef (Port of @skef's «Expand Stroke» feature to a reusable C API. Will likely also require SplineSet type from FontForge.)
  • spiro-rs (Port of libspiro to Rust, probably will be done via bindgen)