Shopifont

Shopify Dawn · Free, no signup · Last updated

Add a Custom Font to Shopify Dawn with Liquid

On Shopify Dawn, custom fonts are wired up by uploading the file to `assets/`, then referencing it inside an @font-face block via the Liquid `asset_url` filter — no Liquid template edits required.

Adding a custom font to Dawn is mostly a CSS task — the only Liquid you need is the one-liner that Shopify uses to resolve uploaded asset paths. Because Dawn is the Shopify OS 2.0 reference theme that ships with every new store and powers the largest install base of any free theme. you can drop the @font-face block directly into the bottom of `assets/base.css` and skip every snippet file.

Generator

Faces(1 face)

Face 1·Regular 400

Formats

Each face becomes its own @font-face block. The filename field on each row defaults to a clean pattern, but you can paste the exact filename you uploaded if your foundry shipped it with a different name — no renaming required.

Apply to
Controls which Dawn typography roots the CSS variable block overrides.

Live preview

Add to cart · Free shipping · 30-day returns

Drop a WOFF2 / WOFF / TTF file here to preview your actual font. The file stays in your browser — nothing is uploaded.

Paste these three blocks in order. They're independent files in your theme — copying one without the others won't break the store.

Step 1: @font-face CSS

Upload your font files to the theme's assets/ folder, then paste this at the bottom of assets/base.css. Shopify's asset_url filter resolves the file paths at render time.

@font-face {
  font-family: "My Brand Sans";
  src: url({{ 'my-brand-sans.woff2' | asset_url }}) format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

How to use this on Dawn

  1. In your Dawn theme's code editor, navigate to `assets/` and upload your WOFF2 (and any fallbacks).

  2. Open the file at the bottom of `assets/base.css` and paste the @font-face block from the generator above.

  3. The crucial detail is the Liquid filter `{{ 'yourfont.woff2' | asset_url }}` — Shopify rewrites this at render time to the actual CDN URL for the asset, including a cache-busting hash.

  4. Reference that font-family from anywhere in your stylesheet, or — preferred — override `--font-heading-family` so all of Dawn's heading selectors (including .section-header__heading, .product__title) inherit the new face automatically.

Typography Kit

Skip straight to a finished result

Every step above, already done for you on Dawn — a proven font pairing, the install code pre-built, the licensing confirmed, and a specimen so you see it before you ship it. One-time, instant download, no account.

See the Typography Kits$19 · one-time · instant download

Don't have a font yet? Creative Fabrica has 30,000+ web fonts with commercial licenses included — drop one into the @font-face block above and you're live. (affiliate)

Frequently asked questions

  • Where do I paste the @font-face block in Dawn?

    the bottom of `assets/base.css`. Dawn loads that file before any section-level CSS, so the @font-face declaration is registered in time for every page that follows.

  • How does Liquid's asset_url filter work inside an @font-face on Dawn?

    When Dawn's stylesheet is rendered server-side, Shopify replaces `{{ 'yourfont.woff2' | asset_url }}` with the absolute CDN URL of the uploaded file. The browser then sees a normal CSS `url(...)` call. This is why the @font-face block must live in a `.css.liquid` or a stylesheet served through Liquid, never in a static `.css` file outside Shopify's pipeline.

  • Do I need to edit any Liquid templates to install a custom font on Dawn?

    No. Dawn's typography reads from `--font-heading-family` and `--font-body-family` CSS variables, which means a stylesheet override is enough. You only edit Liquid templates if you want to gate the font behind a Theme Editor toggle, in which case you wire it through `settings_schema.json`.

  • How do I scope the font to only headings on Dawn?

    Set `--font-heading-family` only and leave `--font-body-family` untouched. Dawn's heading selectors — including .section-header__heading, .product__title — read from the heading token, while paragraph and form copy continue to use the body token and Assistant.