Wickra Compile
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.
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
StrategySpecthatwickra-backtestruns 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
Early development (0.1.0). The codegen core, the reference CLI, the ten-language binding surface, the golden corpus and the full CI matrix are in place; 0.1.0 is the first published release.
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.
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.
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.
Benchmarks
Codegen is pure data templating and hashing — tens of microseconds, no
compilation. See BENCHMARKS.md; reproduce with
cargo bench -p compile-bench.
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.
Security
See SECURITY.md and THREAT_MODEL.md. The
compiler generates code and can invoke cargo on it — run it only on trusted
specs.
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.
License
Dual-licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT license (LICENSE-MIT)
at your option. Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this work, 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.1
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.1.tar.gz | 58.9 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| wickra_compile-0.1.1-cp39-abi3-win_arm64.whl | CPython 3.9 | abi3 | Windows ARM64 | Details |
| wickra_compile-0.1.1-cp39-abi3-win_amd64.whl | CPython 3.9 | abi3 | Windows x86-64 | Details |
| wickra_compile-0.1.1-cp39-abi3-musllinux_1_2_x86_64.whl | CPython 3.9 | abi3 | Linux musl 1.2+ x86-64 | Details |
| wickra_compile-0.1.1-cp39-abi3-musllinux_1_2_aarch64.whl | CPython 3.9 | abi3 | Linux musl 1.2+ ARM64 | Details |
| wickra_compile-0.1.1-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.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.9 | abi3 | Linux glibc 2.17+ ARM64 | Details |
| wickra_compile-0.1.1-cp39-abi3-macosx_11_0_arm64.whl | CPython 3.9 | abi3 | macOS 11.0+ ARM64 | Details |
| wickra_compile-0.1.1-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.1.tar.gz
| Download URL | wickra_compile-0.1.1.tar.gz |
|---|---|
| Size | 58.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d0be834667c4f488d1df55716190a886c0149a9c57035de9a505afc36c575a5e
|
|
BLAKE2b-256 checksum How to use checksums |
76a781a4fd0e071cfa7ae0661df1c93d382ef81fadd00d306d6c24d22eddcef1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.1-cp39-abi3-win_arm64.whl
| Download URL | wickra_compile-0.1.1-cp39-abi3-win_arm64.whl |
|---|---|
| Size | 326.7 kB |
| Tags | CPython 3.9 Windows ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
c96c3e6dcd8e1044a1eb3e0ce22b2c41b1d24513da11aa9752218d8f96b18a3c
|
|
BLAKE2b-256 checksum How to use checksums |
19b925563e554cf353da85b9233fa2e0996f7649a8cbb09e6f626007fe834412
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.1-cp39-abi3-win_amd64.whl
| Download URL | wickra_compile-0.1.1-cp39-abi3-win_amd64.whl |
|---|---|
| Size | 348.6 kB |
| Tags | CPython 3.9 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
e24518dae27b6b8cc1056e73bdd59b7549a1b4a8c1fce3b5e9461020a9c24363
|
|
BLAKE2b-256 checksum How to use checksums |
6cd66057d12efb1ce7f022271932a2a99259105b8785f4d5203adf09f328c969
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.1-cp39-abi3-musllinux_1_2_x86_64.whl
| Download URL | wickra_compile-0.1.1-cp39-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 636.9 kB |
| Tags | CPython 3.9 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
3d29c4f604a57b2c4a1c9ab062b935f6315480552796cee9bc71a4cde10590fc
|
|
BLAKE2b-256 checksum How to use checksums |
76da786c31d2c6225d55d4e5bd3fd5d2a73c016885aa41c227a2e6de8a03040b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.1-cp39-abi3-musllinux_1_2_aarch64.whl
| Download URL | wickra_compile-0.1.1-cp39-abi3-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 575.3 kB |
| Tags | CPython 3.9 Linux musl 1.2+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
8e8ca4fec7d53ec3139bb13ecb530c665898eae30b49e9823abdd63e0ffd48be
|
|
BLAKE2b-256 checksum How to use checksums |
27cf54a5b77e130870209db39c92d6c212adeee3cc691eaf16f1a2eca4015b42
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | wickra_compile-0.1.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 425.1 kB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
2c040f2ee456e9e62ddd60f64348284b426429469235ccb6268d0eea757495d1
|
|
BLAKE2b-256 checksum How to use checksums |
4ab13ea678b2ece42a19b9733aced0c92b6cf0097451a7c63cc0f628f1cbd606
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | wickra_compile-0.1.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 397.6 kB |
| Tags | CPython 3.9 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
d0125cb4fa1e6e3cf381330f7f8253247fdb40865b5c68a19ec1b1f8955b258b
|
|
BLAKE2b-256 checksum How to use checksums |
25164a82dd197ef5ee0d118004475761be782bc05c6a7da2070bd56002ba753d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.1-cp39-abi3-macosx_11_0_arm64.whl
| Download URL | wickra_compile-0.1.1-cp39-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 367.1 kB |
| Tags | CPython 3.9 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
3d7bdec6fc21dc1101e6496743297c1cbd2a49cae54a3b250416903b22b8469d
|
|
BLAKE2b-256 checksum How to use checksums |
e84b49499d6b4893ddaed75412d491707964e88813d7bbf1878c65f3055872bb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / wickra_compile-0.1.1-cp39-abi3-macosx_10_12_x86_64.whl
| Download URL | wickra_compile-0.1.1-cp39-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 404.9 kB |
| Tags | CPython 3.9 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
f61334089c3ff34a8ce8bdd73aef0cb267f8fbdd66007048ff4a004121652ea1
|
|
BLAKE2b-256 checksum How to use checksums |
9150a1881d689c6cc4f4c357b04d415245668ce43ab4fb2345217788e146d26f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|