Skip to content

Changelog

All notable changes to this project will be documented in this file.

1.4.0 - 2025-08-26

Changed

  • Simplified audio loading logic by removing complex local file path resolution.
  • Updated all dependencies to latest versions.
  • Replaced Settings Headings with proper setHeading() method for Obsidian plugin guidelines compliance.

Fixed

  • Updated test mocks to support new setHeading() method.
  • Corrected test expectations and setting indices after settings UI restructure.
  • Fixed lint errors in sound manager.

Added

  • New optional notification sound at the end of the timer.
  • Audio notifications load from CDN for improved reliability and cross-platform compatibility.
  • Option to use Custom URL or File instead of the default options.
  • New Obsidian command to toggle Sound Notifications on and off.

1.3.0 - 2025-08-17

Changed

  • Adjusted colors to more closely match other status bar elements.
  • Moved from inline SVG icons to separate files.

Added

  • New Obsidian commands:
  • Toggle status bar visibility.
  • Toggle icon visibility.
  • Toggle the timer (play/pause).
  • Reset timer.
  • Cycle timer to next phase.
  • New dependency to handle SVG icons esbuild-plugin-svg.
  • New icon logic:
  • New Paused icon used when the timer is paused.
  • New Play icon used when the timer is running.
  • Timer icon used when inactive.
  • Comprehensive test coverage improvements:
  • Added command integration tests for all new keyboard shortcuts.
  • Added icon state transition tests for new icon switching logic.
  • Added timer completion flow tests for work/break transitions.

Fixed

  • Resolved test hanging issues caused by mock timer implementation using real setTimeout.
  • Added proper test cleanup in afterEach hooks to prevent timer leaks.
  • Fixed mock interval implementation to avoid creating real timers during testing.

1.2.0 - 2025-08-08

Changed

  • Briefly tried switching from using esbuild to Vite, then reverted the build system from Vite back to esbuild. While Vite was explored for its development features, esbuild proved to be a more stable and performant choice for an Obsidian plugin.
  • Refactored the codebase for better organization and maintainability.
  • Improved timer state management for more reliable operation.
  • Standardized CSS class names for consistency.
  • Extracted repetitive input validation logic into reusable helper functions.
  • Refactored timer methods to eliminate code duplication in interval management.

Added

  • New opt-in status bar icon for the plugin.
  • Documentation site built with MkDocs.
  • CHANGELOG with all plugin release notes.
  • Increased test coverage for the plugin lifecycle, timer logic, and settings.
  • Robust input validation tests for the settings tab.
  • Edge case testing for the timer and other components.

Fixed

  • Timer inconsistencies when cycling through durations.
  • A memory leak that occurred when the plugin was unloaded.
  • A bug that allowed settings to be changed in an unsafe way.
  • Replaced browser alerts with Obsidian's native Notice API.
  • Improved DOM event listener management to prevent memory leaks on plugin reload.
  • Replaced magic numbers with named constants for MouseEvent.button values.
  • Renamed resetTimerState to resetPomodoroSession for better clarity.
  • Minor bugs related to type errors, event handling, and input validation.

1.1.0 - 2025-06-11

Added

  • Settings panel to configure:
  • Work, short break, and long break durations.
  • Number of work sessions before a long break.
  • Status bar icon visibility.
  • Initial test suite using Jest.
  • pnpm and ESLint to the development workflow.
  • README and CHANGELOG files.

1.0.0 - 2025-01-30

Added

  • Initial release.
  • Core Pomodoro timer with work, short break, and long break states.
  • Visual countdown (MM:SS) in the status bar.
  • Audio alerts on timer completion.
  • Mouse controls for the timer:
  • Left-click: Start/pause timer.
  • Middle-click: Cycle modes.
  • Right-click: Reset timer.
  • Color changes in UI to indicate timer state.