volcanicMole17 downloadsA simple to use obsidian plugin which adds simple colour selectors and inbuilt fonts
formatForge adds simple typography and colour formatting to Obsidian — body and heading colours, fonts, dividers, and related styling UI.
It works on its own for any vault that wants clearer note formatting. It also soft-integrates with the Forge plugin family (storyForge, timelineForge, and others that adopt the formatting API) so those plugins can share fonts, palettes, and styling through formatForge.
==highlighted== marksfonts/ + src/fonts.ts)When a Forge host is enabled, formatForge can also adjust that host’s formatting surface:
| Host | What formatForge contributes |
|---|---|
| storyForge | Registers as formatting companion; applies editor CSS vars; shared palette / sizes / scrollbar; panel chrome (library, unplaced, codex, cycling guide) via the storyForge interface modal |
| timelineForge | Font catalogue, font picker, and face registration for the timeline rail (controls live in timelineForge’s appearance UI) |
Hosts are detected at runtime. Missing hosts are ignored — there is no required-plugin warning.
When storyForge API v2+ is available:
app.plugins.getPlugin("storyforge")?.api.formatting.registerCompanion({
pluginId: "formatforge",
version: 1,
onHostStylesApplied: () => plugin.applyEditorStyles(),
resolveFont: (familyId, weight) => resolveCustomFontFamilyParts(font, weight),
registerFacesForDocument: (doc) => registerCustomFontFaces(doc),
});
app.plugins.getPlugin("timelineforge")?.api.formatting.registerCompanion({
pluginId: "formatforge",
version: 1,
resolveFont: (familyId, weight) => resolveCustomFontFamilyParts(font, weight),
registerFacesForDocument: (doc) => registerCustomFontFaces(doc),
listFonts: () => CUSTOM_FONTS.map(...),
openFontPicker: (opts) => new FontPickerModal(...).open(),
});
See docs/timelineforge-formatting-api.md and docs/storyforge-formatting-api.md.
| Setting group | Persisted in |
|---|---|
| Editor body/heading colours, fonts, sizes, dividers, H1 link hiding, body links, highlights | formatForge/data.json |
| Colour palette (name, variant, custom colours) | formatForge/data.json standalone; storyForge/data.json when storyForge is present |
| Font sizes (body + H1–H6) | formatForge/data.json standalone; storyForge/data.json when storyForge is present (linked settings API) |
| Manuscript editor scrollbar | formatForge/data.json standalone; storyForge/data.json when storyForge is present |
| storyForge panel chrome | storyForge/data.json via linked settings |
| Timeline rail colours + typography | timelineForge _tf-backstage/folders/*.md |