One HTML file. It keeps the record across income years and works out what belongs on each return label, so the figures you type into myTax come from something that carried forward rather than something you retyped.
Opens in this tab. Save the page for offline use — nothing it needs to calculate is loaded from anywhere.
Your ledger never leaves your browser — which is also to say it stays in it. It lives in a JSON file you load and save yourself, on your own machine. There is no account, no upload and no server holding your figures — nothing in this project can receive them.
On a computer other people use, that is the risk rather than the reassurance. The browser keeps an autosaved copy of your ledger between visits, and files you save land in that machine's Downloads folder. Tick shared or public computer on the first screen and the ledger is held in the tab instead: nothing is written to the browser, and saving a file asks first. Press Clear this browser before you leave, and take your downloads with you.
This hosted site carries Google Analytics, which records the visit: which page, where you arrived from, approximate location and device. It does not read what you type. Block it if you would rather it did not — the tool works identically without it.
The tag is added when the site is published, not built into the tool. Take ledger.html from the repository and you have a file that fetches nothing at all — no tracking, no dependencies, working offline forever. A test enforces it. (Using your browser's Save page on this hosted copy keeps the tag, so take it from the repository if that matters to you.)
A long-running spreadsheet with one wide sheet per financial year has a structural flaw: nothing persists across tabs except by retyping. The mistakes that follow are not carelessness, and they repeat in workbooks of this kind —
Rearranging the same year-tab layout fixes none of them.
Decline in value on both methods, apportioned by days held, with balancing adjustments on disposal · the low-value pool, including its one-way rule · capital gains with losses applied before the discount, in the order that costs you least · working from home at the fixed rate · franking credits and the foreign income tax offset, both reaching the return from companies and trusts · managed fund distributions broken out fund by fund the way myTax asks for them · integrity checks that name what looks wrong and let you proceed anyway.
Store inputs, derive outputs. Only what you typed is saved. Every schedule, balance and total is recalculated on load, so a correction fixes historical years instead of leaving stale numbers behind.
| RULES.md | Every rate and rule it encodes, each with its ato.gov.au source. Start here to audit the arithmetic. |
| IMPORT-FORMAT.md | The contract anything feeding the ledger must satisfy, so the same purchase arriving through two channels is not claimed twice. |
| PLAN.md | Why it is built this way. Written before it existed, kept as written. |
| Screenshots → ledger | One instruction to paste into any AI chat, so a receipt you only screenshotted becomes a file the ledger imports. |
| Bookkeeping runbook | Record structure, retention periods, and the normative schema the tool implements. |
This is a record-keeping tool, not tax advice. It is not a substitute for a registered tax agent, and you remain responsible for what you lodge. Verify anything you act on against ato.gov.au — the sources are linked throughout.