Changelog
All notable changes to FontOps
[1.1.0] — 2026-06-12
Added
- Fontshare (OSS) provider: OFL-only subset of the Fontshare catalog. Closed-source (ITF FFL) fonts are filtered at ingest via the
license_type == "sil_ofl" guard. Per-family ZIP download + deterministic weight-suffix resolver so italic variants never ship with the wrong glyphs. OFL.txt dropped alongside installed TTFs
- Fontsource provider: 2,077 fonts — a strict superset of Google Fonts plus 126 uniques. Per-variant TTFs served directly from jsDelivr, no ZIP step. License normalised to canonical labels at catalog time;
LICENSE.txt fetched once per family on first install
- Fontsource per-font version lazy-fetch: cards now populate the
version field on demand from /v1/fonts/{id}. Card sub-info and specimen VERSION row update once the request lands
- Cross-source dedup on the ALL view: when the same family appears in multiple catalogs, the highest-priority source wins and losing catalogs stack as multi-source badges. Fontsource's explicit per-font license overrides the winner when present
IFontProvider interface + FontProviderRegistry: every provider registers itself via [InitializeOnLoadMethod]; Settings rows and scanner folders auto-wire from the registry
- Shared adapters:
DiskCache (catalog JSON), HttpDownloader (UnityWebRequest lifecycle + optional progress bar), FontVariantLabel (canonical weight/italic parser), FontInstallManifest (per-family .fontops.json sidecar for bulletproof variant labels)
- Template-driven Settings UI: per-provider download-folder rows generated at runtime by iterating
FontProviderRegistry.All
- Multi-provider scanner awareness:
ScanLocalFonts, ScanEntireProject, and the palette-less audit all see every provider's configured folder
- Palette-less general audit: Text Auditor
SCAN PROJECT with no palette assigned produces a usage/quality report with grade, placeholder flags, and installed-but-unused families
- Inline font picker on every TMP_Text inspector: a FontOps button at the top of the TextMeshPro / TextMeshProUGUI inspector opens a searchable dropdown with three sections — palette roles, every installed
TMP_FontAsset, and not-yet-installed catalog families (installed TTF→SDF and assigned in one click) — each entry typeset in its own face. Assigns with Undo, prefab-aware, multi-selection included
- Google Fonts license from
/metadata/fonts/{family} JSON: canonical license sourced from the authoritative endpoint instead of HTML-scraping the specimen page
- Custom
.unitypackage exporter (Tools → FontOps → Export): ships the UPM package from Packages/ with Samples~ contents included
- Asset Store metadata:
Third Party Notices.md (now also covering the bundled OFL sample fonts) and documentationUrl pointing to the live docs site
Changed
- Documentation nav rename: “Google Fonts” tab → “Providers” (now a hub covering all three integrations)
FontRoleEntry split into its own file to fix Unity MonoScript binding (the CreateAsset “No script asset” error when multiple public types share a filename)
- Dedup priority order:
[GF, Fontsource, Fontshare] when GF API key is set; [Fontsource, Fontshare] otherwise
- Architecture pass:
FontRoleStyle is the single style-conversion module behind every preview surface; FontSwapper renamed to FontProjectScanner; the all-provider preview cache extracted to FontPreviewCache; the install epilogue (write → import → manifest → license → TMP SDF) consolidated behind FontInstaller
- Variant UNINSTALL now asks for confirmation (asset deletion has no Undo)
Fixed
- Licensing: removed the independent
LICENSE.md EULA that conflicted with the Asset Store EULA. Bundled sample fonts (Montserrat, Roboto) now carry their required SIL OFL 1.1 license files and are credited in Third Party Notices.md
- The package exporter now actually ships
Samples~ (previously skipped, silently dropping demo scenes, palettes, and fonts) and excludes Tests/ and store marketing artwork
- Failed font installs are no longer silent — single installs show an error dialog, INSTALL ALL aggregates one dialog per batch with details in the Console
- Palette roles without an assigned font are flagged (“NO FONT”) instead of silently falling back
- BeVietnamPro (and every multi-weight Fontshare family with italics) no longer ships wrong-glyphs-under-correct-filenames. Deterministic weight-suffix match replaces the old fuzzy token scorer
- Google Fonts license no longer mis-flags Apache/OFL fonts as UFL 1.0
- Fontsource license now correctly overrides the GF HTML-scrape result during cross-source dedup
FontComplianceIgnore and FontPaletteApplier now bind correctly after a stale-Library-cache edge case in Unity hosts
Deferred / Withdrawn
- Text Editor sub-tab (Tools): pulled from this release to ship polished in v1.2. The auditor's per-row EDIT buttons went with it — rows still open and ping the component for editing in the Inspector
- League of Moveable Type provider (shipped in
e2dbcd5, reverted in 0933e0b). Phase 2 of the provider roadmap (LoMT, Indestructible Type, Collletttivo, Velvetyne, OSP Foundry, Open Foundry) was cancelled after the scope rule tightened to API-only providers. Only Google Fonts, Fontshare, and Fontsource ship. Source for LoMT and an unshipped Indestructible implementation is preserved outside the repo for future reference
[1.0.0] — 2026-04-07
Added
- Palette Extractor tool tab: AI-assisted prompt to analyze selected text components and recommend palette roles, with importable JSON output and one-click Import JSON button
- Smart Role Recommendation: auto-analyze text vs palette and recommend closest role or suggest new ones
- Auditor Ignore System: mark text components to exclude from compliance checks
- Role Naming Guide in documentation
- Responsive editor layout: docks at any size, compact mode below 700px
- Scoreboard demo samples (tactical vs party themes) with pre-built palettes for first-time user experience
- FontOps Playground sample: guided FTUE scene with reusable RoleSection prefab
- FontPaletteApplier runtime component: per-property override toggles, custom inspector with live preview, comparison table, and Undo-supported apply
- Self-contained HTML documentation with CSS mockups of every UI panel
- Documentation buttons: sidebar footer DOCS button + Settings section 05
- UIDesignTokens.cs centralizing all inline style values
- Third Party Notices.md and EULA-compatible LICENSE.md (removed in 1.1.0 — an independent license conflicts with the Asset Store EULA)
Changed
- Package renamed from “Font Manager” to “FontOps” across all branding, menus, and documentation
- Package technical name changed to
dev.davgtz.fontops (Asset Store alignment)
- C# namespaces changed from
DGD.FontManager to dev.davgtz.fontops
- Menu path simplified to Tools → FontOps
- Dynamic package root resolution supports both Packages/ and Assets/ install paths (Asset Store compatible)
- Atlas Size and Generate Atlas settings now wired to TMP asset creation (default: 1024, Dynamic)
- Auditor asset groups start collapsed after scan
- All hardcoded inline styles replaced with design token references
- Documentation folder visible in Asset Store packages
Fixed
- TwoPaneSplitView crash when opening Text Editor tab
- Editor panel collapse button not working
- Generate Atlas and Atlas Size settings were stored but never used
- Tools tab UX improvements for palette extractor workflow
[0.3.0] — 2026-04-05
Added
- Font Scanner tool tab: full-project font asset discovery, source classification (Google/Package/Custom), duplicate detection with MD5 hashing, font organization, TMP asset creation
- Text Auditor tool tab: hierarchy-based view of all text components across scenes and prefabs, prefab instance detection with override tracking, compliance filter pills, inline EDIT/IGNORE/RESTORE actions
- Text Editor tool tab: dedicated editing view with font, style, size, spacing, color fields and palette role application
- Compliance auto-runs on scan when a palette is selected
- Scanner ignored fonts persistence via EditorPrefs
- UPM Samples: Scoreboard demo scenes (tactical vs party) with shared prefabs and pre-built palettes
Changed
- Tools tab redesigned from flat collapsibles to sub-tabbed layout (Font Scanner | Text Auditor | Text Editor)
- Removed Find & Replace tab (redundant with auditor + editor workflow)
[0.2.0] — 2026-04-01
Added
- “Architectural Utility” dark UI redesign with design token system
- Collapsible sidebar navigation with Unity built-in icons
- My Fonts tab with sub-tabs: font library + palette editor
- Palette system: inline role editing, type system preview, import/export, autosave, dirty tracking with snapshot restore
- Font variant palette role tags
- Paginated search with category pills and sort modes
- Expandable font cards with right inspector panel
[0.1.0] — 2026-03-25
Added
- Initial package structure and UPM manifest
- Font Palette system with typographic roles (Header, Subheader, Body, Caption, Button, Custom)
- Google Fonts integration with optional API key support
- Font Swapper for project-wide font find-and-replace
- Compliance Checker to audit text components against palette rules
- Editor window with Browse, Palette, Swap, Audit, and Settings tabs