Skip to content
Cursor Handbook

Fonts in Cursor

Four different settings control what you think of as the font, and only one of them is the code font. Here is which key does what.

  • Every plan
  • settings.json
  • Same keys as VS Code

Checked against cursor.com on 25 September 2026

Change the code font in under a minute

Cursor is a fork of VS Code, so font configuration is identical to VS Code and every guide written for VS Code applies unchanged. There are two routes to the same setting.

Through the settings screen. Press Cmd+, on macOS or Ctrl+, on Windows and Linux, type font family into the search box, and replace the value in the Editor: Font Family field. It takes effect as you type, with no restart.

Through the JSON file. Open the command palette with Cmd+Shift+P, run Preferences: Open User Settings (JSON), and add the keys directly. This is the version worth keeping in a dotfiles repository.

{
  "editor.fontFamily": "JetBrains Mono, Menlo, Consolas, monospace",
  "editor.fontSize": 14,
  "editor.fontLigatures": true,
  "editor.lineHeight": 1.6,
  "terminal.integrated.fontFamily": "JetBrains Mono"
}

The value is a CSS font stack rather than a file path. Cursor walks the list left to right and uses the first family the operating system reports as installed, which is why keeping a generic monospace at the end is worth the eight characters.

Every font setting, and what it actually touches

The confusion in most font threads comes from assuming one setting governs the whole window. It does not. These are the keys for code and terminal.

Cursor font settings and their effect
SettingWhat it controls
editor.fontFamilyThe code font. Takes a comma-separated fallback list; quote any family whose name contains a space.
editor.fontSizeCode font size in pixels. Changes the editor only, not the sidebar or tabs.
editor.fontLigaturesBoolean, or a string of CSS font-feature-settings when you want to enable some features and not others.
editor.fontWeightAccepts keywords or numeric weights from 100 to 900, so a variable font can sit at 350 rather than jumping to 400.
editor.lineHeight0 means derive it from the font size. Values under 8 are read as a multiplier, larger values as pixels.
editor.letterSpacingPixels added between characters. Small negative values tighten a font that was designed loose.
terminal.integrated.fontFamilyThe integrated terminal font. Falls back to the editor font when unset, which is why the terminal sometimes changes on its own.
terminal.integrated.fontSizeTerminal font size, independent of the editor.

The interface font is a separate problem

Nothing in the list above changes the sidebar, the tab bar, the command palette or the agent pane. Those use the interface font, and Cursor exposes no supported setting for its family. What it does expose is scale: window.zoomLevel takes positive or negative numbers, including decimals, and moves the entire interface together. One whole step is roughly a 20 percent change, so 0.5 is usually the right first try rather than 1.

Extensions that inject custom CSS can override the interface font, at the cost of a modified-installation warning on every update. Weigh that against how much the sidebar font really bothers you.

Ligatures, and when to switch them off

Programming ligatures replace character pairs such as !=, => and >= with single composed glyphs. Two things have to line up: the setting has to be on, and the font has to contain them. Turning the setting on with a font that has none does nothing at all, which accounts for a good share of the reports that ligatures are broken.

"editor.fontLigatures": true

// or enable specific OpenType features only
"editor.fontLigatures": "'calt' off, 'ss01', 'zero'"

The string form is the useful one. calt is contextual alternates, the feature that produces most arrow ligatures, so switching it off while keeping a stylistic set gives you the slashed zero without the arrows. Turn ligatures off entirely if you pair-program with someone who does not use them, or if you have ever miscounted the characters in a regex because three of them were drawn as one.

Fonts worth trying

All of these are monospaced and render well at small sizes. The free ones are under the SIL Open Font License, so they are safe to commit into a repository alongside a devcontainer.

Monospaced fonts for the Cursor editor
FontLicenseLigaturesWhy pick it
JetBrains MonoFree, OFLYesTall x-height and a 1.2 line spacing built into the design. The safest default if you have no opinion.
Fira CodeFree, OFLYes, extensiveThe font that popularised programming ligatures. The arrow and comparison glyphs are the most aggressive of any common font.
Cascadia CodeFree, OFLYesMicrosoft's terminal font. Ships in Cascadia Mono form too, which is the identical face with ligatures removed.
Geist MonoFree, OFLNoNarrow and even. Good when you keep two files side by side and need the columns to fit.
IBM Plex MonoFree, OFLNoSlightly humanist, with a distinctive italic. Pairs well with Plex Sans if you also theme your documentation.
IosevkaFree, OFLYes, configurableUnusually narrow by default, and buildable in dozens of variants if you want to pick your own letterforms.
MonaspaceFree, OFLYes, plus texture healingGitHub's superfamily. Five faces designed to mix inside one buffer, so comments can be a different texture from code.
SF Mono / MenloBundled with macOSNoAlready installed on any Mac. Menlo is Cursor's macOS default and needs no download at all.

Install a font the normal way for your operating system, then quit and reopen Cursor. The editor reads the installed font list at launch, so a font added while Cursor was running will often not appear until it restarts. This is the second most common reason a correct font name appears to do nothing.

When the font name does nothing

  • The name does not match. Use the family name the system reports, not the file name. On macOS, Font Book shows it; on Windows, the Fonts control panel does. JetBrainsMono-Regular.ttf is a file; JetBrains Mono is the family.
  • A space is unquoted. Inside the JSON string, a family with spaces is fine on its own but needs single quotes when it sits in a list with others: "'Fira Code', monospace".
  • It was installed for one user only. Fonts installed to a user profile are sometimes invisible to an application launched from a different context. Reinstalling system-wide resolves it.
  • A workspace setting is winning. A .vscode/settings.json in the project overrides your user settings. The settings screen marks which scope a value came from.
  • You changed the wrong font. If the sidebar stayed the same, that is expected. See the interface font note above.

The other cursor: caret shape and blinking

A fair number of people searching for cursor fonts are looking for the text caret rather than the editor named Cursor. Those settings are separate from font family and live alongside it.

Caret appearance settings
SettingAccepted values
editor.cursorStyleline, block, underline, line-thin, block-outline, underline-thin.
editor.cursorWidthWidth in pixels when cursorStyle is line. Ignored for the block styles.
editor.cursorBlinkingblink, smooth, phase, expand, or solid. solid stops the blink entirely.
editor.cursorSmoothCaretAnimationoff, explicit, or on. Animates the caret between positions instead of teleporting.

A block caret with "editor.cursorBlinking": "solid" is the usual choice for people coming from a terminal editor. The caret colour itself comes from the theme, under the editorCursor.foreground token, which you can override in workbench.colorCustomizations without forking the whole theme.

Cursor keeps the VS Code settings surface intact, so the Cursor documentation covers the agent features while editor settings follow VS Code behaviour.

Frequently asked questions

How do I change the font in Cursor?
Open settings with Cmd+, on macOS or Ctrl+, on Windows and Linux, search for Font Family, and type the exact family name. To edit the file directly, run Preferences: Open User Settings (JSON) from the command palette and set editor.fontFamily. The change applies immediately with no restart.
What is the default font in Cursor?
Cursor inherits the VS Code defaults, which differ by platform: Menlo on macOS, Consolas on Windows, and Droid Sans Mono on Linux, each with a generic monospace fallback. That is why the same settings file looks different on two machines.
Why did my font not change?
Almost always because the string does not match an installed family name. The value is a CSS font stack, not a file path, so it has to match the name the operating system reports, spaces and all, and names containing spaces must be quoted. A font installed for one user account but not system-wide is the second common cause.
How do I turn on ligatures in Cursor?
Set "editor.fontLigatures": true and use a font that has them, such as Fira Code, JetBrains Mono, Cascadia Code or Monaspace. The setting also accepts a font-feature-settings string, so "calt off, ss01" lets you disable the arrow ligatures while keeping a stylistic set.
How do I make the sidebar and tabs bigger?
editor.fontSize only affects code. The interface scales with window.zoomLevel, where each whole step is roughly a 20% change and decimals such as 0.5 work. There is no supported setting for the interface font family itself.
How do I change the shape of the blinking cursor?
That is the caret, controlled by editor.cursorStyle with options line, block, underline and their thin variants. editor.cursorBlinking set to solid stops it blinking, and editor.cursorSmoothCaretAnimation animates movement between positions.
Does the terminal use a different font from the editor?
It can. terminal.integrated.fontFamily overrides the editor font inside the integrated terminal, and when it is unset the terminal follows editor.fontFamily. Powerline prompts need a Nerd Font patched build, which is why the terminal is often the one place you want a separate family.