Ghostty Config includes comprehensive font settings and a font playground for testing how fonts will look in your terminal.
Font Settings Overview
Access font settings from the Fonts category in the navigation sidebar. Font settings are organized into several groups:
General Font Settings - Base size, thickening, and features
Font Families - Font families for different styles
Font Styles - Named styles for each family
Font Variations - Variable font settings
Advanced Font & Cell Settings - Fine-tuning options
The Font Playground
Access the Font Playground from the App section in the navigation sidebar.
Playground Features
The Font Playground lets you test fonts with realistic terminal output:
// From font-playground/+page.svelte
< div class = "preview" style = "
font-family: {fontFamily};
font - size : { fontSize + 'px' };
font - style : { italic ? 'italic' : 'normal' };
font - weight : { bold ? 700 : 400 };
" >
< div class = "row prompt" >
< span style = "color: var(--config-palette-2);" > john </ span >
< span style = "color: var(--config-palette-6);" > @ </ span >
< span style = "color: var(--config-palette-4);" > doe - pc </ span >
< span style = "color: var(--config-palette-1); font-weight: 700;" > $ </ span >
ls
</ div >
< div class = "row" >- rwxr - xr - x 1 root < span style = "color: var(--config-palette-3); font-weight: 700;" > Documents < /span></ div >
< div class = "row" >- rwxr - xr - x 1 root < span style = "color: var(--config-palette-2); font-weight: 700;" > Downloads < /span></ div >
< div class = "row" > Icons : Powerline </ div >
</ div >
Using the Playground
Open Font Playground
Navigate to App → Font Playground in the sidebar
Enter font name
Type the name of a font installed on your system in the Font family field
Adjust settings
Use the sliders and toggles to test different sizes, bold, and italic styles
Observe preview
The preview updates in real-time showing how the font renders with colors and symbols
The Font Playground only tests how fonts appear - it doesn’t modify your actual font settings. Use the Fonts settings page to configure your actual terminal fonts.
Configuring Font Families
Ghostty allows separate fonts for different text styles:
Main Font Family
// From settings.ts
{
id : "fontFamily" ,
name : "Main font family" ,
type : "text" ,
value : ""
}
Leave empty to use Ghostty’s default font, or specify a font installed on your system:
# Example values:
font-family = JetBrains Mono
font-family = Iosevka
font-family = Fira Code
Style-Specific Families
Configure different fonts for bold, italic, and bold-italic:
// From settings.ts
{
id : "fontFamilyBold" ,
name : "Font family for bold text" ,
type : "text" ,
value : ""
},
{
id : "fontFamilyItalic" ,
name : "Font family for italic text" ,
type : "text" ,
value : ""
},
{
id : "fontFamilyBoldItalic" ,
name : "Font family for bold italic text" ,
type : "text" ,
value : ""
}
Leave style-specific families empty to use variants of your main font family. Only set these if you want different fonts for different styles.
Font Size
Control the base font size for your terminal:
// From settings.ts
{
id : "fontSize" ,
name : "Base font size" ,
type : "number" ,
value : 13 ,
min : 4 ,
max : 60 ,
step : 0.5 ,
range : true
}
The Font Playground includes the same control:
// From FontPreview.svelte
< Item name = "Font size" >
< Number bind : value = { fontSize } range = { true } min = { 4 } max = { 60 } step = { 0.5 } />
</ Item >
Recommended Sizes
Fine Tuning
Common font sizes for different display setups:
12-14px : Standard laptop displays
14-16px : High-DPI/Retina displays
16-18px : Large displays or accessibility needs
10-12px : Small displays or dense information
Ghostty supports fractional sizes: font-size = 13.5
font-size = 14.5
Use 0.5 increments to find the perfect size for your setup.
Font Styles
Specify named styles for your fonts:
// From settings.ts
{
id : "fontStyle" ,
name : "Main font style" ,
type : "text" ,
value : "default"
},
{
id : "fontStyleBold" ,
name : "Font style for bold text" ,
type : "text" ,
value : "default"
},
{
id : "fontStyleItalic" ,
name : "Font style for italic text" ,
type : "text" ,
value : "default"
},
{
id : "fontStyleBoldItalic" ,
name : "Font style for bold italic text" ,
type : "text" ,
value : "default"
}
Using Named Styles
For fonts with multiple weights, specify the style name:
# Example: Using Iosevka Heavy
font-family = Iosevka
font-style = Heavy
# Example: Disabling italic
font-style-italic = false
Set a style to false to completely disable that variant and use the default style instead.
Font Features & Ligatures
Control OpenType font features:
// From settings.ts
{
id : "fontFeature" ,
name : "Font ligature settings" ,
type : "text" ,
value : ""
}
Example configurations:
Enable Ligatures
Disable Ligatures
# Enable specific ligatures
font-feature = liga
font-feature = calt
# For Fira Code
font-feature = ss01 # Alternative ampersand
font-feature = ss02 # Greater than/less than
font-feature = ss03 # Arrow ligatures
# Disable ligatures
font-feature = -liga
font-feature = -calt
Font Thickening (macOS)
Ghostty can artificially thicken fonts on macOS:
// From settings.ts
{
id : "fontThicken" ,
name : "Thicken fonts" ,
type : "switch" ,
note : "This currently only affects macOS." ,
value : false
},
{
id : "fontThickenStrength" ,
name : "Thicken strength" ,
type : "number" ,
value : 255 ,
min : 0 ,
max : 255 ,
step : 1 ,
range : true
}
Font thickening is useful for thin fonts that are hard to read. Start with the default strength of 255 and adjust if needed.
Variable Fonts
For variable fonts, use font variations instead of styles:
// From settings.ts
{
id : "fontVariation" ,
name : "Main font variant" ,
type : "text" ,
value : ""
},
{
id : "fontVariationBold" ,
name : "Font variant for bold text" ,
type : "text" ,
value : ""
}
// ... italic and bold-italic variants
Example usage:
# Variable font with custom weight
font-family = Inter
font-variation = wght= 450
font-variation-bold = wght= 700
Unicode Font Mapping
Map specific Unicode ranges to different fonts:
// From settings.ts
{
id : "fontCodepointMap" ,
name : "Unicode-specific font mapping" ,
note : "" ,
type : "text" ,
value : ""
}
Example:
# Use Noto Sans CJK for Chinese/Japanese/Korean
font-codepoint-map = U+4E00-9FFF="Noto Sans CJK"
# Use Noto Color Emoji for emoji
font-codepoint-map = U+1F300-1F9FF="Noto Color Emoji"
Advanced Font Settings
Cell Adjustments
Fine-tune cell dimensions and character positioning:
// From settings.ts
{
id : "adjustCellWidth" ,
name : "Cell width adjustment" ,
type : "text" ,
value : ""
},
{
id : "adjustCellHeight" ,
name : "Cell height adjustment" ,
type : "text" ,
value : ""
},
{
id : "adjustFontBaseline" ,
name : "Font baseline adjustment" ,
type : "text" ,
value : ""
}
Example adjustments:
# Increase cell width by 2 pixels
adjust-cell-width = 2
# Decrease cell height by 1 pixel
adjust-cell-height = -1
# Adjust baseline by 10%
adjust-font-baseline = 10%
Advanced font settings have minimal validation and can make your terminal unusable. Only modify these if you understand what they do.
Decoration Adjustments
Customize underlines, strikethrough, and cursor:
// From settings.ts
{
id : "adjustUnderlinePosition" ,
name : "Underline position adjustment" ,
type : "text" ,
value : ""
},
{
id : "adjustUnderlineThickness" ,
name : "Underline thickness adjustment" ,
type : "text" ,
value : ""
},
{
id : "adjustCursorThickness" ,
name : "Cursor thickness adjustment" ,
type : "text" ,
value : ""
}
Synthetic Styles
Control how Ghostty generates synthetic bold/italic:
// From settings.ts
{
id : "fontSyntheticStyle" ,
name : "Synthetic styles" ,
note : "See the docs for more info." ,
type : "text" ,
value : "bold,italic,bold-italic"
}
Options:
bold - Allow synthetic bold
italic - Allow synthetic italic
bold-italic - Allow synthetic bold-italic
Synthetic styles are generated when a font doesn’t have native bold or italic variants. Most modern fonts include these variants, so synthetic rendering is rarely needed.
Alpha Blending
Control how font rendering blends with the background:
// From settings.ts
{
id : "alphaBlending" ,
name : "Alpha blending colorspace" ,
type : "dropdown" ,
value : "native" ,
options : [ "native" , "linear" , "linear-corrected" ]
}
Testing Fonts in the Playground
The Font Playground provides realistic test content:
Standard Output
Unicode Support
Symbols & Icons
john@doe-pc$ ls
-rwxr-xr-x 1 root Documents
-rwxr-xr-x 1 root Downloads
-rwxr-xr-x 1 root Pictures
-rwxr-xr-x 1 root 実行可能ファイル
Tests how the font handles CJK characters. Tests Powerline symbols and special glyphs.
Popular Monospace Fonts
JetBrains Mono Designed specifically for developers with excellent ligature support. font-family = JetBrains Mono
font-size = 13
Iosevka Highly customizable with condensed variants for dense code. font-family = Iosevka
font-size = 14
Fira Code Popular font with extensive programming ligatures. font-family = Fira Code
font-feature = liga
Cascadia Code Microsoft’s font for Windows Terminal with Powerline support. font-family = Cascadia Code
font-size = 13
Exporting Font Settings
Font settings are exported in Ghostty’s config format:
# Generated config example
font-family = JetBrains Mono
font-size = 14
font-feature = liga
font-thicken = true
font-thicken-strength = 200
Best Practices
Use the Font Playground to test fonts before setting them as your main font family. Check that all glyphs render correctly.
Programming ligatures can improve code readability but may confuse some users. Test with real code before enabling.
Adjust font size based on your display DPI. High-DPI displays often need larger sizes.
For most fonts, leave font-style settings at “default” to use the font’s built-in variants.
If you work with non-Latin scripts, test that your chosen font supports those characters.