Thanks for the interest. The codebase is small and the bar is high for changes to public API; most PRs do well to start with an issue describing the motivation.
- Node.js ≥ 20
- pnpm ≥ 9 (
corepack enableis the easiest way) - Docker (only needed for integration tests)
pnpm install
./scripts/vendor-proto.sh # refresh proto from ../rust/greptime-proto
pnpm codegen # regenerate src/generated/The codegen step is optional day-to-day — CI gates it via codegen:check, so PRs with stale generated code fail fast.
pnpm typecheck
pnpm lint
pnpm format
pnpm test
./scripts/run-greptimedb.sh # spin up local docker
pnpm example 01-simple-insert # smoke-test against itINTEGRATION=1 pnpm test:integrationUses testcontainers to pull greptime/greptimedb:v1.0.0. Don't bump that tag casually — version bumps should be intentional and reviewed in their own PR so server-behavior drift doesn't hide inside an unrelated change.
pnpm bench bulk-api --rows=200000 --batch-size=5000 --parallelism=8 --endpoint=localhost:4001See docs/benchmarking.md for the full harness.
- Branch from
main, keep PRs focused; large reformatting and a behavior fix in the same PR is a hard review. - Link the related issue.
- If the change affects public API, update
CHANGELOG.mdand call it out in the PR description. - New non-trivial logic needs tests. One-liners and obvious refactors don't.
- Run
pnpm typecheck && pnpm lint && pnpm format:check && pnpm testbefore pushing — CI runs the same set.
Maintainers only. Bump version in package.json, add a dated entry to CHANGELOG.md, tag vX.Y.Z, and push the tag. The release workflow publishes to npm.