NgMd
On this page ▾
Bug fix, doc tweak, new component, marked extension. Here's the path to a merged PR.

Contribute

Bug fixes, new authoring components, marked extensions, build-pipeline improvements, and doc edits are all welcome. Every PR gets read.

Start here

Repo layout, dev setup, branch + commit conventions, PR checklist. The contract for what gets merged. For anything bigger than a one-file change, open a Discussion before writing code. Saves you from building something the maintainer was going to reject for design reasons. Fork, branch, commit (follow the existing log style), run pnpm run build, push, open the PR.

What we welcome

Anything with a reproduction or clear description of the broken behaviour. Smaller diffs land faster. A clear use case is enough. Open a Discussion first if the addition is large or changes the existing component API. For missing markdown affordances. Runtime extensions live under src/marked-extensions/. Smarter link guards, sitemap entries, page-meta hooks, API auto-gen. Eight user-visible Vite plugins live at the repo root (link-guard, md-links, site-html, page-meta, sitemap, raw-md, search-index, api-gen); the external-link guard lives inline in vite.config.ts, and vars substitutes the version token in markdown. Match the prose voice (no marketing fluff, terse, direct). Read the surrounding paragraphs first. When the conventions in the codebase change, the skills under skills/ should follow.

What we don't merge

Pure formatting / whitespace changes. Marketing-fluff edits (first-class, powerful, seamless, blazingly fast). New deps for things we can hand-roll in under 100 LOC. Renames or refactors without behavioural justification.

Before pushing

  1. pnpm run build passes locally. Link guards, page-meta, and sitemap all run at build time.
  2. pnpm exec vitest run passes. CI runs the tests on every push and pull request.
  3. pnpm format:check is clean. Prettier config mirrors the Angular monorepo. Run pnpm format to auto-fix.
  4. Manual smoke test in the dev server: load the affected route, navigate, toggle dark mode.
  5. No console.log left in committed code.
  6. Commit message follows the existing log style: <type>: short imperative summary (feat, fix, docs, refactor, build, chore).

Where to next