# Public Sans: a fork of Libre Franklin for neutral UI text

> Public Sans is a Latin-only, SIL Open Font licensed typeface from USWDS, built as a progressive enhancement webfont with metrics close to system fonts. The repository still carries the v2.001 sources, but the project's own README states the font is not actively developed or maintained.

**uswds/public-sans** — A strong, neutral, principles-driven, open source typeface for text or display

- Repository: https://github.com/uswds/public-sans
- Website: https://public-sans.digital.gov/
- Stars: 4,744 · Forks: 130
- Language: Shell
- License: NOASSERTION
- Published: 2026-09-23 · Updated: 2026-09-23 · Language: en
- Canonical page: https://hysenlabs.com/projects/uswds-public-sans

## What Public Sans is for, and who the README says it is for

Public Sans exists to give government and civic sites a free, open source webfont that behaves like the fonts already on a reader's machine. The README lists the design principles directly: be available as a free open source webfont on any platform, use metrics similar to common system fonts for smoother progressive enhancement, cover a broad range of weights with a good italic, and perform well in headlines, text and UI. It also asks for good multilingual support and tabular figures for data design.

The intended user is a designer or front-end engineer building a site that currently uses Open Sans, Tahoma, Libre Franklin, Arial or Helvetica. The README names those faces explicitly as good candidates for replacement. The font is Latin-only, so the multilingual principle is bounded: it is not a script-coverage play, it is a Latin text and UI play.

The second intended user is anyone who needs tabular figures. The README shows monospaced numerals as an additional feature, which matters for tables, dashboards and any layout where columns of digits must line up without per-cell font switching.

## The mechanism: a Libre Franklin fork with adjusted metrics

Public Sans is a fork of Libre Franklin, which is itself SIL Open Font licensed. The README is unusually specific about what changed, and those changes are the whole product. Vertical metrics are about 2% shorter than Libre Franklin, with slightly looser default line spacing. Characters are narrower, especially rounded ones like lowercase e, which the README ties to reading flow in longer texts. Letterspacing is looser than Libre Franklin's compact default. Stroke weight is regularized toward a cleaner, more consistent letterform at small sizes, and vertices are non-rounded for a sharper form.

The lowercase l has a hooked tail for disambiguation, with an optional untailed l also present. That detail matters in UI strings where l, 1 and I sit next to each other, such as identifiers and code-adjacent labels.

The progressive enhancement claim is a metrics claim, not a rendering trick. The README states Public Sans is designed to have metrics most similar to SF Pro Text and to fall somewhere between SF Pro Text and Roboto in overall size and appearance. In a font stack where the webfont fails to load, the fallback system font should land close to the designer's intention. That is the mechanism: match the fallback, then improve on it when the webfont arrives.

## Installing Public Sans and setting it as a first font stack

There is no package manager step in the README. The repository ships the built files, and the README points at three directories: fonts/webfonts for web use, fonts/otf for local install and print, and fonts/variable for variable fonts, which the README says should be considered experimental. Source files live in sources as Glyphs files and as UFO plus Designspace.

For a desktop install, take the OpenType files from fonts/otf and install them with your operating system's font installer. For the web, copy the files from fonts/webfonts into your project and declare them with @font-face, keeping system fonts behind Public Sans in the stack. The README does not give an @font-face snippet, so the exact src path depends on where you place the files.

After that, load a page and confirm the webfont is actually being served, for example by checking the network panel for the woff2 request. If the file 404s, you will see the fallback face and the page will still look close to intended, which is the point of the metrics work.

To rebuild from source rather than use the shipped files, the repository provides build.sh at the top level and a Dockerfile. The Dockerfile installs requirements.txt, adds git, rsync, make, g++, ttfautohint and libz-dev, builds woff2 and sfnt2woff-zopfli from source, sets them on PATH, and runs ./sources/build-font.sh as its command. That is a heavy toolchain: requirements.txt lists fontmake, fonttools, glyphsLib, ufo2ft, fontbakery, gftools and ttfautohint-py, among many others.

## Where Public Sans is the wrong choice

The first limitation is stated by the project itself. The README says Public Sans as a font is not currently being actively developed or maintained, and that the website has been retired, with the old URL redirecting to a Digital.gov typography introduction that carries a note about the font's unmaintained status. The repository's last push was on 2026-07-06 and the most recent release is v2.001 from 2022-05-11. Anyone choosing a typeface for a project with a multi-year horizon should read that as a frozen artifact, not a roadmap.

The second limitation is script coverage. The README states Public Sans is a Latin-only font. If your product ships Cyrillic, Greek, Arabic, Hebrew, Devanagari or CJK text, Public Sans cannot carry it, and pairing it with a second family means matching two sets of vertical metrics and stroke weights by hand. That is exactly the work the font was designed to avoid.

The third is the variable font. The README says variable fonts should be considered experimental. Treating fonts/variable as a production deliverable is not supported by the documentation.

The fourth is the build path. Rebuilding requires a Python environment with the full requirements.txt set plus compiled woff2 and sfnt2woff-zopfli binaries. The Dockerfile exists precisely because that environment is not trivial. If you want to tweak a glyph and ship it, you are maintaining a font toolchain, not editing a stylesheet.

## Public Sans versus Libre Franklin and system font stacks

The obvious alternative is Libre Franklin, the parent face. The difference is not cosmetic. Libre Franklin is more compact in letterspacing and slightly taller in vertical metrics, and Public Sans regularizes stroke weight and squares off vertices. If you have already shipped Libre Franklin and your layouts are tuned to its line heights, switching to Public Sans will shift vertical rhythm by roughly the 2% the README describes, plus the looser default line spacing. That is a real reflow, not a drop-in swap, even though the two faces look related.

The other alternative is not a webfont at all: use the system stack and skip the download. Public Sans is explicitly designed to sit on top of SF Pro Text and Roboto, so a site that never loads the webfont still renders acceptably. The trade-off is that you lose the tailed l, the tabular figures and the consistent stroke weight, and your typography varies by platform. If your design depends on those details, the webfont is the deliverable. If it does not, the system stack is free and Public Sans is optional polish.

Comparisons against Inter, Helvetica and Roboto are common search queries, but the README does not benchmark against Inter or Helvetica. It only positions Public Sans between SF Pro Text and Roboto in size and appearance, and names Open Sans, Tahoma, Libre Franklin, Arial and Helvetica as faces it can replace. Any claim beyond that is not in the documentation.

## Licence, redistribution and upgrade cost

Public Sans is licensed under the SIL Open Font License, Version 1.1. The repository also states that the licence of the USWDS Modified Version is based on the Libre Franklin SIL Open Font License, Version 1.1 section of LICENSE.md, and that the terms and conditions for USWDS's modifications are in that same file. Two files are present at the top level, LICENSE.md and OFL.txt.

The practical implication is that OFL permits use, modification and redistribution under its own conditions, which typically include keeping the licence with the font and not selling the font by itself. Because the USWDS Modified Version carries its own terms section, read LICENSE.md rather than assuming the plain OFL text covers the modifications. This is a description of what the repository says, not legal advice.

Upgrade cost is the harder question. There is nothing to upgrade to. The latest release is v2.001 from 2022-05-11, the README describes the font as not actively developed or maintained, and the site has been retired. The README notes that the Open Source Program Office of the Centers for Medicare and Medicaid Services has volunteered to create a mirror in the site's absence. If you need a change, you fork, and forking means the Python and compiled-binary toolchain in requirements.txt and the Dockerfile. Budget for that before you standardize on the face.

## Conclusion

Adopt Public Sans if you need a neutral, OFL-licensed Latin text face whose metrics sit close to SF Pro Text and Roboto, and if you are comfortable with a frozen v2.001 release. Do not adopt it if you need Cyrillic, Greek, Arabic or CJK coverage, an actively developed upstream, or a variable font you can ship in production, since the README calls the variable files experimental. Before committing, verify three things in the repository: that fonts/webfonts contains the weights your design uses, that fonts/otf covers your print or desktop needs, and that the LICENSE.md section for the USWDS Modified Version matches how you intend to redistribute the font. If you fork it, budget for the Python font toolchain in requirements.txt, because there is no upstream to hand that work to.

## FAQ

### Is Public Sans a free font?

Yes. The README states Public Sans is licensed under the SIL Open Font License, Version 1.1, and the repository ships the font files directly in fonts/webfonts, fonts/otf and fonts/variable.

### Is Public Sans a Google font?

The README does not describe Public Sans as a Google font. It presents the typeface as a fork of Libre Franklin distributed through the uswds/public-sans repository, with files in fonts/webfonts, fonts/otf and fonts/variable.

### How do I install the Public Sans font?

For desktop or print use, take the OpenType files from fonts/otf and install them with your operating system's font installer. For the web, copy the files from fonts/webfonts into your project and declare them with @font-face, keeping system fonts behind Public Sans in the stack.

### What font is similar to Public Sans?

Public Sans is a fork of Libre Franklin, so that is the closest relative, though the README notes differences in vertical metrics, letterspacing, stroke weight and character width. The README also says Public Sans is a good option for sites that currently use Open Sans, Tahoma, Libre Franklin, Arial or Helvetica.

### Is Public Sans free for commercial use?

The README states Public Sans is licensed under the SIL Open Font License, Version 1.1, and that the USWDS Modified Version's terms are in the LICENSE.md section for the Libre Franklin SIL Open Font License. Read LICENSE.md for the exact conditions rather than assuming the plain OFL text covers the modifications.

### What does Public Sans mean?

The name reflects the project's origin: the README describes it as a typeface from USWDS, the U.S. Web Design System, and the old site URL was public-sans.digital.gov. The README does not give a separate definition of the name beyond that.

## Sources

- [Issues](https://github.com/uswds/public-sans/issues)
- [Project website](https://public-sans.digital.gov/)
- [README](https://github.com/uswds/public-sans/blob/develop/README.md)
- [Releases](https://github.com/uswds/public-sans/releases)
- [uswds/public-sans on GitHub](https://github.com/uswds/public-sans)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/uswds-public-sans
