Write a program as text: one line per exercise with sets, reps, weight, 1RM percentages and RPE. Split it into weeks and days, and reuse lines.
Write an exercise as one line
Every program in Liftosaur is text. Each exercise is one line. The exercise name comes first, then sections separated by /:
Bench Press / 3x8
3x8 is 3 sets of 8 reps. 3x8-12 is a rep range. Commas join set groups:
Bench Press / 1x5, 1x3, 1x1, 5x5
Add the weight after the reps. It can be lb or kg, or a percentage of your 1RM:
Bench Press / 3x12 60kg
Bench Press / 3x12 80%
Add @ and a number from 1 to 10 for an RPE target. With no weight, the app looks up the weight from your 1RM, the reps and the RPE:
Bench Press / 3x12 @8
Each set group can have its own weight, percentage or RPE:
Bench Press / 1x5 @8, 1x3 @9, 1x1 @10, 5x5 50%
A value that applies to every set goes in its own section:
Bench Press / 1x12, 5x5 / 20s 60%
With no weight and no RPE, the weight field stays empty in the workout. You type it when you complete the set. To change the equipment, name it after a comma, as in Bench Press, Dumbbell / 3x5.
A + after the reps makes an AMRAP set. A + after the RPE or the weight asks you to log the real value. Set types explains those. 90s after the reps is the rest time, see Rest timer. 60s|30s is a timed set, see Timed sets. progress: lp(5lb) is a progression, see Progressions.
Split the program into weeks and days
In the full program text, # starts a week and ## starts a day:
# Week 1
## Day 1
Squat / 5x5 / progress: lp(5lb)
## Day 2
Squat / 3x8
# Week 2
## Day 1
Squat / 5x4
A // line above an exercise is its description. The workout screen shows it. It takes Markdown. A /// line is a note for you and never shows in the workout:
/// Not shown in the workout
// Pause **2 seconds** at the bottom
Squat / 5x5 / progress: lp(5lb)
The description carries over to the same exercise in later weeks until you write a new one. An empty // line stops that.
A // line above # Week 1 or ## Day 1 describes the week or the day. The week description shows on the Home screen, the day description on the workout screen.
Repeat, reuse and label exercises
A week range after the name repeats the line on the same day in those weeks:
Bench Press[1-5] / 3x8
The repeated weeks stay empty in the text. ... reuses the sets, weights, warmups and scripts of another exercise in the current week:
...Bench Press[2] reuses day 2 of the current week. ...Bench Press[2:1] reuses week 2, day 1. A section after the reuse overrides that part. Bench Press / ...Squat / 150lb keeps the sets of Squat and changes the weight.
used: none makes a template. The line never appears in a workout, and the name does not need to be a real exercise:
A word and a colon before the name is a label. main: Squat and accessory: Squat are two different exercises, each with its own progression. A name in parentheses after a set group is a set label, up to 8 characters. It shows next to the set in the workout:
Squat / 4x5 (Main), 1x5+ (AMRAP)
The Liftoscript reference covers the rest: warmups, set variations, update scripts, state variables and tags.
Type it in the app
Tap Program in the footer, then Edit. The toolbar has four mode buttons. The third shows one text editor per day. An exercise repeated from an earlier week is listed under the editor. The fourth shows the whole program as one text, with the # Week and ## Day headings. Program editor covers the grid and the UI mode.
On the grid, tap an exercise and then the pencil. A sheet opens with that exercise line. Tap a value like 3x5, 155lb or lp(5lb). A hint explains it, such as "Percentage: weight as a % of your 1RM for this exercise." Pills add the next part: Add weight, Add RPE, Add rest timer, Make rep range, Add warmups, Reuse…, Repeat…, Add used: none, Add progress and more.
Double-tap the text to type it as plain text. A suggestion strip on the keyboard offers exercise names, section names and reuse targets. Tap Apply, then Save.
With a syntax error, the grid, UI and Save buttons grey out until the text parses again.
Try the program before you run it
The Playground tab next to Edit runs the program without saving anything. Complete sets and see how the reps, weights and sets change for the next workout. Playground covers it.
{"feature":{"id":"liftoscript","title":"Liftoscript","shortDescription":"Write a program as text: one line per exercise with sets, reps, weight, 1RM percentages and RPE. Split it into weeks and days, and reuse lines.","order":30,"category":"Programs","datePublished":"2026-09-27","dateModified":"2026-09-28","screenshots":["liftoscript-exercise-sheet","liftoscript-full-program"]},"content":"## Write an exercise as one line\n\n\n\nEvery program in Liftosaur is text. Each exercise is one line. The exercise name comes first, then sections separated by `/`:\n\n```liftoscript\nBench Press / 3x8\n```\n\n`3x8` is 3 sets of 8 reps. `3x8-12` is a rep range. Commas join set groups:\n\n```liftoscript\nBench Press / 1x5, 1x3, 1x1, 5x5\n```\n\nAdd the weight after the reps. It can be lb or kg, or a percentage of your 1RM:\n\n```liftoscript\nBench Press / 3x12 60kg\nBench Press / 3x12 80%\n```\n\nAdd `@` and a number from 1 to 10 for an RPE target. With no weight, the app looks up the weight from your 1RM, the reps and the RPE:\n\n```liftoscript\nBench Press / 3x12 @8\n```\n\nEach set group can have its own weight, percentage or RPE:\n\n```liftoscript\nBench Press / 1x5 @8, 1x3 @9, 1x1 @10, 5x5 50%\n```\n\nA value that applies to every set goes in its own section:\n\n```liftoscript\nBench Press / 1x12, 5x5 / 20s 60%\n```\n\nWith no weight and no RPE, the weight field stays empty in the workout. You type it when you complete the set. To change the equipment, name it after a comma, as in `Bench Press, Dumbbell / 3x5`.\n\nA `+` after the reps makes an AMRAP set. A `+` after the RPE or the weight asks you to log the real value. [Set types](/features/set-types) explains those. `90s` after the reps is the rest time, see [Rest timer](/features/rest-timer). `60s|30s` is a timed set, see [Timed sets](/features/timed-sets). `progress: lp(5lb)` is a progression, see [Progressions](/features/progressions).\n\n## Split the program into weeks and days\n\n\n\nIn the full program text, `#` starts a week and `##` starts a day:\n\n```liftoscript\n# Week 1\n## Day 1\nSquat / 5x5 / progress: lp(5lb)\n\n## Day 2\nSquat / 3x8\n\n# Week 2\n## Day 1\nSquat / 5x4\n```\n\nA `//` line above an exercise is its description. The workout screen shows it. It takes Markdown. A `///` line is a note for you and never shows in the workout:\n\n```liftoscript\n/// Not shown in the workout\n// Pause **2 seconds** at the bottom\nSquat / 5x5 / progress: lp(5lb)\n```\n\nThe description carries over to the same exercise in later weeks until you write a new one. An empty `//` line stops that.\n\nA `//` line above `# Week 1` or `## Day 1` describes the week or the day. The week description shows on the Home screen, the day description on the workout screen.\n\n## Repeat, reuse and label exercises\n\nA week range after the name repeats the line on the same day in those weeks:\n\n```liftoscript\nBench Press[1-5] / 3x8\n```\n\nThe repeated weeks stay empty in the text. `...` reuses the sets, weights, warmups and scripts of another exercise in the current week:\n\n```liftoscript\nBench Press / 5x5 / progress: lp(5lb)\nSquat / ...Bench Press\n```\n\n`...Bench Press[2]` reuses day 2 of the current week. `...Bench Press[2:1]` reuses week 2, day 1. A section after the reuse overrides that part. `Bench Press / ...Squat / 150lb` keeps the sets of Squat and changes the weight.\n\n`used: none` makes a template. The line never appears in a workout, and the name does not need to be a real exercise:\n\n```liftoscript\nt1 / used: none / 1x10+, 3x10 / 70% / progress: lp(5lb)\nt1: Bench Press / ...t1\n```\n\nA word and a colon before the name is a label. `main: Squat` and `accessory: Squat` are two different exercises, each with its own progression. A name in parentheses after a set group is a set label, up to 8 characters. It shows next to the set in the workout:\n\n```liftoscript\nSquat / 4x5 (Main), 1x5+ (AMRAP)\n```\n\n[The Liftoscript reference](/doc/liftoscript) covers the rest: warmups, set variations, `update` scripts, state variables and tags.\n\n## Type it in the app\n\n\n\nTap **Program** in the footer, then **Edit**. The toolbar has four mode buttons. The third shows one text editor per day. An exercise repeated from an earlier week is listed under the editor. The fourth shows the whole program as one text, with the `# Week` and `## Day` headings. [Program editor](/features/program-editor) covers the grid and the UI mode.\n\nOn the grid, tap an exercise and then the pencil. A sheet opens with that exercise line. Tap a value like `3x5`, `155lb` or `lp(5lb)`. A hint explains it, such as \"Percentage: weight as a % of your 1RM for this exercise.\" Pills add the next part: **Add weight**, **Add RPE**, **Add rest timer**, **Make rep range**, **Add warmups**, **Reuse…**, **Repeat…**, **Add used: none**, **Add progress** and more.\n\nDouble-tap the text to type it as plain text. A suggestion strip on the keyboard offers exercise names, section names and reuse targets. Tap **Apply**, then **Save**.\n\nWith a syntax error, the grid, UI and **Save** buttons grey out until the text parses again.\n\n## Try the program before you run it\n\n\n\nThe **Playground** tab next to **Edit** runs the program without saving anything. Complete sets and see how the reps, weights and sets change for the next workout. [Playground](/features/playground) covers it.","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}}}