Reference
Import format.
This page lists the file layouts Kinoku reads on import, the columns each one uses, and the rules a file has to follow. You can build a file yourself or ask an AI assistant to write one, and for the less common JSON fields it helps to start from a current Kinoku export.
Raw file for AI agents·Backup & Import·Updated 2026-10-04
Kinoku reads a file of your training and adds it to the app. You can build that file by hand, export it from another app, or ask an AI assistant to write it for you. This page lists the supported layouts, documented columns, worked examples, and the rules the reader follows. Nothing here needs a Kinoku account, and import stays free.
Who this page is for
- You are moving to Kinoku and want your old history to come with you.
- You keep a training log in a spreadsheet or a note, and you want it in the app.
- You want an AI assistant to turn your log into a file Kinoku can read. Copy the prompt at the end and paste this page's raw link with it.
- You want an AI assistant to write you a new training plan. Copy the plan prompt instead.
Quick start
- Make a CSV file. The first line is the header. Each set is one row.
- Use the recommended header (below). Save the file as UTF-8 text with a
.csvname. - Open Kinoku. Go to Settings, then Import & Export, then Import from CSV.
- Pick your file. A review screen shows how each exercise name matched. Change any match you want.
- Tap Import. You can undo the whole import later from Import History.
Recommended shape
Use this header. It is the richest layout Kinoku reads, and it names its own units, so an AI assistant does not have to guess.
title,start_time,end_time,description,exercise_title,superset_id,exercise_notes,set_index,set_type,weight_kg,reps,distance_km,duration_seconds,rpe
Upper A,2026-03-02 07:05:00,2026-03-02 08:10:00,Felt strong,Bench Press (Barbell),,,0,warmup,40,10,,,
Upper A,2026-03-02 07:05:00,2026-03-02 08:10:00,Felt strong,Bench Press (Barbell),,,1,normal,80,5,,,8
Upper A,2026-03-02 07:05:00,2026-03-02 08:10:00,Felt strong,Bench Press (Barbell),,,2,normal,80,5,,,8.5
Upper A,2026-03-02 07:05:00,2026-03-02 08:10:00,Felt strong,Bent Over Row (Barbell),A,,0,normal,70,8,,,
Upper A,2026-03-02 07:05:00,2026-03-02 08:10:00,Felt strong,Overhead Press (Barbell),A,,1,normal,45,8,,,
Upper A,2026-03-02 07:05:00,2026-03-02 08:10:00,Felt strong,Pull up,,,0,normal,,8,,,
Upper A,2026-03-02 07:05:00,2026-03-02 08:10:00,Felt strong,Plank,,,0,normal,,,,60,
Lower A,2026-03-04 18:00:00,2026-03-04 19:00:00,,Squat (Barbell),,,0,normal,100,5,,,9
Lower A,2026-03-04 18:00:00,2026-03-04 19:00:00,,Romanian Deadlift (Barbell),,,0,normal,90,8,,,
Lower A,2026-03-04 18:00:00,2026-03-04 19:00:00,,Treadmill Running,,,0,normal,,,3,900,
That file makes two workouts. The first has seven exercises, one warmup set, a superset of two exercises (they share the label A), a bodyweight pull up, and a plank held for 60 seconds. The second has a squat, a deadlift, and a 3 km treadmill run.
Columns
| Column | Needed? | What it holds |
|---|---|---|
title |
yes | The workout name. Rows with the same title and start_time join into one workout. |
start_time |
yes | When the workout started. See Dates. |
end_time |
no | When it ended. Kinoku uses it to work out the duration. |
description |
no | A note for the whole workout. |
exercise_title |
yes | The exercise name. See Exercise names. |
superset_id |
no | A label. Rows that share a label are one superset. Leave blank for a normal set. |
exercise_notes |
no | A note for this set. |
set_index |
no | The order of the set inside the exercise. Start at 0. |
set_type |
no | normal, warmup, dropset, or failure. Blank means a normal working set. |
weight_kg |
no | The weight in kilograms. Leave blank for a bodyweight move. |
reps |
no | How many reps. |
distance_km |
no | Distance in kilometers, for cardio. |
duration_seconds |
no | Time in seconds, for a plank, a hold, or a run. |
rpe |
no | How hard the set felt, 1 to 10. |
Other layouts Kinoku reads
Kinoku also reads the export files from a few well-known apps. Each layout below is detected on its own, so you can hand Kinoku a file straight from that app.
Strong
Date,Workout Name,Exercise Name,Set Order,Weight,Reps,Distance,Seconds,Notes,Workout Notes,RPE,Workout Duration
2026-03-02 07:05:00,Upper A,Bench Press (Barbell),1,80,5,,,,,8,3900
2026-03-02 07:05:00,Upper A,Pull up,1,,8,,,,,,3900
Strong's older export has no unit column, so from the update after 1.6 Kinoku asks whether Weight is in kilograms or pounds before it imports the file. A Weight (kg) header names the unit and skips the question, and the recommended layout with weight_kg is still the clearest choice. Kinoku up to and including 1.6 reads Weight as kilograms, so on those releases convert pounds before you save the file, or use the FitNotes layout, which has a pounds column.
Strong 6.2.4 (checked September 2026) writes a different file: semicolon-separated, every field quoted, a Weight (kg) column in kilograms whatever the app's display unit, and one Rest Timer row per exercise. Kinoku up to and including 1.5.0 detects that file but drops the weight and turns the rest-timer row into an empty set. From Kinoku 1.6, it reads the weight, the workout length and any distance in that file, and it skips the rest-timer rows, as in this short sample. A W, D or F in place of the set number imports as a warm-up, drop or failure set. On an older release, keep the original file and check the preview before you save.
"Workout #";"Date";"Workout Name";"Duration (sec)";"Exercise Name";"Set Order";"Weight (kg)";"Reps";"RPE";"Distance (meters)";"Seconds";"Notes";"Workout Notes"
"1";"2026-03-02 07:05:00";"Upper A";"3900";"Bench Press (Barbell)";"1";"61.23492";"5";"";"";"";"";""
"1";"2026-03-02 07:05:00";"Upper A";"3900";"Bench Press (Barbell)";"2";"61.23492";"5";"";"";"";"";""
"1";"2026-03-02 07:05:00";"Upper A";"3900";"Bench Press (Barbell)";"Rest Timer";"";"";"";"";"120.0";"";""
Hevy
Hevy's export is the recommended shape above, with two differences. Hevy names the weight and distance columns after your unit setting, so an account set to pounds writes weight_lbs and distance_miles, and it writes dates like 6 Sep 2026, 18:00, with the month in the language Hevy is set to (6 Sept. 2026 in German, 6 9月 2026 in Japanese). Kinoku reads both column forms and every Hevy language, and converts pounds and miles for you, from the update after 1.2.0. Exercise names come out in that language too, so export with Hevy set to English if you can. If your Kinoku refuses a Hevy file, update it from Google Play and keep the file.
"title","start_time","end_time","description","exercise_title","superset_id","exercise_notes","set_index","set_type","weight_lbs","reps","distance_miles","duration_seconds","rpe"
"Push","6 Sep 2026, 18:00","6 Sep 2026, 19:05","","Bench Press (Barbell)",,"",0,"warmup",95,10,,,
"Push","6 Sep 2026, 18:00","6 Sep 2026, 19:05","","Bench Press (Barbell)",,"",1,"normal",175,5,,,8
"Push","6 Sep 2026, 18:00","6 Sep 2026, 19:05","","Treadmill Running",,"",0,"normal",,,1,600,
FitNotes and Jefit
Date,Exercise,Category,Weight (kgs),Weight (lbs),Reps,Distance,Distance Unit,Time,Comment
2026-03-02,Squat (Barbell),Legs,100,,5,,,,felt good
2026-03-04,Bench Press (Barbell),Chest,80,,5,,,,
This layout names its units. When both Weight (kgs) and Weight (lbs) are present, Kinoku reads the kilograms column and ignores the pounds column. If you only have pounds, use a header with just Weight (lbs):
Date,Exercise,Category,Weight (lbs),Reps,Comment
2026-03-02,Squat (Barbell),Legs,225,5,felt good
Minimal
The smallest layout Kinoku reads. Good for a quick log.
Date,Exercise,Weight,Reps,Notes
2026-03-02,Squat (Barbell),100,5,
2026-03-02,Bench Press (Barbell),80,5,
2026-03-04,Deadlift,120,3,top set
A plain Weight header names no unit, so from the update after 1.6 Kinoku asks whether it is in kilograms or pounds. A header that names the unit, Weight (kg) or Weight (lb), skips the question, and Kinoku up to and including 1.6 reads a plain Weight as kilograms. One workout is made per date. A set of reps written as 10/8/6 in one row becomes three sets.
Dates, numbers, and delimiters
- Dates. Kinoku reads several date shapes:
2026-03-02,2026-03-02 18:05,2026-03-02T18:05:00,03/02/2026(month first),02.03.2026(day first), and a few Asian shapes. The clearest shape isYYYY-MM-DDorYYYY-MM-DD HH:MM:SS. A slash date like03/04/2026is read month first, so it means March 4. Times are read in your phone's local time. - A date Kinoku cannot read lands the workout on 1 January 1970. If you see workouts on that date after an import, the date column was in a shape Kinoku did not recognize. Use
YYYY-MM-DDto be safe. - Numbers. A decimal can use a dot or a comma. Both
22.5and22,5mean 22 and a half. - Delimiter. Kinoku reads comma files and semicolon files. It picks the one your header uses.
Date;Exercise;Weight;Reps;Notes
2026-03-02;Squat (Barbell);82,5;5;deload week
- Text. Save the file as UTF-8. A byte-order mark is fine. Quoted fields and line breaks inside a quoted field are fine.
- Extra columns are ignored. Kinoku reads the columns it knows and skips the rest. Blank lines are skipped.
Units
- The recommended layout uses
weight_kganddistance_km, so units are clear. - The Strong and Minimal layouts have no unit column, so from the update after 1.6 Kinoku asks whether their weights are kilograms or pounds. Kinoku up to and including 1.6 reads them as kilograms, so convert pounds first on those releases.
- The FitNotes layout names its units with the header (
Weight (kgs)orWeight (lbs)) and aDistance Unitcolumn. - A Hevy export names its units in the header too:
weight_kganddistance_km, orweight_lbsanddistance_miles. Kinoku converts the pound and mile forms. - Time is in seconds. The FitNotes
Timecolumn also readsH:MM:SSandMM:SS.
Exercise names
Kinoku has more than 1,300 built-in exercises. When it reads a name, it tries to match one:
- An exact name match wins.
- Common short names expand first.
rdlbecomes Romanian Deadlift,ohpbecomes Overhead Press,bb rowbecomes a barbell row. - If nothing matches well, Kinoku makes a new custom exercise with that name.
You see every match on the review screen before anything is saved, and you can change any of them.
Tips for the best match:
- Use the built-in name when you can. The pattern is
Movement (Equipment), likeBench Press (Barbell)orRomanian Deadlift (Barbell). Some names have no equipment tag, likePull uporPlank. - The full list of built-in names is at /import-format/exercise-names.txt. An AI assistant can read that list and pick exact names, so every set matches and no custom exercise is made.
What is not imported from a CSV
A CSV brings in workouts and their sets. It does not bring in:
- Routines, planned calendar workouts, or training programs.
- Custom metrics, body measurements, or progress photos.
- Steps or GPS routes.
Two paths cover the rest. A full Kinoku ZIP backup restores everything, because it is a copy of the app's own data. And you can paste a plan as text to build routines. See Routines from pasted text. Kinoku can also look at repeated sessions in your imported history and suggest routines on the review screen.
GPS runs from Strava have their own reader. See the Strava import page.
Importing the same file twice
For the Kinoku layouts, give each workout a stable id and Kinoku will not import it twice. In Kinoku CSV that is the workout_id column; in Kinoku Import JSON it is the id on each workout. Kinoku matches a workout by its date and its id together. So the same id on a different day in another file still imports, and you do not need ids to be unique across files. On a second import, a workout whose date and id were already brought in is skipped, and Kinoku tells you how many it skipped. Delete a workout for good and it is freed, so it imports again next time. An id can be up to 64 characters of letters, numbers, and . _ : -.
The other CSV layouts (Strong, FitNotes, Hevy, and the minimal shape) and Strava archives have no id, so Kinoku makes one from the minute each workout starts. FitNotes writes no time, so its key is the date, and a Strava archive uses its activity ID. A second import of the same file, or of a newer export from the same app, skips every workout that is already in Kinoku. It also finds most of the workouts an older Kinoku brought in, by their start time and their sets. The key leaves out the name and the sets. So if you rename a workout or add sets to it in the other app, it is still skipped and that change does not reach Kinoku. Kinoku up to and including 1.6 makes no key, so on those versions a second import makes two copies. If that happens, open Import History on the Import screen and undo the extra import.
File size
There is no hard limit. The test suite includes a file with 4,000 rows. A very large file just takes a little longer on the review step.
Kinoku Import JSON
One JSON file can carry your full history and your future plan together: past workouts, routines, a dated calendar plan, recurring days, custom metrics, and per-lift training maxes. It is the best shape to ask an AI assistant for when you want routines and a plan, not only history. This layout is new. If your app does not read it yet, update Kinoku from Google Play.
{
"format": "kinoku-import",
"version": 1,
"units": { "weight": "kg", "distance": "km" },
"exercises": [ { "name": "Side Plank", "time_per_side": true } ],
"workouts": [
{ "date": "2026-08-18T18:05", "name": "Upper A", "notes": "felt strong",
"exercises": [
{ "exercise": "Bench Press (Barbell)",
"sets": [ { "weight": 60, "reps": 10, "type": "warmup" }, { "weight": 100, "reps": 5, "rpe": 8, "rir": 2 } ] },
{ "exercise": "Plank", "sets": [ { "time_s": 60 } ] },
{ "exercise": "Side Plank", "sets": [ { "time_s": 38, "side_count_used": 2, "left_side_sec": 45, "right_side_sec": 38 } ] },
{ "exercise": "Running", "sets": [ { "distance": 5, "time_s": 1500 } ] },
{ "exercise": "Stair Climber", "sets": [ { "reps": 2000, "time_s": 900, "count_unit_used": "steps" } ] } ] }
],
"routines": [
{ "name": "Upper A", "role": "main",
"exercises": [
{ "exercise": "Bench Press (Barbell)", "tempo": "3010",
"sets": [ { "pct_tm": 65, "reps": 5, "rest_s": 180 }, { "pct_tm": 85, "reps": 5, "reps_high": 8, "rpe": 9 } ] } ] }
],
"plan": {
"scheduled": [ { "date": "2026-09-01", "routine": "Upper A" }, { "date": "2026-09-03", "type": "run", "title": "Tempo", "distance": 8 } ],
"recurring": [ { "routine": "Upper A", "days": ["MON", "THU"], "start": "2026-09-08", "weeks": 12 } ]
},
"metrics": [ { "name": "Sleep quality", "type": "scale", "scale_min": 1, "scale_max": 5 } ],
"metric_logs": [ { "metric": "Sleep quality", "date": "2026-08-18", "scale": 4 } ],
"training_max": [ { "exercise": "Bench Press (Barbell)", "value": 110 } ]
}
The example above is the public authoring subset, not an exhaustive schema dump. A current Kinoku Export for AI file is the canonical template for less-common optional fields. The shape above is stable: format and version come first, weights follow units.weight, and exercises are named the same way as in the CSV layouts. Inside a set you can use weight, reps, distance (in your units.distance), and time_s (seconds, for a plank, a hold, or cardio like a run or a row).
If you log the weight of one dumbbell, kettlebell or cable handle, add "load_per_implement": true and its "equipment" to that lift in exercises. A lift with no equipment reads as a dumbbell, and the key does nothing on a barbell. Then give each of its sets "implement_count_used": 2 so your volume counts both. Older app versions skip these keys.
For a hold you time on each side, like a side plank, add "time_per_side": true to that move in exercises. Then give each of its sets "side_count_used": 2 and put the shorter side in time_s, so your total time counts the set twice. You can also add "left_side_sec" and "right_side_sec", and Kinoku keeps them only when the shorter of the two matches time_s. Older app versions skip these keys.
On a stair machine the reps number can count steps or floors, so add count_unit_used with steps or floors to that set, like the Stair Climber set above. A set with load_excluded set to true adds nothing to your lifted weight, which is how Kinoku marks a cardio set.
Kinoku CSV
A flat layout Kinoku owns, for people who prefer a spreadsheet but want more than the minimal layout. Only date and exercise are required. Every other column is optional, and the order is free. This layout is new. If your app does not detect it yet, update Kinoku from Google Play.
date,workout,workout_id,exercise,set,type,weight,weight_unit,reps,rir,rpe,distance,distance_unit,duration_s,superset,notes,workout_notes,workout_duration_min,body_weight,count_unit,load_excluded
2026-03-02,Upper A,,Bench Press (Barbell),1,warmup,40,kg,10,,,,,,,,,62,82,,
2026-03-02,Upper A,,Bench Press (Barbell),2,working,100,kg,5,2,8,,,,,,,62,82,,
2026-03-02,Upper A,,Pull up,1,working,,,8,1,,,,,,,,62,82,,
2026-03-02,Upper A,,Stair Climber,1,working,,,2000,,,,,900,,,,62,82,steps,true
weight_unit reads kg, lb, or lbs, and blank means kilograms. distance_unit reads km, mi, or m, and blank means kilometers. type reads warmup, working, failure, drop, or rest_pause. body_weight records what you weighed, so bodyweight moves like the pull up carry the right load.
The count_unit column reads reps, steps, or floors, and a blank cell uses the unit of the exercise. The load_excluded column reads true or false, and true means the set adds nothing to your lifted weight.
Routines from pasted text
You do not always need a file. On the Import screen you can paste a plan as text, and Kinoku turns it into routines. It reads lines like these:
Monday: Upper
Bench Press: 3 sets x 5 reps
Bent Over Row: 3 sets x 8-10 reps
Plank: 3 sets x 45 seconds
Thursday: Lower
Squat: 3 sets x 5 reps
Romanian Deadlift: 3 sets x 8 reps
Day headers like Monday: or Day 1: start a new routine. Rep ranges and time targets are read too.
Export for AI
Kinoku can also go the other way. In Settings → Import & Export → Export for AI, pick how much to include and share the file with your assistant. It is a small text file, so you can hand your training to an AI app without typing it out.
The file is a Kinoku Import JSON document, the same one described above. So the assistant can read it, and anything it writes back in the same shape imports straight away.
Two extra keys ride along. Kinoku ignores both when reading a file, so an export you got from Kinoku can be imported back into Kinoku unchanged.
{
"format": "kinoku-import",
"version": 1,
"ai_instructions": [
"This is a Kinoku training export. Weights are kilograms and distances are kilometres."
],
"summary": {
"date_from": "2026-07-01",
"date_to": "2026-08-25",
"workout_count": 18,
"set_count": 214,
"top_exercises": ["Bench Press (Barbell)", "Squat (Barbell)"],
"body_weight_kg": 82.0,
"body_weight_trend": "steady"
},
"workouts": [
{
"id": "kinoku-1042",
"date": "2026-08-24",
"name": "Push",
"exercises": [
{ "exercise": "Bench Press (Barbell)", "sets": [ { "weight": 100, "reps": 5 } ] }
]
}
]
}
ai_instructionstells the assistant what the file is and what to send back.summaryis a short preamble so it can get its bearings without adding up every set first. Everything in it comes from the workouts below it.
What the file leaves out
Some things are never exported, and there is no setting to turn them on:
- Cycle and pregnancy tracking. The export has no way to read it.
- Progress photos.
- GPS routes.
Health Connect readings are off unless you switch them on.
Sending it back
Ask for a plan, then share the assistant's file back to Kinoku. You can send it straight from the chat app: Kinoku appears in the share sheet.
Your old workouts will not be duplicated. Every workout in an export carries an
id like kinoku-1042, and Kinoku skips an id it has already seen. If the assistant
repeats your history back, those rows are skipped and only the new ones import. You
still see the preview first, and Undo still removes the whole import.
That skip covers workouts. Routines, planned days and metrics have no id of their own, so if the assistant repeats those back they come in again as copies. Ask it for only the new parts, and use Undo on the import screen if a reply brings back more than you wanted.
About the file name
The file is named .txt even though it holds JSON, because more AI apps accept a
.txt upload. Kinoku reads the contents, not the file name, so the name never
changes what it does.
Prompt for your AI assistant
Copy this, paste it into your assistant, and paste your training log after it.
I want to import my training history into Kinoku (Android). Read the import format at https://kinoku.app/import-format.md and turn the log I paste below into ONE CSV file in the recommended shape (format B).
Rules:
- Use exactly this header line: title,start_time,end_time,description,exercise_title,superset_id,exercise_notes,set_index,set_type,weight_kg,reps,distance_km,duration_seconds,rpe
- Dates as yyyy-MM-dd HH:mm:ss.
- Weights in kilograms. Convert pounds and round to 2 decimals.
- One row per set. set_index starts at 0 for each exercise.
- set_type is normal, warmup, dropset, or failure.
- Use Kinoku built-in exercise names when you can, in the pattern Movement (Equipment), for example Bench Press (Barbell).
- Leave a cell blank when you do not have the value. Do not invent data.
Give me the CSV in one code block, then list anything you could not map.
Prompt for a training plan
This prompt asks an AI assistant to write you a new plan, not to convert an old log. It works in ChatGPT, Claude, Gemini or any other chat assistant.
I want a training plan for Kinoku, a workout app on my Android phone.
First ask me these questions one at a time, and wait for each answer:
1. My goal, such as strength, muscle, fat loss or general fitness.
2. How many days a week I can train, and which days.
3. Where I train and what equipment I have.
4. How long one session can be.
5. Any injury, or any movement I want to avoid.
6. My current working weight on the main lifts, if I know it.
7. Kilograms or pounds.
8. The date of my first session, and how many weeks to plan.
Then write the plan as ONE Kinoku Import JSON document in a single json code block. The format is at https://kinoku.app/import-format.md and the exercise names Kinoku knows are at https://kinoku.app/import-format/exercise-names.txt.
Rules:
- Start the document with "format": "kinoku-import" and "version": 1.
- Put each training day in "routines", with its exercises, sets and reps, and a weight when you have one.
- Put every session in "plan" as its own dated entry in "scheduled", with the date as yyyy-MM-dd and the name of its routine.
- Add "training_max" only for lifts where I gave you a weight.
- Use Kinoku exercise names in the pattern Movement (Equipment), for example Bench Press (Barbell).
- Leave a weight out when you do not know it. Do not invent numbers.
If you cannot open the links, follow this shape after the two opening keys:
{"units": {"weight": "kg"},
"routines": [{"name": "Upper A", "exercises": [{"exercise": "Bench Press (Barbell)", "sets": [{"reps": 5, "weight": 60}]}]}],
"plan": {"scheduled": [{"date": "2026-10-06", "routine": "Upper A"}]},
"training_max": [{"exercise": "Bench Press (Barbell)", "value": 70}]}
After the code block, list anything you could not map.
The assistant asks its questions, then replies with a file like this one. Copy the code block, open Kinoku, go to Settings, then Import & Export, then Import from CSV, and tap Paste Workout Plan. You see a preview before anything is saved, and Undo removes the whole import.
{
"format": "kinoku-import",
"version": 1,
"units": { "weight": "kg" },
"routines": [
{ "name": "Upper A",
"exercises": [
{ "exercise": "Bench Press (Barbell)", "sets": [ { "reps": 5, "weight": 60 }, { "reps": 5, "weight": 60 }, { "reps": 5, "weight": 60 } ] },
{ "exercise": "Bent Over Row (Barbell)", "sets": [ { "reps": 8, "weight": 50 }, { "reps": 8, "weight": 50 } ] } ] },
{ "name": "Lower A",
"exercises": [
{ "exercise": "Squat (Barbell)", "sets": [ { "reps": 5, "weight": 80 }, { "reps": 5, "weight": 80 }, { "reps": 5, "weight": 80 } ] },
{ "exercise": "Plank", "sets": [ { "time_s": 45 }, { "time_s": 45 } ] } ] }
],
"plan": {
"scheduled": [
{ "date": "2026-10-06", "routine": "Upper A" },
{ "date": "2026-10-08", "routine": "Lower A" },
{ "date": "2026-10-13", "routine": "Upper A" },
{ "date": "2026-10-15", "routine": "Lower A" }
]
},
"training_max": [ { "exercise": "Squat (Barbell)", "value": 100 } ]
}
Each session is its own dated day on the calendar, so the plan needs no repeating schedule. A training max only fills in a lift that has none yet. It never replaces one you set.
Version notes
- 2026-10 adds the re-import skip for files from other apps, so from the update after 1.6 a newer Strong, Hevy, FitNotes or Strava export adds only the new workouts.
- 2026-10 adds keys for a hold you time on each side, like a side plank, and for the time of each side.
- 2026-10 adds two keys for a lift where you log the weight of one dumbbell from a pair.
- 2026-10 adds count units, so a stair machine set can count steps or floors and a cardio set can add no lifted weight.
- 2026-10 adds the plan prompt: an AI assistant asks a few questions, then writes routines and dated calendar days in one file.
- 2026-08 adds the Export for AI file: the same layout, going the other way, with two keys Kinoku ignores on the way back in.
- 2026-08 first version. Documents the CSV layouts Kinoku reads, plus the Kinoku CSV and Kinoku Import JSON layouts and the id-based skip for re-imports. The two Kinoku layouts and the skip need a current app version, so update Kinoku if your app does not read them yet. Every example on this page is checked against the app's own reader by an automated test.

