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.3 — 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.3
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.3.tar.gz | 60.6 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| wickra_compile-0.1.3-cp39-abi3-win_arm64.whl | CPython 3.9 | abi3 | Windows ARM64 | Details |
| wickra_compile-0.1.3-cp39-abi3-win_amd64.whl | CPython 3.9 | abi3 | Windows x86-64 | Details |
| wickra_compile-0.1.3-cp39-abi3-musllinux_1_2_x86_64.whl | CPython 3.9 | abi3 | Linux musl 1.2+ x86-64 | Details |
| wickra_compile-0.1.3-cp39-abi3-musllinux_1_2_aarch64.whl | CPython 3.9 | abi3 | Linux musl 1.2+ ARM64 | Details |
| wickra_compile-0.1.3-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.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.9 | abi3 | Linux glibc 2.17+ ARM64 | Details |
| wickra_compile-0.1.3-cp39-abi3-macosx_11_0_arm64.whl | CPython 3.9 | abi3 | macOS 11.0+ ARM64 | Details |
| wickra_compile-0.1.3-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.3.tar.gz
| Download URL | wickra_compile-0.1.3.tar.gz |
|---|---|
| Size | 60.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5478e71af19aa23deb39d8246271576f94ae1d189da8115d79e9dfe346200d1c
|
|
BLAKE2b-256 checksum How to use checksums |
51e34fa4afb1b1f3f1f068240793d6f0c628fc9c8595a936bd98c96e679f607e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.3-cp39-abi3-win_arm64.whl
| Download URL | wickra_compile-0.1.3-cp39-abi3-win_arm64.whl |
|---|---|
| Size | 326.9 kB |
| Tags | CPython 3.9 Windows ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
e3acdeb035fc70b9e23a57a115f7a996b9504dd8dd36ae03d9c423cc38a32448
|
|
BLAKE2b-256 checksum How to use checksums |
9d13e17864002fe1ea81a7b94406a1d5aa1ef45068e332a18e0ce593ace3ef94
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.3-cp39-abi3-win_amd64.whl
| Download URL | wickra_compile-0.1.3-cp39-abi3-win_amd64.whl |
|---|---|
| Size | 348.8 kB |
| Tags | CPython 3.9 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
34c2ad5e8f932fd1a61f8f058b4ab77e35e32a51082f529fb8f84b27f4eb287c
|
|
BLAKE2b-256 checksum How to use checksums |
42ce8ed8aa682174392793a3e608c0cbd6687f9748b1f2070ce8caa25c595714
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.3-cp39-abi3-musllinux_1_2_x86_64.whl
| Download URL | wickra_compile-0.1.3-cp39-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 637.1 kB |
| Tags | CPython 3.9 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
c7318196b4d08a7ae33f433c82961bcdf2e5c76a763f6ed0eef443d39bba93ad
|
|
BLAKE2b-256 checksum How to use checksums |
55696a36dfb013f5f3aadce45a3adbc2fbfc7ac484f0029720a0e9b1791bbc22
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.3-cp39-abi3-musllinux_1_2_aarch64.whl
| Download URL | wickra_compile-0.1.3-cp39-abi3-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 575.5 kB |
| Tags | CPython 3.9 Linux musl 1.2+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
68b175a41ebcf983dc08a059b7af6060fab59091c47a8999dbd88e3121d8f642
|
|
BLAKE2b-256 checksum How to use checksums |
40d0cb7edc43f4117f8f1b7c2ef98ac782a4a627ec65e2f69c390a686236f75e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | wickra_compile-0.1.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 425.3 kB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
f40f879e5fa595269e4706937cffae25b4edd6cff9e706328a096b08bd00e484
|
|
BLAKE2b-256 checksum How to use checksums |
0226f4ba83b149b29a56f1c45e76b3a5013b99e0621943ae6c9483866cae671e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | wickra_compile-0.1.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 397.7 kB |
| Tags | CPython 3.9 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
e4f075a3a49aebd3376ba1e637e7b3bfce7e7a2c7a43ce08c4e7d339177afc8c
|
|
BLAKE2b-256 checksum How to use checksums |
4dacb76f58674d7c05d707610cd45cf7056ce906b72ae2e6971ac7167d7ec3ab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.3-cp39-abi3-macosx_11_0_arm64.whl
| Download URL | wickra_compile-0.1.3-cp39-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 367.3 kB |
| Tags | CPython 3.9 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
707c9a77132a3d476e9fcd87453e1d02fd4a036d658d87f46f4dffc63a52f865
|
|
BLAKE2b-256 checksum How to use checksums |
464e475b9ab2fe1e8ae295cab9acc04c9efb34fa9edeb1fcb6346ffa6b70e87a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.3-cp39-abi3-macosx_10_12_x86_64.whl
| Download URL | wickra_compile-0.1.3-cp39-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 405.1 kB |
| Tags | CPython 3.9 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
36835ac439e9780446638cd136b010bb2d81672c1efc95ee6490e11cfa36c1ff
|
|
BLAKE2b-256 checksum How to use checksums |
d9c06e1de89d1258308418747d0776463315b5184aef6a125fa0c462103c15f1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|