davidvkimball_obsidian-seo/CONTRIBUTING.md
David V. Kimball cdb70c293e Bump to 0.4.4 with scorecard improvements.
Hygiene and scaffolding:
- Add CONTRIBUTING.md
- Add release workflow with build provenance attestation
- Rename plugin from "SEO" to "SEO Checker" in manifest.json
  (id stays "seo" so existing installs are unaffected)
- Remove broken preinstall script reference

Dependency hygiene:
- Add pnpm.overrides for vulnerable transitive dev dependencies
  (minimatch, picomatch, brace-expansion, ajv, flatted, fast-uri,
  yaml)
- Update eslint-plugin-obsidianmd to 0.3.0 and typescript-eslint
  to 8.50.1+ to pull in patched transitives
- Update obsidian-dev-skills to 1.2.0

ESLint config:
- Scope obsidianmd recommended rules to TypeScript files only
- Configure obsidianmd/ui/sentence-case with project-specific
  acronyms (SEO, MDX, H1-H6, URL, CSV) and ignoreRegex for
  quoted button names

Code fixes:
- Remove all 32 eslint-disable-next-line obsidianmd/ui/sentence-case
  comments (the rule is not allowed to be disabled). Rewrite the
  underlying strings to satisfy sentence case directly, or rely on
  the new acronym/ignoreRegex config
- Replace createEl('div'/'span'/'a') with createDiv()/createSpan()/
  createEl('a', {...}) across UI components
- Use activeWindow/activeDocument for popout window compatibility
- Prefix unused parameters with underscore, drop unused catch
  bindings
- Mark fire-and-forget promises with void
- Fix Markdown capitalization in user-facing strings
- Rephrase A-to-Z sort labels to a-to-z to satisfy sentence case
- Fix Promise/queue contravariance and Timer type assignments
  that surfaced after the activeWindow conversions
2026-05-13 15:11:20 -07:00

2.2 KiB

Contributing

Thanks for your interest in contributing. This document describes how to report issues, propose changes, and get a local development environment running.

Reporting issues

  • Search existing issues before opening a new one.
  • For bugs, include: Obsidian version, plugin version, operating system, reproduction steps, and what you expected vs. what happened. Screenshots or a short screen recording help.
  • For feature requests, describe the use case and the problem the feature would solve, not just the proposed solution.

Development setup

Requirements:

  • Node.js (LTS recommended)
  • pnpm. This repo pins a specific version via packageManager in package.json.
pnpm install
pnpm dev      # watch mode build
pnpm build    # production build
pnpm lint     # check code style
pnpm lint:fix # auto-fix where possible

Build artifacts (main.js, manifest.json, styles.css) are produced at the repo root.

To test against a real vault, point the build output at <vault>/.obsidian/plugins/<plugin-id>/ (symlink the three files, or use a tool like hot-reload).

Pull requests

  • Open an issue first for anything non-trivial so we can agree on direction before you spend time on it.
  • Keep PRs focused. One concern per PR is easier to review.
  • Run pnpm lint and pnpm build before submitting; CI will run these too.
  • Follow the existing code style. Use "properties" (not "frontmatter") when referring to YAML metadata. "Markdown" is always capitalized.
  • Update the README if you change user-facing behavior.

Code style

  • TypeScript strict mode, no any unless unavoidable.
  • Prefer Obsidian's API (Vault, MetadataCache, Workspace) over Node fs for vault access.
  • No network requests from the plugin runtime.

Releases

Maintainers cut releases by bumping the version in manifest.json, package.json, and versions.json, committing, then tagging and pushing the tag. The release workflow builds and attaches main.js, manifest.json, and styles.css with build provenance attestation.

License

By contributing, you agree that your contributions will be licensed under the MIT License.