
Pomodoro Pro allows Pomodoro schedules of an almost unlimited variety. This is done by using simple scripts that you can add in the app’s Settings.
The scripts describe sequences of pomodoros (called sprints in this app) and breaks.
SCRIPTS
This is the classic Pomodoro schedule as a simple script:
Classic: 4( 3(s, b), s, b=20)
It means: 3 times a sprint (s) followed by a break (b), then a sprint again, followed by a long, 20 min break. Repeat all this 4 times.
In the example the sprints and breaks have their default length (25 minutes for a sprint and 5 minutes for a break) – except for the last break, the length of which is set to 20 minutes.
NOTE: default lengths for sprints, breaks and long breaks can be modified on the watch.
In addition to the period types ‘s’ and ‘b’, there is also ‘l’, for long break. Thus, the above script can be re-written like this:
Classic2: 4( 3(s, b), s, l)
Scripts are defined in the app’s Settings on the phone.
NOTE: the definition of scripts must start with a script name. As shown in the examples above, the name has to be separated from the rest of the script by a colon, ‘:‘. Script names have to be unique and can have maximally 10 characters, consisting of letters, numbers and the characters ‘.‘ and ‘–‘.
Maximally 12 scripts can be defined in the app’s Settings. These contain example scripts which can be modified or replaced by the user.
NOTE: to improve clarity, in the above examples spaces are left between the items in the script. This is not necessary in real scripts.
Operators for setting the length:
- Exact: ‘=’, as in s = 20
The sprint or break finishes at exactly the length specified. So, for s = 20 it will finish at 20 minutes after the sprint’s start. - Approximate: ‘~’, as in b ~ 20
You are not quite sure how long the sprint (or break) should be, but you have an approximate idea, e.g. 20 minutes. You will receive a vibration alert periodically for a number of minutes (e.g. 3 minutes) before and after the specified time length. So, in this example, you receive a alert at first at 17 minutes, then at 18, 19, 20, 21 and 22 minutes. Every time you are asked if you want to stop the break. If you respond ‘Yes’, the break stops and the script continues. The break also stops if you haven’t responded until the last alert.
The period during which you receive alerts around the specified time length can be modified via the Control Menu of the app (under Default Lengths and Operators). By default it is 3 minutes before and after the time length given. So, with s ~ 20, the alerts start at 17 minutes and end at 23 minutes. The frequency of alerts can also be modified on the app (under Control Menu / Alerts frequency). - Region: ‘<‘ and ‘>’, as in b < 20 or s > 20.
You are not certain how long you want to spend on a sprint or break. You are only sure that it should be at least or at most a specified length. For example, you want to spend at least 20 minutes on a sprint. You expect that it might take longer but you are not sure how much longer. You can express this as s > 20. The sprint will run until 20 minutes as usual. Then it will continue and you will receive alerts periodically, asking you if you want to stop the sprint.
Similarly, s < 20 expresses your wish to spend at most 20 minutes on a sprint. You start receiving alerts periodically from the beginning of the sprint, and you can choose to stop the sprint at every alert. The alerts stop at minutes. The sprint stops, too and the script continues.
The frequency of these alerts can also be modified on the app (under Control Menu / Alerts frequency).
The above examples showed exact lengths. Here is an example with approximate length:
Approx: 2( s~25, b)
This means: a sprint for about 25 minutes, then a break for the default number of minutes, the whole sequence twice. There will be a vibration alert 3 minutes before 25 minutes (i.e. at 22 minutes), asking you if you want to stop the sprint. These alerts will continue every minute until 28 minutes (25 + 3). If you haven’t stopped the sprint up to that point, then the break will automatically start.
And here is a region length example:
Region: 3( s > 20, b = 5), s < 10, b
The length of the first sprint can be described as: “at least 20 minutes but can be more”. This sprint proceeds up to 20 minutes without interruption. At 20 minutes there is a vibration alert and you are asked if you want to stop the sprint. If you don’t stop, the sprint continues, and you are periodically asked if you want to stop.
The length of the second sprint can be described as: “at most 10 minutes“. From the beginning of the sprint you are periodically asked if you want to stop it. If you don’t stop it, then the sprint continues until 10 minutes, at which point it automatically stops and the next break begins.
DYNAMIC BREAKS (“FLOWMODRO”, “FLOWTIME”)
The Flowmodoro or Flowtime technique is similar to Pomodoro. In the Pomodoro technique the lengths of the Pomodoros (sprints) and breaks are static.
In contrast, Flowmodoro allows working on a sprint as long as the user is comfortable with it and can focus properly. The length of the break following the sprint depends on the length of that previous sprint. In the original Flowmodoro it is the length of the sprint divided by a break divisor. In Pomodoro Pro this is slightly modified: the length of a dynamical break is set as a percentage of the length of the previous sprint. We think that this is a more intuitively understandable setting than the division by the break divisor.
Pomodoro Pro can be used in Flowmodoro mode. The length of sprints can be approximate or regional (see above) meaning that they are not set statically and the user has the freedom to prolong or shorten them, while running the script. Also, breaks can be defined as dynamic: if for example, the sprint lasted 50 minutes and the sprint percentage for the following break is 20%, then the length of the break will be 50*0.2=10 minutes. If the sprint lasted 10 minutes, then, using the same 20% setting, the break’s length will be 10*0.2 = 2 minutes. Consider the following simple script:
3( s > 10, d = 20% )
This means: a sprint has the length of at least 10 minutes, after which the script continues until the user stops it. Then a break follows. It is defined as dynamic by the symbol “d” and its sprint-percentage is set to 20%. Assuming the sprint was stopped at 38 minutes by the user, the length of this dynamic break is calculated as 38*0.2 = 7.6. This is rounded, resulting in 8 minutes.
Of course, dynamic breaks can also be used when the length of the previous sprint is exact. For example:
3( s = 40, d = 33% )
In this case the length of the dynamic break will be 40*0.33 = 13 minutes.
Just as sprints and non-dynamic breaks have default length values (which can be modified on the watch), there is a default sprint-percentage value – which can also be modified on the watch, in the Control Menu. If you don’t explicitly specify the sprint-percentage for a dynamic break, then it uses this default value (which, at the beginning is set to 20%). The following script uses the default sprint-percentage:
3( s > 10, d )
The user can stop a sprint and start the next break in two ways:
- Jump to the next Break. The user can do this using a watch key (button), long press on tough screens or the Control Menu. See more about this later on this page, here.
- Define the sprint before the dynamic break with an approximate or region length. You can then receive regular alerts with the option of stopping the sprint and moving on to the next break. You can set the frequency of the alerts on the watch, in the Control Menu.
In both cases, if the break following the sprint is dynamic, then the length of the break will be calculated as described above, based on how many minutes have been spent on the previous sprint.
One potential problem with Flowmodoro is the discipline that people have to have: the sprints might be kept too long if people don’t feel like stopping them. Pomodoro Pro deals with this problem by having a length limit for sprints region type sprints (those with a ‘>’ operator). The default for this length limit is 60 minutes but it can be modified in the Control Menu (see below). The effect of this limit is that the sprint is automatically stopped when its length reaches that limit.
With long sprints, dynamic breaks will also be longer. If it feels too long, a dynamic break can be stopped by “jumping” to the next sprint, as described above.
ACTIVITIES
You can assign ‘activities‘ to sprints and breaks, like this:
3( s.AppDev = 30, b.Walk = 6 ), s.AppDev = 35, b.Reading
The same activity – e.g. ‘Walk’ – can be used in different scripts. Also, the same activity can be a sprint in some scripts, and a break in other scripts. For example, ‘Reading’ might be a sprint in a script about studying, but it can be a break in a script in the context of a physical activity.
If no activity is assigned by the user to a sprint or break, the default activity ANY is used (this will be the case, for example, with the ‘Classic’ script described above).
Many sorts of activity combinations are possible. For example, several breaks of different types can follow each other, like this:
3( s.Math, b.Walk, b.Stretching )
Maximally 26 unique activity names can be defined in the scripts.
Maximal length of activity names: 10 characters, consisting of letters, numbers and the characters ‘.‘ and ‘–‘.
Note: if you rename a script or activity, it will be treated as a new script or activity.
The length of time (number of minutes) spent on an activity is stored with the activity and can be viewed in the Statistics pages – both for the current day and in a 7-day history.
MIXING STATIC AND DYNAMIC LENGTHS
Breaks with static and dynamic lengths can appear in the same script, for example:
3( s.Math, b.Walk = 5 ), s.Physics > 10, d.Reading = 30%
In the above script, the first break (Walk) has a static length of 5 minutes. The second break (Reading) is a dynamic break: its length will depend on the length of the previous sprint (Physics), by setting the break’s length to 30% of the previous sprint’s length.
OTHER USAGES (E.G. JAPANESE WALKING)
In addition to Pomodoro and Flowmodoro schedules, the app can be used to help the user to follow many other kinds of plans or schedules. A simple example is a script to help schedule Japanese Walking:
JapWalk: 5( s.SlowWalk = 3, s.FastWalk = 3 )
This script implements the Japanese Walking schedule: slow walking for 3 minutes, then fast walking for 3 minutes. Repeat these 5 times, resulting in a 30 minutes exercise. The app alerts the user at the end of each 3 minute walk period.
Of course, it’s easy to tweak the script so that it corresponds more to the way the user likes walking.
NOTE: the script has two sprints only, and no breaks.
MAIN DISPLAY

- Top: script’s name
- Top left: daily number of steps
- Top right: current heart rate
- Upper middle: progress numerically in current activity
- Middle: history chart of current activity, incl. sum & daily average minutes
- Left arc: progress in current activity
- Right arc: progress in current script
- Bottom: time and date
The numerical progress display for BREAK 5 in the picture above shows: 7 / .10.
This signifies that the length of 10 minutes for this break is approximate. In the script it is set as
b.Walk ~ 10.
If we set the length as a region, for example as b.Walk < 10, then the display will show: 7 / ..10
and it will show as 7 / 10.. if we set b.Walk > 10.
On the left arc, showing progress in the current activity (in the picture Walk), the white number on top of the arc is the length of the activity set in the script (10 minutes in the picture). The number below is the number of minutes which have passed of the current activity (7 minutes).
On the right arc, showing progress in the current script (in the picture Coding), the white number on top of the arc is the length of the script set in the script, calculated from the length of the individual sprints and breaks (10 hours 30 minutes in the picture). The number below is the number of minutes which have passed of the current script (3 hours 11 minutes).
HISTORY
History for sprints, breaks and activities for 7 days (incl. today) is kept and displayed in the stats pages in the app, as tables and as charts.
STATISTICS

You can get to the STATISTIC pages from the MAIN DISPLAY, by the START BUTTON action. You use the same action to move from one STATISTICS page to the next.
- Today’s sprint / break minutes
- 7 day’s sprint / break minutes as table
- 7 day’s sprint / break minutes as charts
- Today’s activity minutes
- 7 day’s activity minutes as table
- 7 day’s activity minutes as charts
You can scroll up and down in the tables of activities and the different activity charts, by the UP (Previous), DOWN (Next) actions.
Note: the activity minutes in the statistics pages show, by default, only the minutes of the activities that belong to the currently running script. This can be changed in the Control Menu under Statistics / Activity Lists, allowing to show the list of all activities, in all scripts that have run today.
Also, the sprint / break minutes are always daily sums of all sprints / breaks (no matter in which script).
EXPANDED SCRIPT

You can get to this page from the MAIN DISPLAY, by the UP (Previous) action.
Scripts can be complex or long and it can be helpful to know where exactly you are within a script. This is achieved on this page which shows the script expanded. It displays all sprints and breaks in the order that they will be executed, together with their lengths.
The page also displays the currently executing sprint or break (‘AppDev’ in the picture above), in white color, showing also the number of minutes that have already passed (40 in the picture above).
Dynamic breaks are shown with a “d” after the name of the break Activity, like this:
Reading, d
You can scroll up and down in this list, by the UP (Previous), DOWN (Next) actions.
NOTE: the actual lengths of the activities – and of the whole script – in the expanded script display is only an estimate, when those lengths are approximate or regional or dynamic as mentioned above.
INTERRUPTIONS
If the user exits the app while a script is running and then restarts it later – on the same day -, he can continue with the same script where it was interrupted.
He can also pause / resume the app without exiting it. This is done via the Control Menu (under Run Control).
NAVIGATION
UP (Previous), DOWN (Next) and RIGHT (Back) indicate the swipe direction on Touchscreens.
Start display
- DOWN: script selection menu
- RIGHT: control menu
Main display:
- DOWN: script selection menu
- RIGHT: control menu
- UP: display of expanded script
- START BUTTON: statistics
Statistics pages:
- START BUTTON: next stats page
- RIGHT: back to main display
- UP / DOWN: scroll through activity lists and charts
Display of expanded script:
- RIGHT: back to main display
Main menu (Lengths setting):
- RIGHT: back to main display
- START BUTTON: next page
Error pages
- RIGHT: back to main menu (contains only EXIT menu item)
Navigation in the ‘Default lengths and operators’ pages
‘Default lengths and operators’ is a menu item in the Control Menu (s. below). There are separate pages for default lengths for Sprints, Breaks, Long breaks, Sprint length limits, default sprint percentage and for default operators. After selecting the ‘Default lengths and operators’ menu item, you end up on the first of these pages. This is how you can continue navigating on those pages:
- START BUTTON: next page
- RIGHT: back to main display
- UP / DOWN:
> increase or decrease the default length of sprints, breaks or long breaks
> scroll through operators list
Jumping to the next break / sprint
There are three ways of doing this:
- Long press on the screen – on watches with a touch screen
- Long press on the UP key (middle key on the left) – on watches with 5 keys
- Control Menu, menu item Run Control (s. below)
CONTROL MENU
Most functions of the app are controlled on the watch itself, via the Control Menu.
This menu can be accessed from the Main Display by the RIGHT (Back) action. These are the items on this Menu:
- Exit
- Run control – jump to next sprint / break, pause/resume, restart, stop current script
- Default lengths and operators – default lengths for Sprints, Breaks, Long breaks; Sprint length limit; default sprint percentage; default operator: ‘=’, ‘~’, ‘<‘, or ‘>’. All these can be modified here.
- Expanded scripts – shows the list of all scripts, allowing a better understanding of what the script does. If the user selects any of them, the activity sequence of the script is displayed, together with the lengths of the activities.
Also, the name of the script at the top shows the total length of the script.
NOTE: expanded scripts give only an estimate of the script length with approximate and region lengths or dynamic breaks - Statistics – sorting, listing Activities
- Alerts frequency – for pause, region length, approx. length
- Colors – for different regions of the display
- Export Data – exports data for the last 7 days, for the Activities you specify in the Export Activity List in Settings (plus all SPRINTS and BREAKS). The data are exported into the logs of the app (see the EXPORT DATA section below).
- Reset history / app data – resets all history to zero minute values; also resets everything you set on the app itself, e.g. colors, default lengths, etc.
In some cases (e.g. for the ‘start display’ or error displays) only some of these items are available (e.g. only the ‘Exit’ menu item).
EXPORT DATA
Before you can export data, you need to do these things (I’ll describe the process as it is done on Windows. On Mac computers it’s very similar, though the paths could be different):
Connect your watch to a computer, using the charging cable.
- Find the path This PC\<your watch brand name>\Primary\GARMIN\APPS (e.g. This PC\vivoactive6\Primary\GARMIN\APPS). This directory contains a file for each app, with the file extension .PRG
- Find the file for Pomodoro Pro. This is not quite straightforward because the names are random looking, like ‘F8I45733.PRG’. You can identify the app’s file if you know when you installed the app on your watch. Also, the size of the file is about 174 KB.
- Create a text file somewhere on your PC and name it the same as the app’s file name – except it should have a TXT extension (e.g. ‘F8I45733.TXT’).
- Copy this empty text file onto your watch, into the directory This PC\<your watch brand name>\Primary\GARMIN\APPS\LOGS. This will be the file where your logs will be exported to.
The export will be a .CSV (Comma Separated Values) file, which you can load into Google Sheets or Excel. This is how an example looks like. The first 4 columns are Date of Export, Date, SPRINTS and BREAKS. The last 2 columns are Reading and Walk, which are the Activities you want to export.
Date of Export,Date,SPRINTS,BREAKS,Reading,Walk
15:54:32 04 Sep 2025,Fr 29.8,0:00,0:00,0:00,0:00
,Sa 30.8,0:35,0:05,0:26,0:05
,Su 31.8,0:00,0:00,0:00,0:00
,Mo 1.9,1:20,0:10,0:55,0:10
,Tu 2.9,0:00,0:00,0:00,0:00
,We 3.9,0:00,0:00,0:00,0:00
,Th 4.9,1:20,0:10,0:55,0:10
The data are hours:minutes, e.g. 0:26. The Settings allow you to configure the data either in this format or simply as minutes.
The separator character are in this case commas, but they can be configured in the Settings to be semicolons (which are used in some European countries).
The Activities you want to export can be specified (as comma separated names) in the Settings, in the Export Activity list.
NOTE: the column headings appear only the first time that you export data for the same Activities. The column headings appear again if you change the Activities in the Export Activity list. The new column headings will contain the new Activity names.
Note also that, when the log file is filled (when it reaches about 6 KB size), its content is copied into a .BAK file with the same name as the log file (except for the .BAK file extension). Then a new log file is started. If this is filled, the old .BAK file is replaced by the new log file content, and so on.
PAYMENT
The user can try out Pomodoro Pro for three days. During this time the app is fully functional. After the end of this trial period the app is not usable any more, until the user enters the Activation key in the app’s Settings.
You can get the Activation key in the “Ko-fi shop”, where you can buy us a coffee:
https://ko-fi.com/s/82b63ba875 (no ko-fi account required. PayPal, credit card, google pay, etc. accepted).
Please leave a positive review in Garmin’s App Store if you like Pomodoro Pro.
PROBLEMS
In case of problems, contact us at: avoimasoftware@gmail.com