rustledger
This is documentation for rustledger, and it is a blazing-fast Rust implementation of Beancount.
AI translation
A modular trading engine for perpetual futures — swappable strategies, wallets and data sources, with paper trading by default.
FinanceTypeScript · RustGitHub @SaratAngajalaofflAvailability needs another checkOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Modular trading framework for Mid-Frequency Trading
Translation pending
Loading the full README. The saved excerpt is shown below.
AI-assisted trading for Hyperliquid perpetual futures.
Jeeva is an AI-assisted trading application for Hyperliquid perpetual futures. It watches the market, periodically asks an AI decision model ("Jev") whether a given market should be long, short, or flat, and moves each position to match — either against a simulated paper-trading wallet or a real Hyperliquid wallet.
A dashboard lets you turn markets on/off, tune how often and how aggressively each one trades, choose which decision engine drives it, and watch the resulting decisions, positions, and P&L in real time.Read the full README ↗A modular trading engine, initially built to test trading with Jev. But turned out to be a pretty useful tool that can be extended with other algorithm's for Mid-Frequency trading.
A dashboard lets you turn markets on/off, tune how often and how aggressively each one trades, choose which decision engine drives it, and watch the resulting decisions, positions, and P&L in real time.
MARKET_DATA_TTL_DAYS) are pruned automatically, so history doesn't grow unbounded.long, short, or flat.flowchart LR
subgraph Browser
FE["Next.js Dashboard\n(frontend/)"]
end
subgraph API["Express API (api/)"]
REST["REST endpoints\n/perps, /engine-mode,\n/decisions, /positions ..."]
end
subgraph Engine["Rust Trading Engine (engine/)"]
SUP["Decision Supervisor\none task per trading-enabled PERP"]
DM["DecisionMaker\n(Fake / TypeSafe Jev / OpenRouter Jev)"]
EXEC["ExecutionAdapter\n(Mock or Live)"]
SAMP["Market-Data Sampler"]
end
Mongo[("MongoDB\nperpConfigs, engineConfig\n(watched live via change streams)")]
PG[("TimescaleDB / Postgres\nmarket data, decisions,\npositions, funding history")]
HL["Hyperliquid\n(market data + order API)"]
Jev["Jev\n(TypeSafe System One model,\ndirect or via OpenRouter)"]
FE <--> REST
REST -->|read/write PERP & mode config| Mongo
REST -->|read history for charts| PG
Mongo -->|change streams,\nno restart needed| SUP
Mongo --> SAMP
SUP --> DM
DM -->|market state summary| Jev
Jev -->|target direction| DM
SUP --> EXEC
EXEC -->|mock: simulate fill| PG
EXEC -->|live: real order| HL
SAMP -->|price / OI / volume / spread| HL
SAMP --> PG
SUP -->|decision log, health| PG
frontend/ — the operator dashboard (Next.js). Lists markets, shows live price/positions/health, and is where you enable trading/sampling per PERP, pick a PERP's decision maker, and flip the engine between mock and live execution. Its API URL is resolved at runtime from the container's API_URL (served to the browser from /runtime-config), so one built image can be reused across instances pointing at different API backends.
api/ — a small Express service that mediates between the dashboard and the shared state: PERP configuration and engine mode live in MongoDB; market data, decisions, positions, and funding history live in TimescaleDB (used as plain Postgres).
engine/ — the always-running Rust process that actually trades. It watches MongoDB for configuration changes and, for every PERP with trading enabled, runs an independent loop on that PERP's configured frequency. Nothing here requires a restart to pick up a config change (enabling a market, changing its frequency/leverage/decision maker, flipping mock/live) — every loop iteration reads the latest config fresh.
Each tick of a trading-enabled PERP's loop does the following, in order:
ExecutionAdapter.| Current | Target | Action |
|---|---|---|
| flat | long/short | open |
| long/short | flat | close |
| long | short (or vice versa) | close, then open the opposite side |
| long/short | same direction | no-op (no pyramiding) |
ExecutionAdapter — a simulated fill in mock mode, a real signed Hyperliquid order in live mode.This is the beginning of the README. Read the rest at the original. Read the full README ↗