Find a font that feels the way you want

Choose a feeling and the fonts you already have are ranked against it, using what each font records about its own weight, width and letterforms. Every result shows which traits matched and which did not.

How it works

Choosing a typeface is mostly a question about feeling, and the answer is usually somebody else’s list. Twenty elegant fonts for weddings, ten professional fonts for a CV. Those lists are opinions about fonts you may not own, and they cannot tell you anything about the four hundred already sitting on your machine.

This works the other way round. You pick a feeling, and the fonts you already have are ranked against it. Nothing is recommended that you cannot use this afternoon.

The ranking comes out of the font files. Every font records how heavy it is, how wide, whether it has serifs and what kind, and how tall its lowercase letters run against its capitals. Those numbers are why a page set in one face reads as formal and the same page in another reads as cheerful, and they are sitting in a table called OS/2 that almost nothing bothers to read. This tool reads it, on your device, and sorts your library by it.

What it will not do is pretend the last step is a measurement. Reading that a font is a high-contrast serif with a small x-height is arithmetic. Deciding that this combination is what people mean by elegant is a judgement, and it is written down rather than hidden: every result lists the traits it matched and the traits it missed, so you can disagree with the reasoning instead of just with the answer.

How to use it

  1. 1 Choose how the text should feel.
  2. 2 Press Use my installed fonts, and allow the permission your browser asks for.
  3. 3 Add any font files you are considering but have not installed.
  4. 4 Read the matches, each with your sample text set in it and the traits it matched listed underneath.

Good to know

  • Check the weights you will actually use. A family is several files, and the Regular can match a feeling that the Bold does not.
  • A match is a starting point, not a verdict. Set your real headline in the top few and look at them before deciding, because no measurement catches what a face does at the size you are using it.
  • Fonts that record nothing about themselves are listed separately rather than ranked last. Older and free fonts are the usual culprits, and some of them are excellent.
  • Contrast is the least reliable trait here, because the field that records it is often left empty or filled in carelessly. Where it is missing the font is judged on everything else instead.
  • If the results feel wrong, look at which traits matched. The disagreement is usually about one trait, and seeing which one is more useful than a number.

Browser support

  • Chrome 94 and later · full speed from 103
  • Firefox 93 and later · slower path
  • Safari 16.4 and later · slower path
  • Edge 94 and later · full speed from 103

Best in Chrome or Edge.

These are the oldest versions with everything the tool uses. They are worked out from the tool itself, so they change when it does.

Version numbers checked on 2026-09-04.

Ten numbers that try to describe what a typeface looks like

In 1985 a group at Elseware and later Hewlett-Packard set out to solve a problem that sounds trivial and is not: when a document asks for a font the machine does not have, what should it substitute? Answering that needs a way to describe what a typeface looks like in terms a program can compare. What they produced was PANOSE, ten numbers covering serif style, weight, proportion, contrast, stroke variation, arm style, letterform, midline and x-height. It is embedded in almost every font file shipped since, sitting in a table called OS/2, and it is the closest thing typography has to a machine-readable description of appearance.

It is also, in practice, half empty. The ten digits are optional, every one of them has a value meaning "any", and a great many font files ship with all ten set to exactly that. Some were filled in by a conversion tool that never asked the designer. The result is a field that is genuinely informative when present and confidently wrong when trusted blindly, which is why this tool treats it as corroboration and never as the spine of an answer. All zeros is not read as a neutral font. It is read as nobody having said.

The spine is the part of OS/2 that an operating system depends on, and therefore the part that is reliably correct. The weight class is a number from 100 to 900 that decides which file gets used when a document asks for bold. The width class from 1 to 9 does the same for condensed and extended. The family class separates oldstyle from transitional from Didone from slab from sans from script, using a scheme IBM published for its own typeface library. Get any of these wrong and the font misbehaves in every application on the machine, so they tend to be right.

The most useful single number is one people rarely name. Every font from OS/2 version 2 onward records its x-height and its cap height, and the ratio between them is unitless, which means it compares directly across two fonts at any size. A ratio near 0.65 is a classical face with small lowercase letters and long extenders, which reads as formal and traditional and sets beautifully at large sizes. A ratio above 0.75 is a modern screen-oriented face whose lowercase nearly fills the cap height, which reads as friendly and plain and holds up at small sizes. That one fraction separates a wedding invitation from an app interface more reliably than any other field in the file.

What none of it can do is tell you that a font is elegant. Elegance is not in the file. What is in the file is a high contrast between thick and thin strokes, a small x-height, a moderate weight and a serif of a particular shape, and the claim that this combination is what English speakers mean by elegant is a rubric somebody wrote down. This one is written down here, in the open, and every result on the page lists the traits that matched and the traits that did not, because the useful thing to hand someone is not a verdict but the reasoning behind it.

The last constraint is honesty about absence. A font predating OS/2 version 2 has no recorded x-height, and one converted by a careless tool may have no recorded width. Scoring those as failures would rank a font by its age or by the software that produced it. So an untestable trait is dropped from the calculation rather than counted against the font, a score is matched over applicable, and a font that recorded nothing at all is set aside and labelled instead of being sorted to the bottom of a list it was never really in.

Frequently asked questions

How can a program know what a font feels like?

It cannot, and it does not claim to. What it knows is what each font records about itself: weight, width, the kind of serifs it has, how tall its lowercase runs against its capitals. Those characteristics are what produce the impression, so a font can be ranked by them. Turning a set of characteristics into the word "elegant" is a judgement, and this tool shows you the traits behind every result so you can check that judgement rather than take it.

Where do the characteristics come from?

A table inside every font file called OS/2, plus three smaller ones. Between them they record the weight class, the width class, the IBM family class that separates serif from sans from script, and the x-height and cap height. All of it is read on your device, a few hundred bytes per font.

Are my fonts uploaded?

No. The reading happens in this browser tab on your own machine, and the font never moves. Open your developer tools, watch the Network tab and run a scan: no request carries your fonts or their names. That matters most for licensed fonts, which you are usually not permitted to send anyone.

Why do some fonts say there is not enough information?

Because the font file does not record it. The appearance table is optional in places and older fonts predate parts of it, so some fonts simply never wrote down their width or their x-height. Those are listed separately instead of being ranked last, because an unrecorded trait is not a bad score, and some of the fonts in that list are very good.

Will it suggest fonts I do not have?

No, deliberately. Every other tool here works on what is already on your device, and a recommendation you cannot act on without going somewhere else and paying for it is a different kind of product. If you are considering a family, add its trial file and it will be ranked alongside everything else.

Does it understand variable fonts?

Not yet, and it is worth knowing why. A variable font covers a range of weights rather than one weight, so scoring it against "weight between 300 and 500" either matches everything or needs a comparison the tool does not do yet. For now a variable font is judged on its default instance, which is usually the Regular.

Why is contrast so often missing?

Stroke contrast, the difference between the thick and thin parts of a letter, lives in a field called PANOSE that a great many fonts ship blank or filled in carelessly. Measuring it properly means reading the glyph outlines, which is a much larger job. Rather than guess, the tool leaves the trait out for fonts that did not record it and judges them on the rest.

What is the difference between this and the font character checker?

That one answers whether a font can render your text at all, by reading the character map. This one answers whether it suits the text, by reading the appearance metrics. They share the same reader and answer different questions, and both run entirely on your device.

Related tools

Your files are processed on your device and are not uploaded. You can verify this in your browser’s developer tools under the Network tab.