英文原文正文为项目原始 README(英文),本站后续会翻译为中文,当前仅剔除图片与无关章节并统一排版。
Stretchly
The break time reminder app
Stretchly is a cross-platform Electron app that reminds you to take breaks when working on your computer.
安装
The latest official installers and portable versions for macOS, Windows and Linux can be found at Github Releases page. For supported versions of your OS check Electron's supported versions. Read on for details of specific OSes.
macOS
Requires macOS Ventura (13) or later.
It is recommended to install Stretchly with Homebrew tap by running the following command. See Application Signing for details.
brew install --cask hovancik/stretchly/stretchly
Note for macOS users: Homebrew recently disabled the
--no-quarantineflag. As a result, macOS Gatekeeper may block the app on its first launch, showing an "unidentified developer" warning. To bypass this, go toSystem Settings > Privacy & Security, scroll down, and click Open Anyway next to the Stretchly alert. Alternatively, locate the app in Finder, Control-click (or Right-click) its icon, and select Open.
When upgrading, run the following command. Don't forget to Quit Stretchly, first.
brew upgrade --cask hovancik/stretchly/stretchly
To uninstall:
brew uninstall --cask hovancik/stretchly/stretchly
brew untap hovancik/stretchly
Note: A
stretchlycask also exists in the defaulthomebrew/casktap. It is deprecated and scheduled to be disabled on September 1, 2026 because the app is unsigned and fails Homebrew's Gatekeeper check. Until then, the bare namestretchlyis ambiguous — always use the fully qualifiedhovancik/stretchly/stretchlyto get this tap's version.
If you're using Alfred or Raycast on macOS you can use this Alfred Workflow or Raycast Extension to interact with Stretchly.
Application Signing
Stretchly is only ad-hoc signed (due to its costs and me not owning supported Apple device) so you will need to use a workaround for the first run. The workaround depends on if you're running an Intel or Apple Silicon chip.
- Intel Chips: Open a Mac app from an unidentified developer.
- Apple Chips: Open a terminal and run this command:
sudo xattr -r -d com.apple.quarantine /Applications/Stretchly.app
Not sure which chip your computer has? Here's how to tell.
Windows
You can also install Stretchly with Chocolatey by running the following command from the command line or from PowerShell:
choco install stretchly
To update:
choco upgrade stretchly
Stretchly is also available in Microsoft's winget. You can install it by running:
winget install -e --id Stretchly.Stretchly
Stretchly can be also found at official Microsoft Store.
You can install Stretchly for all users silently by running this as administrator:
installer.exe /S /allusers
Linux / Portable
For portable versions and for Linux installers, head to Github Releases page. The most widely used distributions should be covered.
Stretchly is also available in some of the Linux stores:
For Debian/Ubuntu and derivates you could also try this apt repository: deb [trusted=yes] https://apt.fury.io/hovancik/ /.
Linux note
Please see http://electron.atom.io/docs/api/tray/ for Electron's Tray Linux specifics.
For Natural breaks, you might need some packages too (libxss-dev).
If Stretchly is not starting, you might need to run:
sudo sysctl kernel.unprivileged_userns_clone=1
sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
Read more here. Depending on your distro, you probably want to do something similar to this, so the preferences are kept after reboot: Add kernel.unprivileged_userns_clone=1 and kernel.apparmor_restrict_unprivileged_userns=0 to /etc/sysctl.d/00-local-userns.conf and reboot.
If you're on Wayland and you would like to be able to monitor idle time, you'll need to add your user to input group, with sudo gpasswd --add $USER input (depending on your distro) and logout/login to take an effect.
Running from source
To run Stretchly from source you will need Node.js, ideally the one specified in package.json. Clone the repo, run npm install and then simply run npm start to start Stretchly.
Custom installer
You can create a custom installer by running npm run pack or npm run dist after npm install --no-save.
默认行为
When you run Stretchly for the first time, you are presented with a Welcome window that allows you to change the language, review the preferences, view the online tutorial or simply continue with the default preferences.
Stretchly itself lives in your tray, only displaying a reminder window from time to time, which contains an idea for a break.
By default, there is a 20 second Mini break every 10 minutes and a 5 minute Long break every 30 minutes (after 2 Mini breaks).
You'll be notified 10 seconds before a Mini break (and 30 seconds before a Long break) so that you can prepare to pause your work.
When a break starts, you can postpone it once for 2 minutes (Mini breaks) or 5 minutes (Long breaks). Then, after a specific time interval passes, you can skip the break. Both actions are available by clicking on the link at the bottom of window or by using the Ctrl/Cmd + X keyboard shortcut.
Clicking the Stretchly icon in your tray area will display the current status of breaks, provide menu items with extra functionality, and link to the Preferences.
Stretchly is monitoring your idle time, so when you are idle for 5 minutes, breaks will be paused until you return.
Stretchly is also monitoring Do Not Disturb mode, so breaks are paused when DnD mode is On.
Stretchly follows the theme of your system and is also available in dark mode.
Interact with stretchly from command line
When a Stretchly instance is running, the stretchly command can be use to interact with it from the command line.
The regular Windows installer adds stretchly to PATH, so commands can be run from a new terminal without specifying the full executable path.
Type stretchly help to get a list of all commands and options available as well as some examples.
偏好设置
Most of the preferences can be customized by clicking on the "Preferences" item in the tray menu. (On Windows, to open Preferences, you can also double-click on the tray icon.)
Preferences are divided into multiple categories and you are encouraged to take some time to make Stretchly your own by customizing them.
You can also Restore the defaults to return to the default preferences state.
高级偏好设置
While the most of the preferences can be edited via the app, some options and values are not available to make the app easy to understand and setup.
All preferences are saved in a JSON file, so you can set Stretchly in the way you need. Use the Ctrl/Cmd + D shortcut while viewing the About section of Preferences, to show debug info and display a clickable link to the preferences file.
It's recommended to Quit Stretchly before editing the preferences file.
To make sure that all works as expected, it's always good idea to check that format of the preferences file is correct, ie. by using jsonformatter.
After you make changes to preferences files, some of the values being shown in Preferences or elsewhere might show incorrect value, as the UI is expecting specific values and is not handling cases where user makes manual changes to preferences file.
Some of the extra preferences are available in Contributor Preferences for Contributors. Those are marked by badge.
Preferences marked with might not work correctly and might break Stretchly. Use at own risk.
Note: Before 1.0, Mini breaks and Long breaks were called Microbreaks and Breaks, respectively. To keep the upgrade smooth they still use that name in preferences file and in code.
Preferences editable in the app
Here are the preferences editable via the app. If values in the app does not suite your style, you could edit them maually:
microbreakDuration- duration of Mini break (ms)microbreakInterval- interval of Mini break (ms)breakDuration- duration of Long break (ms)breakInterval- interval of Long break (Mini breaks)breakNotification- show notification before Mini breakmicrobreakNotification- show notification before Long breakmicrobreak- enable Mini breaksbreak- enable Long breaksmicrobreakStrictMode- enable strict mode for Mini breaksbreakStrictMode- enable strict mode for Long breaksmainColor- theme color code (for Long breaks),miniBreakColor- theme color code (for Mini breaks),transparentMode- show break windows as transparentlongBreakAudio- sound theme name (for Long breaks)miniBreakAudio- sound theme name (for Mini breaks)fullscreen- show breaks in fullscreen modeideas- show break ideasnaturalBreaks- monitor idle timeallScreens- show breaks on all screenslanguage- languageuseMonochromeTrayIcon- use monochrome icontrayIconStyle- icon style for menubar: default, time to break, or progress to breaksilentNotifications- enable soundsmonitorDnd- monitor DND modecheckNewVersion- check for new versions
Editing break ideas
In the preferences file, change useIdeasFromSettings: false, to useIdeasFromSettings: true, and edit breakIdeas and microbreakIdeas.
Note that when a new Stretchly version with new break ideas is out, your custom ideas will not be overwritten. You can reset break ideas to the latest defaults when you "Restore defaults" from Preferences window.
Using HTML in break ideas
You can use simple HTML formatting in custom break ideas to enhance their appearance:
Allowed HTML elements:
<a>- links (onlyhttps://andmailto:URLs are allowed)<b>- bold text<i>- italic text<br>- line breaks<p>- paragraphs<h1>,<h2>,<h3>- headings- `` - local images (filenames only, see below)
Using links:
"breakIdeas": [
{
"data": ["<b>Stretch Time!</b>", "Try this <a href=\"https://example.com/stretch\">stretching routine</a>"],
"enabled": true
}
]
Using local images:
Place your images in the images folder inside Stretchly's user data directory (see Preferences → About → Debug info for the exact location). Then reference them by filename only:
"breakIdeas": [
{
"data": ["<b>Desk Yoga</b>", "Try this pose: "],
"enabled": true
}
]
Supported image formats: PNG, JPEG, WebP, GIF. Only images from the local images folder are allowed - remote URLs will be blocked for security.
Stretchly sanitizes all HTML to keep break windows secure by removing any unsupported tags or unsafe content.
Editing sunrise time to pause breaks until morning
In the preferences file you can set the morningHour setting to pause until that hour today or the next day Otherwise, you can set morningHour: "sunrise" and set posLatitude, posLongitude in preferences to pause until the actual sunrise in your area. E.g. if you live in Boston you would set: morningHour: "sunrise", posLatitude: 42.3, posLongitude: 71
Different sound for Mini and Long breaks
To play different sound for Mini breaks, set miniBreakAudio to desired value (crystal-glass, silence, tic-toc, wind-chime).
Different color theme for Mini and Long breaks
To have different theme for Mini breaks, set miniBreakColor to desired value, ie #123456.
Do Not Disturb check interval
In the preferences file, set monitorDndCheckInterval in milliseconds: how often Do Not Disturb status is checked. A higher number means lower CPU and energy usage, but slightly less responsive detection. On macOS and Linux this check can be relatively expensive, so increasing it can noticeably lower energy usage. Default value is 2000 which is 2 seconds.
Postpone/finish break shortcut
In the preferences file, set endBreakShortcut to your preferred value. We do not validate this input, so please check Electron's documentation for available values for key and modifier. When a given accelerator is already taken by other applications, this call will silently fail. This behavior is intended by operating systems, since they don't want applications to fight for global shortcuts.
If you'd like to disable the shortcut, set value to empty string "".
Default value is CmdOrCtrl+X.
Manual finish break mode
If you want breaks to wait for you to finish them manually instead of automatically when the countdown reaches zero, set:
"miniBreakManualFinish": true,
"longBreakManualFinish": true
Once enabled, the break behaves normally until it reaches 100%, then the window switches to showing elapsed time since the break started. You must press the Finish button or use the endBreakShortcut to close the break.
Toggle breaks shortcut
Toggling between Pause breaks and running breaks.
In the preferences file, set pauseBreaksToggleShortcut to your preferred value. We do not validate this input, so please check Electron's documentation for available values for key and modifier. When a given accelerator is already taken by other applications, this call will silently fail. This behavior is intended by operating systems, since they don't want applications to fight for global shortcuts.
If you'd like to disable the shortcut, set value to empty string "". That's the default value as well.
Pause breaks for duration shortcuts
You can also set shortcuts to pause breaks for a specific duration by modifying the following values in the preferences file:
pauseBreaksFor30MinutesShortcutpauseBreaksFor1HourShortcutpauseBreaksFor2HoursShortcutpauseBreaksFor5HoursShortcutpauseBreaksUntilMorningShortcut
If you'd like to disable the shortcuts, set value to empty string "". That's the default value as well.
Skip to the next break shortcut
In the preferences file, set skipToNextScheduledBreakShortcut, skipToNextMiniBreakShortcut, skipToNextLongBreakShortcut to your preferred value. We do not validate this input, so please check Electron's documentation for available values for key and modifier. When a given accelerator is already taken by other applications, this call will silently fail. This behavior is intended by operating systems, since they don't want applications to fight for global shortcuts.
If you'd like to disable the shortcut, set value to empty string "". That's the default value as well.
Reset breaks shortcut
In the preferences file, set resetBreaksShortcut to your preferred value. We do not validate this input, so please check Electron's documentation for available values for key and modifier. When a given accelerator is already taken by other applications, this call will silently fail. This behavior is intended by operating systems, since they don't want applications to fight for global shortcuts.
If you'd like to disable the shortcut, set value to empty string "". That's the default value as well.
Break window color
In the preferences file, change mainColor to whatever color you like.
Show break countdown only on one screen
By default, when breaks are shown on all screens (allScreens: true), the countdown and break idea are shown on every screen. If you'd rather keep the other screens blanked and show the countdown and idea on a single screen only, set breakContentScreen in the preferences file to one of:
"all"- show the content on all screens (default)"primary"- show the content only on the primary screen"cursor"- show the content only on the screen where the cursor is when the break starts- a screen index (e.g.
0,1) - show the content only on that screen
This option has no effect when allScreens is false or when showBreaksAsRegularWindows is true. Invalid values fall back to "all".
Pause/resume breaks only when specific command is running
By editing appExclusions in preferences file, you can automatically control when Stretchly breaks are paused.
If you want Stretchly to be paused when specific apps are running, you could have this value (breaks are paused when Skype or Atom are running):
Linux
"appExclusions": [
{
"rule": "pause",
"active": true,
"commands": [
"/usr/share/skypeforlinux/skypeforlinux",
"atom"
]
}
]
Windows
"appExclusions": [
{
"rule": "pause",
"active": true,
"commands": [
"librewolf.exe",
"masseffectlauncher.exe"
]
}
]
If you want Stretchly to be running when specific apps are as well, you could have this value (breaks are paused when Skype or Atom are not running):
Linux
"appExclusions": [
{
"rule": "resume",
"active": true,
"commands": [
"/usr/share/skypeforlinux/skypeforlinux",
"atom"
]
}
]
Windows
"appExclusions": [
{
"rule": "resume",
"active": true,
"commands": [
"librewolf.exe",
"masseffectlauncher.exe"
]
}
]
You can specify multiple values, (as appExclusions is array) and Stretchly will take the first one that is marked as "active": true. Multiple commands can be specified as well. Commands should be case sensitive, but seems like this is not consistent across platforms. Therefore, sometimes, going all lowercase might be needed (this was noticed on Windows). Commands can also be substrings, meaning a rule containing "exe" will trigger when there's any running processes that contains "exe" in its name or cmd properties.
For Windows, note that paths not specified. This is because on Windows, the API we're using only checks the names of processes being run, which in the vast majority of cases is "process_name.exe". If you try to specify paths, it will not work.
You can also specify appExclusionsCheckInterval in milliseconds: lower number means more often checks, but also higher CPU usage. Default value is 2000 which is 2 seconds.
Pause breaks on Suspend/Lock
If you don't want to reset breaks once system is back from Suspend/Lock, set pauseForSuspendOrLock to false.
Monitor to show breaks on
In case you have disabled showing of breaks on all monitors, you can specify which one should contain the break window. Set screen value to one of the following:
"primary"- primary monitor as given by OS"cursor"- monitor where there is cursor"0"(or0),"1","2"etc, where"0"is the first monitor returned by OS and so forth
Break Health Mode
Inspired by the screen-edge vignette used in video games to indicate low health, this mode adds a visual indicator around the edges of your break screen. The effect starts subtle and grows more intense each time you skip or postpone a break, and fades back down when you let breaks complete naturally. To enable it, set breakHealthMode to true.
Show tray menu in Strict Mode
If you want to show tray menu even while in Strict mode, set showTrayMenuInStrictMode to true.
Show custom message in Preferences
If you want to show custom message in Preferences, set customPreferencesMessage to string of your liking.
This might be useful for corporate installations.
Disable app update functionality
If you want to disable functionality around app updates, set disableAppUpdateFeatures to true. This will make Stretchly not to check for new versions and hide related elements from the app. This value takes preference over checkNewVersion and notifyNewVersion.
This might be useful for corporate installations.
Hide location of preferences file in Debug info
If you want to hide location of preferences file in Debug info, set hidePreferencesFileLocation to true.
This might be useful for corporate installations.
Hide Strict Mode preferences
If you want to hide Strict Mode preferences section from the Preferences window, set hideStrictModePreferences to true.
This might be useful for corporate installations.
Set automatic start from congfig file
If you want autostart to work based on the value from config file, set openAtLogin.
This might be useful for corporate installations.
开发
Feel free to join in the development of this app via Issues and Pull Requests.
Before implementing a feature, please open an Issue first, so we can be sure that no one else is working on it and that the changes will be accepted. It is important do discuss changes before implementing them (Why should we add it? How should it work? How should it look? Where will it be? ...).
Pre-requisites
- Node.js (please use version specified in
package.json)- Linux/MacOS - you might want to use Node Version Manager to install specific version
- Windows - download installer for specific version; during installation check “Install Additional Tools for Node.js”
- git
- Github account, if you'd like to upstream your changes
Now you can clone the repo with git clone https://github.com/hovancik/stretchly.git. Change to the new created directory and run npm i to install node packages needed. If your system is running Python 3.12 and newer, you also need to install setuptools, for example with pip install setuptools, as distutils have been deprecated.
Read on.
Debugging
You can use Stretchly's built-in debug shortcut by pressing Ctrl/Cmd + D in the About section to show information such as:
- Location of the Preferences and Log file (Clicking on file location will open it),
- Debug information for break planner
You can copy debug information to the clipboard.
If you start Stretchly in development mode with the npm run dev command, it makes it possible to debug the application in your browser on http://localhost:9222.
Logging
Stretchly uses [log](https://github.com/megahertz/electron-log) package for some extra logging. Format as following:
System: my messagefor messages regarding Operating System, ie:System: resume or unlockStretchly: my messagefor messages regarding Stretchly
Translations
You can help to translate Stretchly on Weblate. Consider joining with your Github account to be correctly credited.
已知问题
- The end break shortcut is disabled on native Wayland because temporary global shortcuts cannot be reliably released. Use the break controls or start Stretchly with the X11 backend (
stretchly --ozone-platform=x11). On KDE, remove any assignment created by an earlier Stretchly version once in System Settings > Keyboard > Shortcuts. - Windows Store build's autostart is not working, so was disabled. To use autostart, install Stretchly with the regular installer, or create a shortcut to Stretchly from
shell:AppsFolder(Win+R) and move it to theshell:startupfolder (Win+R). - The Snap build may fail to start on native Wayland. Start it with the X11 backend (
stretchly --ozone-platform=x11) as a workaround. See #1693. - Wayland multi-display window placement issue puts all break windows on one monitor; start with X11 backend (
stretchly --ozone-platform=x11) if needed. See electron/electron#48749.
MacOS
- users experiencing their Dock hiding after a break, requiring command + tab or a mouse click to get focus back, check System Preferences > Users & Groups > {User} > Login Items. If Hide is checked for Stretchly, uncheck it, it should solve the issue.
Windows
- users who upgraded to Windows 10 from previous Windows versions might be in "Do Not Disturb mode" all the time so they need to check "Show breaks even in Do Not Disturb mode"
- users with Chromium-based browser (Chrome, Edge, etc...) might need to set some flags when browser is non-responsive after break
人类与工具
- https://github.com/HatScripts/circle-flags
- https://www.icoconverter.com/ to generate .ico
- http://www.img2icnsapp.com/ to create .icns
- https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/
- http://web.stanford.edu/dept/EHS/prod/general/ergo/microbreaks.html
- https://www.spineuniverse.com/wellness/ergonomics/workstation-ergonomics-take-break
- http://www.lifehack.org/articles/productivity/21-counter-intuitive-break-ideas-to-boost-your-productivity-at-work.html
- http://www.huffingtonpost.com/2012/07/24/sitting-at-work-why-its-dangerous-alternatives_n_1695618.html
- http://www.unm.edu/~lkravitz/Article%20folder/sittingUNM.html
- https://www.ninds.nih.gov/News-Events/News-and-Press-Releases/Press-Releases/Want-learn-new-skill-Take-some-short-breaks
- https://www.painscience.com/articles/chair-trouble.php
- https://www.painscience.com/articles/microbreaking.php
- https://github.com/CognirelTech/Quillpad-Server
- https://www.webmd.com/fitness-exercise/a-z/seven-minute-workout
- https://www.poetryfoundation.org/poems/57243/how-to-be-perfect
- https://justworks.com/blog/improve-mental-health-work-midday-break-ideas
- https://www.nutritiousmovement.com/dynamic-at-home-work-and-school-spaces/
- https://www.onhealth.com/content/1/eye_exercises_and_stretches
- https://www.webmd.com/pain-management/exercises-carpal-tunnel-syndrome
Sounds credits
Sounds used in this application are listed here.
crystal glassby mlteenie, available under the Attribution License.wind chimeby GnoteSoundz, available under the Creative Commons 0 License.tic tocby magundah14, available under the Creative Commons 0 License.silenceby parcodeisuoni, available under the Attribution License.reverieby Seemant Chandra (instagram: piyush.x_x)
Fonts credits
This app uses Noto Sans fonts licensed under the Apache License, Version 2.0.
许可证
See LICENSE file.
- 本文标题:stretchly - 休息时间提醒应用
- 本文链接:https://www.cn121.com/desktop/hovancik-stretchly.html
- 原项目:hovancik/stretchly 版权归原作者 hovancik 及贡献者所有
- 收录信息:本站于 2026-10-06 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
- 开源协议:收录时本项目采用 BSD-2-Clause(查看 LICENSE 原文),本站转载其原始文档(未改动文字,仅剔除图片与无关章节);使用、修改、分发请以该仓库 LICENSE 原文为准。
- 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 hovancik/stretchly。
- 内容说明:本页正文为原项目 README 原文(英文),本站后续会翻译为中文(当前尚未译出,仅将二级标题译为中文,便于按栏目定位;标题原文可在下方原仓库中查看),仅剔除了图片与赞助等无关章节、并把相对链接改为绝对地址;页首简介为机器翻译自仓库描述。
- 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
- 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。