Skip to content

Migrate from JEFIT ​

Export your training history from JEFIT and convert it to openweight format in under a minute.

Step 1: Export from JEFIT ​

  1. Open the JEFIT app
  2. Go to Settings → Account
  3. Tap Export Data
  4. Save the CSV file (e.g., jefit.csv)

TIP

JEFIT exports a multi-section file containing both your workout sessions and exercise logs. The converter handles this composite format automatically.

Step 2: Convert ​

bash
npx @openweight/cli convert --weight-unit kg jefit.csv -o workouts.json --pretty

Weight unit is required

JEFIT's export doesn't include weight units — it depends on your in-app setting. You mustspecify --weight-unit kg or --weight-unit lb to match what you used in JEFIT.

Step 3: Verify (optional) ​

bash
npx @openweight/cli validate workouts.json

Or see full conversion stats:

bash
npx @openweight/cli convert --weight-unit kg jefit.csv -o workouts.json --pretty --report

Example output:

--- Conversion Report ---
Source:     jefit
Rows:       1847/1847 converted, 0 skipped
Workouts:   147
Exercises:  26

What Gets Converted ​

JEFIT fieldopenweight fieldNotes
starttime / starttimie / mydatedatePrefers Unix timestamp; falls back to date string
total_timedurationSecondsSeconds; 0 is treated as no duration
enameexercise.nameNormalized when possible
logs (100x5,100x5)sets[].weight + sets[].repsEach weightxreps token becomes a set

JEFIT's Export Format ​

Unlike Strong and Hevy (which export flat CSV with one row per set), JEFIT exports a multi-section composite file:

### WORKOUT SESSIONS ###
_id,mydate,starttime,starttimie,total_time
1,2024-01-15,1705305000,,3600
###########################

### EXERCISE LOGS ###
belongsession,ename,logs
1,"Barbell Bench Press","100x5,100x5,100x3"
###########################

The converter joins sessions and exercise logs by session ID, unpacks the packed set data, and produces standard openweight workout logs.

Date Resolution ​

JEFIT exports contain multiple date fields (including a known typo in the column name). The converter uses this fallback chain:

  1. starttime — Unix timestamp (preferred)
  2. starttimie — typo variant of starttime (used when starttime is empty)
  3. mydate — date string fallback (e.g., 2024-01-15)

Bodyweight Exercises ​

JEFIT records bodyweight exercises (pull-ups, dips, push-ups) with weight=0. The converter treats these as bodyweight — the weight field is omitted, and only reps are recorded.

Exercise Name Normalization ​

Common JEFIT exercise names are mapped to canonical names:

JEFIT nameopenweight name
Barbell Bench PressBench Press
Barbell SquatSquat
Barbell Overhead PressOverhead Press
Barbell RowBent Over Row
Dumbbell CurlBicep Curl
Dumbbell Lateral RaiseLateral Raise
Pull UpPull-up
Barbell Hip ThrustHip Thrust

Exercises that don't have a known mapping are kept as-is and flagged in the report.

Full CLI Reference ​

npx @openweight/cli convert <file> [options]

Options:
  -f, --format <format>       Source format (auto-detected from section markers)
  -u, --weight-unit <unit>    Weight unit: kg or lb (required for JEFIT)
  -o, --output <file>         Output file (default: stdout)
  --pretty                    Pretty-print JSON output
  --report                    Print conversion report to stderr

Example Output ​

A single JEFIT workout converts to:

json
{
  "date": "2024-01-15T07:30:00Z",
  "durationSeconds": 3600,
  "exercises": [
    {
      "exercise": {
        "name": "Bench Press"
      },
      "sets": [
        {
          "reps": 5,
          "weight": 100,
          "unit": "kg"
        },
        {
          "reps": 5,
          "weight": 100,
          "unit": "kg"
        },
        {
          "reps": 3,
          "weight": 100,
          "unit": "kg"
        }
      ]
    },
    {
      "exercise": {
        "name": "Pull-up"
      },
      "sets": [
        {
          "reps": 10
        },
        {
          "reps": 8
        },
        {
          "reps": 6
        }
      ]
    }
  ]
}

Multiple workouts are output as a JSON array.

Troubleshooting ​

"Weight unit is required for JEFIT format" ​

JEFIT's export doesn't include units. Add --weight-unit kg or --weight-unit lb to match your JEFIT app settings.

Exercises show as "unmapped" ​

This is normal. The converter has mappings for ~80 common exercises. Anything not in the mapping table is kept exactly as it appears in JEFIT. Check the --report output to see which exercises were unmapped.

Some exercises have 0 sets ​

If JEFIT exported an exercise with an empty logs field, it will be skipped and a warning will appear in the report. This usually means the exercise was added to a session but no sets were actually logged.

Duplicate session IDs ​

If the export contains duplicate session IDs (rare), the converter uses the first occurrence and warns about duplicates in the report.

Released under the Apache 2.0 License.