The track database
What it’s for
The track-name suggestions on the main toolbar come from a database you control — so package names stay consistent and you never mistype a venue. The database holds far more than names, though: it’s a reference of every track you review, with codes, location, surface, dimensions and more. Open it with the flag button in the toolbar’s top-right tool cluster.
The window is a filterable list on the left and an edit panel on the right, with a draggable splitter between them. The window remembers its size, position, and splitter placement.

The fields, group by group
The edit panel is organised into five groups, matching the natural shape of the data.
Identity
- Track name — the venue name, up to 20 characters. This is what the main toolbar suggests and what package names use.
- Discipline — three checkboxes: Gallop, Harness, Greyhound. A track can serve more than one discipline (many venues host both gallops and harness), so this is a set of checkboxes, not a single choice — tick every discipline the track is used for. (Contrast the main toolbar, where a race is one discipline and uses radio buttons.) A track with none ticked simply won’t be suggested for any discipline.
Codes
Reference codes used by external systems. All optional.
- Track code — up to 6 characters.
- File prefix — up to 3 characters.
- RSB track — up to 4 characters.
Track characteristics
- Surface — the racing surface (Turf, Dirt, Sand, All-Weather, and combinations). Chosen from a dropdown; the list includes the standard surfaces plus any others already present in your data.
- Direction — the way the track runs: LH (left-handed), RH (right-handed), or LR.
- Rating — a track rating on a 0 to 20 scale, in half-point steps. Blank if unrated.
Location
- Country — from a short list (AUS, CHN, NZ, O/S).
- State — the state or region. The State dropdown is driven by the selected Country: choose a Country and State offers only the states that belong to it, so you can’t pair a state with the wrong country. The full state set spans Australian states plus international regions (GB, FR, HK, JPN, USA and so on).
- Area — a one-letter area classification (A, C, M, P).
Dimensions
All in metres, all optional.
- Circumference (m) — the lap distance.
- Straight (m) — the home straight length.
- Width (m) — the track width.
Circumference and Straight show blank when the value is unknown, never 0. A zero in these fields would read as “a track with no length”, which is meaningless, so unknown is shown as empty. (They accept whole metres only — digits, no decimals. Width does allow a decimal.)
Editing
- Add — creates a new blank entry; fill in the fields.
- Delete — removes the selected entry, after a confirmation.
- Save — writes the database to
tracknames.jsonand immediately refreshes the main toolbar’s suggestions, so a track you just added is usable straight away.
Edits live in memory until you Save; nothing is written to disk until then.
Filtering the list
Above the list are filters that narrow what’s shown (they affect only the view — never what gets exported):
- A discipline dropdown (All, or one discipline).
- Name contains…, State, and Country text boxes — type to narrow the list live.
The splitter between the list and the edit panel drags to give either side more room, and its position is remembered.
Import from CSV
Import… merges a CSV file of tracks into the database. The expected format is a header row followed by one track per line, with these columns in order:
Gallop, Harness, Greyhound, track_code, track_name, country, state,
area, surface, rating, rsb_track, file_pfx, way, circumference,
straight, width
- The three discipline columns are Y / N.
- Surface spellings are tidied to the standard set on import.
- Circumference, Straight and Width treat
0as “unknown” and import it as blank. - Over-long text is trimmed to each field’s limit.
Rows that are exact duplicates of a track already in the database (same name and same discipline set) are skipped; rows that don’t parse are counted as failed. After the import the app reports how many were added, skipped and failed — nothing is silently dropped, and nothing is committed until you Save.
Export to Excel
Export to Excel… writes the database to an .xlsx spreadsheet. It exports the entire database — every track, every field — regardless of any filter you have set on the list. (The list filters change only what you’re looking at; they never limit the export.) The column headers are the readable field labels (“Track name”, “Track code”, “Circumference (m)”), so the spreadsheet is easy to read and edit. This is your backup and your bulk-editing tool.
Import from Excel — the round trip
Import from Excel… reads an .xlsx back in. The intended workflow is a round trip:
- Export to Excel to get the whole database in a spreadsheet.
- Edit in Excel — fix a rating, add dimensions, correct a code, across as many tracks as you like.
- Import from Excel to bring the edits back.
The Excel import understands both the readable headers the export writes (“Track name”, “Circumference (m)”) and the raw CSV names (“track_name”, “circumference”), matching them loosely enough that spacing and capitalisation don’t matter — so a spreadsheet from either source imports cleanly. Numbers that Excel has stored as numbers rather than text are handled correctly. After the import it reports which columns it matched, any it didn’t recognise, and any rows that failed.
How merging works (the same for CSV and Excel import): rows are added if they’re new; rows that match a track already in the database (same name and discipline set) are treated as duplicates and skipped. Because of that, the round trip lands cleanly when you import your edited export into a cleared database — the standard “replace the lot” refresh — rather than on top of the existing entries, where every unchanged row would simply be skipped as a duplicate. In short: to apply bulk edits, clear the database first, then Import from Excel; the import re-adds everything, edits included.
Remembered directories
Both Import and Export remember the folder you last used — separately, since importing from one place and exporting to another are different habits — and reopen there next time. If a remembered folder has since gone (an unplugged drive, a deleted folder), the picker falls back to a sensible default rather than failing.