KineticPacer by ACMINC
Community Documentation

Kinetic custom import format for community packs and custom programs.

This page explains the JSON formats Kinetic currently accepts for custom strength content. It is meant for developers, IDE agents, AI workflows, and community contributors who want to build reusable workout libraries, dated planners, or importable strength packs that Kinetic can open directly.

What this page covers

  • The accepted custom import file families.
  • The exact enum values Kinetic expects.
  • When to reuse built-in exercises instead of creating duplicates.
  • Examples, schema shapes, validator access, prompt templates, and import steps.

Accepted file families

  • .kinetic-workout-library for reusable workouts and custom exercises.
  • .kinetic-strength-plan for dated calendars, schedules, and rest days.
  • Plain .json is also accepted if the payload matches one of the supported schemas.

Need a starting point for AI prompts or manual editing? Download the sample files: sample workout library and sample strength plan.

1. Scope

Kinetic currently accepts two import families for custom strength content. If you are creating reusable saved workouts or a community exercise pack, use the workout library format. If you are creating a weekly split, dated schedule, or planner, use the strength planning calendar format.

Strength Workout Library

Use this for reusable saved workouts and custom exercises.

.kinetic-workout-library .json

Strength Planning Calendar

Use this for dated plans, weekly schedules, rest days, and planned exercise blocks.

.kinetic-strength-plan .json

Kinetic does not currently accept a separate custom schedule file type beyond the strength planning format. If someone asks for a planner, schedule, or dated split, that still maps to the strength planning calendar schema.

2. Encoding Rules

All accepted import files should follow these rules:

  • Format: JSON.
  • Character set: UTF-8.
  • Dates: full ISO 8601 date-time strings.
  • schemaVersion: integer.
  • bodyRegionsRaw: comma-separated raw values, such as "chest,triceps,shoulders".
  • Field names are case-sensitive.
  • Unknown enum strings may import badly or fall back incorrectly, so use the exact enum values listed on this page.

Kinetic exports pretty-printed JSON with sorted keys. Importers do not need to match that exact formatting, but matching it makes review and debugging much easier.

Date format matters more than it may seem. Do not use loose date-only strings like 2026-04-06. Use full ISO 8601 date-time strings such as 2026-04-06T00:00:00Z for exportedAt, createdAt, updatedAt, and plan entry date.

3. Strict vs Flexible Fields

Some fields must use exact Kinetic-supported values. Others are flexible text fields intended for names, notes, branding, and explanation.

Strict fields

These fields must use exact supported raw values:

schemaVersion exerciseCategory equipment bodyRegionsRaw entryType

Flexible fields

These fields are free text:

name title notes goal category on workout programs appVersion

If the strict fields use unsupported values, import behavior may break, search may degrade, and filters or body-region mapping may stop behaving correctly.

Field Type Strict? Accepted Values
schemaVersion integer Yes 1
exerciseCategory string Yes push, pull, squat, hinge, lunge, carry, rotation, isolation, core
equipment string Yes bodyweight, dumbbell, barbell, kettlebell, cable, machine, band, smith, trap_bar
bodyRegionsRaw string Yes Comma-separated list using the supported body region raw values below.
entryType string Yes workout, rest
name string No Free text.
title string No Free text.
notes string No Free text.
goal string No Free text.
category string No Free text.
appVersion string No Free text.

4. Allowed Enum Values

Strength exercise category

push pull squat hinge lunge carry rotation isolation core

Equipment

bodyweight dumbbell barbell kettlebell cable machine band smith trap_bar

Body region raw values

chest upperBack lowerBack shoulders biceps triceps forearms core glutes quads hamstrings calves adductors abductors traps
{
  "bodyRegionsRaw": "chest,shoulders,triceps"
}

5. Reuse Built-In Exercises First

Before creating a customExercises entry, check whether Kinetic already ships the movement as a built-in strength exercise. If it exists in the default library, use the built-in exerciseIdentifier instead of creating a duplicate custom exercise with the same meaning.

  • Built-in exercises stay aligned with Kinetic search and body-region mapping.
  • Community packs stay cleaner and more interoperable.
  • Users avoid duplicate entries like Barbell Bench Press and Barbell Bench Press Custom.

Rule: if the movement exists in the default library, use its exact id as exerciseIdentifier. Only create a customExercises entry when the movement truly does not exist in the built-in library.

Important: built-in exercises do not need a separate built-in UUID field in the import JSON. For built-ins, Kinetic matches on exerciseIdentifier. The id on each exercise row is just that row's own UUID. The UUID that matters for custom exercise linking is the customExercises[].id, because custom references use custom-<lowercased-uuid>.

Built-In Exercise exerciseIdentifier Category Equipment
Barbell Back Squatbarbell_back_squatsquatbarbell
Romanian Deadliftromanian_deadlifthingebarbell
Dumbbell Bench Pressdumbbell_bench_presspushdumbbell
Pull-Uppull_uppullbodyweight
Walking Lungewalking_lungelungedumbbell
Overhead Pressoverhead_presspushbarbell
Cable Rowcable_rowpullcable
Goblet Squatgoblet_squatsquatdumbbell
Farmer's Carryfarmers_carrycarrydumbbell
Plankplankcorebodyweight
Leg Pressleg_presssquatmachine
Cable Face Pullcable_face_pullpullcable
Barbell Bench Pressbarbell_bench_presspushbarbell
Incline Dumbbell Pressincline_dumbbell_presspushdumbbell
Lat Pulldownlat_pulldownpullcable
Seated Cable Rowseated_cable_rowpullcable
Barbell Bent-Over Rowbarbell_bent_over_rowpullbarbell
Dumbbell Lateral Raisedumbbell_lateral_raiseisolationdumbbell
Triceps Pushdowntriceps_pushdownisolationcable
Dumbbell Biceps Curldumbbell_biceps_curlisolationdumbbell
Bulgarian Split Squatbulgarian_split_squatlungedumbbell
Glute Bridgeglute_bridgehingebodyweight
Standing Calf Raisestanding_calf_raiseisolationmachine
Dead Bugdead_bugcorebodyweight

Correct built-in reference example

{
  "id": "A4C39D24-BA98-45E8-A668-3E8B5F5E8D7A",
  "exerciseIdentifier": "barbell_bench_press",
  "exerciseName": "Barbell Bench Press",
  "exerciseCategory": "push",
  "equipment": "barbell",
  "bodyRegionsRaw": "chest,triceps,shoulders",
  "sortOrder": 0,
  "targetSets": 4,
  "targetReps": 8,
  "targetWeight": 135,
  "targetRestSeconds": 120
}

In this example, barbell_bench_press is enough to target the built-in movement. Do not add a duplicate custom exercise entry for Barbell Bench Press.

When to create a custom exercise instead

  • A gym-specific machine movement.
  • A renamed house variation used by a coach or creator.
  • An uncommon cable or band drill not in the default library.
  • A specialty bar or unilateral variation that needs its own entry.

6. Supported Import Formats

Format 1: Strength Workout Library

Use this format to import saved strength workouts, workout packs, community workout libraries, and custom exercises.

Top-level shape

{
  "schemaVersion": 1,
  "exportedAt": "2026-03-28T18:00:00Z",
  "appVersion": "1.0 (1)",
  "programs": [],
  "customExercises": []
}

Workout library schema

{
  "schemaVersion": 1,
  "exportedAt": "ISO8601 date",
  "appVersion": "string",
  "programs": [
    {
      "id": "UUID",
      "name": "string",
      "category": "string",
      "notes": "string",
      "createdAt": "ISO8601 date",
      "updatedAt": "ISO8601 date",
      "exercises": [
        {
          "id": "UUID",
          "exerciseIdentifier": "string",
          "exerciseName": "string",
          "exerciseCategory": "push|pull|squat|hinge|lunge|carry|rotation|isolation|core",
          "equipment": "bodyweight|dumbbell|barbell|kettlebell|cable|machine|band|smith|trap_bar",
          "bodyRegionsRaw": "comma-separated body region raw values",
          "sortOrder": 0,
          "targetSets": 3,
          "targetReps": 8,
          "targetWeight": 135.0,
          "targetRestSeconds": 90
        }
      ]
    }
  ],
  "customExercises": [
    {
      "id": "UUID",
      "name": "string",
      "category": "push|pull|squat|hinge|lunge|carry|rotation|isolation|core",
      "equipment": "bodyweight|dumbbell|barbell|kettlebell|cable|machine|band|smith|trap_bar",
      "bodyRegionsRaw": "comma-separated body region raw values",
      "createdAt": "ISO8601 date",
      "updatedAt": "ISO8601 date"
    }
  ]
}

Important workout library rules

  • programs are reusable saved workouts, not dated calendar entries.
  • category on a program is free text.
  • exerciseIdentifier should match the built-in exercise id when referencing a built-in movement. No separate built-in UUID field is required.
  • For imported custom exercises, Kinetic remaps identifiers during import based on customExercises[].id.
  • If a program references an imported custom exercise, use "custom-<lowercased-uuid-from-customExercises[].id>".
  • The exercise row's own id is not the built-in exercise id. It is just the UUID for that imported row.
  • Duplicate workout and custom exercise names are resolved with collision-safe copy names during import.

Example workout library file

{
  "schemaVersion": 1,
  "exportedAt": "2026-03-28T18:00:00Z",
  "appVersion": "Community Pack 1",
  "programs": [
    {
      "id": "2A9137A7-2F74-4FCA-B1A1-B91ECF3F7F14",
      "name": "Upper Hypertrophy A",
      "category": "Hypertrophy Split",
      "notes": "Chest, shoulders, triceps focus.",
      "createdAt": "2026-03-28T18:00:00Z",
      "updatedAt": "2026-03-28T18:00:00Z",
      "exercises": [
        {
          "id": "A4C39D24-BA98-45E8-A668-3E8B5F5E8D7A",
          "exerciseIdentifier": "barbell_bench_press",
          "exerciseName": "Barbell Bench Press",
          "exerciseCategory": "push",
          "equipment": "barbell",
          "bodyRegionsRaw": "chest,shoulders,triceps",
          "sortOrder": 0,
          "targetSets": 4,
          "targetReps": 8,
          "targetWeight": 135,
          "targetRestSeconds": 120
        }
      ]
    }
  ],
  "customExercises": [
    {
      "id": "B4D0D1E5-DF45-4A7A-B2AF-0A7E87F93289",
      "name": "Cable High Crossover",
      "category": "push",
      "equipment": "cable",
      "bodyRegionsRaw": "chest,shoulders",
      "createdAt": "2026-03-28T18:00:00Z",
      "updatedAt": "2026-03-28T18:00:00Z"
    }
  ]
}

Format 2: Strength Planning Calendar

Use this format to import custom planners, weekly or monthly schedules, dated hypertrophy or strength splits, preplanned rest days, and community schedule packs.

Top-level shape

{
  "schemaVersion": 1,
  "exportedAt": "2026-03-28T18:00:00Z",
  "appVersion": "1.0 (1)",
  "plans": []
}

Strength planning schema

{
  "schemaVersion": 1,
  "exportedAt": "ISO8601 date",
  "appVersion": "string",
  "plans": [
    {
      "id": "UUID",
      "name": "string",
      "goal": "string",
      "notes": "string",
      "createdAt": "ISO8601 date",
      "updatedAt": "ISO8601 date",
      "entries": [
        {
          "id": "UUID",
          "date": "ISO8601 date-time",
          "entryType": "workout|rest",
          "title": "string",
          "notes": "string",
          "exercises": [
            {
              "id": "UUID",
              "exerciseIdentifier": "string",
              "exerciseName": "string",
              "exerciseCategory": "push|pull|squat|hinge|lunge|carry|rotation|isolation|core",
              "equipment": "bodyweight|dumbbell|barbell|kettlebell|cable|machine|band|smith|trap_bar",
              "bodyRegionsRaw": "comma-separated body region raw values",
              "sortOrder": 0,
              "targetSets": 3,
              "targetReps": 8,
              "targetWeight": 0,
              "targetRestSeconds": 90
            }
          ]
        }
      ]
    }
  ]
}

Important planning rules

  • plans are reusable named calendars.
  • entries are dated, so this is the correct format for schedules.
  • date must be a full ISO 8601 date-time string, for example 2026-04-07T00:00:00Z.
  • entryType must be exactly workout or rest.
  • A rest entry should generally have an empty exercises array.
  • title is free text, such as Chest, Back, Rest Day, or Push A.
  • Plan names import with collision-safe copy names if duplicates already exist.

For plans[].entries[].date, use a full timestamp like 2026-04-07T00:00:00Z. Plain YYYY-MM-DD values are easy for AI to generate, but they are not the safe format to use here.

Example strength plan file

{
  "schemaVersion": 1,
  "exportedAt": "2026-03-28T18:00:00Z",
  "appVersion": "Community Plan Pack 1",
  "plans": [
    {
      "id": "931761E7-38E7-4F77-8BA4-87CC8F442FF5",
      "name": "Hypertrophy Week 1",
      "goal": "Build muscle with varied movement selection week to week.",
      "notes": "Duplicate forward and swap compounds as needed.",
      "createdAt": "2026-03-28T18:00:00Z",
      "updatedAt": "2026-03-28T18:00:00Z",
      "entries": [
        {
          "id": "974FF916-4B25-4E2D-8F6F-78A1655E7E9D",
          "date": "2026-03-30T00:00:00Z",
          "entryType": "workout",
          "title": "Chest Monday",
          "notes": "Primary chest focus.",
          "exercises": [
            {
              "id": "5CD4C78D-F9CC-4FD5-A0CD-F4C1E1909DB2",
              "exerciseIdentifier": "barbell_bench_press",
              "exerciseName": "Barbell Bench Press",
              "exerciseCategory": "push",
              "equipment": "barbell",
              "bodyRegionsRaw": "chest,shoulders,triceps",
              "sortOrder": 0,
              "targetSets": 4,
              "targetReps": 8,
              "targetWeight": 135,
              "targetRestSeconds": 120
            }
          ]
        },
        {
          "id": "E75A9EB0-9CCB-45FD-A7FD-EA442A1C78B1",
          "date": "2026-04-01T00:00:00Z",
          "entryType": "rest",
          "title": "Rest Day",
          "notes": "Light walk only.",
          "exercises": []
        }
      ]
    }
  ]
}

7. Mapping Requests To Formats

User Goal Correct Format
Reusable custom workoutsStrength workout library
Community workout packStrength workout library
Custom exercise packStrength workout library
Weekly training split with datesStrength planning calendar
Monthly scheduleStrength planning calendar
Duplicate-ready weekly hypertrophy calendarStrength planning calendar
Rest-day scheduleStrength planning calendar

8. AI Prompt Templates

These prompt blocks are designed for ChatGPT, Codex, Claude, Cursor, Windsurf, or IDE agents. Copy one, then replace the brief at the bottom.

Prompt: generate a workout library pack

Generate a valid Kinetic strength workout library JSON file.

Requirements:
- Output JSON only.
- Use schemaVersion 1.
- Use full ISO 8601 date-time strings such as 2026-04-07T00:00:00Z.
- Include top-level fields: schemaVersion, exportedAt, appVersion, programs, customExercises.
- Use exact enum values for exerciseCategory, equipment, and bodyRegionsRaw.
- bodyRegionsRaw must be a comma-separated string using only:
  chest, upperBack, lowerBack, shoulders, biceps, triceps, forearms, core, glutes, quads, hamstrings, calves, adductors, abductors, traps
- Each program must include id, name, category, notes, createdAt, updatedAt, and exercises.
- Each exercise must include id, exerciseIdentifier, exerciseName, exerciseCategory, equipment, bodyRegionsRaw, sortOrder, targetSets, targetReps, targetWeight, targetRestSeconds.
- If you include customExercises, each must include id, name, category, equipment, bodyRegionsRaw, createdAt, updatedAt.
- Use realistic UUIDs.
- Do not include markdown fences.

Pack brief:
[PASTE THE COMMUNITY PACK OR CUSTOM LIBRARY REQUEST HERE]

Prompt: generate a strength planning calendar

Generate a valid Kinetic strength planning JSON file.

Requirements:
- Output JSON only.
- Use schemaVersion 1.
- Use full ISO 8601 date-time strings such as 2026-04-07T00:00:00Z.
- Include top-level fields: schemaVersion, exportedAt, appVersion, plans.
- Use exact enum values for exerciseCategory, equipment, and bodyRegionsRaw.
- entryType must be exactly workout or rest.
- bodyRegionsRaw must be a comma-separated string using only:
  chest, upperBack, lowerBack, shoulders, biceps, triceps, forearms, core, glutes, quads, hamstrings, calves, adductors, abductors, traps
- Each plan must include id, name, goal, notes, createdAt, updatedAt, and entries.
- Each entry must include id, date, entryType, title, notes, and exercises.
- Each entry date must be a full ISO 8601 timestamp, not YYYY-MM-DD.
- Workout entries should include planned exercises.
- Rest entries should usually have an empty exercises array.
- Each exercise must include id, exerciseIdentifier, exerciseName, exerciseCategory, equipment, bodyRegionsRaw, sortOrder, targetSets, targetReps, targetWeight, targetRestSeconds.
- Use realistic UUIDs.
- Do not include markdown fences.

Planning brief:
[PASTE THE WEEKLY SPLIT OR SCHEDULE REQUEST HERE]

Prompt: convert existing spreadsheet notes or a dump

Convert the following training notes into a valid Kinetic import file.

Rules:
- Decide whether the content is better represented as:
  1. a strength workout library, or
  2. a strength planning calendar
- Output JSON only.
- Use the exact Kinetic schema for the chosen format.
- Use schemaVersion 1.
- Use full ISO 8601 date-time strings such as 2026-04-07T00:00:00Z.
- Normalize all enum values to valid Kinetic raw values.
- Keep titles and notes human-readable.
- Preserve exercise order using sortOrder starting at 0.
- Use an empty exercises array for rest days.
- Do not include markdown fences or explanations.

Source content:
[PASTE NOTES, CSV ROWS, OR SPREADSHEET CONTENT HERE]

10. Import Instructions

Import a workout library

  1. Generate or download a valid .kinetic-workout-library file.
  2. Put it in Files, AirDrop it, or download it on the device.
  3. Open Kinetic.
  4. Go to Settings.
  5. Find the strength library import/export area.
  6. Tap the import action.
  7. Choose the file.
  8. Kinetic imports programs and custom exercises with collision-safe names.

Import a strength plan

  1. Generate or download a valid .kinetic-strength-plan file.
  2. Put it in Files, AirDrop it, or download it on the device.
  3. Open Kinetic.
  4. Go to the Strength Planner.
  5. Use the import action.
  6. Choose the file.
  7. Kinetic imports the plan and renames duplicates safely.

11. Packaging Advice For Community Packs

  • Prefer one coherent theme per file, such as upper-lower-hypertrophy-pack.kinetic-workout-library or 8-week-summer-cut.kinetic-strength-plan.
  • Use plain English titles and notes.
  • Keep planner dates intentional. If the pack is meant to be reused weekly, say that in notes.
  • Include both a planner file and a workout library file when shipping a complete community pack.

Best split for complete packs: one library file for reusable workouts and custom exercises, plus one planner file for the dated schedule.

12. Current Compatibility Notes

  • Kinetic currently imports schema version 1.
  • Kinetic accepts both custom file extensions and plain .json, as long as the JSON matches a valid accepted payload.
  • Strength planning imports are currently strength-only.
  • Not every custom concept is a separate file type. For now, planner and schedule both map to the strength planning format.