Search...Search plugins and themes...
⌘K
Sign in
  • Get started
  • Download
  • Pricing
  • Enterprise
  • Account
  • Obsidian
  • Overview
  • Sync
  • Publish
  • Canvas
  • Mobile
  • Web Clipper
  • CLI
  • Learn
  • Help
  • Developers
  • Changelog
  • About
  • Roadmap
  • Blog
  • Resources
  • System status
  • License overview
  • Terms of service
  • Privacy policy
  • Security
  • Community
  • Plugins
  • Join the community
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

Pomodoro Timer

eatgrasseatgrass52k downloads

Manage your daily focus using the Pomodoro Technique.

Add to Obsidian
  • Overview
  • Scorecard
  • Updates24

image

Introduction

This plugin integrates a customizable Pomodoro timer into your Obsidian workspace, helping you focus and manage your time effectively.

Features

  • Customizable Timer: Set your work and break intervals to suit your productivity style.
  • Audible Alerts: Stay on track with audio notifications signaling the end of each session.
  • Status Bar Display: Monitor your progress directly from Obsidian's status bar to keep focusing.
  • Daily Note Integration: Automatically log your sessions in your daily notes for better tracking.
  • Task Tracking: Automatically refresh the 'actual time' field for the task in focus.

Notification

Custom Notification Sound

  1. Put the audio file into your vault.
  2. Set its path ralative to the vault's root. For example: your audio file is in AudioFiles and named notification.mp3, your path would be AudioFiles/notification.mp3. Don't forget the file extension (like .mp3, .wav etc.).
  3. Click the play button next to the path to verify the audio

Task Tracking

To activate this feature, first enable it in the settings. Then add pomodoros inline-field after your task's text description as below. The pomodoro timer will then automatically update the actual count at the end of each work session.

Important: Ensure to add this inline-field before the Tasks plugin's fields. Placing it elsewhere may result in incorrect rendering within the Tasks Plugin.

-   [ ] Task with specified expected and actual pomodoros fields [🍅:: 3/10]
-   [ ] Task with only the actual pomodoros field [🍅:: 5]
-   [ ] With Task plugin enabled [🍅:: 5] ➕ 2023-12-29 📅 2024-01-10

Log

Log Format

The standard log formats are as follows For those requiring more detailed logging, consider setting up a custom [log template](#Custom Log Template) as described below.

Simple

**WORK(25m)**: 20:16 - 20:17
**BREAK(25m)**: 20:16 - 20:17

Verbose

- 🍅 (pomodoro::WORK) (duration:: 25m) (begin:: 2023-12-20 15:57) - (end:: 2023-12-20 15:58)
- 🥤 (pomodoro::BREAK) (duration:: 25m) (begin:: 2023-12-20 16:06) - (end:: 2023-12-20 16:07)

Custom Log Template (Optional)

  1. Install the Templater plugin.
  2. Compose your log template script using the log object, which stores session information.
// TimerLog
{
    duration: number,  // duratin in minutes
    session: number,   // session length
    finished: boolean, // if the session is finished?
    mode: string,      // 'WORK' or 'BREAK'
    begin: Moment,     // start time
    end: Moment,       // end time
    task: TaskItem,    // focused task
}

// TaskItem
{
    path: string,         // task file path
    fileName: string,     // task file name
    text: string,         // the full text of the task
    name: string,         // editable task name (default: task description)
    status: string,       // task checkbox symbol
    blockLink: string,    // block link id of the task
    checked: boolean,     // if the task's checkbox checked
    done: string,         // done date
    due: string,          // due date
    created: string,      // created date
    cancelled: string,    // cancelled date
    scheduled: string,    // scheduled date
    start: string,        // start date
    description: string,  // task description
    priority: string,     // task priority
    recurrence: string,   // task recurrence rule
    tags: string[],       // task tags
    expected: number,     // expected pomodoros
    actual: number        // actual pomodoros
}

here is an example

<%*
if (log.mode == "WORK") {
  if (!log.finished) {
    tR = `🟡 Focused ${log.task.name} ${log.duration} / ${log.session} minutes`;
  } else {
    tR = `🍅 Focused ${log.task.name} ${log.duration} minutes`;
  }
} else {
  tR = `☕️ Took a break from ${log.begin.format("HH:mm")} to ${log.end.format(
    "HH:mm"
  )}`;
}
%>

Examples of Using with DataView

Log Table

This DataView script generates a table showing Pomodoro sessions with their durations, start, and end times.

image

```dataviewjs
const pages = dv.pages()
const table = dv.markdownTable(['Pomodoro','Duration', 'Begin', 'End'],
pages.file.lists
.filter(item=>item.pomodoro)
.sort(item => item.end, 'desc')
.map(item=> {

    return [item.pomodoro, `${item.duration.as('minutes')} m`, item.begin, item.end]
})
)
dv.paragraph(table)

```  

Summary View

This DataView script presents a summary of Pomodoro sessions, categorized by date.

image

```dataviewjs
const pages = dv.pages();
const emoji = "🍅";
dv.table(
  ["Date", "Pomodoros", "Total"],
  pages.file.lists
    .filter((item) => item?.pomodoro == "WORK")
    .groupBy((item) => {
      if (item.end && item.end.length >= 10) {
        return item.end.substring(0, 10);
      } else {
        return "Unknown Date";
      }
    })
    .map((group) => {
      let sum = 0;
      group.rows.forEach((row) => (sum += row.duration.as("minutes")));
      return [
        group.key,
        group.rows.length > 5
          ? `${emoji}  ${group.rows.length}`
          : `${emoji.repeat(group.rows.length)}`,
        `${sum} min`,
      ];
    })
)
```

CSS Variables

Variable Default
--pomodoro-timer-color var(--text-faint)
--pomodoro-timer-elapsed-color var(--color-green)
--pomodoro-timer-text-color var(--text-normal)
--pomodoro-timer-dot-color var(--color-ted)

FAQ

  1. How to Switch the Session

To switch sessions, simply click on the Work/Break label displayed on the timer.

  1. How to completely disable Break sessions

You can adjust the break interval setting to 0, this will turn off Break sessions.


69%
HealthFair
ReviewCaution
About
Add a customizable Pomodoro timer to Obsidian with adjustable work/break intervals, audible alerts, and a status bar progress display. Log sessions to daily notes and automatically update task pomodoro counts and actual time fields.
TasksStatus barDates
Details
Current version
1.2.3
Last updated
2 years ago
Created
2 years ago
Updates
24 releases
Downloads
52k
Compatible with
Obsidian 0.15.0+
License
MIT
Report bugRequest featureReport plugin
Sponsor
Buy Me a Coffee
Author
eatgrasseatgrass
github.com/eatgrass
GitHubeatgrass
  1. Community
  2. Plugins
  3. Tasks
  4. Pomodoro Timer

Related plugins

Day Planner (OG)

Day planning from a simple task list in a Markdown note (bare bones, preserves the features and behavior of the original plugin).

Tasks

Track tasks across your vault. Supports due dates, recurring tasks, done dates, sub-set of checklist items, and filtering.

Day Planner

Day planning from a task list in a Markdown note with enhanced time block functionality.

Reminder

Manage Markdown TODOs with reminder.

Rollover Daily Todos

Rollover any unchecked checkboxes from your last daily note into today's note.

TODO | Text-based GTD

Collect all outstanding TODOs from your vault and presents them in lists Today, Scheduled, Inbox and Someday/Maybe.

Completed Task Display

Controls for displaying or hiding completed tasks.

Proletarian Wizard Task Manager

Track your tasks across all the notes in your workspace. Organize your day. Plan your work

Task Collector (TC)

Change task status and collect tasks within a document using hotkeys and context menus.

Periodic Notes

Manage your daily, weekly, and monthly notes.