Compile a strategy spec into a standalone deployable: a WASM module, a
self-contained binary, or a no_std artifact for microcontrollers. Write once
as data, deploy anywhere.
▶ Live demos: the backtester compiled to WebAssembly, an equity curve building bar by bar — backtest-live.wickra.org; one StrategySpec side by side in Python, Rust, JS and Go — playground.wickra.org; all 514 indicators of the core over a real Binance feed — live.wickra.org. Zero backend, all of them.
Part of the Wickra ecosystem: the same data-driven core and ten-language binding surface also power wickra-exchange, wickra-backtest, wickra-terminal and 20 more — see the full list.
same StrategySpec that
wickra-backtest runs and emits a self-contained project that embeds the spec
and calls the Wickra engine — no interpreter, no runtime spec parsing.
Wickra Compile is the output side of strategy authoring: instead of wrestling
a Pine-like input language, you write your strategy as a StrategySpec (data),
and the compiler generates a standalone Rust project that embeds it verbatim and
targets WASM, a native binary, or bare metal. The generated manifest — the
list of files with their hashes plus the canonical spec hash — is
byte-identical across all ten language bindings and reproducible across runs.
# Print the deterministic manifest for a strategy spec — no toolchain needed.
cargo run -p wickra-compile -- --spec golden/specs/sma_cross.json --manifest
# Generate the project without building it, then inspect it.
cargo run -p wickra-compile -- --spec golden/specs/sma_cross.json --dry-run --out ./out
Status
0.1.4 — the current release. The codegen core, the reference CLI, the ten-language binding surface, the golden corpus and the full CI matrix are in place.
Documentation
- ARCHITECTURE.md — the crates and the codegen pipeline.
- COMPILESPEC.md — the input schema.
- TARGETS.md — WASM / binary /
no_stdand the MCU allowlist. - DETERMINISM.md — why the manifest is reproducible.
- TEMPLATES.md — codegen and injection safety.
- Cookbook.md — practical recipes.
How it works
A CompileSpec names a StrategySpec, a target (wasm / binary /
no_std), an optimisation level and optional embedded data. The codegen core:
- validates the spec (the strategy round-trips as a
wickra_backtest::StrategySpec; the crate name and MCU triple are checked against an allowlist); - renders a generated Rust project from embedded templates (the spec is embedded as data, never run through the template engine);
- emits a deterministic manifest — every file's SHA-256 and length, the canonical spec hash, and the project hash — in stable path order;
- optionally invokes
cargo(argv, never a shell) to build the artifact.
Determinism
The manifest is the golden moat: BTreeMap everywhere in the output path, stable
path-sorted file lists, no RNG, no timestamps, canonical spec serialisation
before hashing. The same CompileSpec + target produces a byte-identical
manifest on every run and in every language binding. (The compiled binary
bytes are only reproducible with a reproducible-build toolchain — that is
best-effort and separate from the manifest guarantee.)
Quickstart
# Print the deterministic manifest for a strategy spec — no toolchain needed.
wickra-compile --spec golden/specs/sma_cross.json --manifest
# Generate the project without building it, then inspect it.
wickra-compile --spec golden/specs/sma_cross.json --dry-run --out ./out
# Retarget the same spec without editing it.
wickra-compile --spec golden/specs/sma_cross.json --target wasm --opt size
Use in any language
The same handle + command_json + version surface ships for Rust, Python,
Node.js, WASM, and — over a C ABI hub — C, C++, C#, Go, Java and R. Each binding
passes the command string through verbatim, so the manifest they return is
identical.
import json
from wickra_compile import Compiler
spec = open("golden/specs/sma_cross.json").read()
out = json.loads(Compiler().command(f'{{"cmd":"compile","dry_run":true,"spec":{spec}}}'))
print(out["manifest"]["project_hash"]) # identical in every binding
See examples/ for the same program in all ten languages.
Project layout
crates/compile-core the library: spec, canonical JSON, codegen, manifest
crates/compile-cli the wickra-compile CLI
crates/compile-bench criterion micro-benchmarks
bindings/* ten language surfaces (c, python, node, wasm, csharp, go, java, r)
golden/ specs + blessed manifests (the cross-language corpus)
examples/ one runnable example per language
docs/ architecture, spec, targets, determinism, templates, cookbook
Building everything from source
cargo build --workspace
cargo test --workspace --all-features
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo run -p wickra-compile -- --spec golden/specs/sma_cross.json --manifest
Each binding builds from its own directory — see the per-binding READMEs under
bindings/. The operating-mode test builds the generated no_std project for
real, so rustup target add thumbv7em-none-eabihf before cargo test.
Testing
Run the suites with the commands in Building everything from source.
wickra-compile-core— unit tests per template and target, canonical determinism (a spec in any key order hashes the same), property tests over specs and the command envelope, and the operating-mode check: the manifest a dry run describes is the manifest a real build builds (theno_stdproject, which has no dependencies and compiles in seconds). The golden fixtures ingolden/are the anchor: every spec must produce the same manifest bytes here as in every binding.- Every binding asserts the same golden manifest and the same
operating-mode equivalence (the WASM build, which carries no toolchain,
checks key-order independence instead of a real build). That is the whole
cross-language claim, so it is checked the same way in each one rather than
approximated per language: Python with pytest (and a plain runner on 3.9),
Node with
node --test, WASM through the nodejs build, C and C++ throughctest, C# withdotnet test, Go withgo test, Java with JUnit, and R with the shippedtests/smoke.Rplus the repository'srun_tests.R. - Examples — every example under
examples/runs in CI and is held to the version and theproject_hashit prints. - Real builds — the nightly build-targets job cross-compiles a generated project per target family (wasm32, thumbv7em) with the CLI.
- Fuzz —
fuzz/holds libFuzzer targets over spec and target parsing, the canonical hash and the codegen; CI runs each for a short smoke.
Requirements
- Rust 1.86+ — the workspace MSRV; the Node binding needs Rust 1.88.
Building a generated artifact additionally needs its target toolchain
(
wasm32-unknown-unknownfor WASM, athumbv*target forno_std). - Python 3.9+ — the Python binding.
- Node 22+ — the Node binding.
- Go 1.23+ — the Go binding.
- Java 22+ — the Java binding.
- R 4.1+ — the R package.
- .NET 8+ — the C# binding.
- A C11 / C++17 compiler with CMake 3.15+ for the C and C++ examples.
See each bindings/<lang>/README.md for the per-language build and install.
Benchmarks
Codegen is pure data templating and hashing — tens of microseconds, no
compilation. See BENCHMARKS.md; reproduce with
cargo bench -p compile-bench.
Ecosystem
Part of the Wickra family — each one a data-driven core with a CLI and the same ten-language binding surface:
- wickra — main library (Rust core + Python / Node.js / WASM bindings + a C ABI for C / C++ / C# / Go / Java / R)
- wickra-playground — a polyglot strategy playground: one StrategySpec live side by side in Python, Rust, JS and Go, entirely in the browser
- wickra-exchange — unified market-data + execution across ten crypto exchanges
- wickra-backtest — event-driven backtester over the Wickra core
- wickra-terminal — the trading terminal: a TUI and a browser renderer over the stack
- wickra-screener — parallel multi-symbol screening over 514 streaming indicators
- wickra-xray — market-microstructure explorer: footprint, order-book heatmap, liquidation map, funding/OI divergence
- wickra-copilot — local market copilot grounded in real order-book, liquidation and funding microstructure
- wickra-shazam — match an asset's current microstructure fingerprint against its entire history
- wickra-benchmark — reproducible, golden-verified benchmark suite — recompute any (strategy, dataset, report) in ten languages and confirm it byte-for-byte
- wickra-strategy-ci — Jest for trading strategies: golden-pin the report, catch regressions in CI, property-test against fuzzed data
- wickra-verify — confirm or refute a claimed backtest report against its strategy and data, in ten languages
- wickra-proof — Proof-of-Backtest: deterministic (spec, data) → report + blake3 hash, recomputable byte-for-byte in ten languages
- wickra-zk — prove a backtest zero-knowledge — on-chain-verifiable performance without revealing the data or the strategy
- wickra-impact — the backtester that knows you would have moved the market: agent-based fills on the real historical L2 order book
- wickra-darwin — evolutionary strategy search at millions of backtests per second, mutating and crossing JSON specs across the 514-indicator space
- wickra-gym — a Gymnasium-compatible, microstructure-aware backtest environment with O(1) steps for deterministic RL rollouts
- wickra-feature-store — OHLCV and microstructure streams into ML-ready feature matrices over 514 O(1) streaming indicators
- wickra-genome — a vector database of the whole market: every asset a 514-dim live vector, for similarity search, clustering and anomaly detection
- wickra-timemachine — scrub the whole market like a video — every symbol, full order book, rewound to any moment via deterministic re-fold
- wickra-synth — deterministic synthetic market microstructure: OHLCV, order book, trades and funding from a single seed
- wickra-radar — a liquidation-cascade early-warning radar over 514 streaming indicators
- wickra-embed — allocation-free,
no_stdstreaming indicators for bare-metal and HFT, byte-for-byte identical to the core - wickra-pico — the O(1) indicator core running bare-metal on a $5 Raspberry Pi Pico — the LED blinks on the EMA cross
Docs at docs.wickra.org; the marketing site and in-browser demo at wickra.org.
Contributing
See CONTRIBUTING.md.
Security
See SECURITY.md and THREAT_MODEL.md. The
compiler generates code and can invoke cargo on it — run it only on trusted
specs.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option. Use it, fork it, modify it, redistribute it — commercially or not — file issues, send pull requests; all welcome.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Disclaimer
Wickra Compile is a code-generation tool, provided "as is" without warranty of
any kind. It generates projects and can invoke cargo to build them — run it
only on specs you trust. Nothing here is financial advice; compiled strategies
are your responsibility, and trading carries risk of loss.
Built on Wickra. If it saved you time, the cheapest way to say thanks is to ⭐ the repo.
Metadata
Release files for wickra-compile 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| wickra_compile-0.1.4.tar.gz | 60.7 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| wickra_compile-0.1.4-cp39-abi3-win_arm64.whl | CPython 3.9 | abi3 | Windows ARM64 | Details |
| wickra_compile-0.1.4-cp39-abi3-win_amd64.whl | CPython 3.9 | abi3 | Windows x86-64 | Details |
| wickra_compile-0.1.4-cp39-abi3-musllinux_1_2_x86_64.whl | CPython 3.9 | abi3 | Linux musl 1.2+ x86-64 | Details |
| wickra_compile-0.1.4-cp39-abi3-musllinux_1_2_aarch64.whl | CPython 3.9 | abi3 | Linux musl 1.2+ ARM64 | Details |
| wickra_compile-0.1.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.9 | abi3 | Linux glibc 2.17+ x86-64 | Details |
| wickra_compile-0.1.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.9 | abi3 | Linux glibc 2.17+ ARM64 | Details |
| wickra_compile-0.1.4-cp39-abi3-macosx_11_0_arm64.whl | CPython 3.9 | abi3 | macOS 11.0+ ARM64 | Details |
| wickra_compile-0.1.4-cp39-abi3-macosx_10_12_x86_64.whl | CPython 3.9 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 3.5 MB
Release files / wickra_compile-0.1.4.tar.gz
| Download URL | wickra_compile-0.1.4.tar.gz |
|---|---|
| Size | 60.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
218ad51e2a86c8603f519d785ccbde427160e48e9ac7304c04243babd01e1d2d
|
|
BLAKE2b-256 checksum How to use checksums |
3454a1626786609bfceb499018f6b2f675ebac6e9589017d664ce14899e24817
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.4-cp39-abi3-win_arm64.whl
| Download URL | wickra_compile-0.1.4-cp39-abi3-win_arm64.whl |
|---|---|
| Size | 327.5 kB |
| Tags | CPython 3.9 Windows ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
04e5327341342e6091102b29b7111b6731b12063c2d9551a0553394a47c087a2
|
|
BLAKE2b-256 checksum How to use checksums |
c49d97860c05249133f005d4028982dd0082774ef1a0af38361e628a5600b82d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.4-cp39-abi3-win_amd64.whl
| Download URL | wickra_compile-0.1.4-cp39-abi3-win_amd64.whl |
|---|---|
| Size | 349.0 kB |
| Tags | CPython 3.9 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
4d142b02ac9dc65ca7b101c927f5502d2e3c067e86774aa43e720beca4315283
|
|
BLAKE2b-256 checksum How to use checksums |
47db686e61474ca893e6a0adff7b76811cb879c959b8152070d8634af5f30f4d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.4-cp39-abi3-musllinux_1_2_x86_64.whl
| Download URL | wickra_compile-0.1.4-cp39-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 637.3 kB |
| Tags | CPython 3.9 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
72cb5b84d376f5f876d128ae41b1a8643a5f0f2bb2c69330feb7382fc14ec00c
|
|
BLAKE2b-256 checksum How to use checksums |
ffdff5eedb0cb50eff68bd83aa859e9a9f8a8a00ca06cbeee4640c8eb19648d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.4-cp39-abi3-musllinux_1_2_aarch64.whl
| Download URL | wickra_compile-0.1.4-cp39-abi3-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 575.7 kB |
| Tags | CPython 3.9 Linux musl 1.2+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
4b70904fd64cf07768b9dc1a3a2abd56e96e4eddf67145cd694008107eea8181
|
|
BLAKE2b-256 checksum How to use checksums |
75d25f99ca41d3969fcc52a6a7701b6a611d23d694c6610dfa1840b09e51f528
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | wickra_compile-0.1.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 425.5 kB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
4ff7ce071dd50d53ce60abbe237ffe438107745b1e3944196cb723242da7d0b2
|
|
BLAKE2b-256 checksum How to use checksums |
28de585ccbc09c6c634ca445c3504b2b031079760256e283f2f6861c3ee33954
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | wickra_compile-0.1.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 398.0 kB |
| Tags | CPython 3.9 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
ba0bf7c5025726a617a228b13852bd217017945ff2e1eea73b9e2aca947ac414
|
|
BLAKE2b-256 checksum How to use checksums |
ba16a79e3a9272014ed189034f5631fc7b3a32da69b7f686e932b7f3e91929c6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.4-cp39-abi3-macosx_11_0_arm64.whl
| Download URL | wickra_compile-0.1.4-cp39-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 367.6 kB |
| Tags | CPython 3.9 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
96574888c893daa6b54ba813cb42430138ea5257c6266313deb00ae265be3389
|
|
BLAKE2b-256 checksum How to use checksums |
db8e6d3a0edae38c28d6ad6fe906e5015a6c5bb046d2dde744100b2bcd5b7d23
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.4-cp39-abi3-macosx_10_12_x86_64.whl
| Download URL | wickra_compile-0.1.4-cp39-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 405.4 kB |
| Tags | CPython 3.9 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
fdf07253e8e0be487a132765e2204fbf9af776cbeb6a7779d582f9f3ce9a1114
|
|
BLAKE2b-256 checksum How to use checksums |
c1e5bda213685489fcaed0ee8404155251c4a6223558f9c83ce8af428034f3eb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|