VariableFonts

1.1.0

Extends UIFont/NSFont (and SwiftUI Font) for easier variable font support
frzi/swift-variablefonts

What's New

1.1.0

2024-10-13T11:32:23Z

Axis names no longer are raw strings. Rather, there's a new type that wraps the name. The FontAxis.Name enum comes with a set of well known axis names, for your convenience. String literals can be used to refer to custom axis names. See the readme or code docs for more information.

Variable Fonts

Easier use of variable fonts with AppKit, UIKit and SwiftUI. For iOS, macOS, tvOS, watchOS and visionOS

SwiftUI SwiftUI Swift Xcode MIT

Extends AppKit's NSFont, UIKit's UIFont and SwiftUI's Font with variable font features. Couldn't be easier!

How-to-use

Initializing font with axes.

let font = NSFont(name: "Amstelvar", size: 20, axes: [
	.weight: 650,
	.opticalSize: 144,
	"GRAD": 500,
])

New font with a single axis applied

let scienceGothic = UIFont(name: "ScienceGothic", size: 20)!
let slanted = scienceGothic.withAxis(.slant, value: -10)

Get all available axes of a font

let tiltWarp = NSFont(name: "TiltWarp-Regular", size: 100)!
let axes = tiltWarp.allAxes()
print(axes)
/*
[VariableFonts.FontAxis(
	id: 1481789268,
	name: "XROT",
	description: "Rotation in X",
	minimumValue: -45.0,
	maximumValue: 45.0,
	defaultValue: 0.0),
etc...]
*/

SwiftUI

Text("Hello world")
	.font(.custom(name: "Fraunces", size: 40, axes: [
		.weight: 900,
		"SOFT": 100,
		"WONK": 1,
	]))

Example: maxed out font

let nunito = UIFont(name: "NunitoSans", size: 20)!
let axes = nunito.allAxes()

// Creates a UIFont with all axes set to their maximum value.
let megaNunito = nunito.withAxes(
	Dictionary(uniqueKeysWithValues: axes.map { axis in
		return (axis.id, axis.maximumValue)
	})
)

Axis names

The dictionary you supply to configure the axes use FontAxis.Name as keys. This type comes with a set of well known axis names. I.e. .weight (wght), .width (wdth), etc. This type is ExpressibleByStringLiteral. String literals can be used for custom axis names.

Description

  • Swift Tools 5.9.0
View More Packages from this Author

Dependencies

  • None
Last updated: Wed May 14 2025 06:25:24 GMT-0900 (Hawaii-Aleutian Daylight Time)