Files
wickra/CONTRIBUTING.md
T
kingchenc 94cab88278 E3: add community health files
The repository had no contributor-facing documentation or automation
config. Add the standard set:

- CHANGELOG.md (Keep a Changelog format, 0.1.0-0.1.4 plus Unreleased)
- CONTRIBUTING.md (build/test steps, change standards, PolyForm-NC note)
- SECURITY.md (private reporting, supported versions)
- CODE_OF_CONDUCT.md (Contributor Covenant 2.1)
- .github/ISSUE_TEMPLATE (bug report, feature request, config)
- .github/PULL_REQUEST_TEMPLATE.md
- .github/dependabot.yml (cargo, npm, pip, github-actions — the last
  keeps the D1 SHA pins current)
- .github/CODEOWNERS
2026-05-22 16:17:15 +02:00

3.2 KiB

Contributing to Wickra

Thanks for your interest in improving Wickra. This document explains how to build the project, the standards a change must meet, and how to get it merged.

License of contributions

Wickra is licensed under the PolyForm Noncommercial License 1.0.0 (see LICENSE). By submitting a contribution you agree that it is licensed to the project under those same terms. The Noncommercial license permits use for any purpose other than a commercial one; keep that in mind when proposing features or depending on Wickra elsewhere.

Project layout

Path Contents
crates/wickra-core The indicator engine — every indicator lives here.
crates/wickra Thin umbrella crate re-exporting wickra-core.
crates/wickra-data CSV reader, tick aggregator, resampler, Binance feed.
bindings/python PyO3 bindings (wickra on PyPI).
bindings/node napi-rs bindings (wickra on npm).
bindings/wasm wasm-bindgen bindings (wickra-wasm on npm).
examples/ Runnable examples.
docs/wiki/ Documentation sources.

Building and testing

Rust

cargo fmt --all --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace
cargo test -p wickra-data --features live-binance

The minimum supported Rust version is 1.75 for the workspace crates and 1.77 for bindings/node; the msrv CI job enforces both.

Python

cd bindings/python
python -m maturin build --release --out dist
python -m pip install --force-reinstall --no-deps dist/wickra-*.whl
python -m pytest -q

Node

cd bindings/node
npm install
npx napi build --platform --release
node --test __tests__/

WASM

wasm-pack build bindings/wasm --target web --release --features panic-hook
wasm-pack test --node bindings/wasm

Standards for a change

  • Formatting & lints. cargo fmt must leave the tree unchanged and cargo clippy ... -D warnings must be clean. CI gates both.
  • Tests. New behaviour needs tests; bug fixes need a regression test.
  • Indicator correctness. A new or changed indicator must have a reference-value test against a known-good source (TA-Lib, pandas-ta, or a hand-computed value) and a reset test.
  • Streaming parity. An indicator's batch output must equal the sequence of update calls.
  • Bindings. A change to a public indicator API must be mirrored across the Python, Node, and WASM bindings, including their type stubs / .d.ts.
  • Docs. Update the relevant page under docs/wiki/ and the README.md when behaviour or the public API changes.
  • Changelog. Add an entry under ## [Unreleased] in CHANGELOG.md.

Commit and pull-request workflow

  1. Branch off main.
  2. Keep commits focused — one logical change per commit, with an imperative subject line and a body explaining why.
  3. Open a pull request against main and fill in the template.
  4. CI must be green before review.

Reporting bugs and proposing features

Use the issue templates under .github/ISSUE_TEMPLATE. For security-sensitive reports, follow SECURITY.md instead of opening a public issue.