Gallery · App X-Ray

Stretchly 1.22.1

Electron 44.9.3 · 92 addresses · 29 modules · 39 IPC channels

Findings

low

IPC handlers do not check the sender

31 main-process handlers, and no check of event.senderFrame or event.sender was found. Any page that can send IPC, including an injected one, is trusted.

info

Electron 44.9.3 is supported

as of 2026-10-22, Electron 43–45 are supported.

info

IPC channel names chosen at runtime

4 IPC calls take the channel name from a variable. When a preload script forwards a channel chosen by the page, the page can reach every handler; worth reviewing.

Network addresses

HostAddressHowWhere
—__internal__call:settings.getapp/main.js:1736
—_migratedOpenAtLogincall:settings.getapp/main.js:434
—33881JanHovancik.stretchly_24fg4m0zq65je!Stretchlyproperty:pathapp/utils/autostartManager.js:23
—allScreenscall:settings.getapp/main.js:970
—appExclusionscall:settings.getapp/utils/appExclusionsManager.js:20
—appExclusionsCheckIntervalcall:settings.getapp/utils/appExclusionsManager.js:10
—appExclusionsCheckIntervalcall:store.getapp/main.js:376
—audiocall:store.getapp/main.js:324
—blurredBackgroundcall:settings.getapp/main.js:799
—breakcall:settings.getapp/utils/statusMessages.js:58
—breakContentScreencall:settings.getapp/utils/displayManager.js:89
—breakDurationcall:settings.getapp/breaksPlanner.js:28
—breakHealthModecall:settings.getapp/main.js:1035
—breakIdeascall:settings.getapp/main.js:1331
—breakIntervalcall:settings.getapp/breaksPlanner.js:133
—breakNotificationcall:settings.getapp/breaksPlanner.js:119
—breakNotificationIntervalcall:settings.getapp/breaksPlanner.js:120
—breakPostponableDurationPercentcall:settings.getapp/main.js:993
—breakPostponecall:settings.getapp/main.js:994
—breakPostponesLimitcall:settings.getapp/main.js:992
—breakStartSoundPlayingcall:store.deleteapp/main.js:345
—breakStrictModecall:settings.getapp/main.js:991
—breakWindowHeightcall:settings.getapp/main.js:876
—breakWindowWidthcall:settings.getapp/main.js:1045
—checkNewVersioncall:settings.getapp/main.js:774
—currentTimeInBreakscall:window.settings.getapp/break-renderer.js:73
—currentTimeInBreaksFontSizecall:window.settings.getapp/microbreak-renderer.js:77
—currentTimeInBreaksFormatcall:window.settings.getapp/microbreak-renderer.js:73
—disableAppUpdateFeaturescall:store.getapp/main.js:316
—endBreakShortcutcall:settings.getapp/main.js:845
—endBreakShortcutcall:window.settings.getapp/microbreak-renderer.js:65
—forceX11OnWaylandcall:settings.getapp/main.js:474
—fullscreencall:settings.getapp/main.js:952
api.github.comhttps://api.github.com/repos/hovancik/stretchly/releases/latestcall:fetchapp/utils/versionChecker.js:3
—ideascall:settings.getapp/main.js:832
—isFirstRuncall:settings.getapp/main.js:674
—languagecall:window.settings.getapp/break-renderer.js:72
—languagecall:settings.getapp/utils/statusMessages.js:27
—longBreakAudiocall:store.getapp/main.js:342
—longBreakManualFinishcall:settings.getapp/main.js:410
—longBreakStartSoundcall:settings.getapp/main.js:1007
—mainColorcall:settings.getapp/main.js:1035
—mainColorcall:window.settings.getapp/microbreak-renderer.js:23
—microbreakcall:settings.getapp/breaksPlanner.js:117
—microbreakDurationcall:settings.getapp/main.js:821
—microbreakIdeascall:settings.getapp/main.js:1332
—microbreakIntervalcall:settings.getapp/breaksPlanner.js:118
—microbreakNotificationcall:settings.getapp/breaksPlanner.js:296
—microbreakNotificationIntervalcall:settings.getapp/breaksPlanner.js:297
—microbreakPostponableDurationPercentcall:settings.getapp/main.js:824
—microbreakPostponecall:settings.getapp/main.js:825
—microbreakPostponesLimitcall:settings.getapp/main.js:823
—microbreakStartSoundPlayingcall:store.deleteapp/main.js:336
—microbreakStrictModecall:settings.getapp/main.js:258
—miniBreakAudiocall:store.getapp/main.js:333
—miniBreakColorcall:settings.getapp/main.js:865
—miniBreakManualFinishcall:settings.getapp/main.js:401
—miniBreakStartSoundcall:settings.getapp/main.js:837
—monitorDndcall:settings.getapp/main.js:424
—monitorDndCheckIntervalcall:settings.getapp/utils/dndManager.js:16
—morningHourcall:settings.getapp/utils/untilMorning.js:11
—naturalBreakscall:settings.getapp/breaksPlanner.js:236
—naturalBreaksCheckIntervalcall:settings.getapp/utils/naturalBreaksManager.js:11
—naturalBreaksInactivityResetTimecall:settings.getapp/utils/naturalBreaksManager.js:56
—notifyNewVersioncall:settings.getapp/main.js:777
—opacitycall:settings.getapp/main.js:1322
—openAtLogincall:settings.getapp/main.js:442
—pauseBreaksFor1HourShortcutcall:settings.getapp/main.js:1544
—pauseBreaksFor2HoursShortcutcall:settings.getapp/main.js:1550
—pauseBreaksFor30MinutesShortcutcall:settings.getapp/main.js:1538
—pauseBreaksFor5HoursShortcutcall:settings.getapp/main.js:1556
—pauseBreaksShortcutcall:store.getapp/main.js:293
—pauseBreaksUntilMorningShortcutcall:settings.getapp/main.js:1562
—pauseForSuspendOrLockcall:settings.getapp/main.js:557
—posLatitudecall:settings.getapp/utils/untilMorning.js:15
—posLongitudecall:settings.getapp/utils/untilMorning.js:16
—resumeBreaksShortcutcall:store.deleteapp/main.js:300
—screencall:settings.getapp/utils/displayManager.js:18
—showBreakActionsInStrictModecall:store.deleteapp/main.js:308
—showBreaksAsRegularWindowscall:settings.getapp/main.js:996
—showTrayIconcall:settings.getapp/main.js:1427
—showTrayMenuInStrictModecall:settings.getapp/main.js:1494
—silentNotificationscall:settings.getapp/main.js:1190
—themeSourcecall:settings.getapp/main.js:489
—timeToBreakInTraycall:store.deleteapp/main.js:360
—transparentModecall:settings.getapp/main.js:1321
—trayIconStylecall:settings.getapp/main.js:633
—trayIconThemeSourcecall:settings.getapp/main.js:614
—useIdeasFromSettingscall:settings.getapp/main.js:1330
—useMonochromeInvertedTrayIconcall:store.getapp/main.js:365
—useMonochromeTrayIconcall:settings.getapp/main.js:629
—volumecall:settings.getapp/main.js:1192

Modules

ModuleUsed by
@napi-rs/canvasgraphics/time-intray-icon-generator.js
@particle/dbus-nextapp/utils/dndManager.js, app/utils/flatpakPortalManager.js
auto-launchapp/utils/autostartManager.js
dompurifyapp/utils/sanitizeIdea.js
electronapp/electron-bridge.mjs, app/main.js, app/utils/context-bridge-exposers.js, app/utils/displayManager.js, app/utils/naturalBreaksManager.js
electron-log/main.jsapp/breaksPlanner.js, app/main.js, app/utils/appExclusionsManager.js, app/utils/autostartManager.js, app/utils/commands.js, app/utils/displayManager.js, app/utils/dndManager.js, app/utils/flatpakPortalManager.js, app/utils/naturalBreaksManager.js, app/utils/untilMorning.js
electron-storeapp/main.js
eventsapp/breaksPlanner.js, app/utils/appExclusionsManager.js, app/utils/dndManager.js, app/utils/naturalBreaksManager.js
humanize-durationapp/main.js, app/utils/context-bridge-exposers.js
i18nextapp/main.js
i18next-fs-backendapp/main.js
luxonapp/main.js, app/utils/untilMorning.js, app/utils/utils.js
meeussunmoonapp/utils/untilMorning.js
node-desktop-idle-v2app/utils/naturalBreaksManager.js
node:child_processapp/utils/dndManager.js, graphics/time-intray-icon-generator.js
node:eventsapp/main.js
node:fsapp/main.js, app/utils/audioResolver.js, app/utils/imageResolver.js, app/utils/utils.js, graphics/time-intray-icon-generator.js
node:fs/promisesapp/utils/dndManager.js
node:osapp/utils/dndManager.js
node:pathapp/utils/dndManager.js
node:urlapp/utils/audioResolver.js, app/utils/imageResolver.js
node:utilapp/utils/dndManager.js
pathapp/main.js, app/utils/audioResolver.js, app/utils/imageResolver.js, graphics/time-intray-icon-generator.js
png-to-icographics/time-intray-icon-generator.js
ps-listapp/utils/appExclusionsManager.js
semverapp/utils/context-bridge-exposers.js
urlapp/main.js, graphics/time-intray-icon-generator.js
vitest/configvitest.config.ts
windows-focus-assistapp/utils/dndManager.js

Windows and IPC

WindowwebPreferences
app/main.js:658preload=process-preload.mjs, sandbox=false
app/main.js:737preload=electron-bridge.mjs, sandbox=false
app/main.js:909preload=microbreak-preload.mjs, sandbox=false
app/main.js:1390preload=preferences-preload.mjs, sandbox=false
app/main.js:707preload=contributor-preferences-preload.mjs, sandbox=false
app/main.js:676preload=welcome-preload.mjs, sandbox=false
app/main.js:1079preload=break-preload.mjs, sandbox=false
app/main.js:1805preload=electron-bridge.mjs, sandbox=false
ChannelSideOperationWhere
check-versionrendereronapp/utils/context-bridge-exposers.js:87
close-current-windowrenderersendapp/utils/context-bridge-exposers.js:95
current-settingsrendererinvokeapp/electron-bridge.mjs:26
enable-contributor-preferencesrendereronapp/utils/context-bridge-exposers.js:89
enter-manual-awaitrendereronapp/utils/context-bridge-exposers.js:39
finish-long-breakmainonapp/main.js:1661
finish-mini-breakmainonapp/main.js:1651
get-global-valuemainhandleapp/main.js:122
get-versionrendererinvokeapp/utils/context-bridge-exposers.js:92
get-window-boundsmainhandleapp/main.js:1864
i18next-dirrendererinvokeapp/utils/context-bridge-exposers.js:26
i18next-translaterendererinvokeapp/utils/context-bridge-exposers.js:25
long-break-loadedmainonapp/main.js:1119
mini-break-loadedmainonapp/main.js:948
open-contributor-authrenderersendapp/utils/context-bridge-exposers.js:96
open-contributor-preferencesmainonapp/main.js:1795
open-preferencesrenderersendapp/utils/context-bridge-exposers.js:99
open-sync-preferencesrenderersendapp/utils/context-bridge-exposers.js:98
play-soundmainonapp/main.js:1743
postpone-long-breakmainonapp/main.js:1646
postpone-mini-breakmainonapp/main.js:1641
request-finish-breakrendereronapp/utils/context-bridge-exposers.js:37
request-postpone-breakrendereronapp/utils/context-bridge-exposers.js:35
request-skip-breakrendereronapp/utils/context-bridge-exposers.js:36
resolve-local-audiomainhandleapp/main.js:1883
resolve-local-imagemainhandleapp/main.js:1878
restore-defaultsrenderersendapp/utils/context-bridge-exposers.js:94
restore-remote-settingsmainhandleapp/main.js:1839
save-settingrenderersendapp/utils/context-bridge-exposers.js:74
send-long-break-datamainhandleapp/main.js:1013
send-mini-break-datamainhandleapp/main.js:843
set-contributormainonapp/main.js:1783
set-global-valuemainonapp/main.js:118
set-window-sizemainonapp/main.js:1869
settings-getrendererinvokeapp/utils/context-bridge-exposers.js:69
show-debugmainhandleapp/main.js:1747
show-notificationrendereronapp/utils/context-bridge-exposers.js:85
translaterendereronapp/utils/context-bridge-exposers.js:81
update-trayrenderersendapp/utils/context-bridge-exposers.js:102

Remote pages, data and packaging

No remote pages are loaded into app windows.

No on-device storage calls found.

No packaged executable was found, so Electron fuses were not read.

README badge

Maintainers can show this report in their README:

[![App X-Ray](https://Eliot5566.github.io/app-xray/apps/stretchly/badge.svg)](https://Eliot5566.github.io/app-xray/apps/stretchly/)

What this report cannot see