Ruan32 downloadsShows whether each Discovery product is worth what you pay, using your own Budget notes and only the benefits you actually use.
Is each Discovery product worth what you pay for it, for you?
This is a plugin for South African Discovery clients. It reads the bank transactions you already keep in Obsidian with the Budget plugin and works out, product by product, what you pay Discovery and what comes back to you. Then it compares each product with what other providers charge.
It counts a benefit only at the value it has for you. A gym discount is worth nothing if you never go to the gym. A flight discount is worth nothing if you never fly. You tell it which benefits you use, and the answer changes to match.
No account, no network, no telemetry and no AI. Everything is worked out on your device from your own notes.
The plugin is free. It gives no financial advice: it shows calculations from your own statements and published prices, and never tells you to buy, change, replace or cancel a product. The decision is yours.




Screens show a made-up example household.
budget-app) with your bank statements imported. This plugin reads its notes: Transactions/<account>/<YYYY-MM>.md, with Accounts/ and Categories/ beside them. Without them it finds no budget and offers to let you type your numbers in instead (see below).No budget in your vault? Choose Type in my numbers on the first screen (or run the command Type in my numbers). It asks, one question at a time, only what the products you tick need: your Discovery Bank package and its fees (the published fee for your package, or what you pay), your card spend in a normal month, what you spend at Checkers, Woolworths, Pick n Pay, Clicks, Dis-Chem, bp and Shell, your gym, flights booked through Vitality Travel in the last year, your Discovery Health debit order and the claims it paid back, gap cover, your Discovery Insure premium and your share of Discovery Life. Each question says where to find the figure (the Discovery app, a bank statement). Leave one blank if you are not sure: it is then not counted, never guessed.
Your answers are treated as a rough average month and made into a year, so every page works the same way. Figures from them are labelled You entered, and the page says they are typed averages, not statements. They are kept only in this plugin's settings (data.json). A Discovery Miles statement saved in the vault still counts. Change any answer on the Inputs tab, under Your typed numbers. If a Budget-plugin budget appears in the vault later, the page asks which figures to use, and Read my budget instead on the Inputs tab switches over (your typed numbers are kept).
On first open it asks a few questions, one at a time. You can go back at any question, and you can use "Skip the questions" and answer later under Inputs.
Costs are never reduced. You pay them whether or not you use the benefit. Only the value you get back is weighed by how much of it is really yours.
Only the products you said you have show up.
Each figure is labelled with where it came from, so you can judge it:
.obsidian/plugins/discovery-worth-it/data.json. That holds your answers, not your transactions: your health plan, family size, Vitality statuses, health-check answers, benefits you use, any quotes you type, and your typed numbers if you use Type in my numbers. If your vault is synced or kept in git, data.json travels with it. Leave that file out of any vault you share or publish.Prices, plans and fees for Discovery and for the other providers are written into the plugin, each set with an "as at" date shown on the Compare page. The plugin does not fetch anything. They are checked and refreshed about every six months, in a new release. When the date gets old, every tab that shows another provider's prices carries a warning that they may be out of date.
Every figure, its value at the source, the link and whether it was confirmed is listed in docs/market-data-sources.html (checked 3 November 2026). Where a provider has already published next year's prices, they are in too and take over on the day they start. How the numbers are refreshed is written up in docs/updating-market-data.html. Spotted a wrong or old price? Open an issue with the "Wrong or outdated price" form.
Until the plugin is in Obsidian's community directory, install it by hand:
main.js, manifest.json and styles.css from the latest release.<your vault>/.obsidian/plugins/discovery-worth-it/.Each release's files carry a build attestation, so you can check they were built from this repository:
gh attestation verify main.js -R RuanPienaarCode/Is-Discovery-Worth-it-
tests/no-advice.test.cjs) fails the build if wording that tells you what to do with a product comes back.This is an independent, unofficial plugin. It is not made, endorsed, sponsored or approved by Discovery Limited, or by Discovery Bank, Discovery Health, Discovery Insure, Discovery Life, Vitality, or any of their companies, nor by any other bank, medical scheme or insurer named in it. Those names and brands belong to their owners. They are used only to say which product is being compared, and no endorsement is meant or implied.
All the artwork in the plugin is original, drawn for it. It contains no Discovery, Vitality or other company's logos or pictures.
./build.sh # bundle src/ into main.js, then run the tests
DISCOVERY_WORTH_IT_VAULT_PATH="/path/to/vault" ./scripts/deploy.sh
A green build installs nothing. deploy.sh copies the three built files into the vault and checks they match by hash.
main.js and styles.css are build output. Edit src/, never the root files. CI rebuilds them and fails if the committed files differ.src/styles.css first, then every src/css/*.css file in name order, joined into styles.css. Every rule sits under a dc- class.innerHTML, no color-mix, :has() or container queries. The tests in tests/ check this.src/format.js, in plain words: positive rands, with words for direction.Preview over a made-up household, in a browser:
npm run preview
python3 -m http.server 8862 # then open http://localhost:8862/_preview/preview.html
To print what the plugin works out for a real vault, to the terminal only:
node scripts/real-vault.cjs "/path/to/vault"
Real figures stay in your vault, never in this repository. Never commit what that script prints. Never copy a real name, place, account number or amount into a test, the preview or an issue. The tests and the preview use an invented household.
To release, make the tag equal manifest.json's version (no v). The release workflow builds, tests, checks the tag, attests and publishes main.js, manifest.json and styles.css.
AGPL-3.0-only. See LICENSE.
Font: the page uses Nunito, under the SIL Open Font License 1.1 (assets/fonts/OFL.txt), carried inside main.js (regenerate with npm run fonts).