docs: standardise language naming + binding security sections (#290)

* docs: standardise language naming and add binding security sections

Canonical binding list everywhere: Rust, Python, Node.js, WASM, C, C++, C#,
Go, Java, R. Use C# (not .NET) as the language label, WASM (not WebAssembly)
in prose, and frame the C ABI as a hub rather than a list item.

- Bump stale indicator counts (200+ -> 514) and family count (sixteen ->
  twenty-four) in the Node/Python/WASM and docs READMEs.
- Add a short Security section to all eight binding READMEs.
- Relabel benchmark rows (C -> C / C++, C# / .NET -> C#).
- Fix the 'language stecker' wording in the C#/Go/R API intros.
- Documentation only; no code or public API changes.

* release.yml: extend install snippets and expose version output

Add the missing registry installs to the release body (dotnet, go, Gradle/
Maven Central, r-universe) alongside cargo/pip/npm, and expose a v-stripped
'version' output from the tag step for the Gradle coordinate. Also fix the
C-ABI language order in the assets note (C# before Go).

* release.yml: correct the release body (10 languages, all registries)

Reframe the tagline to '10 languages' (native Rust/Python/Node.js/WASM + a C
ABI hub for C, C++, C#, Go, Java, R) instead of '4 language registries', note
that C#/Java/Go/R publish to NuGet/Maven/Go/r-universe via their own jobs, and
tidy the Node.js label and the C-ABI hub list.
This commit is contained in:
kingchenc
2026-06-13 23:34:24 +02:00
committed by GitHub
parent ee5ee6980e
commit d59cd44043
28 changed files with 166 additions and 81 deletions
+2 -2
View File
@@ -30,9 +30,9 @@ assignees: ""
## Environment ## Environment
- Wickra version: - Wickra version:
- Language / binding: <!-- Rust crate / Python / Node / WASM / C ABI / C# (.NET) / Go / Java / R --> - Language / binding: <!-- Rust crate / Python / Node.js / WASM / C / C++ / C# / Go / Java / R -->
- OS and architecture: - OS and architecture:
- Rust / Python / Node / .NET version (If relevant): - Rust / Python / Node.js / .NET version (If relevant):
## Additional context ## Additional context
@@ -15,9 +15,9 @@ assignees: []
- [ ] Rust crate (`wickra`) - [ ] Rust crate (`wickra`)
- [ ] Python (`pip install wickra`) - [ ] Python (`pip install wickra`)
- [ ] Node.js (`npm install wickra`) - [ ] Node.js (`npm install wickra`)
- [ ] WebAssembly - [ ] WASM
- [ ] C ABI (`bindings/c`) - [ ] C ABI (`bindings/c`)
- [ ] C# / .NET (`Wickra` on NuGet) - [ ] C# (`Wickra` on NuGet)
- [ ] Go (`bindings/go`) - [ ] Go (`bindings/go`)
- [ ] Java (`org.wickra:wickra` on Maven Central) - [ ] Java (`org.wickra:wickra` on Maven Central)
- [ ] R (`bindings/r`) - [ ] R (`bindings/r`)
@@ -31,7 +31,7 @@ assignees: []
| Binding version | `e.g. python 0.4.2 / node 0.4.2` | | Binding version | `e.g. python 0.4.2 / node 0.4.2` |
| OS / arch | `e.g. Windows 11 x86_64, Linux glibc` | | OS / arch | `e.g. Windows 11 x86_64, Linux glibc` |
| Rust toolchain | `rustc --version` (If building from source) | | Rust toolchain | `rustc --version` (If building from source) |
| Python / Node / .NET version | `python --version` / `node --version` / `dotnet --version` | | Python / Node.js / .NET version | `python --version` / `node --version` / `dotnet --version` |
## Minimal reproducer ## Minimal reproducer
+1 -1
View File
@@ -26,7 +26,7 @@ assignees: ""
- [ ] Should be exposed in the Node binding - [ ] Should be exposed in the Node binding
- [ ] Should be exposed in the WASM binding - [ ] Should be exposed in the WASM binding
- [ ] Should be exposed in the C ABI - [ ] Should be exposed in the C ABI
- [ ] Should be exposed in the C# / .NET binding - [ ] Should be exposed in the C# binding
- [ ] Should be exposed in the Go binding - [ ] Should be exposed in the Go binding
- [ ] Should be exposed in the Java binding - [ ] Should be exposed in the Java binding
- [ ] Should be exposed in the R binding - [ ] Should be exposed in the R binding
@@ -13,7 +13,7 @@ assignees: []
## Affected code path ## Affected code path
- Indicator / API: `e.g. EMA.update` - Indicator / API: `e.g. EMA.update`
- Binding: `Rust / Python / Node / Wasm / C ABI / C# (.NET) / Go / Java / R` - Binding: `Rust / Python / Node.js / WASM / C / C++ / C# / Go / Java / R`
- Hot loop or one-shot call? - Hot loop or one-shot call?
## Versions compared ## Versions compared
+1 -1
View File
@@ -33,4 +33,4 @@ import wickra as ta
## Environment (Only if relevant) ## Environment (Only if relevant)
- Wickra version: `e.g. 0.4.2` - Wickra version: `e.g. 0.4.2`
- Binding: `Rust / Python / Node / Wasm / C ABI / C# (.NET) / Go / Java / R` - Binding: `Rust / Python / Node.js / WASM / C / C++ / C# / Go / Java / R`
+1 -1
View File
@@ -22,7 +22,7 @@
- [ ] `cargo clippy --workspace --all-targets -- -D warnings` is clean. - [ ] `cargo clippy --workspace --all-targets -- -D warnings` is clean.
- [ ] `cargo test --workspace` passes. - [ ] `cargo test --workspace` passes.
- [ ] New behaviour has tests; bug fixes have a regression test. - [ ] New behaviour has tests; bug fixes have a regression test.
- [ ] Public API changes are mirrored in the Python / Node / WASM bindings, and the C ABI + C# + Go + Java + R bindings are regenerated - [ ] Public API changes are mirrored in the Python / Node.js / WASM bindings, and the C ABI + C# + Go + Java + R bindings are regenerated
and their type stubs (If applicable). and their type stubs (If applicable).
- [ ] The relevant page on the [documentation site](https://docs.wickra.org) - [ ] The relevant page on the [documentation site](https://docs.wickra.org)
and the `README.md` are updated (If applicable). Docs edits go to a and the `README.md` are updated (If applicable). Docs edits go to a
+2 -2
View File
@@ -22,9 +22,9 @@ Please fill in the sections below. Delete any that don't apply.
- [ ] Rust crate (`crates/wickra`) - [ ] Rust crate (`crates/wickra`)
- [ ] Python binding (`bindings/python`) - [ ] Python binding (`bindings/python`)
- [ ] Node.js binding (`bindings/node`) - [ ] Node.js binding (`bindings/node`)
- [ ] WebAssembly binding (`bindings/wasm`) - [ ] WASM binding (`bindings/wasm`)
- [ ] C ABI (`bindings/c`) - [ ] C ABI (`bindings/c`)
- [ ] C# / .NET binding (`bindings/csharp`) - [ ] C# binding (`bindings/csharp`)
- [ ] Go binding (`bindings/go`) - [ ] Go binding (`bindings/go`)
- [ ] Java binding (`bindings/java`) - [ ] Java binding (`bindings/java`)
- [ ] R binding (`bindings/r`) - [ ] R binding (`bindings/r`)
+23 -5
View File
@@ -876,6 +876,7 @@ jobs:
# bundle to this same release without re-resolving it. # bundle to this same release without re-resolving it.
outputs: outputs:
tag: ${{ steps.tag.outputs.tag }} tag: ${{ steps.tag.outputs.tag }}
version: ${{ steps.tag.outputs.version }}
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with: with:
@@ -904,6 +905,7 @@ jobs:
exit 1 exit 1
fi fi
echo "tag=$tag" >> "$GITHUB_OUTPUT" echo "tag=$tag" >> "$GITHUB_OUTPUT"
echo "version=${tag#v}" >> "$GITHUB_OUTPUT"
echo "::notice::attaching assets to release $tag" echo "::notice::attaching assets to release $tag"
- name: Download all build artifacts - name: Download all build artifacts
@@ -941,7 +943,7 @@ jobs:
# the provenance bundle is attached (P24, immutability-ready). # the provenance bundle is attached (P24, immutability-ready).
draft: true draft: true
body: | body: |
Wickra ${{ github.ref_name }} — streaming-first technical indicators across 4 language registries plus a C ABI. Wickra ${{ github.ref_name }} — streaming-first technical indicators for 10 languages: native Rust, Python, Node.js, WASM plus a C ABI hub for C, C++, C#, Go, Java, R.
### Install ### Install
@@ -950,21 +952,37 @@ jobs:
pip install wickra pip install wickra
npm install wickra npm install wickra
npm install wickra-wasm npm install wickra-wasm
dotnet add package Wickra
go get github.com/wickra-lib/wickra-go
```
Java (Gradle, Maven Central):
```gradle
implementation("org.wickra:wickra:${{ steps.tag.outputs.version }}")
```
R (r-universe):
```r
install.packages("wickra", repos = "https://wickra-lib.r-universe.dev")
``` ```
### Attached assets ### Attached assets
Pre-built artefacts for every supported platform — the same files that Pre-built artefacts for every supported platform — the same files this
were uploaded to crates.io, PyPI, and npm by this workflow run. workflow run published to crates.io, PyPI, and npm. C# ships to NuGet,
Java to Maven Central, Go to the wickra-go module, and R to r-universe
via their own release jobs.
- `*.whl` / `wickra-*.tar.gz` — Python wheels + sdist (5 platforms, ABI3 ≥ 3.9) - `*.whl` / `wickra-*.tar.gz` — Python wheels + sdist (5 platforms, ABI3 ≥ 3.9)
- `wickra.*.node` — native Node bindings (linux-x64-gnu, darwin-x64, - `wickra.*.node` — native Node.js bindings (linux-x64-gnu, darwin-x64,
darwin-arm64, win32-x64-msvc) darwin-arm64, win32-x64-msvc)
- `wickra-*.tgz` — npm-pack tarballs (main package + per-platform subpackages + WASM) - `wickra-*.tgz` — npm-pack tarballs (main package + per-platform subpackages + WASM)
- `*.crate` — cargo source crates (wickra-core, wickra-data, wickra) - `*.crate` — cargo source crates (wickra-core, wickra-data, wickra)
- `wickra-c-<target>.tar.gz` — C ABI: `include/wickra.h` + `wickra.hpp` - `wickra-c-<target>.tar.gz` — C ABI: `include/wickra.h` + `wickra.hpp`
and the cdylib/staticlib per target (linux/macos/windows × x64/arm64), and the cdylib/staticlib per target (linux/macos/windows × x64/arm64),
the hub for C / C++ / Go / C# / Java / R the hub for C, C++, C#, Go, Java and R
### Auto-generated changelog ### Auto-generated changelog
+4 -4
View File
@@ -31,7 +31,7 @@ or replace lives behind a separate crate boundary.
┌────────────┼────────────┬────────────────┐ ┌────────────┼────────────┬────────────────┐
│ │ │ │ │ │ │ │
┌──▼───────┐ ┌──▼───────┐ ┌──▼───────────┐ ┌──▼──────────────────┐ ┌──▼───────┐ ┌──▼───────┐ ┌──▼───────────┐ ┌──▼──────────────────┐
│ Python │ │ Node │ │ WASM │ │ C ABI (cbindgen) │ │ Python │ │ Node.js │ │ WASM │ │ C ABI (cbindgen) │
│ (PyO3) │ │ (napi-rs)│ │(wasm-bindgen)│ │ cdylib + header │ │ (PyO3) │ │ (napi-rs)│ │(wasm-bindgen)│ │ cdylib + header │
└──────────┘ └──────────┘ └──────────────┘ └─────────┬───────────┘ └──────────┘ └──────────┘ └──────────────┘ └─────────┬───────────┘
│ linked by │ linked by
@@ -41,11 +41,11 @@ or replace lives behind a separate crate boundary.
└─────────────────────┘ └─────────────────────┘
``` ```
Python, Node and WASM are *native* Rust bindings (PyO3 / napi-rs / Python, Node.js and WASM are *native* Rust bindings (PyO3 / napi-rs /
wasm-bindgen). The C ABI is the *hub* every other C-capable language links wasm-bindgen). The C ABI is the *hub* every other C-capable language links
against: it builds to a `cdylib`/`staticlib` plus a generated `wickra.h`, and against: it builds to a `cdylib`/`staticlib` plus a generated `wickra.h`, and
downstream languages link that one artifact rather than each re-wrapping the downstream languages link that one artifact rather than each re-wrapping the
core. C and C++ link it directly; the **C# / .NET** binding (`bindings/csharp`, core. C and C++ link it directly; the **C#** binding (`bindings/csharp`,
on NuGet), the **Go** binding (`bindings/go`, cgo), the **R** binding on NuGet), the **Go** binding (`bindings/go`, cgo), the **R** binding
(`bindings/r`, `.Call`) and the **Java** binding (`bindings/java`, the Java FFM (`bindings/r`, `.Call`) and the **Java** binding (`bindings/java`, the Java FFM
API / Panama, on Maven Central) are all generated from `wickra.h`. API / Panama, on Maven Central) are all generated from `wickra.h`.
@@ -57,7 +57,7 @@ API / Panama, on Maven Central) are all generated from `wickra.h`.
| `wickra-data` | `crates/wickra-data` | CSV reader, tick aggregator, resampler, live exchange feeds (feature-gated) | `tokio`, `tokio-tungstenite` (live), `serde_json` | | `wickra-data` | `crates/wickra-data` | CSV reader, tick aggregator, resampler, live exchange feeds (feature-gated) | `tokio`, `tokio-tungstenite` (live), `serde_json` |
| `wickra-python` | `bindings/python` | `_wickra` PyO3 module + Python package | `pyo3`, `numpy`, depends on `wickra-core` | | `wickra-python` | `bindings/python` | `_wickra` PyO3 module + Python package | `pyo3`, `numpy`, depends on `wickra-core` |
| `wickra-node` | `bindings/node` | NAPI-RS native binding | `napi`, depends on `wickra-core` | | `wickra-node` | `bindings/node` | NAPI-RS native binding | `napi`, depends on `wickra-core` |
| `wickra-wasm` | `bindings/wasm` | WebAssembly binding | `wasm-bindgen`, depends on `wickra-core` | | `wickra-wasm` | `bindings/wasm` | WASM binding | `wasm-bindgen`, depends on `wickra-core` |
| `wickra-c` | `bindings/c` | C ABI hub — `cdylib`/`staticlib` + generated `wickra.h` (cbindgen) | depends on `wickra-core` | | `wickra-c` | `bindings/c` | C ABI hub — `cdylib`/`staticlib` + generated `wickra.h` (cbindgen) | depends on `wickra-core` |
| `wickra-examples` | `examples/rust` | runnable binary examples | depends on `wickra`, `wickra-data` | | `wickra-examples` | `examples/rust` | runnable binary examples | depends on `wickra`, `wickra-data` |
+6 -6
View File
@@ -98,8 +98,8 @@ python -m benchmarks.compare_libraries
## 3. Per-binding throughput — the cost of the boundary ## 3. Per-binding throughput — the cost of the boundary
The sections above compare Wickra against other libraries, which only exists for The sections above compare Wickra against other libraries, which only exists for
Python and Rust (there is no comparable streaming TA library for C, C#, Go, Java, Python and Rust (there is no comparable streaming TA library for C, C++, C#, Go, Java,
R or WebAssembly to benchmark against). Every binding calls the **same** Rust R or WASM to benchmark against). Every binding calls the **same** Rust
core, so these per-binding benchmarks are **not** a speed claim and **not** a core, so these per-binding benchmarks are **not** a speed claim and **not** a
cross-library ratio — they document the raw cost of crossing each language's FFI cross-library ratio — they document the raw cost of crossing each language's FFI
boundary, in million updates per second (Mupd/s). boundary, in million updates per second (Mupd/s).
@@ -127,12 +127,12 @@ AMD Ryzen 9 9950X):
| Target | streaming (Mupd/s) | batch (Mupd/s) | | Target | streaming (Mupd/s) | batch (Mupd/s) |
|----------------------|-------------------:|---------------:| |----------------------|-------------------:|---------------:|
| Rust core (no FFI) | 391 | 500 | | Rust core (no FFI) | 391 | 500 |
| C | 383 | 330 | | C / C++ | 383 | 330 |
| C# / .NET | 337 | 244 | | C# | 337 | 244 |
| Python | 33 | 488 | | Python | 33 | 488 |
| Java | 28 | 175 | | Java | 28 | 175 |
| Go | 24 | 400 | | Go | 24 | 400 |
| WebAssembly | 19 | 167 | | WASM | 19 | 167 |
| Node.js | 17 | 10 | | Node.js | 17 | 10 |
| R | 0.1 | 193 | | R | 0.1 | 193 |
@@ -160,7 +160,7 @@ node bindings/node/benchmarks/throughput.js # native napi-
cargo build -p wickra-c --release # the C ABI hub cargo build -p wickra-c --release # the C ABI hub
cmake -S bindings/c/benchmarks -B build/cbench && cmake --build build/cbench \ cmake -S bindings/c/benchmarks -B build/cbench && cmake --build build/cbench \
&& ./build/cbench/throughput # raw C ABI && ./build/cbench/throughput # raw C ABI
dotnet run -c Release --project bindings/csharp/benchmarks # C# / .NET (P/Invoke) dotnet run -c Release --project bindings/csharp/benchmarks # C# (P/Invoke)
( cd bindings/go/benchmarks && go run . ) # Go (cgo) ( cd bindings/go/benchmarks && go run . ) # Go (cgo)
mvn -q -f bindings/java install -DskipTests \ mvn -q -f bindings/java install -DskipTests \
&& mvn -q -f bindings/java/benchmarks exec:exec -Dexec.mainClass=org.wickra.benchmarks.Throughput && mvn -q -f bindings/java/benchmarks exec:exec -Dexec.mainClass=org.wickra.benchmarks.Throughput
+9
View File
@@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
### Changed
- Standardised programming-language naming and ordering across all docs, READMEs,
the documentation site, marketing site, organization profile and GitHub
repository descriptions. Canonical list:
`Rust, Python, Node.js, WASM, C, C++, C#, Go, Java, R`. Uses C# (not .NET) as
the language label, lists C and C++ separately, prefers `Node.js` and `WASM` in
prose, and frames the C ABI as a hub (`C ABI hub → …`) rather than a
language-list entry. Documentation only — no code or public API changes.
## [0.9.0] - 2026-06-13 ## [0.9.0] - 2026-06-13
Maintenance release: Java build-dependency updates and CI/Dependabot Maintenance release: Java build-dependency updates and CI/Dependabot
+2 -2
View File
@@ -22,7 +22,7 @@ licensed as above, without any additional terms or conditions.
| `bindings/node` | napi-rs bindings (`wickra` on npm). | | `bindings/node` | napi-rs bindings (`wickra` on npm). |
| `bindings/wasm` | wasm-bindgen bindings (`wickra-wasm` on npm). | | `bindings/wasm` | wasm-bindgen bindings (`wickra-wasm` on npm). |
| `bindings/c` | C ABI — `cdylib` + `staticlib` + generated `include/wickra.h`. The hub for C / C++ and any C-capable language. | | `bindings/c` | C ABI — `cdylib` + `staticlib` + generated `include/wickra.h`. The hub for C / C++ and any C-capable language. |
| `bindings/csharp` | .NET binding over the C ABI (`Wickra` on NuGet) — `[LibraryImport]` P/Invoke generated from `wickra.h`. | | `bindings/csharp` | C# binding over the C ABI (`Wickra` on NuGet) — `[LibraryImport]` P/Invoke generated from `wickra.h`. |
| `bindings/go` | Go binding over the C ABI via cgo (module tag `bindings/go/vX.Y.Z`) — wrappers generated from `wickra.h`. | | `bindings/go` | Go binding over the C ABI via cgo (module tag `bindings/go/vX.Y.Z`) — wrappers generated from `wickra.h`. |
| `bindings/r` | R binding over the C ABI via `.Call` (R package) — C glue + R wrappers generated from `wickra.h`. | | `bindings/r` | R binding over the C ABI via `.Call` (R package) — C glue + R wrappers generated from `wickra.h`. |
| `bindings/java` | Java binding over the C ABI via the FFM API (Panama, Maven Central) — wrappers generated from `wickra.h`. | | `bindings/java` | Java binding over the C ABI via the FFM API (Panama, Maven Central) — wrappers generated from `wickra.h`. |
@@ -107,7 +107,7 @@ installed. Dependabot also keeps the `.github/requirements` pins current.
- **Streaming parity.** An indicator's `batch` output must equal the sequence - **Streaming parity.** An indicator's `batch` output must equal the sequence
of `update` calls. of `update` calls.
- **Bindings.** A change to a public indicator API must be mirrored across the - **Bindings.** A change to a public indicator API must be mirrored across the
Python, Node, and WASM bindings, including their type stubs / `.d.ts`. The C ABI Python, Node.js, and WASM bindings, including their type stubs / `.d.ts`. The C ABI
(`bindings/c`) is generated from the core, so regenerate it from the core and (`bindings/c`) is generated from the core, so regenerate it from the core and
commit `src/lib.rs` + `include/wickra.h`. The C# binding (`bindings/csharp`) is commit `src/lib.rs` + `include/wickra.h`. The C# binding (`bindings/csharp`) is
generated from `wickra.h`, so regenerate and commit its `Generated/*.g.cs` too. generated from `wickra.h`, so regenerate and commit its `Generated/*.g.cs` too.
+8 -8
View File
@@ -22,8 +22,8 @@
**Streaming-first technical indicators. Install with `pip install wickra` — no system dependencies.** **Streaming-first technical indicators. Install with `pip install wickra` — no system dependencies.**
Wickra is a multi-language technical-analysis library with a Rust core and Wickra is a multi-language technical-analysis library with a Rust core and
native bindings for Python, Node.js and WebAssembly, plus a C ABI that C, C++, native bindings for Python, Node.js and WASM, plus a C ABI that C, C++,
C# / .NET, Go, Java, R and any other C-capable language links against. Every indicator is a C#, Go, Java, R and any other C-capable language links against. Every indicator is a
state machine that updates in O(1) per new data point, so live trading bots and state machine that updates in O(1) per new data point, so live trading bots and
historical backtests share the exact same implementation. historical backtests share the exact same implementation.
@@ -81,8 +81,8 @@ times to get there.
breadth, Renko/Kagi/Point&Figure bars, Ehlers DSP cycles, risk/performance breadth, Renko/Kagi/Point&Figure bars, Ehlers DSP cycles, risk/performance
metrics — every single one updating in **O(1) per tick**. TA-Lib ships ~150 and metrics — every single one updating in **O(1) per tick**. TA-Lib ships ~150 and
none of them stream. none of them stream.
- **One Rust core, five first-class targets.** Native **Python · Node.js · - **One Rust core, five first-class targets.** Native **Rust · Python · Node.js ·
WebAssembly · Rust** plus a **C ABI** for C / C++, C# / .NET, Go, Java, R and any other C-capable language — WASM** plus a **C ABI** for C, C++, C#, Go, Java, R and any other C-capable language —
identical math, identical results, zero per-language reimplementation and zero identical math, identical results, zero per-language reimplementation and zero
GIL bottleneck. GIL bottleneck.
- **Correct by construction, not by hope.** Every `update` validates its input, - **Correct by construction, not by hope.** Every `update` validates its input,
@@ -106,7 +106,7 @@ Every other library forces one of those compromises. Wickra doesn't:
| Library | Install | Streaming | Languages | Indicators | Active | | Library | Install | Streaming | Languages | Indicators | Active |
|------------------|-------------|-------------|-----------------------------|-----------:|--------| |------------------|-------------|-------------|-----------------------------|-----------:|--------|
| **★&nbsp;Wickra**| **clean** | **yes, O(1)** | **Rust · Python · Node · WASM · C · C# · Go · Java · R** | **514** | **yes** | | **★&nbsp;Wickra**| **clean** | **yes, O(1)** | **Rust · Python · Node.js · WASM · C · C++ · C# · Go · Java · R** | **514** | **yes** |
| kand | clean | yes | Python · WASM · Rust | ~60 | yes | | kand | clean | yes | Python · WASM · Rust | ~60 | yes |
| ta-rs | clean | yes | Rust only | ~30 | stale | | ta-rs | clean | yes | Rust only | ~30 | stale |
| yata | clean | partial | Rust only | ~35 | yes | | yata | clean | partial | Rust only | ~35 | yes |
@@ -190,7 +190,7 @@ it — regenerate from the core).
| Browser / WASM | `npm install wickra-wasm` | `examples/wasm/index.html` | | Browser / WASM | `npm install wickra-wasm` | `examples/wasm/index.html` |
| Rust | `cargo add wickra` | `examples/rust/src/bin/backtest.rs` | | Rust | `cargo add wickra` | `examples/rust/src/bin/backtest.rs` |
| C / C++ (C ABI) | header + library, see [`bindings/c`](bindings/c) | `examples/c/streaming.c` | | C / C++ (C ABI) | header + library, see [`bindings/c`](bindings/c) | `examples/c/streaming.c` |
| C# / .NET (C ABI) | `dotnet add package Wickra`, see [`bindings/csharp`](bindings/csharp) | `examples/csharp/streaming` | | C# (C ABI) | `dotnet add package Wickra`, see [`bindings/csharp`](bindings/csharp) | `examples/csharp/streaming` |
| Go (cgo, C ABI) | `go get github.com/wickra-lib/wickra/bindings/go`, see [`bindings/go`](bindings/go) | `examples/go/streaming` | | Go (cgo, C ABI) | `go get github.com/wickra-lib/wickra/bindings/go`, see [`bindings/go`](bindings/go) | `examples/go/streaming` |
| Java (FFM, C ABI) | Maven Central `org.wickra:wickra`, see [`bindings/java`](bindings/java) | `examples/java` (`Streaming`) | | Java (FFM, C ABI) | Maven Central `org.wickra:wickra`, see [`bindings/java`](bindings/java) | `examples/java` (`Streaming`) |
| R (`.Call`, C ABI) | `R CMD INSTALL bindings/r`, see [`bindings/r`](bindings/r) | `examples/r/streaming.R` | | R (`.Call`, C ABI) | `R CMD INSTALL bindings/r`, see [`bindings/r`](bindings/r) | `examples/r/streaming.R` |
@@ -264,7 +264,7 @@ wickra/
│ ├── node/ napi-rs (publishes on npm) │ ├── node/ napi-rs (publishes on npm)
│ ├── wasm/ wasm-bindgen (browsers, bundlers, Node) │ ├── wasm/ wasm-bindgen (browsers, bundlers, Node)
│ ├── c/ C ABI (cdylib + staticlib) + generated include/wickra.h │ ├── c/ C ABI (cdylib + staticlib) + generated include/wickra.h
│ ├── csharp/ .NET binding over the C ABI (publishes on NuGet) │ ├── csharp/ C# binding over the C ABI (publishes on NuGet)
│ ├── go/ Go binding over the C ABI via cgo (module tag) │ ├── go/ Go binding over the C ABI via cgo (module tag)
│ ├── r/ R binding over the C ABI via .Call (R package) │ ├── r/ R binding over the C ABI via .Call (R package)
│ └── java/ Java binding over the C ABI via the FFM API (Maven Central) │ └── java/ Java binding over the C ABI via the FFM API (Maven Central)
@@ -312,7 +312,7 @@ cargo build -p wickra-c --release
cmake -S examples/c -B examples/c/build -DWICKRA_LIB_DIR="$PWD/target/release" cmake -S examples/c -B examples/c/build -DWICKRA_LIB_DIR="$PWD/target/release"
cmake --build examples/c/build && ctest --test-dir examples/c/build --output-on-failure cmake --build examples/c/build && ctest --test-dir examples/c/build --output-on-failure
# C# / .NET binding (requires the .NET 8 SDK; links the C ABI above) # C# binding (requires the .NET 8 SDK; links the C ABI above)
dotnet test bindings/csharp/Wickra.Tests/Wickra.Tests.csproj dotnet test bindings/csharp/Wickra.Tests/Wickra.Tests.csproj
# Go binding (requires a C compiler for cgo; links the C ABI above) # Go binding (requires a C compiler for cgo; links the C ABI above)
+2 -2
View File
@@ -21,8 +21,8 @@ minor releases; breaking changes are called out in the changelog.
versioning stability for a 1.0 release. versioning stability for a 1.0 release.
- **Performance.** Keep per-tick updates O(1) and maintain the benchmark suite; - **Performance.** Keep per-tick updates O(1) and maintain the benchmark suite;
investigate further allocation and cache improvements. investigate further allocation and cache improvements.
- **Bindings parity.** Keep the Python, Node.js and WebAssembly bindings — plus - **Bindings parity.** Keep the Python, Node.js and WASM bindings — plus
the C ABI and the C# / .NET, Go, Java and R bindings generated from it — in lockstep with the the C ABI and the C#, Go, Java and R bindings generated from it — in lockstep with the
Rust core, including type stubs and platform coverage. Rust core, including type stubs and platform coverage.
- **Documentation.** Maintain a deep-dive page per indicator on - **Documentation.** Maintain a deep-dive page per indicator on
<https://docs.wickra.org>, plus quickstarts and cookbook material. <https://docs.wickra.org>, plus quickstarts and cookbook material.
+1 -1
View File
@@ -7,7 +7,7 @@ Thanks for using Wickra! Here is where to get help, depending on what you need.
Most questions are answered in the documentation: Most questions are answered in the documentation:
- **Docs site:** <https://docs.wickra.org> — quickstarts for Rust, Python, - **Docs site:** <https://docs.wickra.org> — quickstarts for Rust, Python,
Node.js, WebAssembly, C, C#, Go, Java and R, a per-indicator reference, warmup periods, the Node.js, WASM, C, C++, C#, Go, Java and R, a per-indicator reference, warmup periods, the
data layer, and an FAQ. data layer, and an FAQ.
- **README:** <https://github.com/wickra-lib/wickra#readme> — installation and a - **README:** <https://github.com/wickra-lib/wickra#readme> — installation and a
quick overview. quick overview.
+2 -2
View File
@@ -3,8 +3,8 @@
This document describes Wickra's attack surface and the threats considered, This document describes Wickra's attack surface and the threats considered,
together with their mitigations. It complements the security assurance case in together with their mitigations. It complements the security assurance case in
[`SECURITY.md`](SECURITY.md). Wickra is a computational technical-analysis [`SECURITY.md`](SECURITY.md). Wickra is a computational technical-analysis
library (a Rust core with Python, Node.js and WebAssembly bindings plus a C ABI library (a Rust core with Python, Node.js and WASM bindings plus a C ABI
and the .NET, Go, Java and R bindings built on it), and the C#, Go, Java and R bindings built on it),
not a network service or trading system; the attack surface is correspondingly not a network service or trading system; the attack surface is correspondingly
small. small.
+11 -4
View File
@@ -9,12 +9,12 @@
library plus a generated `wickra.h` — no system dependencies.** library plus a generated `wickra.h` — no system dependencies.**
Wickra is a multi-language technical-analysis library with a Rust core and Wickra is a multi-language technical-analysis library with a Rust core and
bindings for Python, Node.js and WebAssembly, plus a C ABI for C/C++, C#, Go, Java, R and any bindings for Python, Node.js and WASM, plus a C ABI for C, C++, C#, Go, Java, R and any
other C-capable language. Every indicator is an O(1) other C-capable language. Every indicator is an O(1)
streaming state machine, so live trading bots and historical backtests share streaming state machine, so live trading bots and historical backtests share
the exact same implementation. This package is the **C ABI hub**: it compiles the the exact same implementation. This package is the **C ABI hub**: it compiles the
core to a C-compatible shared/static library plus a generated header, so any core to a C-compatible shared/static library plus a generated header, so any
C-capable language (C, C++, Go, C#, Java, R) links against one artifact instead C-capable language (C, C++, C#, Go, Java, R) links against one artifact instead
of re-wrapping every indicator natively. of re-wrapping every indicator natively.
## Install ## Install
@@ -77,10 +77,17 @@ the main repository and documentation site:
- **Docs** (C quickstart, cookbook, TA-Lib migration): <https://docs.wickra.org/Quickstart-C> - **Docs** (C quickstart, cookbook, TA-Lib migration): <https://docs.wickra.org/Quickstart-C>
- **Runnable examples:** [`examples/c/`](https://github.com/wickra-lib/wickra/tree/main/examples/c) - **Runnable examples:** [`examples/c/`](https://github.com/wickra-lib/wickra/tree/main/examples/c)
Wickra ships native bindings for Python, Node.js, WebAssembly and Rust, plus this Wickra ships native bindings for Python, Node.js, WASM and Rust, plus this
C ABI hub that any C-capable language (C, C++, Go, C#, Java, R) links against — C ABI hub that any C-capable language (C, C++, C#, Go, Java, R) links against —
all exposing the same indicators from the shared Rust core. all exposing the same indicators from the shared Rust core.
## Security
Found a security issue? **Please don't open a public issue.** Report it privately
via the affected repository's *Security* tab (*"Report a vulnerability"*) or email
**support@wickra.org** with a subject line starting `[wickra security]`. Full
policy: <https://github.com/wickra-lib/wickra/blob/main/SECURITY.md>.
## Disclaimer ## Disclaimer
Wickra is an indicator toolkit, not a trading system. The values it computes Wickra is an indicator toolkit, not a trading system. The values it computes
+13 -6
View File
@@ -1,18 +1,18 @@
# Wickra — .NET # Wickra — C#
[![CI](https://github.com/wickra-lib/wickra/actions/workflows/ci.yml/badge.svg)](https://github.com/wickra-lib/wickra/actions/workflows/ci.yml) [![CI](https://github.com/wickra-lib/wickra/actions/workflows/ci.yml/badge.svg)](https://github.com/wickra-lib/wickra/actions/workflows/ci.yml)
[![codecov](https://codecov.io/gh/wickra-lib/wickra/branch/main/graph/badge.svg)](https://codecov.io/gh/wickra-lib/wickra) [![codecov](https://codecov.io/gh/wickra-lib/wickra/branch/main/graph/badge.svg)](https://codecov.io/gh/wickra-lib/wickra)
[![NuGet](https://img.shields.io/nuget/v/Wickra.svg?logo=nuget&color=blue)](https://www.nuget.org/packages/Wickra) [![NuGet](https://img.shields.io/nuget/v/Wickra.svg?logo=nuget&color=blue)](https://www.nuget.org/packages/Wickra)
[![License: MIT OR Apache-2.0](https://img.shields.io/badge/license-MIT_OR_Apache--2.0-blue)](https://github.com/wickra-lib/wickra#license) [![License: MIT OR Apache-2.0](https://img.shields.io/badge/license-MIT_OR_Apache--2.0-blue)](https://github.com/wickra-lib/wickra#license)
**Streaming-first technical indicators for .NET. `dotnet add package Wickra` **Streaming-first technical indicators for C#. `dotnet add package Wickra`
prebuilt native library, no system dependencies.** prebuilt native library, no system dependencies.**
Wickra is a multi-language technical-analysis library with a Rust core and Wickra is a multi-language technical-analysis library with a Rust core and
bindings for Python, Node.js and WebAssembly, plus a C ABI for C/C++, C#, Go, Java, R and any bindings for Python, Node.js and WASM, plus a C ABI for C, C++, C#, Go, Java, R and any
other C-capable language. Every indicator is an O(1) other C-capable language. Every indicator is an O(1)
streaming state machine, so live trading bots and historical backtests share streaming state machine, so live trading bots and historical backtests share
the exact same implementation. This package is the .NET binding; it consumes the the exact same implementation. This package is the C# binding; it consumes the
C ABI hub through `[LibraryImport]` P/Invoke and exposes all 514 streaming-first C ABI hub through `[LibraryImport]` P/Invoke and exposes all 514 streaming-first
indicators as idiomatic `IDisposable` classes. indicators as idiomatic `IDisposable` classes.
@@ -73,10 +73,17 @@ the main repository and documentation site:
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org> - **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
- **Runnable examples:** [`examples/csharp/`](https://github.com/wickra-lib/wickra/tree/main/examples/csharp) - **Runnable examples:** [`examples/csharp/`](https://github.com/wickra-lib/wickra/tree/main/examples/csharp)
Wickra ships native bindings for Python, Node.js, WebAssembly and Rust, plus a Wickra ships native bindings for Python, Node.js, WASM and Rust, plus a
C ABI hub that any C-capable language (C, C++, Go, C#, Java, R) links against — C ABI hub that any C-capable language (C, C++, C#, Go, Java, R) links against —
all exposing the same indicators from the shared, `unsafe`-forbidden Rust core. all exposing the same indicators from the shared, `unsafe`-forbidden Rust core.
## Security
Found a security issue? **Please don't open a public issue.** Report it privately
via the affected repository's *Security* tab (*"Report a vulnerability"*) or email
**support@wickra.org** with a subject line starting `[wickra security]`. Full
policy: <https://github.com/wickra-lib/wickra/blob/main/SECURITY.md>.
## Disclaimer ## Disclaimer
Wickra is an indicator toolkit, not a trading system. The values it computes Wickra is an indicator toolkit, not a trading system. The values it computes
+9 -2
View File
@@ -8,7 +8,7 @@
**Streaming-first technical indicators for Go, over the Wickra C ABI hub via cgo.** **Streaming-first technical indicators for Go, over the Wickra C ABI hub via cgo.**
Wickra is a multi-language technical-analysis library with a Rust core and Wickra is a multi-language technical-analysis library with a Rust core and
bindings for Python, Node.js and WebAssembly, plus a C ABI for C/C++, C#, Go, Java, R and bindings for Python, Node.js and WASM, plus a C ABI for C, C++, C#, Go, Java, R and
any other C-capable language. Every indicator is an O(1) streaming state machine, any other C-capable language. Every indicator is an O(1) streaming state machine,
so live trading bots and historical backtests share the exact same so live trading bots and historical backtests share the exact same
implementation. This package is the Go binding; it consumes the C ABI hub through implementation. This package is the Go binding; it consumes the C ABI hub through
@@ -108,10 +108,17 @@ main repository and documentation site:
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org> - **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
- **Runnable examples:** [`examples/go/`](https://github.com/wickra-lib/wickra/tree/main/examples/go) - **Runnable examples:** [`examples/go/`](https://github.com/wickra-lib/wickra/tree/main/examples/go)
Wickra ships native bindings for Python, Node.js, WebAssembly and Rust, plus a Wickra ships native bindings for Python, Node.js, WASM and Rust, plus a
C ABI hub that any C-capable language (C, C++, C#, Go, Java, R) links against — C ABI hub that any C-capable language (C, C++, C#, Go, Java, R) links against —
all exposing the same indicators from the shared, `unsafe`-forbidden Rust core. all exposing the same indicators from the shared, `unsafe`-forbidden Rust core.
## Security
Found a security issue? **Please don't open a public issue.** Report it privately
via the affected repository's *Security* tab (*"Report a vulnerability"*) or email
**support@wickra.org** with a subject line starting `[wickra security]`. Full
policy: <https://github.com/wickra-lib/wickra/blob/main/SECURITY.md>.
## Disclaimer ## Disclaimer
Wickra is an indicator toolkit, not a trading system. The values it computes are Wickra is an indicator toolkit, not a trading system. The values it computes are
+10 -3
View File
@@ -9,7 +9,7 @@
& Memory API — prebuilt native library, no JNI, no system dependencies.** & Memory API — prebuilt native library, no JNI, no system dependencies.**
Wickra is a multi-language technical-analysis library with a Rust core and Wickra is a multi-language technical-analysis library with a Rust core and
bindings for Python, Node.js and WebAssembly, plus a C ABI for C/C++, C#, Go, Java, R bindings for Python, Node.js and WASM, plus a C ABI for C, C++, C#, Go, Java, R
and any other C-capable language. Every indicator is an O(1) streaming state and any other C-capable language. Every indicator is an O(1) streaming state
machine, so live trading bots and historical backtests share the exact same machine, so live trading bots and historical backtests share the exact same
implementation. This package is the Java binding; it consumes the C ABI hub implementation. This package is the Java binding; it consumes the C ABI hub
@@ -98,10 +98,17 @@ the main repository and documentation site:
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org> - **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
- **Runnable examples:** [`examples/java/`](https://github.com/wickra-lib/wickra/tree/main/examples/java) - **Runnable examples:** [`examples/java/`](https://github.com/wickra-lib/wickra/tree/main/examples/java)
Wickra ships native bindings for Python, Node.js, WebAssembly and Rust, plus a Wickra ships native bindings for Python, Node.js, WASM and Rust, plus a
C ABI hub that any C-capable language (C, C++, Go, C#, Java, R) links against — C ABI hub that any C-capable language (C, C++, C#, Go, Java, R) links against —
all exposing the same indicators from the shared, `unsafe`-forbidden Rust core. all exposing the same indicators from the shared, `unsafe`-forbidden Rust core.
## Security
Found a security issue? **Please don't open a public issue.** Report it privately
via the affected repository's *Security* tab (*"Report a vulnerability"*) or email
**support@wickra.org** with a subject line starting `[wickra security]`. Full
policy: <https://github.com/wickra-lib/wickra/blob/main/SECURITY.md>.
## Disclaimer ## Disclaimer
Wickra is an indicator toolkit, not a trading system. The values it computes Wickra is an indicator toolkit, not a trading system. The values it computes
+11 -4
View File
@@ -9,11 +9,11 @@
prebuilt native binary, no system dependencies.** prebuilt native binary, no system dependencies.**
Wickra is a multi-language technical-analysis library with a Rust core and Wickra is a multi-language technical-analysis library with a Rust core and
bindings for Python, Node.js and WebAssembly, plus a C ABI for C/C++, C#, Go, Java, R and any bindings for Python, Node.js and WASM, plus a C ABI for C, C++, C#, Go, Java, R and any
other C-capable language. Every indicator is an O(1) other C-capable language. Every indicator is an O(1)
streaming state machine, so live trading bots and historical backtests share streaming state machine, so live trading bots and historical backtests share
the exact same implementation. This package is the Node.js binding (napi-rs); the exact same implementation. This package is the Node.js binding (napi-rs);
it exposes 200+ streaming-first indicators across sixteen families. it exposes all 514 streaming-first indicators across twenty-four families.
## Install ## Install
@@ -68,10 +68,17 @@ the main repository and documentation site:
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org> - **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
- **Runnable examples:** [`examples/node/`](https://github.com/wickra-lib/wickra/tree/main/examples/node) - **Runnable examples:** [`examples/node/`](https://github.com/wickra-lib/wickra/tree/main/examples/node)
Wickra ships native bindings for Python, Node.js, WebAssembly and Rust, plus a Wickra ships native bindings for Python, Node.js, WASM and Rust, plus a
C ABI hub that any C-capable language (C, C++, Go, C#, Java, R) links against — C ABI hub that any C-capable language (C, C++, C#, Go, Java, R) links against —
all exposing the same indicators from the shared, `unsafe`-forbidden Rust core. all exposing the same indicators from the shared, `unsafe`-forbidden Rust core.
## Security
Found a security issue? **Please don't open a public issue.** Report it privately
via the affected repository's *Security* tab (*"Report a vulnerability"*) or email
**support@wickra.org** with a subject line starting `[wickra security]`. Full
policy: <https://github.com/wickra-lib/wickra/blob/main/SECURITY.md>.
## Disclaimer ## Disclaimer
Wickra is an indicator toolkit, not a trading system. The values it computes Wickra is an indicator toolkit, not a trading system. The values it computes
+11 -4
View File
@@ -9,11 +9,11 @@
system dependencies, no C build tooling.** system dependencies, no C build tooling.**
Wickra is a multi-language technical-analysis library with a Rust core and Wickra is a multi-language technical-analysis library with a Rust core and
bindings for Python, Node.js and WebAssembly, plus a C ABI for C/C++, C#, Go, Java, R and any bindings for Python, Node.js and WASM, plus a C ABI for C, C++, C#, Go, Java, R and any
other C-capable language. Every indicator is an O(1) other C-capable language. Every indicator is an O(1)
streaming state machine, so live trading bots and historical backtests share streaming state machine, so live trading bots and historical backtests share
the exact same implementation. This package is the Python binding (PyO3); it the exact same implementation. This package is the Python binding (PyO3); it
exposes 200+ streaming-first indicators across sixteen families. exposes all 514 streaming-first indicators across twenty-four families.
## Install ## Install
@@ -73,10 +73,17 @@ the main repository and documentation site:
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org> - **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
- **Runnable examples:** [`examples/python/`](https://github.com/wickra-lib/wickra/tree/main/examples/python) - **Runnable examples:** [`examples/python/`](https://github.com/wickra-lib/wickra/tree/main/examples/python)
Wickra ships native bindings for Python, Node.js, WebAssembly and Rust, plus a Wickra ships native bindings for Python, Node.js, WASM and Rust, plus a
C ABI hub that any C-capable language (C, C++, Go, C#, Java, R) links against — C ABI hub that any C-capable language (C, C++, C#, Go, Java, R) links against —
all exposing the same indicators from the shared, `unsafe`-forbidden Rust core. all exposing the same indicators from the shared, `unsafe`-forbidden Rust core.
## Security
Found a security issue? **Please don't open a public issue.** Report it privately
via the affected repository's *Security* tab (*"Report a vulnerability"*) or email
**support@wickra.org** with a subject line starting `[wickra security]`. Full
policy: <https://github.com/wickra-lib/wickra/blob/main/SECURITY.md>.
## Disclaimer ## Disclaimer
Wickra is an indicator toolkit, not a trading system. The values it computes Wickra is an indicator toolkit, not a trading system. The values it computes
+9 -2
View File
@@ -7,7 +7,7 @@
**Streaming-first technical indicators for R, over the Wickra C ABI hub via `.Call`.** **Streaming-first technical indicators for R, over the Wickra C ABI hub via `.Call`.**
Wickra is a multi-language technical-analysis library with a Rust core and Wickra is a multi-language technical-analysis library with a Rust core and
bindings for Python, Node.js and WebAssembly, plus a C ABI for C/C++, C#, Go, Java, R bindings for Python, Node.js and WASM, plus a C ABI for C, C++, C#, Go, Java, R
and any other C-capable language. Every indicator is an O(1) streaming state and any other C-capable language. Every indicator is an O(1) streaming state
machine, so live trading and historical backtests share the exact same machine, so live trading and historical backtests share the exact same
implementation. This package is the R binding; it reaches the C ABI hub through implementation. This package is the R binding; it reaches the C ABI hub through
@@ -79,10 +79,17 @@ main repository and documentation site:
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org> - **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
- **Runnable examples:** [`examples/r/`](https://github.com/wickra-lib/wickra/tree/main/examples/r) - **Runnable examples:** [`examples/r/`](https://github.com/wickra-lib/wickra/tree/main/examples/r)
Wickra ships native bindings for Python, Node.js, WebAssembly and Rust, plus a Wickra ships native bindings for Python, Node.js, WASM and Rust, plus a
C ABI hub that any C-capable language (C, C++, C#, Go, Java, R) links against — C ABI hub that any C-capable language (C, C++, C#, Go, Java, R) links against —
all exposing the same indicators from the shared, `unsafe`-forbidden Rust core. all exposing the same indicators from the shared, `unsafe`-forbidden Rust core.
## Security
Found a security issue? **Please don't open a public issue.** Report it privately
via the affected repository's *Security* tab (*"Report a vulnerability"*) or email
**support@wickra.org** with a subject line starting `[wickra security]`. Full
policy: <https://github.com/wickra-lib/wickra/blob/main/SECURITY.md>.
## Disclaimer ## Disclaimer
Wickra is an indicator toolkit, not a trading system. The values it computes are Wickra is an indicator toolkit, not a trading system. The values it computes are
+14 -7
View File
@@ -1,4 +1,4 @@
# Wickra — WebAssembly # Wickra — WASM
[![CI](https://github.com/wickra-lib/wickra/actions/workflows/ci.yml/badge.svg)](https://github.com/wickra-lib/wickra/actions/workflows/ci.yml) [![CI](https://github.com/wickra-lib/wickra/actions/workflows/ci.yml/badge.svg)](https://github.com/wickra-lib/wickra/actions/workflows/ci.yml)
[![codecov](https://codecov.io/gh/wickra-lib/wickra/branch/main/graph/badge.svg)](https://codecov.io/gh/wickra-lib/wickra) [![codecov](https://codecov.io/gh/wickra-lib/wickra/branch/main/graph/badge.svg)](https://codecov.io/gh/wickra-lib/wickra)
@@ -9,12 +9,12 @@
wickra-wasm` — pure WebAssembly, runs anywhere a modern JS engine does.** wickra-wasm` — pure WebAssembly, runs anywhere a modern JS engine does.**
Wickra is a multi-language technical-analysis library with a Rust core and Wickra is a multi-language technical-analysis library with a Rust core and
bindings for Python, Node.js and WebAssembly, plus a C ABI for C/C++, C#, Go, Java, R and any bindings for Python, Node.js and WASM, plus a C ABI for C, C++, C#, Go, Java, R and any
other C-capable language. Every indicator is an O(1) other C-capable language. Every indicator is an O(1)
streaming state machine, so live trading dashboards and historical backtests streaming state machine, so live trading dashboards and historical backtests
share the exact same implementation. This package is the WebAssembly binding share the exact same implementation. This package is the WASM binding
(wasm-bindgen, built for the `web` target); it exposes 200+ streaming-first (wasm-bindgen, built for the `web` target); it exposes all 514 streaming-first
indicators across sixteen families. indicators across twenty-four families.
## Install ## Install
@@ -67,10 +67,17 @@ the main repository and documentation site:
- **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org> - **Docs** (quickstarts, cookbook, TA-Lib migration): <https://docs.wickra.org>
- **Runnable browser examples:** [`examples/wasm/`](https://github.com/wickra-lib/wickra/tree/main/examples/wasm) - **Runnable browser examples:** [`examples/wasm/`](https://github.com/wickra-lib/wickra/tree/main/examples/wasm)
Wickra ships native bindings for Python, Node.js, WebAssembly and Rust, plus a Wickra ships native bindings for Python, Node.js, WASM and Rust, plus a
C ABI hub that any C-capable language (C, C++, Go, C#, Java, R) links against — C ABI hub that any C-capable language (C, C++, C#, Go, Java, R) links against —
all exposing the same indicators from the shared, `unsafe`-forbidden Rust core. all exposing the same indicators from the shared, `unsafe`-forbidden Rust core.
## Security
Found a security issue? **Please don't open a public issue.** Report it privately
via the affected repository's *Security* tab (*"Report a vulnerability"*) or email
**support@wickra.org** with a subject line starting `[wickra security]`. Full
policy: <https://github.com/wickra-lib/wickra/blob/main/SECURITY.md>.
## Disclaimer ## Disclaimer
Wickra is an indicator toolkit, not a trading system. The values it computes Wickra is an indicator toolkit, not a trading system. The values it computes
+4 -2
View File
@@ -14,11 +14,13 @@ That includes:
[Java](https://docs.wickra.org/Quickstart-Java), and [Java](https://docs.wickra.org/Quickstart-Java), and
[R](https://docs.wickra.org/Quickstart-R). [R](https://docs.wickra.org/Quickstart-R).
- A per-indicator deep dive for every one of the **514 indicators** across - A per-indicator deep dive for every one of the **514 indicators** across
the sixteen families (Moving Averages, Momentum Oscillators, Trend & the twenty-four families (Moving Averages, Momentum Oscillators, Trend &
Directional, Price Oscillators, Volatility & Bands, Bands & Channels, Directional, Price Oscillators, Volatility & Bands, Bands & Channels,
Trailing Stops, Volume, Price Statistics, Ehlers / Cycle DSP, Pivots & Trailing Stops, Volume, Price Statistics, Ehlers / Cycle DSP, Pivots &
S/R, DeMark, Ichimoku & Charts, Candlestick Patterns, Market Profile, S/R, DeMark, Ichimoku & Charts, Candlestick Patterns, Market Profile,
Risk / Performance) — see the Risk / Performance, Microstructure, Derivatives, Alt-Chart Bars, Market
Breadth, Seasonality & Session, Chart Patterns, Harmonic Patterns,
Fibonacci) — see the
[indicators overview](https://docs.wickra.org/Indicators-Overview). [indicators overview](https://docs.wickra.org/Indicators-Overview).
- **Reference pages**: [warmup periods](https://docs.wickra.org/Warmup-Periods), - **Reference pages**: [warmup periods](https://docs.wickra.org/Warmup-Periods),
[streaming vs batch](https://docs.wickra.org/Streaming-vs-Batch), [streaming vs batch](https://docs.wickra.org/Streaming-vs-Batch),
+2 -2
View File
@@ -48,7 +48,7 @@ three `strategy_*`) build against the bundled datasets and run under `ctest`.
run in CI; run them by hand. `parallel_assets` links OpenMP when the toolchain run in CI; run them by hand. `parallel_assets` links OpenMP when the toolchain
provides it and falls back to a single-threaded run otherwise. provides it and falls back to a single-threaded run otherwise.
## C# / .NET`examples/csharp/` ## C# — `examples/csharp/`
Build the C ABI library first (`cargo build -p wickra-c --release`), then run any Build the C ABI library first (`cargo build -p wickra-c --release`), then run any
example with the .NET 8 SDK; the binding resolves the native library automatically. example with the .NET 8 SDK; the binding resolves the native library automatically.
@@ -173,7 +173,7 @@ cd ../../examples/node && npm install # links wickra + installs `ws`
| `strategy_macd_adx.js` | Hourly BTCUSDT trend-follower: MACD crossover entries gated by ADX(14) > 20. | `node strategy_macd_adx.js` | | `strategy_macd_adx.js` | Hourly BTCUSDT trend-follower: MACD crossover entries gated by ADX(14) > 20. | `node strategy_macd_adx.js` |
| `strategy_bollinger_squeeze.js` | Daily BTCUSDT Bollinger-squeeze breakout with ATR(14) trailing stop. | `node strategy_bollinger_squeeze.js` | | `strategy_bollinger_squeeze.js` | Daily BTCUSDT Bollinger-squeeze breakout with ATR(14) trailing stop. | `node strategy_bollinger_squeeze.js` |
## WebAssembly`examples/wasm/` ## WASM`examples/wasm/`
Build the WASM module first (one-time): Build the WASM module first (one-time):
+2 -2
View File
@@ -1,6 +1,6 @@
# Wickra examples — C# / .NET # Wickra examples — C#
Runnable .NET examples for the [Wickra .NET binding](../../bindings/csharp). Runnable C# examples for the [Wickra C# binding](../../bindings/csharp).
Each example is a small console project that references the `Wickra` project and Each example is a small console project that references the `Wickra` project and
resolves the native library automatically (from `target/release` during local resolves the native library automatically (from `target/release` during local
development, or the NuGet `runtimes/` layout when packaged). development, or the NuGet `runtimes/` layout when packaged).
+2 -2
View File
@@ -1,6 +1,6 @@
# Wickra WASM examples # Wickra WASM examples
Browser demos for the `wickra-wasm` WebAssembly binding. Every demo loads Browser demos for the `wickra-wasm` WASM binding. Every demo loads
the module the same way (`init()` then construct indicators) so the the module the same way (`init()` then construct indicators) so the
patterns transfer one-to-one to your own page. patterns transfer one-to-one to your own page.
@@ -61,4 +61,4 @@ indicators tracks those.
- [Quickstart: WASM](https://docs.wickra.org/Quickstart-WASM) — module-load - [Quickstart: WASM](https://docs.wickra.org/Quickstart-WASM) — module-load
flow, `wasm-pack` targets, and the streaming API. flow, `wasm-pack` targets, and the streaming API.
- [examples/README.md](../README.md) — cross-language index, including - [examples/README.md](../README.md) — cross-language index, including
the Rust, Python, Node, C and C# siblings of every demo above. the Rust, Python, Node.js, C and C# siblings of every demo above.