Thanks for helping improve the project! This guide keeps contributions fast and consistent.
- Fork and clone the repo.
- Install deps with
pnpm install(repo usespnpm@10.x). - Run the playground while you work:
pnpm dev(orpnpm playfor the alias). - Make changes under
src/(library),packages/(parser), orplayground/(demo).
pnpm lint— ESLint (Vue + TS).pnpm typecheck— vue-tsc.pnpm test— Vitest suite; usepnpm test:updateto refresh snapshots.pnpm build— library + CSS build (ensures workers/CSS are emitted).
- Follow Conventional Commits (
feat:,fix:,chore:, etc.). - Add/extend tests for parser changes or rendering behaviors when possible.
- Include screenshots/GIFs for UI-visible changes (playground/demo).
- Note any prop/API changes in the PR description; update README or docs if needed.
- Be kind and follow the Code of Conduct.
- Use the provided issue templates for bugs/feature requests.
- For rendering bugs, the interactive test page helps generate a shareable repro: https://markstream-vue.simonhe.me/test
- Vue 3 + TypeScript-first, 2-space indent, LF endings (see
.editorconfig). - Components in
src/componentsuse PascalCase directories/files; utils are camel/kebab as existing.
This repository publishes multiple packages (markstream-vue, markstream-vue2, markstream-react, stream-markdown-parser). To keep tags unambiguous, we use namespaced tags:
markstream-vue@<version>markstream-vue2@<version>markstream-react@<version>stream-markdown-parser@<version>
Avoid creating bare v<version> tags (they mix different package versions in a monorepo).
- Stable: tags are semver-based (
<pkg>@<version>) and should match npm releases. - Nightly: tags are commit snapshots (
<pkg>@nightly-YYYYMMDD-<sha>) and are published as GitHub Pre-releases.
Nightly tags can be dependency-driven: when stream-markdown-parser changes, nightly tags are also created for markstream-vue, markstream-vue2, and markstream-react so consumers can test the whole stack against the latest parser.
- Tag current version of a package:
pnpm tag:vue3/pnpm tag:vue2/pnpm tag:react/pnpm tag:parser - Tag + push to remote:
pnpm tag:vue3:push/pnpm tag:vue2:push/pnpm tag:react:push/pnpm tag:parser:push - Backfill namespaced tags from existing legacy
v*tags (dry run):pnpm tag:backfill:dry - Apply backfill locally:
pnpm tag:backfill(add-- --pushto also push tags)