Developers · How it works

How records look

How the app draws your records on a reader's day, and the words you choose: names in their language, plain figures, a change with no colour, events first.

A reader who turned your plug-in on finds a bar with its name, and one quiet row a record, on each day that has one. You choose the words; every plug-in is drawn the same flat way, so a reader learns it once. These days are drawn by the app's own code from the examples' fixtures (in Markdown, a line a row).

Harbour Almanac on Thu 1 Oct, as the app draws it
THURSDAY
Oct 1
2026
◌ Harbour council: berth fees
Scheduled · Harbour Almanac
High and low tide
2.20
High
0.63
Low
−3.93%
Harbour Almanac
Fish landed · 2026-08
399.00
Landed
−14.38%
Last rate · Thu 10 Sep · Harbour Almanac
Tide table for October 2026 published
Leading light on the east bank shows a reduced range

The words you choose

Your plug-in's name, each series' name and each name in fieldNames are per language, keyed by a two- or three-letter code (optionally with a region), at most 80 characters each. A reader sees their language, then en, then the first you listed. The app looks up two letters, so key es, not es-DO, and give en. The same day, for a Spanish reader:

Almanaque del puerto on Thu 1 Oct, as the app draws it
THURSDAY
Oct 1
2026
◌ Harbour council: berth fees
Scheduled · Harbour Almanac
Pleamar y bajamar
2.20
Pleamar
0.63
Bajamar
−3.93%
Harbour Almanac
Pesca desembarcada · 2026-08
399.00
Desembarcado
−14.38%
Last rate · Thu 10 Sep · Harbour Almanac
Tide table for October 2026 published
Leading light on the east bank shows a reduced range
  • •
    A series name labels the row: name what the reader sees, "High and low tide", not where it came from.
  • •
    Field names say what each figure is; a field without one shows its key.
  • •
    A unit, at most 16 characters as the source writes it (m, DOP, %), is not drawn: it decides how a change is measured and how a screen reader says the number (DOP, USD, EUR and % as words, others as written).
  • •
    Keys (tide, high) are lowercase letters, digits, hyphens and underscores, kept once records are stored.
  • •
    The attribution ends your rows, at most 40 characters, or the holder.
  • •
    Titles are plain text, at most 200 characters, never markup, in the source's words and language; the day already says the date. An item's is its link; an event without one shows the series' name.

The app's own words (Scheduled, Last rate, Rate of, Moved to, Cancelled) and dates are in English today.

Values

A value row is the series' name (with period when dated by publication: Fish landed · 2026-08), the figures in the order of fields, each named under it and rounded to two decimals (59.5577 reads 59.56), then the change of your change field (or the first) from the previous record, a signed percent or, for a % unit, basis points. It is the same quiet grey either way: a higher dollar is a weaker peso, and Kanboombo does not decide which is good news. Your attribution sits under it.

From its first record to the reader's today, a value series fills every day. Before your newest record, a day with none shows the value in force, lighter, with no change, and Rate of <date>:

DOP Economy on Sat 26 Sep, as the app draws it
SATURDAY
Sep 26
2026
Dollar
59.28
Buy
59.65
Sell
Rate of Fri 25 Sep · Banco Central

After your newest record, each day shows it with Last rate · <date> (monthly series too, and the words may change); after the reader's today, nothing.

DOP Economy on Wed 30 Sep, as the app draws it
WEDNESDAY
Sep 30
2026
Dollar
59.27
Buy
59.56
Sell
−0.15%
Last rate · Mon 28 Sep · Banco Central

Events and items

Events lead their day, then values and items, each in your manifest's order of series.

State
The row
State
scheduled
The row
◌ and the title, with Scheduled · <source> under it
State
happened, with a value
The row
The series' name and the value: two decimals, or 5.50% for a % unit
State
happened, no value
The row
The title
State
moved
The row
On the old date, the title and Moved to <date>
State
cancelled
The row
The title and Cancelled

Only events are drawn after the reader's today: scheduled ones, and the old date of one that moved.

Harbour Almanac on Thu 15 Oct, as the app draws it
THURSDAY
Oct 15
2026
◌ Harbour council meeting
Scheduled · Harbour Almanac

A happened event's change is against the previous happened event (+25 bp, with Was 5.25% under it, or held); with no earlier value, the value alone:

Harbour Almanac on Thu 2 Jul, as the app draws it
THURSDAY
Jul 2
2026
Harbour council
11.50
High and low tide
2.39
High
0.38
Low
−1.65%
Harbour Almanac
Fish landed · 2026-05
528.00
Landed
Rate of Wed 10 Jun · Harbour Almanac

A cancelled meeting keeps its day:

Harbour Almanac on Thu 6 Aug, as the app draws it
THURSDAY
Aug 6
2026
Harbour council meeting: lapsed for want of a quorum
Cancelled
High and low tide
1.87
High
0.86
Low
+1.08%
Harbour Almanac
Fish landed · 2026-06
488.90
Landed
Rate of Fri 10 Jul · Harbour Almanac

An item is its title, a link to its url, on its own day only, with no figure and no attribution.

When your plug-in falls behind

Days after your newest record end with:

Your plug-in
Those days say
Your plug-in
Running
Those days say
Last rate · <date> · <source>
Your plug-in
Failing: the last run failed after the last success
Those days say
Couldn't refresh · from <date>
Your plug-in
The reader's app cannot reach Kanboombo
Those days say
Couldn't reach Kanboombo · from <date>
Your plug-in
Paused, or a new version waits for approval
Those days say
Not updating · from <date>

A plug-in with no records has no section, except on today when its first run failed or Kanboombo cannot be reached. A screen reader reads a row as one sentence:

text
Dollar, buy 59.27, sell 59.56 pesos, down 0.15 percent, Monday 28 September, Banco Central

preview draws your own days with this code, in any language: preview.