Thanks for your interest in contributing to @jeyabbalas/data-table. This guide covers how to participate — filing bugs, proposing features, and submitting pull requests. For local setup, tests, and the release workflow, see DEVELOPMENT.md.
- File a bug report when something the library documents doesn't work, or when behavior surprises you.
- Propose a feature when a use case the library could reasonably support isn't covered.
- Improve the docs — fix typos, clarify a guide, add a missing pitfall, or add a new example under
examples/. - Submit a PR for a fix or feature. Small, focused PRs are easier to review and merge.
- Search existing issues. Someone may have already reported the same bug or feature request.
- Check
docs/troubleshooting.md. Common issues (stylesheet missing, WASM 404s, SSR blanks, React Strict Mode double-init, IndexedDB in private browsing) have documented fixes. - If you're a coding agent, read
AGENTS.mdfirst — especially §"What this library is / is not". Several frequent "bug" reports are intentional non-features (no in-cell editing, no row-click event, no SSR rendering). - Try the latest release. The bug may already be fixed on
main.
Use the Bug report issue template. Provide:
- The library version you're on.
- Browser and version; operating system.
- A minimal reproduction — the smallest snippet (or repo link) that triggers the bug. The
examples/01-minimal/directory is the best starting point if you need a base to modify. - Expected behavior vs. actual behavior.
- Console output, including any
DataTableError.codethat was thrown.
Issues without a reproduction are usually hard to act on and may be closed with a request for one.
Use the Feature request issue template. Before proposing:
- Read
AGENTS.md§"What this library is / is not" — confirm the feature aligns with the library's stated scope (privacy-preserving, in-browser, analytics-oriented tables; not a general-purpose data grid, not server-paginated, not SSR-rendered). - Check whether the existing
/advancedentry already exposes what you need. Many advanced use cases are reachable viaVisualizationRegistry,WorkerBridge,FilterPresetManager, orSessionStorewithout a new top-level API. - For anything non-trivial (new option on
createDataTable, new event, new filter type), open an issue for discussion before starting a PR. That avoids both of us doing work that won't land.
-
Fork the repo and create a branch from
main. Branch names likefix-stylesheet-checkoradd-csv-progress-eventare fine. -
npm install. All peer dependencies (@codemirror/*,@duckdb/duckdb-wasm,@lezer/highlight) are also listed underdevDependencies, so no extra install is needed for local development. -
Make your change.
- Add or update tests under
tests/, mirroring thesrc/layout. - Keep public-API changes minimal; extend rather than replace where possible.
- Add or update tests under
-
Run the local checks — all must pass:
npm run lintnpm run format:checknpm run typechecknpm run test:coveragenpm run buildnpm run size(bundle-size budgets — fails on > 5 % regression)npm run docs:api:check(typedoc dry-run; catches broken JSDoc references)npm run test:browser(Playwright accessibility suite; first run needsnpx playwright install chromium)
npm run lint:fixandnpm run formatcan fix most mechanical issues.npm run test:browserboots the demo and drives a real Chromium. It guards the things jsdom structurally cannot see — sequential focus navigation (Taborder and keyboard traps), colour contrast against real paint, and scrollable-region detection. A jsdom test can never replace one of these: a live keyboard trap was measured to pass the entire vitest suite.The opt-in performance gate
npm run test:perf(setsRUN_DUCKDB_PERF=1andRUN_LIFECYCLE_STRESS=1) is for nightly / manual runs — not required per PR. -
Add a changeset describing the change:
npx changeset
The CLI prompts for the bump (
patch/minor/major) and writes a markdown file under.changeset/. Commit it alongside your code; the release workflow rolls it forward intoCHANGELOG.mdon version. Match the existing Keep a Changelog headings (Added/Changed/Fixed/Changed (breaking)/Migration). -
Update documentation that is affected:
- Public-API changes →
docs/api-reference.md, andAGENTS.mdif the change alters agent-facing guidance. - User-visible behavior changes → the relevant guide under
docs/guides/. - New features that benefit from a worked example → add one under
examples/.
- Public-API changes →
-
Open a PR using the template and fill in the checklist.
Match the existing project style (check git log):
- Imperative mood, sentence case.
- No
feat:/fix:/chore:prefixes. - Subject line under 72 characters.
- Optional body, wrapped near 72 columns, explaining why rather than what.
- One logical change per commit; rebase to tidy up before opening the PR.
Good examples, taken from the actual history:
Fix "+" button hover thickness
Add library depth content to documentation — guides, concepts, integrations, llms.txt
Remove redundant example 10
Develop typed error model
Support programmatic colorScheme and add CSS variable reference
Avoid:
feat: add stuff # no type prefix
fixed the bug # past tense, sentence-case-only subject needed
WIP # rebase or squash before opening a PR
- Smaller PRs merge faster. If a change is large, consider splitting it into reviewable chunks.
- Expect a first response within about a week. The maintainer (
@jeyabbalas) reviews in batches. - Reviewers may ask for tests, docs updates, or API shape changes before merging.
This project is MIT-licensed (see LICENSE). By submitting a pull request, you agree that your contribution will be released under the same license. There is no CLA.
Intentional non-goals (documented in AGENTS.md) include in-cell editing, row-click events, server-side pagination, and server-side rendering. Features that contradict these non-goals are unlikely to land; if you think the scope should change, open a discussion issue first.