README file from
GithubObsidian Local Font Loader
English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Español
English
Overview
Obsidian Local Font Loader is a powerful plugin for Obsidian that allows you to load and manage custom fonts directly from your local vault. Say goodbye to relying on external CDNs or system fonts — keep everything local, private, and under your control.
Features
- 📁 Local Font Management: Load TTF, OTF, WOFF, and WOFF2 fonts from your vault
- 🎨 Font Categories: Separate control for UI, body text, code blocks, and LaTeX math
- ⚡ Direct Loading: The generated CSS points straight at your font files — nothing is embedded, nothing is duplicated, and the browser fetches only the weights a note actually renders
- 🌍 Latin Font Separation: Use different fonts for Latin and CJK characters with fine-grained unicode-range control
- 🔄 Font Family Support: Automatically detects and groups Regular, Italic, Bold, and Bold Italic variants
- ⚙️ Full-Featured Settings: Intuitive UI for scanning, previewing and applying fonts
- 🚀 Auto-load on Startup: Optionally apply your font configuration when Obsidian launches
Installation
Manual Installation
- Download the latest release from GitHub Releases
- Extract
main.js,manifest.json, andstyles.cssto your vault's plugins folder:<vault>/.obsidian/plugins/obsidian-local-font-loader/ - Reload Obsidian or enable the plugin in Settings → Community plugins
From Obsidian Community Plugins
- Open Obsidian Settings → Community plugins → Browse
- Search for "Local Font Loader"
- Click Install, then Enable
Usage
-
Organize Your Fonts: Create a folder in your vault (e.g.,
Fonts/) and organize fonts by family:Fonts/ ├── MyFont/ │ ├── MyFont-Regular.ttf │ ├── MyFont-Bold.ttf │ ├── MyFont-Italic.ttf │ └── MyFont-BoldItalic.ttf └── AnotherFont/ └── AnotherFont-Regular.otf -
Configure Plugin: Open Settings → Local Font Loader
- Set your font source directory
- Click "Rescan" to detect all fonts
-
Apply Fonts:
- Select fonts for each category (UI, Text, Code, Math)
- Click "Apply Fonts"
- Your fonts are now active!
⚠️ Performance Considerations
[!warning] Font Rendering Performance Avoid mixing too many languages in a single line of text. Dense multilingual mixing (e.g., Chinese + Japanese + Korean + Arabic + Russian in one line) can trigger font fallback mechanisms that may freeze the rendering engine.
Recommendation: Keep different language content in separate paragraphs or sections for optimal performance.
Configuration
| Setting | Description |
|---|---|
| Font Source Directory | Path to your font families folder |
| Auto-load on Startup | Automatically apply fonts when Obsidian starts |
| Latin Font Separation | Use separate fonts for Latin vs CJK characters |
| Latin Font Scope | Fine-tune which character ranges use the Latin font |
Requirements
- Obsidian v1.13.0 or higher
- Font files in TTF, OTF, WOFF, or WOFF2 format
Privacy
The plugin works entirely offline: it makes no network requests, and nothing about you or your vault leaves the machine. There is no telemetry of any kind.
It does read three things about the device it runs on, all of them only to tell your devices apart in the device list and to pick a translation:
| What | Where it is read | Why |
|---|---|---|
The machine hostname (os.hostname()) |
Desktop only | Names the entry this machine gets in the device list |
The platform's app-scoped device identifier (ANDROID_ID on Android, identifierForVendor on iOS) |
Mobile only, through Capacitor | Gives each device a stable identity, so it is not listed twice after its local storage is cleared. The identifier is hashed before it is stored — the raw value is never written anywhere |
| The app language | Everywhere | Chooses which bundled translation to use |
What is stored lives in data.json inside the plugin's own folder: the device display names, the
recorded model/OS/hostname, when each device was first and last seen, and the hashed mobile
identifier. That file is synced only by whatever you use to sync .obsidian — it is never sent to
the plugin's author or to anyone else.
License
This project is licensed under the MIT License.
Author
InVerse
Acknowledgments
This plugin was developed with the assistance of Claude (Anthropic), an AI assistant that helped with architecture design, code implementation, and documentation. The project represents a collaborative effort between human requirements and AI technical execution.
Support
If you encounter any issues or have feature requests, please open an issue on GitHub.
Development
The plugin is built with Bun. main.js at the repository root is a build
artifact — edit the modules under src/ and rebuild, never the bundle itself.
bun run build # bundle src/ into main.js
bun run dev # rebuild on change
bun run typecheck # tsc --noEmit over src/
bun run sync-version # copy the version from package.json into manifest.json
| Path | Contents |
|---|---|
src/main.ts |
entry point — exports the plugin class |
src/plugin.ts |
the plugin class: font scanning, conversion, device identity, CSS generation |
src/types.ts |
the data model: settings, fonts, presets, devices, MathJax metrics |
src/ui/settings-tab.ts |
settings tab shell — lifecycle, shared helpers, section order |
src/ui/settings/device-preset.ts |
device and preset management section |
src/ui/settings/directory-application.ts |
directory configuration and font application section |
src/ui/settings/font-status.ts |
font file status section |
src/ui/settings/fallback.ts |
fallback and maintenance section |
src/ui/settings/styles.ts |
settings stylesheet |
src/ui/modals.ts |
modal dialogs |
src/i18n.ts |
translations and locale helpers |
src/constants.ts |
default settings |
src/font-metadata.ts |
OpenType / TrueType name-table reader |
The sources are TypeScript; Bun strips the types when bundling, so nothing is emitted for them at runtime. obsidian is kept external.
Releasing: add a CHANGELOG.md section for the version, set it in package.json, run
bun run sync-version, then push a tag. CI builds main.js from src/ and publishes the
release with the changelog section as its body.
简体中文
概述
Obsidian 本地字体加载器 是一个强大的 Obsidian 插件,允许你直接从本地仓库加载和管理自定义字体。不再依赖外部 CDN 或系统字体——所有内容都保持本地化、私密化并完全由你掌控。
功能特性
- 📁 本地字体管理: 从仓库加载 TTF、OTF、WOFF 和 WOFF2 字体
- 🎨 字体分类: 分别控制界面、正文、代码块和 LaTeX 数学公式字体
- ⚡ 直接加载: 生成的 CSS 直接指向字体文件,不内嵌、不复制,浏览器只拉取笔记真正用到的字重
- 🌍 拉丁字体分离: 为拉丁字符和 CJK 字符使用不同字体,支持精细的 unicode-range 控制
- 🔄 字体家族支持: 自动检测并分组 Regular、Italic、Bold 和 Bold Italic 变体
- ⚙️ 完整设置界面: 直观的字体扫描与应用界面
- 🚀 启动时自动加载: 可选在 Obsidian 启动时自动应用字体配置
安装
手动安装
- 从 GitHub Releases 下载最新版本
- 将
main.js、manifest.json和styles.css解压到仓库的插件文件夹:<仓库>/.obsidian/plugins/obsidian-local-font-loader/ - 重新加载 Obsidian 或在 设置 → 第三方插件 中启用插件
从 Obsidian 社区插件安装
- 打开 Obsidian 设置 → 社区插件 → 浏览
- 搜索 "Local Font Loader"
- 点击安装,然后启用
使用方法
-
整理字体: 在仓库中创建文件夹(如
Fonts/),按字体家族组织:Fonts/ ├── MyFont/ │ ├── MyFont-Regular.ttf │ ├── MyFont-Bold.ttf │ ├── MyFont-Italic.ttf │ └── MyFont-BoldItalic.ttf └── AnotherFont/ └── AnotherFont-Regular.otf -
配置插件: 打开 设置 → 本地字体加载器
- 设置字体源目录
- 点击"重新扫描"检测所有字体
-
应用字体:
- 为每个类别选择字体(界面、正文、代码、数学)
- 点击"应用字体"
- 字体现已生效!
⚠️ 性能注意事项
[!warning] 字体渲染性能 避免在单行内混合过多语言文字。 密集的多语言混排(例如在同一行内混合中文+日文+韩文+阿拉伯文+俄文)可能触发字体回退机制,导致渲染引擎卡死。
建议:将不同语言的内容分段显示,以获得最佳性能。
配置选项
| 设置项 | 说明 |
|---|---|
| 字体源目录 | 字体家族文件夹的路径 |
| 启动时自动加载 | Obsidian 启动时自动应用字体 |
| 拉丁字体分离 | 为拉丁字符和 CJK 字符使用不同字体 |
| 拉丁字体作用范围 | 精细调整哪些字符范围使用拉丁字体 |
系统要求
- Obsidian v1.0.0 或更高版本
- TTF、OTF、WOFF 或 WOFF2 格式的字体文件
许可证
本项目采用 MIT 许可证。
作者
InVerse
致谢
本插件在 Claude(Anthropic)的协助下开发完成,Claude 参与了架构设计、代码实现和文档编写。本项目代表了人类需求与 AI 技术执行的协作成果。
支持
如遇到问题或有功能需求,请在 GitHub 提交 issue。
繁體中文
概述
Obsidian 本機字型載入器 是一個強大的 Obsidian 外掛程式,讓你可以直接從本機儲存庫載入和管理自訂字型。不再依賴外部 CDN 或系統字型——所有內容都保持本地化、私有化並完全由你掌控。
功能特色
- 📁 本機字型管理: 從儲存庫載入 TTF、OTF、WOFF 和 WOFF2 字型
- 🎨 字型分類: 分別控制介面、正文、程式碼區塊和 LaTeX 數學公式字型
- ⚡ 直接載入: 產生的 CSS 直接指向字型檔案,不內嵌、不複製,瀏覽器只載入筆記真正用到的字重
- 🌍 拉丁字型分離: 為拉丁字元和 CJK 字元使用不同字型,支援精細的 unicode-range 控制
- 🔄 字型家族支援: 自動偵測並分組 Regular、Italic、Bold 和 Bold Italic 變體
- ⚙️ 完整設定介面: 直覺的字型掃描與套用介面
- 🚀 啟動時自動載入: 可選擇在 Obsidian 啟動時自動套用字型設定
安裝
手動安裝
- 從 GitHub Releases 下載最新版本
- 將
main.js、manifest.json和styles.css解壓縮到儲存庫的外掛程式資料夾:<儲存庫>/.obsidian/plugins/obsidian-local-font-loader/ - 重新載入 Obsidian,或在 設定 → 社群外掛程式 中啟用外掛程式
從 Obsidian 社群外掛程式安裝
- 開啟 Obsidian 設定 → 社群外掛程式 → 瀏覽
- 搜尋 "Local Font Loader"
- 點擊安裝,然後啟用
使用方法
-
整理字型: 在儲存庫中建立資料夾(如
Fonts/),按字型家族組織:Fonts/ ├── MyFont/ │ ├── MyFont-Regular.ttf │ ├── MyFont-Bold.ttf │ ├── MyFont-Italic.ttf │ └── MyFont-BoldItalic.ttf └── AnotherFont/ └── AnotherFont-Regular.otf -
設定外掛程式: 開啟 設定 → 本機字型載入器
- 設定字型來源目錄
- 點擊「重新掃描」偵測所有字型
-
套用字型:
- 為每個類別選擇字型(介面、正文、程式碼、數學)
- 點擊「套用字型」
- 字型已生效!
⚠️ 效能注意事項
[!warning] 字型渲染效能 避免在單行內混合過多語言文字。 密集的多語言混排(例如在同一行內混合中文+日文+韓文+阿拉伯文+俄文)可能觸發字型回退機制,導致渲染引擎凍結。
建議:將不同語言的內容分段顯示,以獲得最佳效能。
設定選項
| 設定項目 | 說明 |
|---|---|
| 字型來源目錄 | 字型家族資料夾的路徑 |
| 啟動時自動載入 | Obsidian 啟動時自動套用字型 |
| 拉丁字型分離 | 為拉丁字元和 CJK 字元使用不同字型 |
| 拉丁字型作用範圍 | 精細調整哪些字元範圍使用拉丁字型 |
系統需求
- Obsidian v1.0.0 或更高版本
- TTF、OTF、WOFF 或 WOFF2 格式的字型檔案
授權條款
本專案採用 MIT 授權。
作者
InVerse
致謝
此外掛程式在 Claude(Anthropic)的協助下開發完成,Claude 參與了架構設計、程式碼實作和文件編寫。本專案代表了人類需求與 AI 技術執行的協作成果。
支援
如遇到問題或有功能需求,請在 GitHub 提交 issue。
日本語
概要
Obsidian ローカルフォントローダー は、Obsidian 用の強力なプラグインで、ローカル Vault から直接カスタムフォントを読み込んで管理できます。外部 CDN やシステムフォントに依存する必要はありません。すべてをローカルでプライベートに、完全にコントロールできます。
機能
- 📁 ローカルフォント管理: Vault から TTF、OTF、WOFF、WOFF2 フォントを読み込み
- 🎨 フォントカテゴリ: UI、本文、コードブロック、LaTeX 数式を個別に制御
- ⚡ 直接読み込み: 生成される CSS はフォントファイルを直接参照します。埋め込みも複製もなく、実際に使うウェイトだけが読み込まれます
- 🌍 ラテン文字フォント分離: ラテン文字と CJK 文字に異なるフォントを使用、詳細な unicode-range 制御
- 🔄 フォントファミリーサポート: Regular、Italic、Bold、Bold Italic バリアントを自動検出・グループ化
- ⚙️ フル機能設定: 直感的なフォントスキャンと適用 UI
- 🚀 起動時自動読み込み: Obsidian 起動時にフォント設定を自動適用(オプション)
インストール
手動インストール
- Releases から最新版をダウンロード
main.js、manifest.json、styles.cssを Vault のプラグインフォルダに展開:<vault>/.obsidian/plugins/obsidian-local-font-loader/- Obsidian を再読み込みするか、設定 → コミュニティプラグイン でプラグインを有効化
Obsidian コミュニティプラグインから
- Obsidian 設定 → コミュニティプラグイン → 閲覧 を開く
- 「Local Font Loader」を検索
- インストールをクリックし、有効化
使用方法
-
フォントを整理: Vault 内にフォルダ(例:
Fonts/)を作成し、ファミリーごとに整理:Fonts/ ├── MyFont/ │ ├── MyFont-Regular.ttf │ ├── MyFont-Bold.ttf │ ├── MyFont-Italic.ttf │ └── MyFont-BoldItalic.ttf └── AnotherFont/ └── AnotherFont-Regular.otf -
プラグインを設定: 設定 → Local Font Loader を開く
- フォントソースディレクトリを設定
- 「再スキャン」をクリックしてすべてのフォントを検出
-
フォントを適用:
- 各カテゴリ(UI、テキスト、コード、数式)にフォントを選択
- 「フォントを適用」をクリック
- フォントが有効になりました!
⚠️ パフォーマンスに関する注意事項
[!warning] フォントレンダリングのパフォーマンス 1行に複数の言語を混在させすぎないでください。 密度の高い多言語混在(例:1行に中国語+日本語+韓国語+アラビア語+ロシア語)は、フォントフォールバックメカニズムをトリガーし、レンダリングエンジンがフリーズする可能性があります。
推奨:異なる言語のコンテンツは別々の段落またはセクションに分けて、最適なパフォーマンスを確保してください。
設定
| 設定項目 | 説明 |
|---|---|
| フォントソースディレクトリ | フォントファミリーフォルダのパス |
| 起動時に自動読み込み | Obsidian 起動時にフォントを自動適用 |
| ラテン文字フォント分離 | ラテン文字と CJK 文字に異なるフォントを使用 |
| ラテン文字フォントスコープ | どの文字範囲にラテン文字フォントを使用するかを微調整 |
動作要件
- Obsidian v1.0.0 以上
- TTF、OTF、WOFF、または WOFF2 形式のフォントファイル
ライセンス
このプロジェクトは MIT ライセンス の下で公開されています。
作者
InVerse
謝辞
このプラグインは Claude(Anthropic)の支援を受けて開発されました。Claude はアーキテクチャ設計、コード実装、ドキュメント作成に貢献しました。本プロジェクトは人間の要求と AI の技術実行の協力の成果を表しています。
サポート
問題が発生した場合や機能リクエストがある場合は、GitHub で issue を開いてください。
한국어
개요
Obsidian 로컬 폰트 로더는 로컬 보관함에서 직접 커스텀 폰트를 로드하고 관리할 수 있는 강력한 Obsidian 플러그인입니다. 외부 CDN이나 시스템 폰트에 의존할 필요 없이 모든 것을 로컬에서 비공개로 완전히 제어할 수 있습니다.
기능
- 📁 로컬 폰트 관리: 보관함에서 TTF, OTF, WOFF, WOFF2 폰트 로드
- 🎨 폰트 카테고리: UI, 본문 텍스트, 코드 블록, LaTeX 수식을 개별 제어
- ⚡ 직접 로드: 생성된 CSS가 폰트 파일을 직접 가리킵니다. 내장도 복제도 없고, 실제로 쓰이는 굵기만 불러옵니다
- 🌍 라틴 폰트 분리: 라틴 문자와 CJK 문자에 다른 폰트 사용, 세밀한 unicode-range 제어
- 🔄 폰트 패밀리 지원: Regular, Italic, Bold, Bold Italic 변형 자동 감지 및 그룹화
- ⚙️ 완전한 설정 기능: 직관적인 폰트 스캔 및 적용 UI
- 🚀 시작 시 자동 로드: Obsidian 시작 시 폰트 설정 자동 적용(선택 사항)
설치
수동 설치
- Releases에서 최신 버전 다운로드
main.js,manifest.json,styles.css를 보관함의 플러그인 폴더에 압축 해제:<vault>/.obsidian/plugins/obsidian-local-font-loader/- Obsidian을 다시 로드하거나 설정 → 커뮤니티 플러그인에서 플러그인 활성화
Obsidian 커뮤니티 플러그인에서
- Obsidian 설정 → 커뮤니티 플러그인 → 탐색 열기
- "Local Font Loader" 검색
- 설치를 클릭한 후 활성화
사용법
-
폰트 정리: 보관함에 폴더(예:
Fonts/)를 만들고 패밀리별로 정리:Fonts/ ├── MyFont/ │ ├── MyFont-Regular.ttf │ ├── MyFont-Bold.ttf │ ├── MyFont-Italic.ttf │ └── MyFont-BoldItalic.ttf └── AnotherFont/ └── AnotherFont-Regular.otf -
플러그인 구성: 설정 → Local Font Loader 열기
- 폰트 소스 디렉토리 설정
- "재스캔"을 클릭하여 모든 폰트 감지
-
폰트 적용:
- 각 카테고리(UI, 텍스트, 코드, 수식)에 대한 폰트 선택
- "폰트 적용" 클릭
- 이제 폰트가 활성화되었습니다!
⚠️ 성능 고려사항
[!warning] 폰트 렌더링 성능 한 줄에 너무 많은 언어를 혼합하지 마세요. 밀집된 다국어 혼합(예: 한 줄에 중국어+일본어+한국어+아랍어+러시아어)은 폰트 폴백 메커니즘을 트리거하여 렌더링 엔진이 정지될 수 있습니다.
권장사항: 최적의 성능을 위해 서로 다른 언어의 콘텐츠를 별도의 단락이나 섹션으로 분리하세요.
구성
| 설정 | 설명 |
|---|---|
| 폰트 소스 디렉토리 | 폰트 패밀리 폴더 경로 |
| 시작 시 자동 로드 | Obsidian 시작 시 폰트 자동 적용 |
| 라틴 폰트 분리 | 라틴 문자와 CJK 문자에 다른 폰트 사용 |
| 라틴 폰트 범위 | 라틴 폰트를 사용할 문자 범위 세밀 조정 |
요구 사항
- Obsidian v1.0.0 이상
- TTF, OTF, WOFF 또는 WOFF2 형식의 폰트 파일
라이선스
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다.
작성자
InVerse
감사의 말
이 플러그인은 Claude(Anthropic)의 지원을 받아 개발되었습니다. Claude는 아키텍처 설계, 코드 구현 및 문서 작성에 기여했습니다. 이 프로젝트는 인간의 요구 사항과 AI 기술 실행의 협력 결과를 나타냅니다.
지원
문제가 발생하거나 기능 요청이 있는 경우 GitHub에서 issue를 열어주세요.
Español
Descripción General
Obsidian Local Font Loader es un potente complemento para Obsidian que te permite cargar y administrar fuentes personalizadas directamente desde tu bóveda local. Olvídate de depender de CDNs externos o fuentes del sistema: mantén todo local, privado y bajo tu control.
Características
- 📁 Gestión de Fuentes Locales: Carga fuentes TTF, OTF, WOFF y WOFF2 desde tu bóveda
- 🎨 Categorías de Fuentes: Control separado para UI, texto del cuerpo, bloques de código y matemáticas LaTeX
- ⚡ Carga Directa: El CSS generado apunta directamente a tus archivos de fuente — sin incrustar ni duplicar, y solo se descargan los pesos que una nota usa
- 🌍 Separación de Fuentes Latinas: Usa diferentes fuentes para caracteres latinos y CJK con control detallado de unicode-range
- 🔄 Soporte de Familias de Fuentes: Detecta y agrupa automáticamente variantes Regular, Italic, Bold y Bold Italic
- ⚙️ Configuración Completa: UI intuitiva para escanear y aplicar fuentes
- 🚀 Carga Automática al Inicio: Opcionalmente aplica tu configuración de fuentes cuando se inicia Obsidian
Instalación
Instalación Manual
- Descarga la última versión desde GitHub Releases
- Extrae
main.js,manifest.jsonystyles.cssa la carpeta de complementos de tu bóveda:<bóveda>/.obsidian/plugins/obsidian-local-font-loader/ - Recarga Obsidian o habilita el complemento en Configuración → Complementos de la comunidad
Desde los Complementos de la Comunidad de Obsidian
- Abre Configuración de Obsidian → Complementos de la comunidad → Explorar
- Busca "Local Font Loader"
- Haz clic en Instalar, luego Habilitar
Uso
-
Organiza tus Fuentes: Crea una carpeta en tu bóveda (por ejemplo,
Fonts/) y organiza las fuentes por familia:Fonts/ ├── MyFont/ │ ├── MyFont-Regular.ttf │ ├── MyFont-Bold.ttf │ ├── MyFont-Italic.ttf │ └── MyFont-BoldItalic.ttf └── AnotherFont/ └── AnotherFont-Regular.otf -
Configurar Complemento: Abre Configuración → Local Font Loader
- Establece tu directorio de origen de fuentes
- Haz clic en "Reescanear" para detectar todas las fuentes
-
Aplicar Fuentes:
- Selecciona fuentes para cada categoría (UI, Texto, Código, Matemáticas)
- Haz clic en "Aplicar Fuentes"
- ¡Tus fuentes ya están activas!
⚠️ Consideraciones de Rendimiento
[!warning] Rendimiento de Renderizado de Fuentes Evita mezclar demasiados idiomas en una sola línea de texto. La mezcla densa de múltiples idiomas (p. ej., chino + japonés + coreano + árabe + ruso en una línea) puede activar mecanismos de respaldo de fuentes que pueden congelar el motor de renderizado.
Recomendación: Mantén el contenido de diferentes idiomas en párrafos o secciones separadas para un rendimiento óptimo.
Configuración
| Ajuste | Descripción |
|---|---|
| Directorio de Origen de Fuentes | Ruta a tu carpeta de familias de fuentes |
| Carga Automática al Inicio | Aplica automáticamente las fuentes cuando se inicia Obsidian |
| Separación de Fuentes Latinas | Usa fuentes separadas para caracteres latinos vs CJK |
| Ámbito de Fuente Latina | Ajusta qué rangos de caracteres usan la fuente latina |
Requisitos
- Obsidian v1.0.0 o superior
- Archivos de fuentes en formato TTF, OTF, WOFF o WOFF2
Licencia
Este proyecto está licenciado bajo la Licencia MIT.
Autor
InVerse
Agradecimientos
Este plugin fue desarrollado con la asistencia de Claude (Anthropic), un asistente de IA que ayudó con el diseño de arquitectura, implementación de código y documentación. El proyecto representa un esfuerzo colaborativo entre requisitos humanos y ejecución técnica de IA.
Soporte
Si encuentras algún problema o tienes solicitudes de funciones, por favor abre un issue en GitHub.