The gear at the bottom of the activity bar opens Settings as a full-screen page. There are two sections.
One font drives the whole app — the chrome, the editor and the terminal. Choosing it here changes all three.
The text field is the source of truth and accepts any CSS font stack. Beside it, a ▾ list of installed coding faces shows each family previewed in its own face. Picking one writes:
The fallbacks are deliberate. Fold's chrome is monospace by design, so if that family is ever uninstalled the UI must drop to another mono face — never to a proportional one.
By canvas measurement, not enumeration: each candidate family is measured against all three generic families, and a family that renders differently from all of them is installed.
The obvious alternatives don't work. queryLocalFonts() needs a local-fonts permission Electron 43 doesn't expose, and system_profiler SPFontsDataType takes about twelve seconds to return 288 mostly-internal families while still missing SF Mono — macOS registers it as .SF NS Mono.
Font size and line height — terminal-only, on purpose. The chrome is laid out against fixed pixel values (status bar height, tab strip height), so scaling it would break the layout rather than improve it.
Each section has its own reset button, and a button only ever changes the controls next to it. Appearance resets the app-wide font family; Terminal resets terminal typography.
The terminal reset is derived by omitting fontFamily from the terminal defaults, so a new terminal setting joins it automatically instead of being forgotten.
The file is sanitised on load: unknown keys are dropped, so settings written by an older version never break a newer one. The storage key for the font family is still terminal.fontFamily for historical reasons, even though it is now app-wide — existing files need no migration.