Font settings
Setdesign.typography in settings.json:
Custom fonts
For a hosted font, use{ "url": "https://example.com/brand.woff2", "name": "Brand" }. Variable fonts can include "weight": "100 900"; uploads detect this automatically. The host must allow cross-origin font requests. Single-face fonts use browser-synthesized bold and italic when needed. Code blocks keep their monospace font.
For local previews and standalone builds, put a custom font in public/fonts/
and use { "url": "/fonts/brand.woff2", "name": "Brand" }. Before publishing
to Cloud, upload the font and replace this path with its hosted URL.
Local fonts
The CLI starter setsdesign.typography.localFonts to true and bundles the
files for Inter, Geist, Geist Mono, Instrument Serif, and
EB Garamond in public/fonts/. These cover all starter presets and load
from your own site in previews and standalone builds.
When you choose another catalog family, set localFonts to false to load it
from Lettercamp’s CDN, or provide its font files at the matching paths in
public/fonts/. Setting localFonts does not download missing font files.
Before deploying to Lettercamp Cloud, set localFonts to false or remove it.
Cloud does not serve public/fonts/; this setting lets the same selected
families use hosted files. It does not change custom url values, which must
also point to hosted fonts.
Size and line spacing
Under Content on either the Home or Post tab, set Heading base size (px) beside Heading font, and Body size (px) beside Body font. Set Body line height beneath the body controls. These settings apply across your site and in the editor when site styles are enabled. Changing a font keeps its role’s size setting.Text colors
Set Heading color below heading size and Body color below body size. Each defaults independently to Automatic, choosing black or white for contrast against your background. The swatch shows the resolved color. Choosing one color does not change the other; a custom color stays fixed when the background changes. Click Use automatic color in a customized picker to restore the default. Insettings.json, use a six-digit hex color for headingColor or bodyColor.
Omit a field or set it to "" for automatic color. For example, this sets both
roles to brown on a sand background:
npx lettercamp dev or npx lettercamp build. Supporting text,
such as summaries, metadata, and captions, keeps its automatic muted treatment.
Individually colored article text keeps its explicit color. Accent hovers,
selection colors, and contrasting button labels keep their existing behavior.
Choose custom text colors that are readable against your background.
Responsive sizes
The two sizes are independent, even when you select the same font for both roles.headingBaseSizePx sets the smaller end of the responsive grid title size.
With the heading base at 18 and body base at 16, page titles range from 32 to 42px, grid titles from
18 to 20px, and wide-row titles are 24px. Article H2, H3, H4, H5, and H6 sizes are
30, 24, 20, 18, and 16px. Page titles and grid titles also adapt to the viewport.
A 21px heading base makes an H2 35px while a 16px body base keeps paragraphs
at 16px and listing summaries at 15px.
Navigation, table-of-contents labels, and footer labels use the body font and
scale. Reading width (em) follows the body size;
changing the heading base does not change the reading column’s width.
Font sizes in these scales use rem so browser text-size preferences still
apply. Use positive numbers; omitted or invalid values fall back to the defaults.
Omit design.typography entirely to use Inter and the default sizes.
Supported fonts
Choose any of these 40 built-in font families for headings, body text, or both. They are available in the design modal’s Google Fonts tab and, withlocalFonts disabled, served from Lettercamp’s asset CDN. You do not need to
upload a font file or provide a Google
API key. The same families work in the editor, published sites, npx lettercamp dev,
and npx lettercamp build.
In
settings.json, use the exact family name with the google field in
design.typography.headingFont or design.typography.bodyFont. Geist Sans is
the one display-name exception: use "Geist" in your settings.
For example, pair Instrument Serif headings with EB Garamond body text:
localFonts disabled, font names outside this list use the external Google
Fonts loader. You can also upload a custom font or supply an
HTTPS font-file URL as described above.