OpenTraderWorld

MCP server built into a self-hosted trading workspace: journal, backtests, portfolios, news.

Documentation

OpenTraderWorld

Your trading workspace, on your own machine.

Website License Docs Docker Compose

A free, self-hosted platform that bundles the tools traders and investors actually use: trading journal, market data and backtesting, portfolios, news, planning. Your data stays on your machine. And if you want it, your own AI agent runs the whole thing alongside you.

Website · Documentation · Install in 2 minutes · Module tour · Suggest a feature · Hosting it

▶ Try the live demo

No account, no install, already full of realistic data. It is a shared sandbox, wiped every 15 minutes.

Charts: a Pine Script indicator added from the library, then a trend line drawn on BTCUSDT, in a 2×2 workspace

Nobody needs a new Bloomberg Terminal

Every few weeks another product promises to be "the Bloomberg Terminal for the rest of us". It is the wrong target, because Bloomberg does not sell software.

  • A Bloomberg Terminal costs roughly $30,000 per user per year, on two-year contracts. LSEG Workspace, ex-Refinitiv Eikon, sits around $22,000 for the full tier.
  • What that money buys is immediacy and access: news in under a second, dealer runs, liquidity, and a closed chat network holding the people on the other side of your trade.
  • The screens, the charts, the functions are the wrapper. Nobody signs a $30k contract for the UI.

OpenTraderWorld is not trying to be the next Bloomberg Terminal. It is the workspace around your own decisions: your journal, your portfolios, your backtests, your research, your automations, enhanced by your favorite AI model. Free, on your machine, with the data providers you already pay for (or the free ones).


Why OpenTraderWorld?

  • 🆓 Free. No subscription, no paywall, no "pro tier". Free for everyone, whether you trade for a living or on the side. The idea behind it: get profitable before spending a dime.
  • 🔒 Private and self-hosted. It runs on your computer or your server with Docker. No account, no cloud, no telemetry. Right after install it only answers on localhost, until you decide otherwise.
  • 🧩 Modular. 25+ modules. Install what you use, detach the rest.
  • 🔁 Updated constantly. New modules and improvements land regularly. The app tells you when a version is out, updating is a couple of commands it shows you, and your data always survives the upgrade.
  • 🗳️ Built with its users. Feature ideas come from the people using it. Suggest yours, vote on other people's, watch the roadmap move. See Contributing ideas.
  • 🌍 7 languages. English, French, German, Spanish, Italian, Portuguese, Chinese.
  • 🤖 AI built in, on your terms. There is a built-in assistant that chats with your own data. You bring the provider (Anthropic, or any OpenAI-compatible endpoint), and it gets memory, skills and tool access scoped by token. There is also a built-in MCP server, so external agents can read or update your modules through that same token-scoped gateway. Both are off until you turn them on. Your keys are encrypted at rest and never reach the browser.
  • ⚙️ Automate as much or as little as you like. The automator turns your routines into scheduled workflows: imports, reports, market scans, alerts, daily reviews. Any of them can hand a step to your own AI model, or be driven by it from end to end. You stay in charge the whole way: nothing runs, sends or writes anything you did not switch on yourself.
  • 🔑 Secrets stay sealed. An encrypted Vault holds the credentials the app needs on your behalf. Encrypted at rest, write-only once saved, and plugged into any module by reference so you never paste them twice.

Quick start

You need Docker (macOS, Linux or Windows).

curl -fsSL https://raw.githubusercontent.com/G-OTW/OpenTraderWorld/master/install.sh | bash

The installer asks a few questions, generates strong secrets, pulls the prebuilt images and starts the stack, creates your admin account and prints its password once. Then open http://localhost:5454 and sign in. If you want the long version (manual setup, headless servers, LAN/HTTPS/public exposure, backups), it is all in the documentation.

[!TIP] Prefer to be walked through it? The guided install on the website takes you through it step by step.

Guided install, step by step

If the page won't load over plain HTTP. Browsers with HTTPS-only mode (Chrome/Edge HTTPS-First, Firefox HTTPS-Only, Safari) rewrite http:// into https:// and then cache that redirect, so a LAN install answers nothing at all. Open the address in a private window to confirm that is what is happening, then allow HTTP for that host. Or switch to the LAN + HTTPS mode in Settings → Network and get a real certificate.

A look inside

Every image below is the real app, captured from a local install. Prices, news and backtests are real; the journal, portfolio and fundamentals figures are sample data. The images follow your GitHub theme, light or dark, except the Agent clip, recorded in dark.

Dashboard

Workspaces for each hat you wear (investor, trader, quant, portfolio), built from widgets: net worth, positions, live quotes, headlines, upcoming macro releases, goals. Rearrange them or add your own.

Dashboard: switching between the Investor, Trader, Quant and Portfolio workspaces

Charts

Up to twelve linked charts per workspace, drawing tools, built-in studies and alerts. Paste a Pine Script v5/v6 indicator once, keep it in your library, and add it to any chart.

Trade from the chart (experimental): send, move and cancel orders and close positions on Interactive Brokers, Binance, Binance USDⓈ-M Futures and the app's own paper trading account, with your own risk limits and a kill switch. A live account takes orders only once you turn live trading on for it, with its limits set. See Trading from the chart.

[!WARNING] Chart trading is new. It is heavily tested, against simulated venues and the brokers' own test environments, but bugs can remain. Check every order at your broker, start small, and trade at your own risk.

Charts: a 2×2 workspace with BTCUSDT, ETHUSDT, NVDA and AAPL, each with its own indicators

Backtest

Load a saved strategy, pick a dataset, run. The report puts every trade on the chart, with the figures that matter next to buy and hold. Shown here: an EMA 21/55 crossover on ten years of AAPL daily bars, +375% against +1,217% for buy and hold. The engine does not flatter a strategy.

Backtest: loading a strategy, adding the AAPL dataset, running it and reading the report

Agent

Ask in plain language and your own AI agent does the work inside the app. Here, a 10-year MACD backtest on AAPL, from loading the data to out-of-sample checks and a verdict against buy and hold. Bring your own provider, and per-module permissions decide what it can touch.

Agent: the assistant runs a full AAPL backtest through its tools, then writes the verdict against buy and hold

Trading Journal

Your trades with their equity curve, win rate, profit factor, Sharpe and drawdown, filtered by side, ticker, strategy, class or tag. R-multiple analytics, behaviour patterns and a PnL calendar sit one click away.

Trading Journal: equity curve and performance statistics

Portfolio Tracker

Holdings priced daily, cost basis, unrealized and realized P/L, allocation by asset or class, and the full ledger of operations behind them.

Portfolio Tracker: value history, allocation donut and holdings table

Quant Tools

The risk profile of any stored dataset: volatility, drawdown, value at risk, expected shortfall and the return distribution. Then correlation, efficient frontier, position sizing and derivatives in the next tabs.

Quant Tools: BTCUSDT risk metrics, drawdown curve and return distribution

Fundamentals

Macro series from central banks and statistics offices, charted together with recession shading. Company statements, filings, ETFs, a market calendar and alternative data live in the next tabs.

Fundamentals: US CPI and the Fed funds rate on one macro chart

News

Your RSS and JSON-API feeds in one stream, polled on a schedule, searchable and filterable by source.

News: market headlines from CNBC, Bloomberg, MarketWatch, CoinDesk and central banks

Automator

Chain blocks into a workflow: a call to the app's own API or any URL, an AI step, a condition, a notification. Put it on a schedule and read every run afterwards.

Automator: opening the Pre-market briefing workflow, its AI step, then the run history

Trading Routines

Pre-market, in-session and review checklists, each step with its own how-to, tracked by week, month and year.

Trading Routines: pre-market, execution and review checklists for the day

Upgrading

Settings → Update app tells you when a new version is out. The app cannot update itself (it has no shell or Docker access, by design), so run these on the host. Take a database backup first; migrations run automatically on the new container's first boot.

A default install (prebuilt images, no git checkout) refreshes deploy/ from the latest release (the public master), then pulls the new images. Your .env, network.env and dns.env are left alone.

cd /path/to/opentraderworld
TMP=$(mktemp -d)
curl -fsSL https://codeload.github.com/G-OTW/OpenTraderWorld/tar.gz/master | tar -xz -C "$TMP"
cp -R "$TMP"/*/deploy/. deploy/
rm -rf "$TMP"
docker compose -f deploy/docker-compose.yml -f deploy/docker-compose.images.yml \
  --env-file deploy/.env --env-file deploy/network.env \
  pull
docker compose -f deploy/docker-compose.yml -f deploy/docker-compose.images.yml \
  --env-file deploy/.env --env-file deploy/network.env \
  up -d

A source build (installed with --build, from a full clone) refreshes the checkout and rebuilds. Releases are fresh snapshots, so reset to the release rather than git pull. git reset --hard discards any local edits to tracked files.

cd /path/to/OpenTraderWorld
git fetch origin
git reset --hard origin/master
docker compose -f deploy/docker-compose.yml \
  --env-file deploy/.env --env-file deploy/network.env \
  up -d --build

Try it without installing

There is a public sandbox at demo.opentraderworld.com, also linked from the website. No account, no install, and it comes seeded with realistic data so you land in an instance that looks used rather than empty.

One thing to keep in mind: it is shared. Everything you type is visible to other visitors, the whole database is wiped and re-seeded every 15 minutes, connectors are read-only, and settings, the Vault, broker accounts, notification channels and paper trading are disabled. It runs on a small free-tier server with free AI models, so it is slower than a local install. For anything real, install it. Two minutes.

What's inside

Every module ships with the app. Install what you use, detach the rest.

Trading

ModuleWhat it does
Trading JournalTrade log with templates, fee schedules, multi-currency FX and performance stats.
Trading RoutinesRecurring session checklists: pre-market prep, in-session discipline, post-market review.
MindsetDaily mood and discipline check-ins, with a progress dashboard compared to your journal.

Market data and analysis

ModuleWhat it does
Historical DataDownload OHLCV history from several providers into local datasets, or import your own file.
Charts18 chart types (candles, Heikin Ashi, Renko, Kagi, point & figure…) with indicators, Pine Script v5/v6 compatible scripts and alerts, live or on demand, on any instrument a connector serves.
BacktestSignal, grid and DCA strategies with sizing, costs, an optimizer and paper trading forward.
Quant ToolsRisk and return analytics: VaR, correlation, efficient frontier, position sizing, Kelly.
OptionsOption chains from Interactive Brokers, Massive or Alpaca, American pricing with cash dividends, and a multi-leg builder with payoff, margin estimate and assignment warnings. For analysis: no orders are sent.
ScannerWatches instruments and hives of them with reusable signals, events and candlestick patterns on each closed bar, shows them on boards and notifies the hits.
FundamentalsMacro series, company statements, SEC filings, transcripts, ETFs, a market calendar and alternative data from primary sources and the aggregators you connect.

Portfolios and money

ModuleWhat it does
WatchlistsSymbol watchlists with live prices, day changes, sparklines and notes.
Portfolio TrackerLive portfolio value with a buy/sell ledger and holdings priced daily.
MyWealthNet worth across everything you own: accounts, property, crypto, valuables.
Managers' PortfoliosSuperinvestor 13F holdings, browsable and snapshotable.
Tax CalculatorTrading and investing tax estimates from country templates.
SubscriptionsYour recurring subscriptions and what they cost you.

News and research

ModuleWhat it does
NewsRSS and JSON-API news aggregator with polling dashboards.
MailboxNewsletters, market news and broker mail read from your own IMAP mailbox, tracker-free.
Economic CalendarUpcoming macro events.
FinanceDatabaseSearch 300,000+ instruments locally, and file your favorites in folders.
ResourcesBookmark library for books, links and references.
Community DocsGuides written by the community, synced and readable offline.

Notes and organization

ModuleWhat it does
EditorRich document editor with folders and table/kanban/gallery databases.
ToDoTask list with due dates and categories.
GoalsGoals with metric tracking and deadlines.
CalendarPersonal event calendar, with reminders, todos and goals overlaid on it.
RemindMeReminders with in-app notifications and email/Telegram/Slack/Discord channels.
Time TrackerProject timers with budgets and hourly-rate value.
Prompt StoreSearchable library of reusable AI prompts, tagged, rated and versioned.
WebhooksPrivate inbound URLs that turn external alerts into notifications or Automator runs.
AutomatorScheduled workflows: call your own API or any URL, ask an AI step, transform, notify.

AI

ModuleWhat it does
AgentBuilt-in AI chat assistant. Bring your own provider, switch model or prompt mid-conversation, and let it act on your data through MCP, with memory, skills and external MCP servers. Reachable from a floating chat on every page.

The full tour, with details, is in the module docs.

Backtesting: signals, grid, DCA

One engine, three ways to describe a strategy. No code.

  • Signals. Entry and exit rules from indicators, price and values, long or short, with stops, pyramiding, and sizing by fixed quantity, percent of equity, risk per trade, Kelly or equity tiers. Build your own indicators, and the chart draws the same ones.
  • Grid. A ladder of levels between two bounds, long, short or neutral. Each cell buys low and sells one level up.
  • DCA. A weighted basket bought over time, never rebalanced: recurring contributions, buy tranches on a dip, sell rules on a gain objective. Measured like a savings plan, with IRR and a deposit-adjusted drawdown.

Run any of them on one instrument or a whole portfolio, with exposure limits and a per-asset breakdown.

Optimizer

Take a run and vary its parameters: indicator lengths, thresholds, stops, sizing, costs, portfolio limits, grid settings, DCA amounts, excluded weekdays. Each gets a from / to / step.

  • It prices the job first, from what past runs measured on your own machine. Stop at any point and keep what is computed.
  • Rank on Sharpe, Sortino, return, net PnL, profit factor, win rate, expectancy, average trade, drawdown or trades. Any column re-sorts after, except the out-of-sample return: it is shown, never ranked.
  • The spread matters more than the winner: worst, average, best, and how many variants came out positive. One good number surrounded by terrible neighbours is noise.
  • A multiple-testing haircut puts the best Sharpe against the bar the best of N worthless strategies would clear anyway. Below it, the winner is explained by the number of tries.
  • Click any variant to read its full backtest. Nothing is stored until you keep it.

Add an in-sample / out-of-sample split and the two stat blocks sit side by side. A wide gap between them is overfitting.

Paper trading: the backtest, left running forward

Press one button on a run you like and it keeps going on new candles. There is no second engine and no serialized simulator to drift: each tick reloads the window, runs the ordinary backtest, and diffs the trades against what is already stored. A session opened from a result reproduces that result exactly.

  • Its own schedule: every N minutes, daily, weekly, monthly or once, in your timezone.
  • Live alerts on entries and exits, or a period summary instead. Alert on every tick, only when something changed, or never.
  • Summary cadence: on each tick, hourly, daily or weekly. Entry and exit alerts always leave on the tick that produced them; turn them off to get only the summary.
  • Your wording, not ours. Entry, exit and summary messages are templates you write, with a preview against a sample trade before you save.
  • Anything the app could not deliver waits in the session inbox. You read it at the next login.

Filter alerts down to the tickers you care about, and pick which channels a session pushes to.

Data connectors

One connector list for the whole app. A connector is a provider account, its credentials (typed in or plugged from the encrypted Vault, write-only once saved), an optional request limit, and the modules allowed to use it. Modules have no provider settings of their own.

ProviderCredentialsAsset typesSymbol searchLive stream
Binancenonecrypto spotyesyes
Binance USDⓈ-M Futuresnonecrypto perpetuals and futuresyesyes
Bitfinexnonecrypto spot and perpetualsyesyes
Bitgetnonecrypto spot and USDT-M futuresyesyes
Bybitnonecrypto spot, perpetuals and futuresyesyes
Bybit EUnonecrypto spotyesyes
Coinbasenonecrypto spotyesyes
Deribitnonecrypto spot, perpetuals, futures and optionsyesyes
Gate.iononecrypto spot and perpetualsyesyes
Krakennonecrypto spotyesyes
KuCoinnonecrypto spotyesyes
KuCoin Futuresnonecrypto perpetuals and futuresyesyes
MEXCnonecrypto spot and perpetualsyesyes
OKXnonecrypto spot, perpetuals and futuresyesyes
Yahoo Financenoneequity, ETF, index, cryptoyesno
Alpha VantageAPI keyequity, ETFyesno
EODHDAPI keyequity, ETF, FX, cryptoyesno
Alpacakey + secretequity, crypto, optionsyesyes (based on your broker subscription)
Massive (Polygon.io)API keyequity, ETF, options, futures, crypto, FX, indexyesyes (paid plan)
OANDAAPI token + account idFX, CFDsyesno
TradeStationOAuth: client id, secret, refresh tokenequity, ETF, options, futures, indexby symbolno
FOREX.com (StoneX)username + password + AppKeyFX, CFDsyesno
Capital.comAPI key + identifier + passwordFX, indices, shares, crypto (all CFDs)yesyes
Interactive Brokersnone (your own gateway)equity, ETF, crypto, FX, index, futures, optionsyesyes (based on your broker subscription)

Every provider connects directly, with an API key or none at all. Interactive Brokers is the exception: you run IB Gateway or TWS yourself and the connector stores a host and a port. OANDA, TradeStation, FOREX.com and Capital.com are broker feeds: they read the prices of the account you already have there, so they ask for that account's credentials. Details in the connectors guide.

Live feeds

Every timeframe a provider downloads, it also streams, daily and weekly included. A provider that publishes one grain (Alpaca, Massive, Interactive Brokers) has the larger timeframes folded from it, and a session-shaped candle (daily, weekly) is re-read from the provider once it closes.

ProviderPrice updates fromBest bid / ask
Binance, Binance USDⓈ-M Futurescandlesyes
Bitfinex, Bitget, Bybit, Bybit EU, Deribitcandlesyes
Gate.io, Kraken, KuCoin, KuCoin Futures, MEXC, OKXcandlesyes
Coinbasetradesyes
Capital.combid and ask candles, charted at their midyes, from the candles
Alpacaone-minute bars (trades on options)yes
Massiveone-minute aggregatesyes, a separate Massive plan; none on indices
Interactive Brokerstrades (midpoint on cash FX and crypto, five-second bars on options and indices)yes, none on indices

OANDA, TradeStation and FOREX.com download history but do not stream: their live prices are not served over a WebSocket. A chart can draw the live best bid and ask as two lines, and paper trading fills on them.

Missing a provider? Ask for it and it gets added.

Broker accounts

A broker account links to the place you trade, and only reads by default. It imports your fills into the journal, aligns a portfolio on what the account holds, draws positions and working orders on the chart, and reads a tax year. It sends orders only where the broker takes them and you turn Trading on for the account (experimental).

BrokerReadsTrading from the chart
Interactive Brokers (Gateway)recent fills (chart markers), positions, orders, accountyes, experimental (live and paper accounts)
Binancefills, orders, holdings, accountyes, experimental (live and Spot Demo Mode)
Binance USDⓈ-M Futuresfills, positions, orders, margin balancesyes, experimental (live and futures testnet)
Paper trading (simulated, run by the app)fills, positions, orders, accountyes
Alpacafills, positions, orders, holdingsno
Bitfinex, Bitget, Bybit, Deribit, Gate.io, MEXC, OKXfills, positions, orders, holdingsno
Bybit EU, Coinbase Advanced Trade, Kraken, KuCoinfills, orders, holdingsno
KuCoin Futuresfills, positions, ordersno
OANDA, TradeStation, FOREX.com (StoneX), Capital.com, NinjaTraderfills, positions, orders, holdingsno
Interactive Brokers (Flex)fills, positions, holdingsno

Where a broker issues a view-only key, the form asks for that one. Journal imports from Interactive Brokers go through the Flex account. A live account trades only once you turn Live trading on for it, which requires a size limit per order, a size limit per position and a loss limit. Details in the broker accounts guide.

Fundamentals

Macro series, company statements, SEC filings, earnings-call transcripts, ETF holdings, a market calendar and alternative data, read from the sources that publish them and stored in your own database. Every source is a data connector granted to the module; nothing is fetched until you add one. When several providers serve the same data, they are tried in the order you set.

ProviderKeyWhat it serves
SEC EDGARnonestatements, filings, insider trades
FRED (St. Louis Fed)freemacro series
US Treasurynoneyield curve, public debt
ECB, Eurostatnoneeuro-area macro series
BISnonecentral-bank policy rates, effective exchange rates
OECD, IMF, World Banknoneleading indicators, World Economic Outlook, country data
BLS, BEA, EIA, US CensusfreeUS macro detail
CFTCnoneCommitments of Traders
FINRAnoneshort interest
Financial Modeling Prepfree tier (holders and transcripts: Ultimate plan)estimates, earnings, segments, dividends, holders, peers, ESG, ETF, calendar, transcripts
Finnhubfree tier (estimates, ESG, transcripts, congress trades: premium)estimates, earnings, peers, ESG, calendar, transcripts, congress trades
Alpha Vantagefree tierestimates, earnings, dividends, ETF, calendar, transcripts
EODHDpaiddividends, ETF, calendar
Massive (Polygon.io)free tierdividends, short interest
USAspendingnonegovernment contracts
LDA.govfreelobbying
USPTO Open Data Portalfreepatents
Quiver Quantpaidcongress trades, lobbying, contracts, patents

Prices and market ratios come from any market-data connector with daily equity bars. Details in the Fundamentals guide.

Notifications

These are the notification methods available today. More are planned: if your preferred one is missing, ask for it.

ChannelWhat you provide
Emailyour own SMTP server
Telegrama bot token and a chat id
Slackan incoming webhook URL
Discordan incoming webhook URL

Secrets are sealed on save and never shown again. What can notify you: chart alerts and broker reconcile notices, paper trading sessions, watchlist alerts, reminders, finished or parked data downloads, fundamentals refreshes, new mail, journal, portfolio and tax imports, live feed outages, sign-in alerts, inbound webhooks, and any automator workflow. Everything is off until you switch it on, and in-app notifications work without configuring a single channel.

Voice control

Push to talk, never always listening: the microphone opens while you hold a shortcut (or click the mic in the top bar) and closes when you release.

  • Command mode (Alt+V): what you say becomes a plan. "open journal" works out of the box in seven languages; anything no command matches can go to the AI agent.
  • Dictation mode (Alt+Shift+V): what you say is typed into the focused text field, never read as a command.
  • Voice commands: a phrase you choose runs a sequence of steps (open a page, ask the agent, run an Automator workflow, switch theme, hide figures, speak a sentence). Say several in one go, "turtle, then open settings", and they run in order.
  • Confirmation first: every plan is shown before it runs, unless you mark a command to skip it (off by default). A phrase fires only on its own, never as a word inside a sentence.

Speech engines work like the other brokers: one list in Settings → Voice, keys sealed or plugged from the Vault.

EngineSetupWhere the audio goes
This browsernone (Chrome, Edge, Safari)the browser vendor's speech service
Self-hosted Whisperoptional bundled service, --profile voicestays on your machine
whisper.cppyour own serverstays on your server
OpenAI, GroqAPI keythat provider
Any OpenAI-compatible serverURL, model, optional keythat server

The browser only allows the microphone over HTTPS or on localhost. Details in the voice control guide.

⭐ Enjoying it? Help it grow

OpenTraderWorld is free and built in the open. If it is useful to you, the easiest way to give back costs nothing:

  • Star the repo. It is a quick signal, and it helps other people find the project.
  • Share it. A word to a fellow trader, a link in your community, a mention anywhere. It helps more than you would think.

No pressure. Even just trying it out and telling a friend means a lot. 🙏 Got ideas, or found a bug? See Suggest, vote, contribute below.

💡 Suggest, vote, contribute

This project grows on user feedback:

  • Suggest a feature or a module. Head to opentraderworld.com/suggestions and describe what you are missing and how you would use it.
  • Vote. 👍 the suggestions you want most on the website. Popular requests get prioritized.
  • Report bugs. Open an issue with the symptom and a few log lines.
  • Write for the community. Guides written in the app's Editor can be submitted for publication in the shared Community Docs library, where every install can read them.

Project links

WhereWhat you'll find
opentraderworld.comProject home: module overview, community guides, roadmap voting, demo.
opentraderworld.com/toolsThe 25+ modules by domain, in plain language.
opentraderworld.com/docsCommunity Docs: trading guides written by users, synced into every install.
opentraderworld.com/hosting/setupGuided install, step by step.
opentraderworld.com/suggestionsSuggestions and polls: propose features, vote on the roadmap.
demo.opentraderworld.comLive shared demo, reseeded every 15 minutes.
DocumentationInstall, configuration and module reference.
GitHubSource, releases, issues.

Under the hood

LayerTech
Backend / coreRust (Axum): API, scheduler, background jobs
FrontendSvelteKit single-page app
DataPostgreSQL, the only place your data lives
Reverse proxy / TLSCaddy, automatic HTTPS certificates
DeploymentDocker Compose, non-intrusive and quickly rebuilt
OpenTraderWorld/
├── install.sh     # one-command installer (fetches deploy/, runs setup)
├── deploy/        # docker-compose stack, setup.sh, Caddy config
├── core/          # Rust workspace (API, store, scheduler, feeds…)
├── frontend/      # SvelteKit app (modules UI)
├── docs/          # documentation site (VitePress)
├── scripts/       # validation and parity checks
└── testbook/      # non-regression run against a throwaway instance

Status

Actively developed. It is usable today and moving fast. Check Settings → Update app in the app to know when a new version is out.

Disclaimer

This software is for educational and informational purposes only. It is not financial, investment, or trading advice. USE IT AT YOUR OWN RISK. The author and any affiliates accept no responsibility for your trading or investment results, or for any loss or damage arising from use of this software. Never risk money you cannot afford to lose. There will be bugs: the software is provided "as is", without warranty of any kind. You alone are responsible for how you use it and for the decisions you make with it.

License

FSL-1.1-MIT (Functional Source License). Free for everyone, including commercial use, self-hosting at work, modification, redistribution and forks. The one thing it does not grant is a Competing Use: selling the software, or offering it to others as a paid product or a hosted service. Each release turns into plain MIT two years after it is published.