plans
Plan — Upgrade Metafetch to Obsidian 1.13 (0.2.0)
Direct Fetch leaves og_image empty on pages that plainly have one, and the settings tab is drawn the old way. One pass fixes the image, ports Cite Wide's extractor fixes, and moves Metafetch onto Obsidian 1.13.
Plan — Upgrade Metafetch to Obsidian 1.13 (0.2.0)
Why Care?
Direct Fetch from Script is the command that needs no API key, so it's the one people use most. It was leaving og_image empty on pages that have a share image. A link card without its image looks broken.
Separately, the settings tab is hand-drawn with display(), so none of its rows appear in Obsidian 1.13's settings search, and on 1.14 a hand-drawn tab can silently drop rows.
What we found (2026-10-08)
We probed the 50 vault notes that had been fetched but had no og_image:
Most pages publish no
og:imageat all (Founders Fund, semver.org, Moonshot AI, Flink…). Here an empty field is the right answer.Some pages use
name="og:image"instead ofproperty="og:image"(Filmora). The extractor only checkedproperty=, so it missed them.Minified HTML with unquoted attributes (
<meta property=og:image content=https://…>, as on electronjs.org) matched nothing. Cite Wide's quote-awareattr()already handles this.Other places pages put the image were never checked:
og:image:url,og:image:secure_url,twitter:image:src,<link rel="image_src">, and the JSON-LDimage.A miss erased a good image.
runFetchScriptwroteog_image: nullwhenever nothing was found, overwriting an image the note already had from an earlier fetch or another provider.Several notes now extract correctly. They were probably fetched before the page added its image, so a re-run fixes them.
Steps (one commit each)
pnpm settings file. Add
allowBuildsnext toonlyBuiltDependencies.Toolchain. Pin as in the handoff:
obsidian1.13.1 exact, eslint ^10.12.0, typescript-eslint 8.71.1,eslint-plugin-obsidianmd^0.4.2,@eslint/plugin-kit^0.7.3. Hold typescript 6.0.3 and@types/node^22.20.5. Replace the ESLint config with Cite Wide's and fix the findings.Test harness. Copy Cite Wide's
scripts/run-tests.mjsandtests/stubs/obsidian.ts. Port the four.mjssuites tonode:test. Addplugin-onload.test.tsandsettings-definitions.test.ts, red first.Extractor + og fix. Port Cite Wide's
directFetchService(copy, don't import), adapted to Metafetch'sOpenGraphData. Add the image fallback chain. Leave a stored image in place when the fetch finds none. Treat bot-check and error-page titles as a failed fetch. Port Cite Wide's extractor tests, plus fixtures for each image case above.Settings tab →
getSettingDefinitions(). Delete thedisplay()override, the deadsettings-tab.ts, and theobsidian.d.tsaugmentation that shadows Obsidian's real types. Bump to 0.2.0 withminAppVersion1.13.0 in the same commit.Docs. README, changelog entry,
changelog/releases/0.2.0.md.Gates and the real-world check. Load the built
main.jswith the handoff's loader and probe the live URLs again.Release. Needs the operator's go-ahead.
Commands (IDs must not change; hotkeys bind to them)
fetch-opengraph-data, batch-fetch-opengraph-data, direct-fetch-from-script, fetch-via-microlink, fetch-from-frontmatter-url.