Toolchain current: ESLint 10.7, obsidianmd rules 0.4, and types that match Obsidian's actual runtime
Image-gin's dev toolchain catches up in one pass — and Obsidian's own upgraded lint ruleset immediately starts earning its keep by pointing at the new declarative settings API.
Why Care?
A plugin that generates images through three external APIs (Recraft, Freepik, ImageKit) lives and dies by its type-checking and linting — the compiler is the only thing standing between a renamed API field and a runtime surprise in someone's vault. This pass brings every tool in that chain current, including the ruleset Obsidian's own review bot uses.
What's New?
eslint-plugin-obsidianmd 0.2.9 → 0.4.1 — Obsidian's official lint rules, two 0.x-majors ahead. The upgraded ruleset immediately flagged three things worth knowing about (all warnings, zero errors): two
activeWindow.setTimeoutcalls that should usewindowtimers, and — more interestingly — that our settings tab predates Obsidian 1.13's new declarative settings API, so it won't appear in settings search for users on 1.13+. That's a real feature nudge, logged as a follow-up.ESLint 10.3 → 10.7, typescript-eslint 8.59.1 → 8.65.0, @eslint/plugin-kit 0.7.2, esbuild 0.28.1 — routine currency.
@types/nodepinned down 25 → 22. Obsidian's desktop app ships Electron 39 = Node 22; types for Node 25 describe APIs the runtime doesn't have. Matching types to runtime meanstsccan't be fooled into approving code that would crash in-app.TypeScript was already at 6.0.3 — the officially-recommended stop-over before the native TypeScript 7 — so no compiler move was needed.
Verified: full pnpm build green — ESLint (0 errors), tsc -noEmit,
esbuild production bundle at 93 KB.
Part of the family-wide dependency campaign:
content-farm/context-v/plans/Dependency-Upgrades-Across-Plugin-Family.md.
Follow-ups surfaced by the new ruleset
Adopt
getSettingDefinitions()(declarative settings API) so settings surface in Obsidian 1.13+ settings search —src/settings/settings.tsSwap two
activeWindow.setTimeout→window.setTimeout—src/modals/MagnificModal.tsand one sibling call site