Local Font loader:Load fonts in vault and support seperating Latin and Non-latin font settings

Disclaimer

Is this plugin open source? Yes

Is this plugin completely free? Yes

Is this plugin vibe-coded beyond the author’s ability to comprehend how it works? No

Link: Local Font Loader - Obsidian Plugin


Local Font Loader: Load fonts in vault and support separating Latin and Non-Latin font settings

A comprehensive typography management plugin that brings professional-grade font control to Obsidian with preset-based configuration, device association, and granular character-range controls.

:bullseye: What It Solves

  • :cross_mark: Can’t use different fonts for Latin vs CJK scripts
  • :cross_mark: No granular control over UI, heading, code, and math fonts separately
  • :cross_mark: Fonts must be installed system-wide on every device
  • :cross_mark: No way to have device-specific typography (desktop vs mobile)

:white_check_mark: What It Does

Local Font Loader lets you:

  • Load custom fonts directly from your vault (TTF, OTF, WOFF, WOFF2)
  • Create named presets for different typography configurations
  • Associate presets with specific devices (auto-switch between desktop/mobile)
  • Use separate fonts for Latin and Non-Latin characters with fine-grained unicode-range control
  • Manage fonts visually with a status-aware font library (Converted ✓ / Standby / Missing)

:rocket: Key Features

:package: Preset Management

  • Create named typography presets (e.g., “Classic Serif”, “Mobile Reading”)
  • Switch entire typography setup with one click
  • Set global defaults or device-specific overrides

:mobile_phone: Device Association

  • Link presets to platforms (Desktop-Linux, Mobile, etc.)
  • Automatic device detection—your vault adapts when opened on different devices

:books: Font Library Management

  • Visual browser with real-time status: :white_check_mark: Converted / :pause_button: Standby / :cross_mark: Missing
  • Filter by status, bulk operations (apply/clean/clear cache)
  • Automatic validation: warns when font families lack Regular/Italic/Bold/Bold Italic variants

:writing_hand: Granular Character Control

Assign different fonts to:

  • Letters (A-Z, a-z), Numbers (0-9), Punctuation, Symbols
  • UI elements (sidebars, menus, buttons)
  • Headings (h1-h6), Code blocks, LaTeX math

:floppy_disk: Vault-Portable & Local-First

  • Fonts stored in vault—no CDN, no external dependencies
  • Base64 caching for optimized loading
  • Works offline, perfect for air-gapped environments

:bullseye: Use Cases

  • Multilingual workflows: Minion Pro for English, FZShuSong for Chinese, JetBrains Mono for code—in one note
  • Cross-device setups: Compact fonts on desktop, readable fonts on mobile—automatically
  • Team collaboration: Shared vault with consistent branding—no manual font installation
  • Academic writing: Separate presets for drafting vs publication-ready output

:package: Installation

From Community Plugins:

  1. Settings → Community plugins → Browse
  2. Search “Local Font Loader” → Install → Enable

Manual:

  1. Download from GitHub Releases: https://github.com/lmce72/obsidian-local-font-loader/releases
  2. Extract to <vault>/.obsidian/plugins/obsidian-local-font-loader/

:vertical_traffic_light: Quick Start

  1. Create Fonts/ folder in vault, organize by family:

    Fonts/
    ├── Minion Pro/
    │   ├── MinionPro-Regular.otf
    │   ├── MinionPro-Bold.otf
    │   └── ...
    └── JetBrains Mono/
        └── JetBrainsMono-Regular.ttf
    
    
  2. Settings → Local Font Loader → Set font directory → Click “Rescan”

  3. Click “Convert All Fonts to Base64”

  4. Create preset → Assign fonts → Enable Latin/Non-Latin separation (optional) → Apply


:warning: Performance Note

Avoid mixing too many languages in a single line (e.g., Chinese + Japanese + Korean + Arabic). Dense multilingual mixing can trigger font fallback mechanisms that may freeze rendering. Keep different languages in separate paragraphs

[!info] I’ll be upfront — this plugin was made with AI assistance. But at the end of the day, it’s a tool I built for myself, and I’ve put in the work using my own knowledge and judgment to refine it until it works properly. I’m actively using it now and genuinely happy with how it’s turned out. Still, if you do encounter any problems, don’t hesitate to post them in the Issues section. I’ll do my best to address them.