OptionEdge

A ledger, not a dashboard

Know what you actually made.

Your broker can tell you what you own. It is much worse at telling you what you earned, and options make it worse still. OptionEdge reconstructs every realized dollar, per contract and per ticker, and proves it against your broker's own cash.

Attributed42,318.55 + Unattributable1,204.00 = Broker cash43,522.55 Balanced

Every account total carries this line. Where a broker genuinely did not report enough to attribute a dollar, such as a roll that arrives as one net row, the gap is named and the tickers leaning on it are flagged. The total always matches your broker. The app tells you how much of the story behind it is inference.

Section one

Plainly, what this is and what it is not.

It is

A read-only ledger for your own trades

  • Reconciled. Every figure ties back to settled broker records, or says why it cannot.
  • Multi-account, multi-currency, and it never adds one currency to another.
  • Local. A small server on your own machine and one SQLite file. No sign-up, no telemetry.
  • Yours. Apache-2.0. Fork it, audit it, run it after everyone loses interest.
It is not

Anything that touches your money

  • Not a trading app. No code path places, changes or cancels an order. It only reads.
  • Not advice. It reports what happened; it never suggests what to do next.
  • Not tax software. It does not know your jurisdiction and must not be filed from.
  • Not a quote screen. No greeks, no live P&L, no chain, deliberately.

The missing greeks are a choice, not a gap. They need a live options chain, which means a third party that can rate-limit you, go dark, or restrict what you may pass on. Everything here comes from settled broker records instead: facts that stay true offline and cost nobody a licence.

Section two

Four ways an options ledger quietly lies to you.

01 · The roll

One net row, two legs

A roll often arrives as a single entry with no per-leg cash. Split it naively and you will confidently assign profit to the wrong contract.

02 · Assignment

Shares move with no fill

Assignment and call-away hand over stock without any trade being reported. Positions appear and vanish, and cost basis walks off with them.

03 · Expiry

Nothing happens, loudly

A contract that expires generates no event at all. It simply stops being listed, which is indistinguishable from having been closed unless you check.

04 · The lag

Holdings trail orders

The positions feed can run an hour behind the order feed, so something you closed at lunch is still shown as open, and still counted.

Handled naively, each of these produces a confident wrong number rather than an error. That failure mode is what the whole design is arranged against.

Section three

Every account at once, and never a blended total.

127.0.0.1:3000 · PORTFOLIO
USD · 2 ACCOUNTS
12,480.15
Options9,204.90 Stock3,275.25 Premium open8,758.00
CAD · 2 ACCOUNTS
−318.40
Options0.00 Stock−318.40 Premium open0.00
AccountCurrencyOpen OptionsStockCombined
PERSONAL mixed 12 opt · 2 eq 9,204.90usd 3,275.25usd -
TFSA USD 3 opt · 1 eq 1,140.00 −94.10 1,045.90
RRSP CAD 0 opt · 6 eq 0.00 −318.40 −318.40

Illustration with sample figures, not a real account. Note the first row: it holds American options and Canadian stock, so each ledger counts toward the total for its own currency and the account itself gets no combined figure. There is no currency such a figure would be in.

Section four

What you get for the trouble.

Trust

It shows its working

Attributed plus unattributable equals broker cash, on every account total. You are never asked to take a figure on faith.

Honesty

It refuses to guess

Shares whose cost predates your broker's history are booked at zero and labelled, not counted as pure profit. One such case would have overstated a position by six figures.

Precision

Money is never a float

Every monetary column is a scaled integer in a STRICT table, so a float cannot be stored even by mistake. No .699999999997.

Scope

Every account, one view

Totals across all connected accounts and per account, split by currency, because a TFSA and an RRSP are not the same money and neither are dollars and dollars.

Privacy

Nothing leaves the machine

No server of ours, no account, no telemetry. Requests are signed on your device with your own key and answered directly by your broker.

Proof

323 tests, and no framework

The accounting was reconciled against a real account, then compared event by event against the implementation that did it: 1,272 events each side, one contract differing by three cents of rounding.

Section five

Why you bring your own keys.

Every credential is one you obtain yourself, from the provider, and it never leaves your machine. That is not a way to save on hosting. It is the only arrangement in which “nobody else can see your positions” is checkable rather than promised.

It could not be hosted anyway
The SnapTrade consumer key signs every request, so it can never reach a browser. A hosted version would mean somebody else holding every user's key, which brings back accounts, a breach surface, and a bill. That is precisely what this avoids.
No account, so no breach
No email, no password, no session token. There is nothing of yours in anyone's database, because there is no database but yours.
The terms are yours
You are the provider's own customer, on your own quota, under their terms. Nothing here resells or redistributes anybody's data.
It cannot be taken away
No subscription to lapse, no shutdown notice, no pivot. The keys are yours and the code is Apache-2.0.
Held by the operating system
Encrypted with AES-256-GCM under a master key kept in your login keychain, falling back to a file only you can read. The app tells you which of those two it is using, and says so in red if it managed neither. There is deliberately no way to read a key back out: the server decrypts, uses, and discards.

Today the only service it talks to is SnapTrade, which is what connects to your broker; their free personal tier covers up to five connected accounts. Nothing else is wired in, and this page will not claim otherwise until it is.

Section six

Running it takes about two minutes.

Pre-alpha, and it runs from source

The accounting engines are finished and tested; the polish is not. There is nothing to install and nothing to sign, because there is no binary: you run the source, which is also the only way to be certain what you are running.

Get a SnapTrade key

Sign up with SnapTrade directly and take a client id and consumer key from their free personal tier. You are their customer, not ours.

Clone and start it

You need Node 22.18 or newer. Nothing else.

git clone https://github.com/thecookieorg/option-edge-next.git
cd option-edge-next
npm install
npm run build
npm start          # http://127.0.0.1:3000

Paste your keys, connect your broker

The keys go straight into your keychain. Connecting opens your broker's own page in a new tab, with an address bar you can check. No broker password is typed into this app or stored by it.

Sync

The first pull takes a minute or two; after that it is incremental. Everything lands in one SQLite file: back it up by copying it, uninstall by deleting it.

Want to check it before you trust it? npm run verify runs the typechecker and all 323 tests. They run straight off the TypeScript with no build step and no test framework, so there is nothing between what you read and what runs.

Section seven

What running this actually costs you.

A tool that reads your brokerage history should be able to state its downsides as clearly as its features. Here they are.

It listens on a port
This is a web app, so there is a server. It binds to 127.0.0.1 only, so nothing outside your machine can reach it, but any process running as you can. A desktop build would not have that property. This is the honest trade for not having to sign, notarize and ship binaries for three operating systems.
Nothing is code-signed, because nothing is shipped
There are no binaries, signed or otherwise. You build from source, so what you run is what you can read, which is a stronger guarantee than a signature and a less convenient one. No Gatekeeper prompt to click through, and no habit of clicking through them.
Your credentials are only as safe as your machine
The master key lives in your login keychain where the OS can protect it. On a platform without one it is a file only you can read, which is weaker, and the app says so in the footer rather than letting you assume otherwise.
The numbers depend on your broker
Everything here is derived from what your broker reports, and brokers report imperfectly. The app names the gaps rather than papering over them, but it cannot close them. Check any figure against your broker before relying on it.
There is nobody to call
No support, no uptime, no roadmap you can hold anyone to. In exchange, nothing can be discontinued out from under you, and the code is yours under Apache-2.0.
Section eight

Licence, and the disclaimer that matters.

Apache-2.0

Use it, change it, sell it

You may use, modify and distribute this, including commercially, provided you keep the notices and state your changes.

Apache-2.0 rather than MIT for one reason: it grants you a patent licence from every contributor. For anything touching financial calculation, that is worth having in writing.

Disclaimer

Not advice, not your tax return

This is a reporting tool. It recommends nothing, and it places no trades. Its figures depend entirely on what your broker reports.

Check it against your broker before relying on any figure. Do not file taxes from it. Provided “as is”, without warranty of any kind.