Font management CLI for web and mobile projects. Search, download, link, and generate font configurations for Next.js, Tailwind v4, CSS/Vite, and Flutter.
curl -fsSL https://raw.githubusercontent.com/powerful-user/typo/main/install.sh | bashOr install manually from source:
git clone https://github.com/powerful-user/typo.git
cd typo
npm install && npm run build
npm link# Set up global font library
typo init --global
# Search and add a font
typo search inter
typo add inter
# Set up a project
cd my-nextjs-project
typo init
typo link inter --variable
typo generate
# Generated: src/fonts.ts with next/font/local config| Command | Description |
|---|---|
typo init [--global] |
Initialize config (project or global library) |
typo add <name> |
Download font from Fontsource |
typo add --from <path> |
Add local font files |
typo link <name> |
Link library font to project |
typo list [--project] |
List fonts in library or project |
typo info <name> |
Show font metadata |
typo generate |
Generate framework config |
typo search <query> |
Search Fontsource catalog |
typo subset <name> |
Subset font to character range |
typo convert <name> |
Convert font format |
- Next.js —
localFont()declarations insrc/fonts.ts - Tailwind v4 —
@font-face+@themeblock insrc/fonts.css - CSS/Vite —
@font-facerules insrc/fonts.css - Flutter —
fonts:section inpubspec.yaml
Framework is auto-detected from package.json / pubspec.yaml. Override with --framework.
Typo separates font sourcing from project integration:
- Global library (
~/.typo/) stores font files, organized by family - Projects get symlinks to library fonts + generated framework config
- Transforms (subset, convert) output to
.fonts/build directory — source files are never modified
~/.typo/fonts/inter/Inter-Variable.woff2 ← source of truth
↓ symlink
my-project/fonts/Inter-Variable.woff2 ← project reference
my-project/src/fonts.ts ← generated config
Typo includes a Claude Code skill for intelligent font workflow orchestration. Install it to get natural language font management:
- "Set up fonts for this project"
- "Add Inter and Geist Mono to my project"
- "Optimize fonts for production"
See skill/SKILL.md for the skill definition.
- Node.js 18+
- For subsetting/conversion: Python fonttools (
pip install fonttools brotli)
- React Native / Expo — Metro bundler has symlink issues; will need file copying strategy
- Rust rewrite — Performance-critical path (fontkit → skrifa, config I/O)
MIT