Skip to main content

fonttry

Temporarily install fonts on macOS from any source format — without touching Font Book.

fonttry compiles and installs fonts into the current macOS session scope via CoreText. As soon as you hit Ctrl+C or close the terminal, the fonts are unregistered automatically. Your original files are never modified.


Features

  • One command to compile + install + uninstall
  • Supports .otf, .ttf, .ufo, .designspace, .glyphs, .glyphx, .fontra
  • Compiles via fontmake (UFO, Designspace, Glyphs) or the Fontra Python backend (Fontra)
  • Choose output format with -o: ttf (default), otf (CFF2 for variable), or static with --instance
  • Pre-flight checks before compiling multi-master sources:
    • detects missing glyphs per master
    • checks contour count, point structure and component compatibility
    • removes incompatible glyphs automatically so compilation doesn't fail
    • synchronises kerning and public.glyphOrder across masters
  • Works in session scope: fonts are visible in any application on your system
  • Cleans up stale workspaces from previous runs automatically
  • Cleans up on Ctrl+C, SIGTERM or SIGHUP

Requirements

  • macOS (uses CoreText — Linux/Windows not supported)
  • Python 3.10+
  • Xcode Command Line Tools (for compiling the CoreText helper on first run):
    xcode-select --install
    

Installation

From PyPI (recommended)

pip install fonttry

This installs fontmake and all required dependencies. fonttry supports .otf, .ttf, .ufo, .designspace and .glyphs sources out of the box.

.fontra support (optional)

If you work with .fontra projects, one additional package is required. It has no PyPI release yet and must be installed directly from GitHub:

pip install git+https://github.com/fontra/fontra-compile

You only need this if you intend to use fonttry with .fontra files.

From source

git clone https://github.com/typium/fonttry
cd fonttry
pip install -r requirements.txt   # includes fontra-compile from GitHub
pip install -e .

Usage

# Binary fonts — install directly
fonttry MyFont.otf
fonttry MyFont.ttf

# UFO — compiles to TTF, then installs
fonttry MyFont.ufo

# Designspace — compiles to variable TTF by default
fonttry MyFamily.designspace

# Designspace — compile as variable CFF2 (OTF)
fonttry MyFamily.designspace -o otf

# Designspace — compile a specific named instance
fonttry MyFamily.designspace --instance "Regular"
fonttry MyFamily.designspace --instance "Regular" -o otf

# Glyphs file
fonttry MyFont.glyphs
fonttry MyFont.glyphs --instance "Bold"

# Fontra project (requires fontra-compile, see Installation)
fonttry MyFont.fontra

Output format (-o)

Flag Variable source Static (--instance or UFO)
(none) variable TTF TTF
-o ttf variable TTF TTF
-o otf variable CFF2 OTF
-o variable-ttf variable TTF —
-o variable-otf variable CFF2 —

Verbose mode

fonttry MyFamily.designspace --verbose

Shows all missing or incompatible glyphs without truncation.


Terminal output

📋  Preparing workspace…
  → Workspace : /path/to/.fonttry_abc123

⚙  Compiling MyFamily.designspace…
  → fontmake --output-dir … -m MyFamily.designspace -o variable
  ✓  1 font(s) compiled

⬆  Temporary installation (Session scope)…
  ✓  MyFamily[wght].ttf

✓  1 active font(s) — visible in any application on your system.
   🔤  MyFamily Regular

   Ctrl+C to uninstall and quit.

Press Ctrl+C to uninstall and exit.


How it works

  1. Workspace — a hidden temp folder is created next to your source. Your original files are never touched. Stale workspaces from previous failed runs are cleaned up automatically.
  2. Pre-flight (multi-master sources) — sources are checked for interpolation compatibility. Incompatible glyphs are removed from the workspace copy so compilation doesn't fail.
  3. Compilation — fontmake is called for UFO, Designspace and Glyphs sources. Fontra sources are first exported to Designspace via the Fontra Python backend, then compiled with fontmake.
  4. Staging — compiled fonts are copied to ~/Library/Application Support/fonttry/.
  5. Registration — a small CoreText helper registers the fonts at session scope. Fonts are visible to all apps immediately, without admin rights, and disappear when the session ends.
  6. Cleanup — on exit, the helper unregisters the fonts and the workspace is deleted.

The CoreText helper (fonthelper) is compiled from Objective-C on first run using clang. It is cached in the staging directory and reused on subsequent runs.


Project structure

fonttry/
├── src/
│   └── fonttry/
│       ├── __init__.py       # version
│       ├── core.py           # all logic + CLI entry point
│       └── checks.py         # --lint quality checks
├── .github/
│   └── workflows/
│       └── publish.yml       # publishes to PyPI on release
├── pyproject.toml            # build config + dependencies
├── requirements.txt          # includes fontra-compile (no PyPI release)
├── CHANGELOG.md
├── CONTRIBUTING.md
├── AUTHORS.txt
└── LICENSE

Publishing a new version (maintainers)

  1. Bump version in pyproject.toml and src/fonttry/__init__.py.
  2. Update CHANGELOG.md.
  3. Commit, tag and push:
    git tag v0.2.0
    git push origin v0.2.0
    
  4. Create a GitHub Release from the tag → the publish.yml workflow uploads to PyPI automatically via trusted publishing (no API key required).

Contributing

See CONTRIBUTING.md.


License

GPL-3.0 — see LICENSE.

Metadata

Release files for fonttry 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fonttry 0.1.1
File Size Uploaded
fonttry-0.1.1.tar.gz 40.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fonttry 0.1.1
File Interpreter ABI Platform
fonttry-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 79.6 kB

Release files / fonttry-0.1.1.tar.gz

Download URL fonttry-0.1.1.tar.gz
Size 40.7 kB
Tags Source
SHA-256 checksum
How to use checksums
2885317539af60009bd54d2f49bd23cf5d49251a684aac3bb72a1fa7d52ded5a
BLAKE2b-256 checksum
How to use checksums
0e2721443afff2b9018a7d1e9971fec50dcc504060f4b6974fa54a5e32827074
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Jun 4, 2026.

Transparency log

Release files / fonttry-0.1.1-py3-none-any.whl

Download URL fonttry-0.1.1-py3-none-any.whl
Size 38.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0ea46f5b49842c5d2415e73df963dd6519b0ad020c3ff30de87647e15705056a
BLAKE2b-256 checksum
How to use checksums
6eee27361b832fd8369b0a6e2c0e132e3e6adfd07b5a17e386881339ba903a39
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Jun 4, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page