Typography
Plus Jakarta Sans speaks, Inter reads, JetBrains Mono labels: the Krizaka faces, their scale and their rules — self-hosted, web and mobile.
The three families
--kz-font-displayPlus Jakarta Sans
Sovereign AI, on your own servers.
The voice of the headlines: titles, hero lines, figures, the names of things.
- Why this face
- Already the headline face of krizaka.com: its compact, slightly squared bowls and flat terminals echo the cut corners of the marks and icons, and it stays tight and dense at 800 — premium without decoration. Keeping it means no gratuitous change to the parent brand.
- Use it for
- Headings and hero lines (display-*, title-*)
- Big figures and prices
- Short labels that name a product or a section
- Avoid
- Paragraphs and long reading (use the text face)
- Sizes under 16 px
- Weights under 600: the display face speaks bold
--kz-font-sansInter
Your documents stay in Montréal. The answers cite their sources, the costs are counted in advance — 1 234,56 $ for 12 000 requests.
The reading face: paragraphs, interface, forms, tables, captions.
- Why this face
- Drawn for screens: a tall x-height, open apertures and tabular figures that line up amounts. It was already the default of @krizaka/tokens and Orazaka's text face, and krizaka.com's body already asked for its character variants (cv02–cv04: open 4, 6 and 9). Cut at the text optical size (opsz 14).
- Use it for
- Body text, interface, forms, tables (body-*, caption)
- Numbers that must align:
font-variant-numeric: tabular-nums - Every size from 12 px
- Avoid
- Hero headlines (use the display face)
- Letter-spacing on body sizes beyond the scale's own
--kz-font-monoJetBrains Mono
POST /api/v1/chat → 200 · 0O 1lI
Code, identifiers, endpoints, and the small uppercase overlines that label a section.
- Why this face
- Used by every Krizaka surface already (krizaka.com, Orazaka). A tall x-height and unambiguous 0/O, 1/l/I make code and identifiers readable at 12 px; its rectangular forms sit well next to the cut corners.
- Use it for
- Code blocks and inline code (mono-*)
- Endpoints, ids, versions, keys
- Overlines: uppercase, tracked (overline)
- Avoid
- Paragraphs
- Headlines
The scale
Sovereign AI, on your own servers.
Sovereign AI, on your own servers.
Sovereign AI, on your own servers.
Sovereign AI, on your own servers.
Sovereign AI, on your own servers.
Sovereign AI, on your own servers.
Your documents stay in Montréal. The answers cite their sources, the costs are counted in advance — 1 234,56 $ for 12 000 requests.
Your documents stay in Montréal. The answers cite their sources, the costs are counted in advance — 1 234,56 $ for 12 000 requests.
Your documents stay in Montréal. The answers cite their sources, the costs are counted in advance — 1 234,56 $ for 12 000 requests.
Your documents stay in Montréal. The answers cite their sources, the costs are counted in advance — 1 234,56 $ for 12 000 requests.
Your documents stay in Montréal. The answers cite their sources, the costs are counted in advance — 1 234,56 $ for 12 000 requests.
POST /api/v1/chat → 200 · 0O 1lI
POST /api/v1/chat → 200 · 0O 1lI
POST /api/v1/chat → 200 · 0O 1lI
| Utility | Family | Size / line height · weight · tracking |
|---|---|---|
text-display-2xl | Display | 72px / 1.02 · 800 · -0.035em |
text-display-xl | Display | 56px / 1.05 · 800 · -0.03em |
text-display-lg | Display | 44px / 1.1 · 700 · -0.025em |
text-display-md | Display | 34px / 1.15 · 700 · -0.02em |
text-display-sm | Display | 26px / 1.2 · 700 · -0.015em |
text-title-lg | Display | 20px / 1.35 · 700 · -0.01em |
text-title-md | Text | 17px / 1.4 · 600 · -0.012em |
text-body-lg | Text | 18px / 1.6 · 400 · -0.014em |
text-body-md | Text | 16px / 1.6 · 400 · -0.011em |
text-body-sm | Text | 14px / 1.5 · 400 · -0.006em |
text-caption | Text | 12px / 1.4 · 500 · 0em |
text-overline | Mono | 11px / 1.3 · 600 · 0.12em |
text-mono-md | Mono | 14px / 1.6 · 400 · 0em |
text-mono-sm | Mono | 12px / 1.5 · 400 · 0em |
Installation
Web (CSS)
Import the faces once, next to the preset: the tokens already name them.
npm install @krizaka/fonts @krizaka/tokens @krizaka/tailwind@import "tailwindcss";
@import "@krizaka/tailwind"; /* --kz-font-* and text-display-xl, text-body-md… */
@import "@krizaka/fonts/css"; /* the faces and their adjusted fallbacks */<h1 class="font-display text-display-xl">…</h1>
<p class="font-text text-body-md text-fg-secondary">…</p>
<span class="font-mono text-overline uppercase">…</span>Next.js
Import the CSS in the root layout — the bundler copies and fingerprints the files; the fallbacks keep CLS at 0.
// app/layout.tsx
import "@krizaka/fonts/css";
import "./globals.css"; // @import "tailwindcss"; @import "@krizaka/tailwind";React Native / Expo
Load the static files with expo-font, then take a step of the scale and the name of its face.
// npx expo install expo-font && npm install @krizaka/fonts @krizaka/tokens
import { useFonts } from "expo-font";
import { fontAssets } from "@krizaka/fonts/native/assets";
import { fontFamily } from "@krizaka/fonts/native";
import { typeScale } from "@krizaka/tokens/native";
const [loaded] = useFonts(fontAssets);
const { role, fontWeight, ...size } = typeScale.displayLg;
<Text style={{ ...size, fontFamily: fontFamily(role, Number(fontWeight)) }}>…</Text>Rules
- Three families, three jobs: display speaks (headlines, figures), text reads (everything else), mono labels and quotes code. Never a fourth family on a Krizaka surface.
- Use the scale, not sizes:
text-display-xl,text-body-md… carry size, line height, weight and tracking together. A one-off size is a missing step — ask for it. - Display from 20 px up, at 600–800; text from 12 px, at 400–700. Never a light weight (< 400) on a dark surface.
- One display line per block. The rest is text: a page of headlines reads as noise.
- Amounts, counters and tables use tabular figures (
tabular-nums); prices keep the currency from @krizaka/intl, never a hand-written sign. - Measure: 60–75 characters per line for reading (
max-w-prose). - Products may override the display role with their own face (Orochia: Outfit) through
--kz-font-display; text and mono stay Krizaka's. - The Krizaka wordmark is drawn, inside the logo: never set the name in a font to imitate it.
Licences
Every face is under the SIL Open Font License 1.1: bundle it with any software, never sell it on its own. The licences ship in the package.
| Family | Licence | Files | Upstream |
|---|---|---|---|
| Plus Jakarta Sans | SIL Open Font License 1.1 | 2 WOFF2 (25.6 kB for latin) · 3 TrueType | tokotype/PlusJakartaSans |
| Inter | SIL Open Font License 1.1 | 2 WOFF2 (50.4 kB for latin) · 4 TrueType | rsms/inter |
| JetBrains Mono | SIL Open Font License 1.1 | 2 WOFF2 (30.2 kB for latin) · 3 TrueType | JetBrains/JetBrainsMono |
Generated from @krizaka/fonts@0.1.0 · @krizaka/tokens@2.4.0.Edit in krizaka-ui