Build a program on a calendar grid, in a per-day UI, or as Liftoscript text. Edit sets, reps, weight, RPE and timers, and go back to any earlier version.
Open the editor
Tap Program in the footer, then the Edit tab. The header shows the program name, the number of weeks, days and exercises, and the average workout time. Next Day sets where the next workout starts.
The toolbar has undo, redo, four mode buttons and Save. The modes are the grid, the per-day UI, per-day text and full-program text. All four edit the same Liftoscript text. Save writes the program.
Lay out weeks and days on the grid
The grid is the default mode. Weeks are columns, days are rows, and every exercise is a strip. An exercise that repeats across weeks is one strip crossing those weeks.
Long-press an exercise and drag it to reorder it, or to move it to another day.
Long-press a day name and drag it. The day moves in every week, so a multi-week program keeps its layout.
Long-press a week name and drag it to reorder the weeks.
Drag the end of a strip into more weeks. The app rewrites the repeat range.
Pinch to zoom the weeks, in the iOS and Android apps.
Tap an exercise, a day name or a week name to select it. A dock appears above the footer. The pencil opens the editor for an exercise, or Edit day and Edit week for a name and a description. The three-dot menu duplicates, swaps or deletes an exercise, duplicates or deletes a day or a week, and opens Exercise stats, Day stats or Week stats.
+ Exercise, + Day and + Week add new ones.
Edit sets, reps, weight, RPE and timers
Tap the pencil on an exercise. A bottom sheet opens with the exercise line in Liftoscript. Tap a value, like 3x5 or 155lb, to get a hint and a row of pills. Swipe to move between values.
The pills depend on the value you tapped. Each one inserts or rewrites a piece of Liftoscript for you, so you never have to remember the syntax:
Tap the exercise name for line-level pills: Add sets, Add warmups, Add set variation, Add progress, Add update, Enable superset, Add label, Reuse…, Repeat… and Add forced order….
Tap a set group like 3x5 for set pills: Add weight, Add RPE, Add rest timer, Add set timer, Add auto, Add set label and Add another set group.
Tap the progress: part for Add state var, Require 2 successes, Add deload on failure and Reuse script from…. Tap a state variable inside custom(...) for Rename…, Make weight and Make number, which switch its value between a weight and a plain number.
Reps with a + are AMRAP. RPE with a + asks you to log the real RPE.
Double-tap the text to edit it as plain text. A suggestion strip on the keyboard offers exercise names, equipment variants, reuse targets like ...t1, section names, progress functions and state variables. Tap Apply to fold the text back, then Save.
When a line reuses another exercise, the preview icon right of the pills shows the line With reuses filled in. Edit a value there, and the original line gets the override.
Select a day or a week on the grid and tap Edit day or Edit week. The sheet has a Name field and a Markdown description. The week description shows on the Home screen, the day description on the workout screen.
Edit one day at a time in the UI mode
The second mode button shows one week, with a card per day. A day card has the name, a description, the exercise count and the time. An exercise card shows the warmups, the working sets, the superset group and the progression. Its icons swap the exercise, open its stats, open the editor sheet, or duplicate it.
Type the program as text
The third mode button shows every day as its own text editor. The fourth shows the whole program as one text, with # Week 1 and ## Upper A headings:
Both text modes have the same pills and suggestion strip. A syntax error keeps you on the Edit tab and greys out the grid and UI buttons until you fix it.
Check the sets per muscle group
Tap the week muscles icon next to the week name in the UI mode, or select a week on the grid and pick Week stats. The sheet shows Total Sets, Strength Sets and Hypertrophy Sets, then the sets and the weekly frequency per muscle group.
Each muscle group line reads like Chest: 8↑ (3s, 5h), 2d: 8 sets in total that week, of which 3 are strength (s, under 8 reps) and 5 hypertrophy (h, 8 reps or more), on 2 days (d). A synergist set counts as a fraction, 0.5 by default, and each number is rounded on its own, so the parts may not add up to the total.
Every muscle group has a weekly set range, 10 to 12 sets unless you change it, and a frequency target, 2 days by default. The total is green inside the range, yellow between 70% of the minimum and 130% of the maximum, red further off. The arrow tells you which way to go: ↑ means add sets, you are below the minimum, ↓ means you are above the maximum, no arrow means inside the range. The day count is green at the target, yellow at half of it, red below.
To change the ranges, the frequency targets or the synergist multiplier, tap Edit Weekly Muscle Range Settings at the bottom of the sheet. The same settings drive Week Insights for your finished workouts.
A front and back muscle map colors the muscles by volume. Tap a number to see which exercises count towards it.
The day muscles icon, or Day stats on the grid, shows one day.
Go back to an earlier version
Tap the three-dot menu in the top right and pick Show program versions. You need to be signed in. Pick a date, read that version's text, and tap Restore to load it into the editor.
Create a new program
Go to Me → Program to reach Choose a program. Tap Create New Program, enter a Program Name and tap Create. The new program opens in the editor with one week and one empty day.
{"feature":{"id":"program-editor","title":"Program Editor","shortDescription":"Build a program on a calendar grid, in a per-day UI, or as Liftoscript text. Edit sets, reps, weight, RPE and timers, and go back to any earlier version.","order":20,"category":"Programs","datePublished":"2026-09-27","dateModified":"2026-09-29","screenshots":["program-editor-grid","program-editor-exercise-sheet"]},"content":"## Open the editor\n\nTap **Program** in the footer, then the **Edit** tab. The header shows the program name, the number of weeks, days and exercises, and the average workout time. **Next Day** sets where the next workout starts.\n\nThe toolbar has undo, redo, four mode buttons and **Save**. The modes are the grid, the per-day UI, per-day text and full-program text. All four edit the same Liftoscript text. **Save** writes the program.\n\n## Lay out weeks and days on the grid\n\n\n\nThe grid is the default mode. Weeks are columns, days are rows, and every exercise is a strip. An exercise that repeats across weeks is one strip crossing those weeks.\n\n- Long-press an exercise and drag it to reorder it, or to move it to another day.\n- Long-press a day name and drag it. The day moves in every week, so a multi-week program keeps its layout.\n- Long-press a week name and drag it to reorder the weeks.\n- Drag the end of a strip into more weeks. The app rewrites the repeat range.\n- Pinch to zoom the weeks, in the iOS and Android apps.\n\nTap an exercise, a day name or a week name to select it. A dock appears above the footer. The pencil opens the editor for an exercise, or **Edit day** and **Edit week** for a name and a description. The three-dot menu duplicates, swaps or deletes an exercise, duplicates or deletes a day or a week, and opens **Exercise stats**, **Day stats** or **Week stats**.\n\n**+ Exercise**, **+ Day** and **+ Week** add new ones.\n\n## Edit sets, reps, weight, RPE and timers\n\n\n\nTap the pencil on an exercise. A bottom sheet opens with the exercise line in Liftoscript. Tap a value, like `3x5` or `155lb`, to get a hint and a row of pills. Swipe to move between values.\n\nThe pills depend on the value you tapped. Each one inserts or rewrites a piece of Liftoscript for you, so you never have to remember the syntax:\n\n- Tap the exercise name for line-level pills: **Add sets**, **Add warmups**, **Add set variation**, **Add progress**, **Add update**, **Enable superset**, **Add label**, **Reuse…**, **Repeat…** and **Add forced order…**.\n- Tap a set group like `3x5` for set pills: **Add weight**, **Add RPE**, **Add rest timer**, **Add set timer**, **Add auto**, **Add set label** and **Add another set group**.\n- Tap the `progress:` part for **Add state var**, **Require 2 successes**, **Add deload on failure** and **Reuse script from…**. Tap a state variable inside `custom(...)` for **Rename…**, **Make weight** and **Make number**, which switch its value between a weight and a plain number.\n\nReps with a `+` are AMRAP. RPE with a `+` asks you to log the real RPE.\n\nDouble-tap the text to edit it as plain text. A suggestion strip on the keyboard offers exercise names, equipment variants, reuse targets like `...t1`, section names, progress functions and state variables. Tap **Apply** to fold the text back, then **Save**.\n\nWhen a line reuses another exercise, the preview icon right of the pills shows the line **With reuses filled in**. Edit a value there, and the original line gets the override.\n\n[Liftoscript](/features/liftoscript) and [the syntax reference](/doc/liftoscript) cover the text form of all of these.\n\n## Name weeks and days, add descriptions\n\n\n\nSelect a day or a week on the grid and tap **Edit day** or **Edit week**. The sheet has a **Name** field and a Markdown description. The week description shows on the Home screen, the day description on the workout screen.\n\n## Edit one day at a time in the UI mode\n\n\n\nThe second mode button shows one week, with a card per day. A day card has the name, a description, the exercise count and the time. An exercise card shows the warmups, the working sets, the superset group and the progression. Its icons swap the exercise, open its stats, open the editor sheet, or duplicate it.\n\n## Type the program as text\n\n\n\nThe third mode button shows every day as its own text editor. The fourth shows the whole program as one text, with `# Week 1` and `## Upper A` headings:\n\n```liftoscript\n# Week 1\n## Upper A\nBench Press / 1x5 60%, 1x3 70%, 3x5 / 155lb / warmup: 1x5 45%, 1x3 65% / progress: lp(5lb)\n```\n\n\n\nBoth text modes have the same pills and suggestion strip. A syntax error keeps you on the **Edit** tab and greys out the grid and UI buttons until you fix it.\n\n## Check the sets per muscle group\n\n\n\nTap the week muscles icon next to the week name in the UI mode, or select a week on the grid and pick **Week stats**. The sheet shows **Total Sets**, **Strength Sets** and **Hypertrophy Sets**, then the sets and the weekly frequency per muscle group.\n\nEach muscle group line reads like `Chest: 8↑ (3s, 5h), 2d`: 8 sets in total that week, of which 3 are strength (`s`, under 8 reps) and 5 hypertrophy (`h`, 8 reps or more), on 2 days (`d`). A synergist set counts as a fraction, 0.5 by default, and each number is rounded on its own, so the parts may not add up to the total.\n\nEvery muscle group has a weekly set range, 10 to 12 sets unless you change it, and a frequency target, 2 days by default. The total is green inside the range, yellow between 70% of the minimum and 130% of the maximum, red further off. The arrow tells you which way to go: **↑** means add sets, you are below the minimum, **↓** means you are above the maximum, no arrow means inside the range. The day count is green at the target, yellow at half of it, red below.\n\nTo change the ranges, the frequency targets or the synergist multiplier, tap **Edit Weekly Muscle Range Settings** at the bottom of the sheet. The same settings drive [Week Insights](/features/week-insights) for your finished workouts.\n\nA front and back muscle map colors the muscles by volume. Tap a number to see which exercises count towards it.\n\nThe day muscles icon, or **Day stats** on the grid, shows one day.\n\n## Go back to an earlier version\n\nTap the three-dot menu in the top right and pick **Show program versions**. You need to be signed in. Pick a date, read that version's text, and tap **Restore** to load it into the editor.\n\n## Create a new program\n\n\n\nGo to **Me → Program** to reach **Choose a program**. Tap **Create New Program**, enter a **Program Name** and tap **Create**. The new program opens in the editor with one week and one empty day.","sizes":{"account/account-email-form":{"width":600,"height":1304},"account/account-forgot-password":{"width":600,"height":1304},"account/account-screen":{"width":600,"height":1304},"account/account-sign-in":{"width":600,"height":1304},"chatgpt-claude-and-ai/chatgpt-claude-and-ai-autofill":{"width":600,"height":1304},"api/api-key-created":{"width":600,"height":1304},"api/api-keys-empty":{"width":600,"height":1304},"api/api-me-row":{"width":600,"height":1304},"apple-watch/apple-watch-health-settings":{"width":600,"height":1304},"apple-watch/watch-apple-watch-amrap":{"width":416,"height":496},"apple-watch/watch-apple-watch-crown":{"width":416,"height":496},"apple-watch/watch-apple-watch-exercise":{"width":416,"height":496},"apple-watch/watch-apple-watch-get-ready":{"width":416,"height":496},"apple-watch/watch-apple-watch-home":{"width":416,"height":496},"apple-watch/watch-apple-watch-set-clock":{"width":416,"height":496},"apple-watch/watch-apple-watch-workout":{"width":416,"height":496},"built-in-programs/built-in-programs-import":{"width":600,"height":1304},"built-in-programs/built-in-programs-info":{"width":600,"height":1304},"built-in-programs/built-in-programs-library":{"width":600,"height":1304},"built-in-programs/built-in-programs-preview":{"width":600,"height":1304},"built-in-programs/built-in-programs-started":{"width":600,"height":1304},"changing-a-workout/changing-a-workout-adhoc":{"width":600,"height":1304},"changing-a-workout/changing-a-workout-adhoc-picker":{"width":600,"height":1304},"changing-a-workout/changing-a-workout-create-program-day":{"width":600,"height":1304},"changing-a-workout/changing-a-workout-edit-day":{"width":600,"height":1304},"changing-a-workout/changing-a-workout-edit-exercise":{"width":600,"height":1304},"changing-a-workout/changing-a-workout-next-workout":{"width":600,"height":1304},"changing-a-workout/changing-a-workout-pick-day":{"width":600,"height":1304},"changing-a-workout/changing-a-workout-program-day":{"width":600,"height":1304},"changing-a-workout/changing-a-workout-swap-adhoc":{"width":600,"height":1304},"changing-a-workout/changing-a-workout-swap-from-program":{"width":600,"height":1304},"changing-a-workout/changing-a-workout-swap-recent":{"width":600,"height":1304},"custom-exercises/custom-exercises-autofill":{"width":600,"height":1304},"custom-exercises/custom-exercises-clone-library":{"width":600,"height":1304},"custom-exercises/custom-exercises-cloned":{"width":600,"height":1304},"custom-exercises/custom-exercises-form":{"width":600,"height":1304},"custom-exercises/custom-exercises-hidden-group":{"width":600,"height":1304},"custom-exercises/custom-exercises-image-library":{"width":600,"height":1304},"custom-exercises/custom-exercises-image-source":{"width":600,"height":1304},"custom-exercises/custom-exercises-in-workout":{"width":600,"height":1304},"custom-exercises/custom-exercises-muscle-groups":{"width":600,"height":1304},"custom-exercises/custom-exercises-picker":{"width":600,"height":1304},"custom-exercises/custom-exercises-target-muscles":{"width":600,"height":1304},"equipment-and-gyms/equipment-and-gyms-barbell":{"width":600,"height":1304},"equipment-and-gyms/equipment-and-gyms-custom":{"width":600,"height":1304},"equipment-and-gyms/equipment-and-gyms-exercise":{"width":600,"height":1304},"equipment-and-gyms/equipment-and-gyms-fixed":{"width":600,"height":1304},"equipment-and-gyms/equipment-and-gyms-gyms":{"width":600,"height":1304},"equipment-and-gyms/equipment-and-gyms-hidden":{"width":600,"height":1304},"equipment-and-gyms/equipment-and-gyms-list":{"width":600,"height":1304},"exercise-library/exercise-library-calculator":{"width":600,"height":1304},"exercise-library/exercise-library-from-program":{"width":600,"height":1304},"exercise-library/exercise-library-list":{"width":600,"height":1304},"exercise-library/exercise-library-multi-add":{"width":600,"height":1304},"exercise-library/exercise-library-override-muscles":{"width":600,"height":1304},"exercise-library/exercise-library-picker":{"width":600,"height":1304},"exercise-library/exercise-library-prs":{"width":600,"height":1304},"exercise-library/exercise-library-search":{"width":600,"height":1304},"exercise-library/exercise-library-stats":{"width":600,"height":1304},"exercise-library/exercise-library-swap":{"width":600,"height":1304},"graphs/graphs-bodyweight":{"width":600,"height":1304},"graphs/graphs-choose":{"width":600,"height":1304},"graphs/graphs-exercise":{"width":600,"height":1304},"graphs/graphs-legend":{"width":600,"height":1304},"graphs/graphs-muscle-group":{"width":600,"height":1304},"graphs/graphs-personal-records":{"width":600,"height":1304},"graphs/graphs-settings":{"width":600,"height":1304},"health-sync/android-health-sync-measurements":{"width":600,"height":1339},"health-sync/android-health-sync-settings":{"width":600,"height":1339},"health-sync/android-health-sync-share":{"width":600,"height":1339},"health-sync/android-health-sync-sleep-nutrition":{"width":600,"height":1339},"health-sync/health-sync-measurements":{"width":600,"height":1304},"health-sync/health-sync-settings":{"width":600,"height":1304},"health-sync/health-sync-share":{"width":600,"height":1304},"health-sync/health-sync-sleep-nutrition":{"width":600,"height":1304},"import-export/import-export-export":{"width":600,"height":1304},"import-export/import-export-hevy":{"width":600,"height":1304},"import-export/import-export-import":{"width":600,"height":1304},"liftoscript/liftoscript-exercise-sheet":{"width":600,"height":1304},"liftoscript/liftoscript-full-program":{"width":600,"height":1304},"liftoscript/liftoscript-per-day":{"width":600,"height":1304},"liftoscript/liftoscript-playground":{"width":600,"height":1304},"lock-screen-and-notifications/android-lock-screen-and-notifications-live-update":{"width":600,"height":1339},"lock-screen-and-notifications/android-lock-screen-and-notifications-reminder":{"width":600,"height":1339},"lock-screen-and-notifications/android-lock-screen-and-notifications-sound":{"width":600,"height":1339},"lock-screen-and-notifications/lock-screen-and-notifications-dynamic-island":{"width":600,"height":1304},"lock-screen-and-notifications/lock-screen-and-notifications-live-activity":{"width":600,"height":1304},"lock-screen-and-notifications/lock-screen-and-notifications-reminder":{"width":600,"height":1304},"lock-screen-and-notifications/lock-screen-and-notifications-sound":{"width":600,"height":1304},"measurements/measurements-add":{"width":600,"height":1304},"measurements/measurements-bodyweight":{"width":600,"height":1304},"measurements/measurements-moving-average":{"width":600,"height":1304},"measurements/measurements-sleep-nutrition":{"width":600,"height":1304},"measurements/measurements-types":{"width":600,"height":1304},"first-run-and-settings/first-run-and-settings-appearance":{"width":600,"height":1304},"first-run-and-settings/first-run-and-settings-dark-mode":{"width":600,"height":1304},"first-run-and-settings/first-run-and-settings-equipment":{"width":600,"height":1304},"first-run-and-settings/first-run-and-settings-me":{"width":600,"height":1304},"first-run-and-settings/first-run-and-settings-units":{"width":600,"height":1304},"first-run-and-settings/first-run-and-settings-welcome":{"width":600,"height":1304},"playground/playground-completed":{"width":600,"height":1304},"playground/playground-day":{"width":600,"height":1304},"playground/playground-finished":{"width":600,"height":1304},"playground/playground-variables":{"width":600,"height":1304},"premium/premium-account":{"width":600,"height":1304},"premium/premium-feature-info":{"width":600,"height":1304},"premium/premium-plans":{"width":600,"height":1304},"program-editor/program-editor-create":{"width":600,"height":1304},"program-editor/program-editor-day-details":{"width":600,"height":1304},"program-editor/program-editor-exercise-sheet":{"width":600,"height":1304},"program-editor/program-editor-full-text":{"width":600,"height":1304},"program-editor/program-editor-grid":{"width":600,"height":1304},"program-editor/program-editor-perday-text":{"width":600,"height":1304},"program-editor/program-editor-ui-mode":{"width":600,"height":1304},"program-editor/program-editor-week-stats":{"width":600,"height":1304},"progressions/progressions-linear-settings":{"width":600,"height":1304},"progressions/progressions-preview":{"width":600,"height":1304},"progressions/progressions-state-variables":{"width":600,"height":1304},"progressions/progressions-suppressed":{"width":600,"height":1304},"rest-timer/rest-timer-collapsed":{"width":600,"height":1304},"rest-timer/rest-timer-dynamic-island":{"width":600,"height":1304},"rest-timer/rest-timer-expanded":{"width":600,"height":1304},"rest-timer/rest-timer-get-ready":{"width":600,"height":1304},"rest-timer/rest-timer-lock-screen":{"width":600,"height":1304},"rest-timer/rest-timer-settings":{"width":600,"height":1304},"rest-timer/rest-timer-sound":{"width":600,"height":1304},"rest-timer/watch-rest-timer":{"width":416,"height":496},"rest-timer/watch-rest-timer-exercise":{"width":416,"height":496},"set-types/set-types-amrap-popup":{"width":600,"height":1304},"set-types/set-types-per-side":{"width":600,"height":1304},"set-types/set-types-rpe-logged":{"width":600,"height":1304},"set-types/set-types-rpe-popup":{"width":600,"height":1304},"sharing-programs/sharing-programs-export-text":{"width":600,"height":1304},"sharing-programs/sharing-programs-image-preview":{"width":600,"height":1304},"sharing-programs/sharing-programs-image-settings":{"width":600,"height":1304},"sharing-programs/sharing-programs-import":{"width":600,"height":1304},"sharing-programs/sharing-programs-menu":{"width":600,"height":1304},"sharing-programs/sharing-programs-private-link":{"width":600,"height":1304},"sharing-programs/sharing-programs-public-link":{"width":600,"height":1304},"sharing-workouts/sharing-workouts-copied-text":{"width":600,"height":1304},"sharing-workouts/sharing-workouts-finish-screen":{"width":600,"height":1304},"sharing-workouts/sharing-workouts-profile-settings":{"width":600,"height":1304},"sharing-workouts/sharing-workouts-share-sheet":{"width":600,"height":1304},"sharing-workouts/sharing-workouts-story-preview":{"width":600,"height":1304},"supersets/supersets-liftoscript":{"width":600,"height":1304},"supersets/supersets-next-exercise":{"width":600,"height":1304},"supersets/supersets-picker":{"width":600,"height":1304},"supersets/supersets-program-editor":{"width":600,"height":1304},"supersets/supersets-timer":{"width":600,"height":1304},"supersets/supersets-workout":{"width":600,"height":1304},"sync-and-offline/sync-and-offline-account":{"width":600,"height":1304},"sync-and-offline/sync-and-offline-me-account":{"width":600,"height":1304},"sync-and-offline/sync-and-offline-sign-in":{"width":600,"height":1304},"timed-sets/timed-sets-count-up":{"width":600,"height":1304},"timed-sets/timed-sets-edit-time":{"width":600,"height":1304},"timed-sets/timed-sets-get-ready":{"width":600,"height":1304},"timed-sets/timed-sets-recorded":{"width":600,"height":1304},"timed-sets/timed-sets-running":{"width":600,"height":1304},"timed-sets/timed-sets-set-row":{"width":600,"height":1304},"timed-sets/timed-sets-timers":{"width":600,"height":1304},"week-insights/week-insights-details":{"width":600,"height":1304},"week-insights/week-insights-edit-muscle-groups":{"width":600,"height":1304},"week-insights/week-insights-exercises":{"width":600,"height":1304},"week-insights/week-insights-home":{"width":600,"height":1304},"week-insights/week-insights-muscle-groups":{"width":600,"height":1304},"week-insights/week-insights-settings":{"width":600,"height":1304},"workout-history/workout-history-change-date":{"width":600,"height":1304},"workout-history/workout-history-delete":{"width":600,"height":1304},"workout-history/workout-history-feed":{"width":600,"height":1304},"workout-history/workout-history-menu":{"width":600,"height":1304},"workout-history/workout-history-month-calendar":{"width":600,"height":1304},"workout-history/workout-history-note-on-card":{"width":600,"height":1304},"workout-history/workout-history-notes":{"width":600,"height":1304},"workout-history/workout-history-past-card":{"width":600,"height":1304},"workout-history/workout-history-past-workout":{"width":600,"height":1304},"workout-history/workout-history-week-insights":{"width":600,"height":1304},"workout-screen/workout-screen-e1rm":{"width":600,"height":1304},"workout-screen/workout-screen-edit-target":{"width":600,"height":1304},"workout-screen/workout-screen-exercise-menu":{"width":600,"height":1304},"workout-screen/workout-screen-exercise-notes":{"width":600,"height":1304},"workout-screen/workout-screen-history":{"width":600,"height":1304},"workout-screen/workout-screen-keypad":{"width":600,"height":1304},"workout-screen/workout-screen-next-set":{"width":600,"height":1304},"workout-screen/workout-screen-overview":{"width":600,"height":1304},"workout-screen/workout-screen-rounding":{"width":600,"height":1304},"workout-screen/workout-screen-summary":{"width":600,"height":1304}}}