Skip to main content

Wickra Compile — compile a strategy spec into a standalone deployable

Built on Wickra Status CI CodeQL codecov GitHub release crates.io PyPI npm NuGet Maven Central Go module R-universe License: MIT OR Apache-2.0 OpenSSF Scorecard OpenSSF Best Practices Build provenance Docs Verified across 10 languages Deterministic manifest


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

How it works

A CompileSpec names a StrategySpec, a target (wasm / binary / no_std), an optimisation level and optional embedded data. The codegen core:

  1. validates the spec (the strategy round-trips as a wickra_backtest::StrategySpec; the crate name and MCU triple are checked against an allowlist);
  2. renders a generated Rust project from embedded templates (the spec is embedded as data, never run through the template engine);
  3. emits a deterministic manifest — every file's SHA-256 and length, the canonical spec hash, and the project hash — in stable path order;
  4. 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 (the no_std project, which has no dependencies and compiles in seconds). The golden fixtures in golden/ 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++ through ctest, C# with dotnet test, Go with go test, Java with JUnit, and R with the shipped tests/smoke.R plus the repository's run_tests.R.
  • Examples — every example under examples/ runs in CI and is held to the version and the project_hash it 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-unknown for WASM, a thumbv* target for no_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_std streaming 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

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.


GitHub stars GitHub forks GitHub issues

Built on Wickra. If it saved you time, the cheapest way to say thanks is to ⭐ the repo.

wickra-compile star history

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)

Source distribution for wickra-compile 0.1.3
File Size Uploaded
wickra_compile-0.1.3.tar.gz 60.6 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for wickra-compile 0.1.3
File
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

Release history Release notifications | RSS feed

0.2.0

9 release files

0.1.4

9 release files

This release

0.1.3 This release

9 release files

0.1.2

9 release files

0.1.1

9 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page