Log in
Toggle sidebar

FoldingText 3.0.21 Release Notes

Extensions: plugin-to-plugin dependency resolution (`requires`); bump to 3.0.21

Release Notes

[3.0.21] — 2026-06-29

New

  • Add an optional requires map to plugin manifests (identifier → version

Other

  • requirement, same comparator format as engines). Installing a plugin
  • (sidebar or deep link) now downloads, installs, and enables each declared
  • dependency first — recursively, so transitive deps resolve — before the
  • requesting plugin.
  • Manifest: requires field (forward-compatible; older builds ignore the
  • unknown key), requiredPlugins, version(_:satisfies:), and a pure
  • authoring-time detectDependencyCycle(in:). versionComparator made static.
  • ExtensionManager: installExtensionWithDependencies(from:for:inFlight:)
  • recursive install with an in-flight ancestor set that guarantees termination
  • on self-references and cycles. Already-satisfied deps are reused/re-enabled,
  • not re-downloaded. Best-effort: the parent installs even if a dep can't be
  • satisfied, with warnings.
  • Surface failures via .extensionDependencyWarning, shown by the app scene
  • ("Required Plugin Not Installed"). Wired into both install entry points
  • (deep link in FoldingTextApp, sidebar ActionButton).
  • Tests: ManifestDependencyTests (decoding, version satisfaction, cycle
  • detection); mock conformance + lint touch-ups in Bridge/PluginLoading tests.
  • Docs: distribution.md + foldingtext-plugin skill manifest reference.
  • filter.ftplugin now declares requires jkpanel (0.5.4 → 0.5.5); jmkpanel
  • lint cleanup (@ts-ignore → @ts-expect-error).
  • App version 3.0.19 → 3.0.21.
← Back to Releases