Releases: parhamf6/Tempo
Release list
1.3.0
Tempo 1.3.0
This release focuses on making Tempo more convenient to use day-to-day: a smarter export, inline name suggestions, and a status bar that shows you what's running without opening any notes.
What's new in 1.3.0
-
Single export button with five formats. The two "Copy as table" and "Copy as CSV" buttons are replaced by one Export button that opens a menu of five clipboard formats: Table (Markdown), CSV, JSON, TOML, and YAML. Table and CSV reuse the existing flattened display, while JSON, TOML, and YAML export the raw tracker data with nesting preserved and the UI-only
collapsedflag stripped — so they round-trip back into a tracker unchanged. The format list is extensible via a new registry (registerExportFormat/getExportFormats), making it easy to add more. -
Suggested segment names. You can now define a list of segment names in Settings (one per line). When you focus the new-segment name box, the suggestions appear in a dropdown, filtered as you type. The dropdown supports mouse click, ArrowUp/ArrowDown/Enter/Escape navigation. Pressing Enter with a highlighted suggestion fills the name and starts the segment in one action — no extra keystrokes. The feature is opt-in and empty by default, so there's no change unless you add names.
-
Status bar indicators for running timers. Tempo now shows every currently running timer directly in Obsidian's bottom status bar. Each running timer appears as a compact pill: a red stop icon, the segment name, and a live ticking duration. Clicking the stop icon ends the timer (the note is saved automatically); clicking the name+duration opens the note. The tooltip (name + file path) appears above the pill on hover, never covering the status bar. The feature is scoped like the stats block — leave it empty to watch the whole vault, or add specific folders and files. A toggle in Settings enables/disables it. On mobile, the status bar collapses to a compact counter (⏱ N); tapping opens a menu with Open and Stop actions for each timer. Scanning is lazy (first tick after load), cached per file by modification time, and batched 8 reads at a time for performance. On vault modify/create/delete/rename, only the affected file is re-scanned.
Install
Community
You can install the plugin from the Obsidian community store:
Obsidian Community
BRAT
Install BRAT, open the command palette and run "BRAT: Add a beta plugin for testing", then enter:
https://github.com/parhamf6/Tempo
Manual
Download main.js, manifest.json, and styles.css from the latest release and place them in:
/.obsidian/plugins/tempo/
Then enable "Tempo" in Settings → Community plugins.
Tempo builds on Ellpeck's Simple Time Tracker (MIT). Thanks, Ellpeck.
1.2.1
Tempo 1.2.1
Release focused on making Tempo lighter on your CPU and more robust in edge cases: timers tick with plain arithmetic instead of heavyweight date objects, the running clock no longer animates continuously, large tables render in a single pass, and dragging is smoother and works in popped-out windows.
What's new in 1.2.1
-
Much lower CPU while a timer runs. The per-second tick used to construct moment.js duration objects for every displayed time just to format text like
1h 5m 12s. The formatting now uses plain integer math — the same output, without the allocation churn — and the pulsing animation on the running-timer icon is gone, so the page can go idle between ticks. This is the change most responsible for the lower CPU use you'll see on any note with a running tracker. -
Faster table rendering. The tracker table used to re-scan the whole entry tree for every row (and every drag move) to answer "is this row running?" and "who are its siblings?". The table is now built in a single pass, with the running entry, its ancestor path, and each row's sibling list resolved once and passed down the recursion — O(n) total instead of O(n²).
-
Cached name rendering. Segment names are sent through Obsidian's markdown engine only when they actually contain markdown syntax. Plain names keep their text as-is, and names that do need rendering are cached and re-cloned on rebuild, so editing a tracker no longer re-renders every segment name.
-
Smoother drag reordering. Dragging used to ask the browser for a fresh layout read on every mouse move to find the insertion point. Sibling positions are now snapshotted once when the drag starts (and refreshed on scroll/resize), so dragging stays smooth even on wide tables. A regression that left the insertion line stuck on the last boundary was also fixed.
-
Popped-out window fixes. Drag styling and the Escape-to-cancel shortcut now use the row's own window instead of the main one, so both work correctly when a note is opened in a pop-out pane. The debounced save timer for collapse/expand toggles was made pop-out safe as well.
Install
Community
You can install the plugin from obsidian plugin store
Obsidian Community
BRAT
Install BRAT, open the command palette and run "BRAT: Add a beta plugin for testing", then enter:
https://github.com/parhamf6/Tempo
Manual
Download main.js, manifest.json, and styles.css from the latest release and place them in:
/.obsidian/plugins/tempo/
Then enable "Tempo" in Settings → Community plugins.
Tempo builds on Ellpeck's Simple Time Tracker (MIT). Thanks, Ellpeck.
1.2.0
Tempo 1.2.0
Release focused on reorganizing and restarting trackers with less friction: drag-and-drop reordering, configurable auto-naming, a live breadcrumb of what you're tracking, and a one-click reset.
What's new in 1.2.0
-
Drag to reorder segments. Grab the grip handle at the start of any row to reorder it among its siblings — an accent line previews exactly where it will land, dropping onto its own spot does nothing, and Escape cancels the drag. Works at any nesting depth (sub-entries reorder within their parent), stays correct with Display segments in reverse order enabled, and is touch-friendly. Chevron up/down buttons in each row's actions do the same moves without dragging, and disable at the ends.
-
Running segment breadcrumb in the Current timer. While a segment runs, the "Current" card now shows what you're actually tracking instead of a static label — the full chain down to the running entry, e.g.
Work › Part 2. Long names truncate with an ellipsis and the full path is available on hover. -
One-click reset. A reset button at the right end of the controls bar clears the whole tracker in one go, after an explicit confirmation that offers two actions: Delete all wipes every segment, and Clear times only keeps segment names and structure as a reusable template — handy for recurring daily or weekly trackers. Resetting a running tracker stops the running segment.
-
Configurable auto-naming. Two new settings control the fallback names for new segments and sub-entries. Every run of
#becomes the counter, zero-padded to its length:Segment #,PART ###→PART 001,## part→01 part. The defaults reproduce the oldSegment N/Part Nbehavior, and a typed name always wins.
Install
Community
You can install the plugin from obsidian plugin store
Obsidian Community
BRAT
Install BRAT, open the command palette and run "BRAT: Add a beta plugin for testing", then enter:
https://github.com/parhamf6/Tempo
Manual
Download main.js, manifest.json, and styles.css from the latest release and place them in:
<vault>/.obsidian/plugins/tempo/
Then enable "Tempo" in Settings → Community plugins.
Tempo builds on Ellpeck's Simple Time Tracker (MIT). Thanks, Ellpeck.
1.1.2
Tempo 1.1.2
tempo-demo-1.1.2-compressed.mp4
Patch release with no user-facing changes — internal quality fixes that clear every warning from the Obsidian community plugin scanner.
Fixed
- Cleaner stylesheet overrides. Removed all
!importantdeclarations fromstyles.css. Overrides now use selector specificity instead, so user themes and CSS snippets can always win. The reduced-motion block was also rewritten from a blanket wildcard rule into explicit selectors, keeping the same "all motion stops" behavior without the flags. - Hardened timestamp handling for type checking. All date/time logic now goes through a small typed wrapper around Moment instead of calling it raw. This changes nothing at runtime, but makes the codebase fully transparent to strict static analysis — which is what surfaced ~150 warnings on the previous release's scorecard.
Install
Community
You can install the plugin from obsidian plugin store
Obsidian Community
BRAT
Install BRAT, open the command palette and run "BRAT: Add a beta plugin for testing", then enter:
https://github.com/parhamf6/Tempo
Manual
Download main.js, manifest.json, and styles.css from the latest release and place them in:
<vault>/.obsidian/plugins/tempo/
Then enable "Tempo" in Settings → Community plugins.
Tempo builds on Ellpeck's Simple Time Tracker (MIT). Thanks, Ellpeck.
1.1.1
Tempo 1.1.1
tempo-demo-v1.1.1-compressed.mp4
Patch release with two fixes found shortly after 1.1.0.
Fixed
- Leaderboard no longer splits segments into sub-entry rows. Stats leaderboards — and the donut and day-by-day breakdowns fed by them — listed every sub-segment (each "Part 2", "Part 3", …) as its own row, merging unrelated parts across different segments into one bogus entry while the real segment disappeared. Sub-segment time now rolls up under its top-level segment name, matching the pre-1.1.0 grouping.
- Tracker expand/collapse is instant. Toggling a segment previously waited for a note write and a full block re-render before its sub-entries appeared. Rows now show and hide immediately; the state is still persisted quietly in the background.
Install
BRAT
Install BRAT, open the command palette and run "BRAT: Add a beta plugin for testing", then enter:
https://github.com/parhamf6/Tempo
Manual
Download main.js, manifest.json, and styles.css from the latest release and place them in:
<vault>/.obsidian/plugins/tempo/
Then enable "Tempo" in Settings → Community plugins.
Tempo builds on Ellpeck's Simple Time Tracker (MIT). Thanks, Ellpeck.
1.1.0
Tempo 1.1.0
tempo-demo-v1.1.0-compressed.mp4
Tempo is time tracking that lives in your notes. Drop a tempo block anywhere to track your work, and a tempo-stats block to see where the time actually went — across any files, folders, or date ranges you choose.
What's new in 1.1.0
Drill down into any day. Click a bar in the chart to see exactly what you worked on during that day, with times per task. From there, one click filters the entire stats view to that period.
Step through time. The range bar now has a date navigator — step back or forward one day at a time through your history, with the label doubling as a jump-back-to-today button.
Task breakdown donut. A collapsible donut shows what share of your tracked time each task took, top tasks as slices and everything else merged into "Other". Hover a slice for exact numbers, or use the legend.
Expandable leaderboard. Click any task in the leaderboard to expand its day-by-day times across the current range — dates, mini bars, and durations. A search box filters tasks by name when the list gets long.
Live timers. Running segments — and every total they feed — now tick up in real time, every second, right in the table.
Smoother interactions. Panels, accordions, and breakdowns animate open and closed; tooltips follow hover, click, tap, and keyboard focus. Everything respects the system reduced-motion setting.
Keyboard access. Chart bars, leaderboard rows, and donut slices are all reachable and operable from the keyboard.
Improved
- Sticky action buttons stay visible while scrolling wide tracker tables, and the expand chevron no longer wraps below long task names.
- Faster stats computation on large ranges: entry timestamps are parsed once instead of per bucket, so months of data aggregate noticeably quicker.
- Trackers idle silently when paused — no background work until something is running.
- Collapse/expand toggles and repeated UI changes are batched into fewer note writes.
Fixed
- Saving a tracker or the stats view can no longer lose updates when two blocks in the same note write at once (writes are now atomic under Obsidian's lock), including races with sync services.
- Blocks embedded in contexts without editor info (certain embeds) no longer throw on save attempts.
- Long sessions no longer accumulate leftover document-level listeners from chart tooltips.
- Stale save targets are detected and skipped instead of risking corruption after external edits shift lines in a note.
- Upstream support links and package metadata left over from the original project were replaced.
Install
BRAT
Install BRAT, open the command palette and run "BRAT: Add a beta plugin for testing", then enter:
https://github.com/parhamf6/Tempo
Manual
Download main.js, manifest.json, and styles.css from the latest release and place them in:
<vault>/.obsidian/plugins/tempo/
Then enable "Tempo" in Settings → Community plugins.
Tempo builds on Ellpeck's Simple Time Tracker (MIT). Thanks, Ellpeck.
1.0.0
Tempo v1.0.0 — Initial Release
Tempo is a modern, minimal time tracker that lives inside your notes. Press play when you start a task, press stop when you finish — that's it. Your time is stored as plain timestamps in your own notes, and a companion stats dashboard turns it into charts, leaderboards, and task percentages.
tempo-demo.mp4
What's in this release
In-note time tracking (tempo block)
- One-click tracking — insert a
tempocode block and press play to start; the button becomes stop while running. - Named segments — track as many tasks as you like, rename inline (double-click or the pencil icon), continue past segments, delete mistakes.
- Nested sub-entries — group segments under parent tasks with tree-style indentation.
- Survives everything — timers are pure timestamps, so they keep running through note switches, Obsidian restarts, and full shutdowns.
- Your data stays yours — everything is plain JSON inside your note: no external database, syncs with the rest of your vault.
- Copy as CSV — one click exports the table to your clipboard.
Stats dashboard (tempo-stats block)
- Choose your sources — aggregate time from specific folders (optionally recursive, optionally filtered by filename regex) or single files. Nothing is scanned without your say-so.
- Flexible ranges — Today, last 7/30 days, or any custom range with a date picker.
- Interactive daily chart — hover any bar for the day's total; click to drill down into that day's tasks, and filter the whole dashboard to just that period.
- Task leaderboard — ranked per-task totals with a live search filter.
- Task-percentage breakdown — collapsible donut chart showing each task's share of the period, with an "Other" rollup listing merged items.
- Always current — refreshes on demand or automatically as your vault changes.
- CSV export — copy the period's stats for spreadsheets or reports.
Also included
- Public JavaScript API — query trackers and durations from DataviewJS or other plugins.
- Configurable — timestamp formats, duration granularity, CSV delimiter, segment order, monospaced timer font, and more.
- Theme-aware UI — adapts to light/dark modes and your installed theme's palette.
Getting started
- Install and enable Tempo (see below).
- Run "Tempo: Insert time tracker" from the command palette.
- Switch to Live Preview or Reading mode, name your first segment, and press play.
- Whenever you want insights, add a
tempo-statsblock via "Tempo: Insert time tracker stats", pick your sources, and explore.
Installation
Requires Obsidian 1.13.0 or later.
Option A — BRAT
- Install and enable BRAT.
- Open the command palette and run BRAT: Add a beta plugin for testing.
- Enter this repository URL:
https://github.com/parhamf6/Tempo - Enable Tempo in Settings → Community plugins.
Option B — Manual
- Download
main.js,manifest.json, andstyles.cssfrom this release. - Create the folder
<vault>/.obsidian/plugins/tempo/(the folder name must match the plugin id) and copy the three files into it. - Restart Obsidian, then enable Tempo in Settings → Community plugins.
Credits & license
Tempo is based on ObsidianSimpleTimeTracker by Ellpeck and includes substantial modifications — most notably the tempo-stats aggregation dashboard, regex folder scanning, and an overhauled UI. Released under the MIT License.
Release assets
main.jsmanifest.jsonstyles.css