One data-driven core
terminal-core folds market events into an O(1) AppState and turns panels into view-models — values, series, colours — never renderer commands. The logic lives in one place.
A streaming trading terminal on the Wickra core — live charts, order-book, tape and 514 indicators — with a native TUI and a Web front-end as selectable renderers of the same logic.
A Config names the sources to activate and the panel layout. The terminal folds each source's feed into an O(1) state and renders the panels as view-models.
{
"sources": [{ "Synth": { "seed": 1 } }],
"layout": {
"panels": [{ "kind": "Chart", "rect": { "x": 0, "y": 0, "w": 100, "h": 100 } }]
}
}Because the config is data, the same terminal crosses the C ABI and WASM unchanged, and the same frame comes back byte-for-byte in every language.
The same terminal core from every language — native Rust, Python, Node.js and WASM, plus a C ABI for C, C++, C#, Go, Java and R.
pip install wickra-terminalBuild a terminal from a config, subscribe a symbol, then pull frames. The command API returns the same bytes in every binding — the Web renderer is just another consumer of these frames.
import json
from wickra_terminal import Terminal
config = json.dumps({
"sources": [{"Synth": {"seed": 1}}],
"layout": {"panels": [{"kind": "Chart", "rect": {"x": 0, "y": 0, "w": 100, "h": 100}}]},
})
term = Terminal(config)
term.command(json.dumps({"type": "Subscribe", "source": 0, "symbol": "BTC/USDT"}))
raw = ""
for _ in range(20):
raw = term.command(json.dumps({"type": "Tick"}))
print(json.loads(raw)["panels"][0])Wickra Terminal is part of the Wickra ecosystem. Its panels are driven by the same typed feeds and indicators that wickra-core, wickra-exchange and wickra-backtest produce, so the terminal shows exactly the numbers a backtest or a live strategy would see.
Wickra Terminal is a software library, not a trading system, and gives no financial advice — use at your own risk.