Amir Pourmand76k downloadsCustomize your vault with any font you want (+ Support for Android and iOS).
Spice up your Obsidian notes with custom fonts! Obsidian doesn't make it easy to set custom fonts — especially on Android and iOS. With this plugin you set your fonts up once and they work everywhere: Windows, macOS, Linux, Android, and iPhone. No need to install the font on your operating system.

cssclasses, without touching the rest of your vault.fonts/ and .obsidian/fonts, loading only what you use..ttf, .otf, .woff, .woff2) into a fonts folder at your vault root, or into .obsidian/fonts. Both are scanned automatically (you can also point the plugin at a custom folder).The plugin scans a fonts folder at your vault root and .obsidian/fonts automatically — drop fonts in either (or point it at a custom folder) and hit Reload; no restart needed. Only the fonts you actually use are loaded, so startup stays light.
Set a different font for each part of Obsidian — or leave any of them on Default to keep Obsidian's own font:
Each role is an ordered list, not a single font. Add several fonts and drag them to reorder — the browser uses the first font that has a glyph for each character. Perfect for pairing, say, a Latin display font with a Persian/Arabic font so both render correctly in the same line.
Drop in the individual weight files of a family (Roboto-Regular.ttf, Roboto-Bold.ttf, Roboto-BoldItalic.ttf, …) and the plugin groups them into one family automatically by reading the weight/style from each filename. Set the family once and bold text uses the Bold file, italic uses the Italic file — the browser resolves the right weight per character. Each file's weight is shown as a colored label right where you select it.
Naming matters: include the weight in the filename so it's detected. Recognized weights are Thin, ExtraLight, Light, Regular, Medium, SemiBold, Bold, ExtraBold, and Black (plus Italic/Oblique). Everything before the weight becomes the family name — so Open-Sans-Bold.ttf is family "Open Sans", weight Bold.
When you override a font, Obsidian normally drops its emoji fallback — so this plugin re-appends cross-platform emoji fonts (Apple Color Emoji, Segoe UI Emoji, Noto Color Emoji) to every font stack. Emojis keep rendering, always.
Every loaded font also gets a utility class, .font-<name>. Apply a font to a single note — without changing the rest of your vault — by adding the class name to cssclasses in the note's frontmatter:
---
cssclasses:
- font-roboto
---
You can also wrap part of a note in a <div class="font-roboto">. The settings page lists every font's copyable font-family name (for your own CSS/snippets) and class.
Only the fonts you actually use are loaded, keeping startup light. A collapsed Load extra fonts section lets you load additional fonts just to use via their CSS class, without applying them to any role.
For community themes that hard-code fonts and ignore the standard variables, the Force style toggle adds !important to the fonts you applied so they win.
This plugin leverages base64 encoding to ensure maximum compatibility across platforms. The chosen font works on all operating systems (Windows, macOS, Linux, Android, and iOS) without installing it on the device.
Note: dynamic CSS is injected via constructable stylesheets (
adoptedStyleSheets), which requires iOS/Safari 16.4+ on mobile.
🌐 Font to Base64 CSS Converter
Convert font files to base64-encoded CSS without installing the plugin — perfect if you only want the conversion, or experience performance issues with the full plugin.
Features:
.woff, .ttf, .woff2, and .otf font filesIssues and pull requests are highly appreciated — I'd love to hear which features are useful to you.