Open Reckon and start typing. Each line is a calculation; its answer appears on the
right as you type. Click an answer to copy it.
Write naturally: 3 apples + 2 apples, rent: 1,200, 20% of $50.
Name values with = (hourly rate = $85/h) and use them below.
sum totals the lines above it, back to the last heading or blank line.
Double-click a blank line under some answers for a subtotal; grand total adds up the subtotals.
Double-click an answer to use it in a line below. The reference shows the answer, stays live, and follows its line as you add or remove lines.
Tag lines with #food anywhere on them, then sum #food (or avg, count…) totals every line with that tag.
Notes are saved in your browser as you type. Open the notes list with the ☰ button.
Press ⌘/CtrlK for every command, or ? for the keyboard shortcuts.
Reckon works offline after the first visit, and you can install it as an app with its own icon and window:
iPhone and iPad (Safari): tap Share, then Add to Home Screen.
Android (Chrome): open the menu (⋮), then Install app or Add to Home screen.
Chrome or Edge on a computer: click the install icon in the address bar, or Install Reckon in the
⌘/CtrlK menu.
Safari on a Mac: choose File → Add to Dock.
The tip at the bottom of the notes list shows the right steps for your device. Tips cycle each visit; turn
them off in Settings.
Seeing how a note works
Why this answer? Hover an answer to see how the line was read, with the values it used
("rent ($1,200.00) + utilities ($150.00)"), and which lines it uses or is used by.
No answer? A "?" appears where the answer would be (once you leave the line). Hover or tap it for the reason.
What depends on what: the line with the cursor marks the lines it uses (green) and the lines that use it (orange).
Try other numbers: on a line like rent = $1,200, tap ⇆ for a slider and watch every answer below change.
With Drag numbers to change them on (Settings), hold ⌥/Alt and drag any number. Undo puts it back.
While you adjust, each answer that moves shows by how much next to it (+$120.00, −3 days), and so does the total.
See the whole range: tick Sweep in the slider and set its range (From – To). Every answer that uses the
variable gets a small chart of how it changes across that range, with a dot where the slider is. Hover an
answer for its values at both ends.
Try other options: write a choice like transport = car | [train] | fly and use transport == fly in later
lines, or give options values (fare = car $120 | [train $80]). Click the current option to pick the next one
(Shift-click for the previous one, or ⌘/Ctrl⇧Space on its line).
Totals: the bar under the note shows the total of the section you're in; select lines for their sum and average.
Notes, sharing and backups
Many notes: create, search, pin and trash them in the notes list. Trashed notes can be restored.
Tutorial and examples: new users start with a tutorial, a monthly budget and a trip plan. Bring them
back any time with Add the tutorial and example notes (in Settings, or the ⌘/CtrlK menu).
Share link (the ↗ button): copies a link with the whole note compressed into it, labelled with the
note's name (…/reckon/#/share/monthly-budget/…). Whoever opens it sees a read-only copy and can save their
own. They can still try other numbers and options: each name = number line has a ⇆ slider, each choice
can be clicked, and every answer follows.
Nothing they change is saved, and Save a copy keeps the note as you shared it. The address bar always shows just the app's address, so copying it shares Reckon, never your note.
Backups: Export all notes (in the notes list) saves a JSON file; Import notes restores it, or
turns .txt and .md files into notes. Notes live only in your browser, so Reckon reminds you to back
up weekly (monthly or never in Settings), and only when notes have changed since your last backup. The
reminder's Back up button saves the file.
Download and export (the ↓ button): the note as text, or with its answers as aligned text, Markdown
(calculations become tables) or a web page you can print. Copy with answers puts the aligned text on
the clipboard.
Privacy
Notes never leave your browser. There are no accounts, no servers and no analytics. Share links keep
the note after the #, a part of the URL browsers never send to a server.
The only network requests fetch exchange rates (open.er-api.com, falling back to Frankfurter; CoinGecko
only if a note mentions crypto). They never include your notes, and you can turn them off in Settings.
Questions
Why does a line show no answer? Reckon shows nothing rather than guess. Common causes: an unknown
name (total cost + 1 before total cost is defined), two bare numbers in a row (3 cats and 2 dogs),
or mixing units that don't convert (5 km + 3 kg).
How do I type decimals in another locale? Always with a dot: 1,234.5. The number format setting
only changes how answers look.
Is in inches or "convert to"? It converts when a unit follows (5 km in miles). Right after a
number with nothing after it, it's inches (6 ft 2 in). In ordinary text (5 people in the room) it's
ignored.
Why did a word stop working after I defined a variable? Variables win over units and keywords, so
after F = 5, 72 F means 72 × 5. Pick a different name.
Templates
Ready-made notes for everyday sums. Open one, change the numbers, and save it as your own.
Every answer is checked by Reckon's tests (with sample exchange rates, on Jan 15, 2026).
Split the bill
Tax and tip on a shared meal. Click the tip to change it, and every answer follows.
Every example below is checked by Reckon's tests. Answers use sample exchange rates, and
dates assume it's Thursday, Jan 15, 2026, 12:00 in UTC. Open in Reckon opens the
example as a note you can edit and save.
Basics
Type a calculation on any line; its answer appears beside it. Decimals are exact.
Words around numbers are ignored, so notes read naturally. Text before a colon is a label. Lines starting with # are headings, and // starts a comment.
prev is the last answer. sum, avg, median, stdev, count, min and max cover the lines since the last heading or blank line. line3 is the answer on line 3; in the app, double-click an answer to use it below, and the reference follows its line as you add or remove lines. subtotal adds up the lines since the last subtotal, and grand total adds up the subtotals; in the app, double-click a blank line under some answers to add a subtotal. Tag lines with #words, and total them with sum #tag (or avg, count…), across the whole note.
Name one of these on a line, and cups, spoons and ml convert to grams or ounces and back. Weights are approximate. For anything else, give its weight per cup: almond flour = 96 g/cup.
Plain-text link. The note is percent-encoded: space %20, new line %0A, $%24, %%25, +%2B, #%23, &%26. Easy to write by hand, by an LLM, or in any language.
Share link. The note as raw DEFLATE, then base64url without padding. Shorter for long notes. The <name>/ part (letters, digits and -) is only a label and can be left out.
https://parmsam.github.io/reckon/#/note/<id>
Older links to a note saved in this browser. The app no longer shows them (the address stays https://parmsam.github.io/reckon/), and they don't work for anyone else.
Plain-text and share links open as a read-only preview with a Save a copy button, so a link can never
change someone's notes. The decoder forgives common slips: a raw + stays a plus, and a bare %
(as in 20% of) is kept.
const link = 'https://parmsam.github.io/reckon/#/new?text=' + encodeURIComponent(note);
from urllib.parse import quote
link = "https://parmsam.github.io/reckon/#/new?text=" + quote(note, safe="")
# Shorter share link, same format the app uses:
import base64, zlib
c = zlib.compressobj(9, zlib.DEFLATED, -15) # raw DEFLATE
payload = base64.urlsafe_b64encode(c.compress(note.encode()) + c.flush()).rstrip(b"=").decode()
link = "https://parmsam.github.io/reckon/#/share/" + payload
The engine module
engine.js is Reckon's calculation engine as one self-contained ES module (about
60 KB gzipped). It works in browsers, Node 18+, Deno and notebooks, makes no network requests unless you
ask for rates, and includes a recent set of exchange rates.
import { evaluate, noteLink, shareLink } from 'https://parmsam.github.io/reckon/engine.js'; // Deno, browsers
// Node: download it first (curl -O https://parmsam.github.io/reckon/engine.js), then import('./engine.js')
evaluate('hourly rate = $85/h\n37.5 h × hourly rate\n5 km in miles');
// [
// { line: 1, input: 'hourly rate = $85/h', kind: 'value', result: '$85.00/h', variable: 'hourly rate' },
// { line: 2, input: '37.5 h × hourly rate', kind: 'value', result: '$3,187.50' },
// { line: 3, input: '5 km in miles', kind: 'value', result: '3.1069 mi' },
// ]
Export
What it does
evaluate(text, options?)
Evaluates a note; returns one { line, input, kind, result?, error?, variable? } per line. Options: locale, now (epoch ms), timeZone, rates, precision, unitPrecision, angleUnit, ppi, emPx.
noteLink(text)
A plain-text link that opens text in Reckon.
shareLink(text)
A compressed share link (async).
decodeShare(payload)
The note inside a share link (async).
toText(text, options?)
The note with each answer aligned after its line.
toMarkdown(text, options?)
The note as Markdown: headings, comments, and | Line | Answer | tables.
toHtml(text, options?)
The note as a standalone HTML page (options.title sets its title).
fetchFiatRates(), fetchCryptoRates()
Live rates (units per USD) to pass as options.rates.
bundledRates
The rates built into this version, with fetchedAt.
evaluateDocument(text, settings)
The lower-level engine call, with structured values.
For LLMs and agents
llms.txt and llms-full.txt describe Reckon for language
models (llmstxt.org). The full file contains the whole syntax reference.
The prompt (below) teaches any chat assistant to write Reckon notes and answer with
a link you can click.
The agent skill teaches coding agents (such as Claude Code) to write notes, build
links and check answers with the engine. Install it by copying skills/reckon/ from the
repository into your agent's skills folder.
The prompt
Paste this into ChatGPT, Claude or another assistant, then ask for the note you want ("a
weekly grocery budget", "convert this recipe to grams"). It answers with a link that opens
the note in Reckon. Also at prompt.txt.
You help people write notes for Reckon (https://parmsam.github.io/reckon/), a notepad calculator. In Reckon, each line of
text is a calculation, and the app shows its answer beside the line. You write the note; Reckon
does the math, so never compute or write the answers yourself.
How to write a Reckon note:
- One calculation per line. Descriptive words are fine and ignored: "flights: $420 × 2".
- "# Title" lines are headings, and "//" starts a comment.
- Name values with "=" and reuse them below: "hourly rate = $85/h", then "37.5 h × hourly rate".
Names can have spaces. Don't reuse unit or keyword names as variables.
- "sum", "avg", "count", "min", "max" cover the lines above, back to the last heading or blank line.
Lines that themselves use sum/avg are left out, so put a blank line or heading between groups.
- "prev" is the previous answer.
- Define reusable pieces: functions ("tip(bill, rate) = bill × rate") and units ("1 sprint = 2 weeks").
- Compare and branch: "if total > $100 then 10% off total else total".
- Units, currencies and dates work as written below. Convert with "in": "5 km in miles".
- Type numbers with a dot for decimals and commas for thousands: 1,234.5.
Every line Reckon understands, with the answer it shows (answers use sample rates, and dates assume
Thursday, Jan 15, 2026):
Basics:
2 + 3 × 4 → 14
(2 + 3) × 4 → 20
2^10 → 1,024
10 mod 3 → 1
5! → 120
0.1 + 0.2 → 0.3
Numbers:
1,000,000 + 1_000 → 1,001,000
1.5k + 2M → 2,001,500
3bn / 1 million → 3,000
1.5e3 → 1,500
0xFF + 0b1010 → 265
1½ → 1.5
Text and structure:
3 apples + 2 apples → 5
rent: 1,200 → 1,200
5 plus 3 times 2 → 11
10 divided by 4 → 2.5
Variables:
monthly rent = 1,200 → 1,200
utilities = 150 → 150
(monthly rent + utilities) × 12 → 16,200
Your own functions and units:
tip(bill, rate) = bill × rate
tip($80, 18%) → $14.40
1 sprint = 2 weeks → 2 weeks
3 sprints in days → 42 days
1 dozen = 12 → 12
3 dozen → 36
Previous answers and totals:
groceries: 80 → 80
gas: 45 → 45
dinner: 55 → 55
sum → 180
median → 55
avg → 60
prev × 2 → 120
rent: 1,200 → 1,200
power: 80 → 80
subtotal → 1,280
food: 300 → 300
subtotal → 300
grand total → 1,580
lunch $12 #food → $12.00
taxi $30 #travel → $30.00
dinner $45 #food → $45.00
sum #food → $57.00
Percentages:
20% of 50 → 10
50 + 10% → 55
10% off $80 → $72.00
5 as % of 20 → 25%
5 is what % of 20 → 25%
20% of what is 5 → 25
Comparisons and conditions:
5 km > 3 miles → true
0.1 + 0.2 == 0.3 → true
order = $120 → $120.00
if order >= $100 then 10% off order else order → $108.00
0xF0 | 0x0F → 255
Choices:
transport = car | [train] | fly → train
if transport == train then $80 else $300 → $80.00
fare = car $120 | [train $80] | fly $300 → $80.00
Units:
5 km in miles → 3.1069 mi
6 ft 2 in in cm → 187.96 cm
72 °F in °C → 22.2222 °C
2 cups in ml → 473.1765 mL
1 GB / 4 MB → 250
60 mph in km/h → 96.5606 km/h
3 m × 4 m → 12 m²
1 m + 20 cm → 1.2 m
12pt in px → 16 px
2 cups flour in g → 240 g
Money:
$30 in EUR → €27.00
€20 + $5 → €24.50
hourly rate = $85/h → $85.00/h
37.5 h × hourly rate → $3,187.50
0.01 BTC in USD → $1,000.00
Dates and times:
today + 2 weeks → Thu, Jan 29
next friday at 3pm → Fri, Jan 16, 3:00 PM
days until Dec 25 → 344 days
Jan 31 + 1 month → Sat, Feb 28
3pm + 90 min → 4:30 PM
3 days ago → Mon, Jan 12
Time zones:
time in Tokyo → 9:00 PM GMT+9
3pm PST in London → 11:00 PM GMT
9:00 EST to CET → 3:00 PM GMT+1
Functions and formats:
sqrt(16) + cbrt(27) → 7
round(3.14159, 2) → 3.14
sin(30) → 0.5
log(1000) → 3
2pi → 6.2831853072
255 in hex → 0xFF
1500 in sci → 1.5e3
When you've written the note, reply with:
1. A link that opens it. If you can run code, prefer a compressed share link (shorter):
import base64, zlib
c = zlib.compressobj(9, zlib.DEFLATED, -15)
payload = base64.urlsafe_b64encode(c.compress(note.encode()) + c.flush()).rstrip(b"=").decode()
link = "https://parmsam.github.io/reckon/#/share/" + payload
Otherwise write a plain-text link: https://parmsam.github.io/reckon/#/new?text= followed by the note percent-encoded.
Encode every character except A–Z a–z 0–9 - _ . ~ (as JavaScript's encodeURIComponent does):
space %20, new line %0A, $ %24, % %25, + %2B, # %23, & %26, = %3D, : %3A, / %2F, ( %28, ) %29,
× %C3%97, € %E2%82%AC, ° %C2%B0.
2. The note itself in a code block, so it can be pasted if the link is too long.
Example. For "a quick trip budget", the note is:
# Trip budget
flights: $420 × 2
hotel = 3 nights × $135
food: 25% of hotel
sum
and the plain-text link is:
https://parmsam.github.io/reckon/#/new?text=%23%20Trip%20budget%0Aflights%3A%20%24420%20%C3%97%202%0Ahotel%20%3D%203%20nights%20%C3%97%20%24135%0Afood%3A%2025%25%20of%20hotel%0Asum