A fun developer micro-break reminder plugin for IntelliJ IDEA.
ByteSip nudges you with non-blocking notification balloons so your body keeps up with your IDE:
| Break type | Cadence | Vibe |
|---|---|---|
| Water | every 25 min | "Code can wait. Kidneys cannot." |
| Eyes | every 50 min | "Pixels are not nutrients." |
| Move | every 90 min | "Your chair is getting emotionally attached." |
Every notification has two actions:
- Done — dismiss the balloon, regular cadence continues.
- Snooze 1 min — bump the same reminder by 1 minutes.
- Kotlin (JVM toolchain 21)
- Gradle Kotlin DSL
- IntelliJ Platform Gradle Plugin 2.x
- Target platform: IntelliJ IDEA 2024.2+ (
sinceBuild = 242)
bytesip/
├── build.gradle.kts
├── settings.gradle.kts
├── gradle.properties
└── src/main/
├── kotlin/com/bytesip/
│ ├── ByteSipStartupActivity.kt # boots scheduler on project open
│ ├── BreakScheduler.kt # @Service app-level scheduler
│ ├── BreakType.kt # WATER / EYES / MOVE enum
│ ├── BreakMessages.kt # random message pools
│ └── ByteSipNotificationService.kt # builds the balloon notifications
└── resources/META-INF/plugin.xml
- Open the
bytesipfolder in IntelliJ IDEA — it will be detected as a Gradle project. Let Gradle sync. - Make sure a JDK 21 is configured (
File → Project Structure → SDKs). - In the Gradle tool window, open bytesip → Tasks → intellij platform.
- Double-click runIde. A sandbox IntelliJ instance launches with ByteSip installed.
- Open any project inside the sandbox IDE. ByteSip starts automatically and the first water reminder appears after 25 minutes.
Tip: to verify behavior faster, temporarily shorten the intervals in
BreakType.kt(e.g.Duration.ofSeconds(15)), then rerunrunIde.
From the project root:
./gradlew runIdeTo build a distributable plugin ZIP:
./gradlew buildPluginThe artifact is produced at build/distributions/ByteSip-<version>.zip and can
be installed via Settings → Plugins → ⚙ → Install Plugin from Disk….
- Uses the IntelliJ balloon notification system — no modal popups.
- A single application-level
@Service(BreakScheduler) owns all timers, so opening multiple projects does not stack duplicate reminders. - Notifications dispatch onto the EDT before showing.
- "Snooze 1 min" reschedules the affected break once; regular cadence resumes automatically after the snoozed fire.