Shioaji Pro: an AGPL-3.0 trading terminal for TWSE, TPEX and TAIFEX built on the Shioaji HTTP API
Shioaji Pro — professional trading terminal for Taiwan markets (TWSE/TPEX/TAIFEX) built on the Shioaji HTTP API: real-time SSE quotes, candlestick charts with click-to-trade & drag-to-reprice, flash order ladder, stop/take-profit triggers, customizable drag-and-drop workspace
At a glance
- What is it?
- Shioaji Pro is a React 19 and TypeScript trading terminal for Taiwan markets that talks straight to a local shioaji server over HTTP and SSE, with no backend code of its own. The interface is fully open source under AGPL-3.0, while the Tauri desktop shell, the AI Agent and the backtester are release-only modules.
- Who is it for?
- Use Shioaji Pro if you already hold a Sinotrade account with a Shioaji API key and want a Taiwan market terminal whose order chain you can read end to end, and start with shioaji server start so you are in simulation mode with the badge showing. Do not rely on it for stop protection, because the README states the chart stop-loss and take-profit triggers are client-side and only monitored while the page is open.
- Can I use it commercially?
- Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
- Is it still maintained?
- Yes. The repository last received commits 3 days ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 17, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What Shioaji Pro is, and the split between repo and release
Shioaji Pro is a trading terminal for the Taiwan markets, TWSE, TPEX and TAIFEX, built on the Shioaji HTTP API and its server-sent event stream. The front end is React 19, TypeScript and Vite, and the README states plainly that there is zero backend code: the app talks directly to a local shioaji server. What is in this repository and what is in the releases are two different things. The interface, the quote streaming and the order chain are all here, and a clone builds the complete web terminal, with CI validating it. The Tauri desktop shell, the AI Agent and the strategy backtester are separate modules that you download as installers from Releases. That split matters if you intend to modify the project, because the parts you cannot see are the parts you cannot fork.
Zero backend code, React 19 against a local server
The architecture is a browser app against a local broker gateway. Quotes arrive as a single SSE connection carrying ticks and the five-level order book, and the watchlist flashes only on real trades rather than on test matches. Historical K-line data comes from lightweight-charts v5 with intervals of 1m, 5m, 15m, 60m and 1D, live ticks update the current bar, and dragging left auto-loads older bars up to three years back. Layouts are built with react-grid-layout v2, so panels can be moved, resized, added, popped out into separate windows for multi-monitor setups, saved under a name and reloaded. Theming is vanilla-extract, with dark, pure black and light themes, a choice of red-up-green-down or green-up-red-down, and adjustable font size.
Installing the web terminal
You need a Sinotrade brokerage account with a Shioaji API key and secret, created from the API management page the README links to, plus Node.js 20 or newer and pnpm. The server side is a separate CLI.
uv tool install shioajiCopy the example env file and fill in the two credential fields. The file warns that .env is gitignored and must not be committed.
cp .env.example .envStart the server. It defaults to simulation mode, so orders placed against it do not use real money, and it listens on http://127.0.0.1:8080.
shioaji server start
shioaji server checkThen the front end. The dev server proxies /api through to localhost:8080.
pnpm install
pnpm devOpen http://localhost:5173. Switching to production is shioaji server start --production, which the README says requires CA certificate setup first and should only be done after fully testing in simulation. There is also a deployment path where the shioaji server itself hosts the built bundle.
VITE_BASE=/apps/shioaji-pro-app/ pnpm build
cd dist
ARGS=(); for f in *; do ARGS+=(-F "files=@$f"); done
curl -X POST http://localhost:8080/api/v1/apps/shioaji-pro-app "${ARGS[@]}"The uploaded app is held in server memory, so it has to be uploaded again after the server restarts.
Click-to-trade, drag-to-reprice and the order chain
Ordering is wired into the chart rather than kept in a separate form. Clicking a price level on the chart places a limit order, stop-loss and take-profit levels can be hung on the chart as dashed lines and cancelled, unfilled orders show as solid lines with a CANCEL button, and dragging an order line reprices it. The crosshair price syncs into the order panel as you hover. The flash ladder puts buy on the left column and sell on the right, with a safety switch, and a full-open option tiles several flash panels across the top N watchlist symbols. The order panel covers whole and odd lots, ROD, IOC and FOK, futures position types and daytrade_short, with two-step confirmation against misclicks. Combo orders for futures and options are supported with T-quote linkage and price monitoring that sends the order when the level is reached.
Custom indicators, the JS sandbox and backtesting
There are 21 built-in indicators, overlays such as moving averages, channels, SAR and SuperTrend, and oscillators such as MACD, RSI and KD, with a TradingView-style picker, per-indicator settings and a live legend. Beyond those, the app lets you write your own in JavaScript inside a panel, using a ta.* function library and declaring outputs with plot() and hline(). User code runs in a Web Worker sandbox that blocks infinite loops, and detected output lines get the same treatment as built-ins, including settings, styling and favourites. Strategy backtesting uses the same ta library and is desktop-only: it models fees, the securities transaction tax, the futures transaction tax and slippage, takes signals at the close and fills at the next open so there is no lookahead, and marks entries and exits directly on the chart.
The safety model and where it stops
The safety model is worth reading before you place anything. The server defaults to simulation, and the top bar shows a simulation badge, while production shows a red one. Flash ordering is locked by default and has to be enabled by hand, and chart click-to-trade is one-shot. The important boundary is stated in the README: stop-loss and take-profit are client-side trigger orders that send a market order when touched, and they are only monitored while the page is open. Beyond that there is a risk kill switch with a per-order cap, a daily loss cap and a one-click lock, Esc pressed twice cancels everything, bracket orders attach an OCO pair after a fill, and the SSE reconnect logic re-subscribes every symbol and locks the order buttons while disconnected. The v0.1.48 release notes show how much of the recent work is in this area, including per-account isolation in the flash panel, closing against actual position quantity rather than the quantity input, and a quantity-change field that takes the new remaining quantity and is converted to a decrease before it is sent.
Scripting the Shioaji SDK directly is the alternative
The alternative is to skip the terminal and write against the Shioaji SDK or CLI directly, which is what the app itself does. With the Python SDK you get a headless interface you can script, schedule and test, and none of this UI, and you own the code, so no copyleft obligation reaches it. What you give up is the part that is hard to rebuild: a single SSE stream feeding synchronized panels, click-to-trade and drag-to-reprice on the chart, a saved drag-and-drop workspace, and 21 indicators plus a sandbox for your own. The decision is mostly about whether you want to trade from a screen or from a script.
AGPL-3.0, and what you inherit
This project is AGPL-3.0, and the README spells out what that means rather than leaving it to the licence text. You may use, modify, learn from and fork it freely. Any modification or derivative, including running it as a network service for other people, must be released in full under AGPL-3.0, and if you cannot open source your version the README directs you to Sinotrade for a commercial licence under dual licensing. Contributing a pull request means agreeing that your contribution is licensed under AGPL-3.0 and that the maintainers may include it in dual-licensed distributions. On upkeep, the last push was on 2026-09-15 and releases are frequent: v0.1.48 on 2026-09-15, v0.1.47 on 2026-09-14 and v0.1.46 on 2026-09-07. The release notes are detailed and partly in Chinese, and they are candid about unfinished work, with v0.1.46 noting that Windows native operation and clean-machine acceptance testing were not yet complete.
Editorial conclusion
Use Shioaji Pro if you already hold a Sinotrade account with a Shioaji API key and want a Taiwan market terminal whose order chain you can read end to end, and start with shioaji server start so you are in simulation mode with the badge showing. Do not rely on it for stop protection, because the README states the chart stop-loss and take-profit triggers are client-side and only monitored while the page is open. Settle the licence question before you build anything on top of it: AGPL-3.0 means a modified version you host for others has to be published, and Sinotrade sells a commercial licence for the cases where you cannot.
Frequently asked questions
Is Shioaji Pro free for commercial use?
The interface is 100 percent open source under AGPL-3.0, so you may use, modify and fork it freely. The README states that any modification or derivative, including hosting it as a network service for others, must be released in full under AGPL-3.0, and directs anyone who cannot open source to Sinotrade for a commercial licence under dual licensing.
Does it trade real money by default?
No. The README says the server runs in simulation mode by default, with a simulation badge at the top and a red production badge when switched. Production requires shioaji server start --production after CA certificate setup, and the README advises testing fully in simulation first.
Which platforms does the Shioaji Pro desktop app support?
The README lists macOS 13.3 or newer on Apple Silicon and Intel, Windows 10 and 11 on x64, and Linux x86_64, with installers from Releases as .dmg, .msi, and .AppImage, .deb or .rpm.
Community notes