Thanks for your interest in contributing to Beat.
- Node.js
>=24 <25 - pnpm
>=10
git clone https://github.com/ochairo/beat.git
cd beat
pnpm installpnpm test # run tests
pnpm test:watch # run tests in watch mode
pnpm typecheck # type-check with tsc --noEmit
pnpm build # compile and minify
pnpm validate # run all of the aboveAlways run pnpm validate before submitting a PR.
Beat is a Pulse-native JSX framework. The main modules are:
- jsx-runtime — JSX transform,
component(),Show,For,onCleanup - render —
createRoot(),render() - dom — low-level DOM bindings (
bindText,bindClass,bindStyle,bindProperty,on) - router — SPA router (
createRouter,Link,Outlet, route matching, prefetch, guards) - resource — async state (
createResource,createResourceCache) - vite-plugin — compiler that lowers Beat-specific JSX syntax
Entry points are exported from src/index.ts. The JSX runtime subpaths (jsx-runtime, jsx-dev-runtime) and the Vite plugin are separate entry points.
- Start by opening or confirming the issue you are working on
- Fork the repo and create a branch from
developusing the formatfeature/<issueNo> - Open pull requests against
develop. Contributor changes should not targetmaindirectly - Write tests for any new functionality
- Make sure
pnpm validatepasses - Keep PRs focused — one feature or fix per PR
- Write clear commit messages
Regular development happens on develop.
Contributors should create an issue first, then branch from develop as feature/<issueNo> and open the pull request back into develop.
To publish a release, maintainers merge develop into main and create the release tag from main.
- Strict TypeScript — no
any - Use
unknownwhen the type is genuinely unknown - Let TypeScript infer types where possible
- Explicit return types for public APIs
- Follow existing naming conventions (camelCase for functions, PascalCase for types/components)
Tests use vitest with happy-dom for DOM testing.
- Test files live in
tests/ - Match test file names to the module being tested
- Cover edge cases and error conditions
Use GitHub Issues. Include:
- Beat and Pulse versions
- Minimal reproduction
- Expected vs actual behavior