Workout Planner

by Rares Spatariu
5
4
3
2
1
Score: 47/100

Description

The Workout Planner plugin transforms workout logs into interactive visualizations and tracking tools. Store all workout data in a single CSV file, then embed charts, tables and timers directly in your notes using code blocks. Charts display volume, weight or reps over time with optional trend lines. Tables organize logs with sorting and filtering. Built in timers help track rest periods during workouts. The plugin includes intelligent exercise matching that handles naming variations and fuzzy searches. Create new workout logs through commands and the data updates in real time across all visualizations.

Reviews

No reviews yet.

Stats

12
stars
1,812
downloads
1
forks
107
days
15
days
41
days
5
total PRs
0
open PRs
1
closed PRs
4
merged PRs
10
total issues
2
open issues
8
closed issues
0
commits

README file from

Github

Workout Planner Plugin

Version Obsidian License

A comprehensive plugin for Obsidian that visualizes workout data with interactive charts, tables, and timers. Store your logs in a single CSV file and get beautiful visualizations, progress tracking, and duration estimation directly inside your notes.

Quick Start

Go to Settings → Workout Planner and click Create examples to generate a demo folder with sample workout data and notes showcasing all plugin features — charts, tables, timers, and dashboards.


Features

  • Interactive Charts — Volume, weight, reps, duration, distance, pace, heart rate via Chart.js
    • Smart formatting: duration as 1h 30m, pace as 5:30 min/km
    • Trend lines with inverted logic for pace (lower = faster = improving)
  • Data Tables — Sortable logs with edit/delete, protocol badges, progressive overload targets
  • Workout Timers — Countdown, interval, and stopwatch with presets and audio notifications
  • Workout Dashboard — Stats, muscle heat map, recent workouts, volume analytics, protocol effectiveness
  • Quick Log — Touch-friendly modal for fast logging with recent exercises and weight adjustment buttons
  • Protocol Tracking — Custom training techniques (drop sets, supersets, myo-reps, etc.) with badge display
  • Duration Estimation — Compare actual vs. estimated workout duration
  • Canvas Export — Visualize workout structure on Obsidian Canvas
  • Dynamic Exercise Types — Strength, Cardio, Flexibility with custom field definitions
  • Exercise Conversion — Convert exercises between types with field mapping
  • Custom Muscle Tags — Map tags in any language to canonical muscle groups
  • Dataview Integration — Public API for querying logs and stats from Dataview queries
  • Templater Integration — Use workout data in templates
  • Responsive Design — Works on desktop and mobile

Volume Trend


Usage

Commands

Access via Command Palette (Ctrl/Cmd + P):

Command Description
Create CSV log file Initialize the CSV file for storing workout logs
Insert workout chart Insert a workout-chart code block
Insert workout table Insert a workout-log code block
Insert workout timer Insert a workout-timer code block
Insert workout dashboard Insert a workout-dashboard code block
Insert workout duration Insert a workout duration estimator code block
Create exercise page Create a new exercise page
Create exercise section Add an exercise block to a note
Add exercise block Insert an exercise block with autocomplete
Export workout to canvas Export workout data to Obsidian Canvas
Convert exercise Convert exercise logs from one type to another
Manage muscle tags Open the muscle tag manager
Generate tag reference Create a reference note for all available muscle tags
Audit exercise names Scan vault for exercise name inconsistencies

Code Blocks

Embed charts, tables, timers, and dashboards directly in your notes using code blocks.

workout-chart
exercise: Squat
type: volume
dateRange: 30
showTrendLine: true
showStats: true
height: 400

Parameters:

Parameter Type Default Description
exercise string Exercise name to filter
type string volume volume, weight, reps, duration, distance, pace, heartRate
chartType string exercise Group by: exercise, workout, combined, all
dateRange number 30 Days to include
showTrendLine boolean true Display trend line
showStats boolean false Show avg/max/min stats box
exactMatch boolean false Exact vs. fuzzy exercise name matching
height number 400 Chart height in pixels
title string Custom chart title
limit number Maximum number of data points

Pace charts: trend logic is inverted — decreasing pace (faster) = Improving (green), increasing pace (slower) = Declining (red).

workout-log
exercise: Bench Press
exactMatch: false
dateRange: 14
sortBy: date
sortOrder: desc
limit: 50

Parameters:

Parameter Type Default Description
exercise string Exercise name to filter
exactMatch boolean true Exact vs. fuzzy matching
dateRange number Days to include
sortBy string date date, exercise, weight, reps, volume
sortOrder string desc asc or desc
limit number 50 Maximum rows to display
columns array all Visible columns, e.g. ["date","reps","weight"]
workout-timer
type: countdown
duration: 90
rounds: 3
sound: true
preset: rest

Parameters:

Parameter Type Default Description
type string countdown Timer mode: countdown, interval, stopwatch
duration number 30 Duration in seconds (countdown/interval)
rounds number 1 Number of rounds (interval mode)
sound boolean false Play audio on completion
showControls boolean true Show play/pause/reset buttons
preset string Use a saved preset by name (overridden by explicit params)
workout-dashboard

No parameters — renders the full dashboard with all widgets.


Settings

Setup & data

Setting Description
CSV log file path Folder where workout_logs.csv and muscle-tags.csv are stored
Exercise folder path Path to the folder containing exercise pages
Weight unit kg or lb — affects all views and new log defaults
Setup CSV files Creates both CSV files in the configured folder
Generate example data Creates a demo folder with sample workouts

Mobile logging

Setting Description
Default exact match When enabled, exercise filtering uses exact name matching by default
Quick weight increment Weight step for +/- buttons in create/edit log modals (e.g., 2.5)

Timer presets

Save reusable timer configurations (countdown, interval, stopwatch) with name, duration, rounds, sound, and controls settings. Set a default preset for new timers.

Custom protocols

Define custom training techniques beyond the built-in ones. Each protocol has a name, abbreviation (max 3 chars), and badge color. Protocols appear as badges in tables and dashboard widgets.

Training parameters

Setting Description
Weight increment Default weight step for progressive overload suggestions
Duration per repetition Seconds per rep — used when rep count is known
Default reps per set Assumed reps when not specified (0 = use fallback set duration)
Fallback set duration Seconds per set when reps are not available (default: 45s)

Advanced

Setting Description
Exercise block template Template inserted when creating exercise blocks via modal
Run all maintenance Runs migration tasks (block IDs, exercise type upgrades)

Custom Muscle Tags

Map custom tags (in any language) to canonical muscle groups for the heatmap and exercise categorization.

Tag Manager

Open via Command Palette → Workout: Manage muscle tags. Supports add, edit, delete, search, and fuzzy duplicate detection.

CSV Format

Tags are stored in muscle-tags.csv alongside your workout log:

tag,muscleGroup
petto,chest
schiena,back
spalle,shoulders

Canonical Muscle Groups

chest, back, shoulders, biceps, triceps, quads, hamstrings, glutes, calves, abs, core, forearms, traps, rear_delts


Data Format

All workout logs are stored in a single CSV file:

date,exercise,reps,weight,volume,origine,workout,timestamp,notes,protocol
Column Description
date ISO 8601 datetime (YYYY-MM-DDTHH:mm:ss.sssZ)
exercise Exercise name
reps Repetitions
weight Weight used
volume Calculated volume (reps × weight)
origine Source or workout routine (supports Obsidian links)
workout Workout name
timestamp Unique entry identifier (ms since epoch)
notes Optional notes
protocol Training protocol (e.g., drop_set, standard)

Custom exercise types add extra columns automatically (e.g., duration, distance, pace).

Example

date,exercise,reps,weight,volume,origine,workout,timestamp,notes,protocol
2025-01-17T10:30:00.000Z,Bench Press,8,100,800,[[Push Day]],Workout A,1737138600000,,standard
2025-01-17T10:35:00.000Z,Squat,10,80,800,[[Leg Day]],Workout A,1737138900000,,standard

Dataview Integration

The plugin exposes window.WorkoutPlannerAPI for use in Dataview queries and other plugins.

Methods

getWorkoutLogs(filter?)
const logs = await WorkoutPlannerAPI.getWorkoutLogs({
  exercise: "Squat", // partial match, case-insensitive
  workout: "Push Day",
  dateRange: { start: "2025-01-01", end: "2025-01-31" },
  protocol: "drop_set",
  exactMatch: false,
});

Returns: date, exercise, reps, weight, volume, workout, notes, timestamp, protocol

getExerciseStats(exercise)
const stats = await WorkoutPlannerAPI.getExerciseStats("Bench Press");
// { totalVolume, maxWeight, prWeight, prReps, prDate, totalSets,
//   averageWeight, averageReps, lastWorkoutDate, trend }
getExercises(filter?)
const exercises = await WorkoutPlannerAPI.getExercises({
  tag: "chest",
});

Examples

Recent logs table:

const logs = await WorkoutPlannerAPI.getWorkoutLogs({
  exercise: "Squat",
  dateRange: { start: "2025-01-01" }
});
dv.table(
  ["Date", "Reps", "Weight", "Volume"],
  logs.map(l => [l.date.split("T")[0], l.reps, l.weight + " kg", l.volume])
);

Exercise PR:

const stats = await WorkoutPlannerAPI.getExerciseStats("Bench Press");
dv.paragraph(`**PR:** ${stats.prWeight} kg × ${stats.prReps} reps (${stats.prDate})`);

Weekly volume:

const logs = await WorkoutPlannerAPI.getWorkoutLogs({
  dateRange: {
    start: moment().subtract(7, "days").format("YYYY-MM-DD"),
    end: moment().format("YYYY-MM-DD")
  }
});
const volume = logs.reduce((sum, l) => sum + l.volume, 0);
dv.paragraph(`**This week:** ${volume.toLocaleString()} kg total volume`);

The API is available after the plugin loads. Access as WorkoutPlannerAPI or window.WorkoutPlannerAPI.


Translations

⚠️ All translations except English are generated via AI (LLM-based machine translation). Some may contain errors or unnatural phrasing. Feel free to open an issue or PR with corrections.


Third-Party Libraries


License

MIT License — see LICENSE for details.

Similar Plugins

info
• Similar plugins are suggested based on the common tags between the plugins.
Advanced Tables
6 years ago by Tony Grosinger
Improved table navigation, formatting, and manipulation in Obsidian.md
Charts
5 years ago by phibr0
Charts - Obsidian Plugin | Create editable, interactive and animated Charts in Obsidian via Chart.js
Table of Contents
5 years ago by hipstersmoothie
Create a tables of contents for a note.
Excel to Markdown Table
4 years ago by Ganessh Kumar R P
An Obsidian plugin to paste data from Microsoft Excel, Google Sheets, Apple Numbers and LibreOffice Calc as Markdown tables in Obsidian editor.
Heatmap Calendar
4 years ago by Richard Slettevoll
An Obsidian plugin for displaying data in a calendar similar to the github activity calendar
Plugin Update Tracker
4 years ago by Steven Swartz
Know when installed obsidian plugins have updates and evaluate the risk of upgrading
Initiative Tracker
5 years ago by Jeremy Valentine
TTRPG Initiative Tracker for Obsidian.md
Charts View
5 years ago by caronchen
Data visualization solution in Obsidian, support plots and graphs.
Table Extended
5 years ago by AidenLx
Extend basic table in Obsidian with MultiMarkdown table syntax
Any Block
3 years ago by LincZero
You can flexibility to create a 'Block' by many means. It also provides many useful features, like `list to table`. (obsidian/markdown-it/vuepress plugin/app)
Table Generator
4 years ago by Boninall
A plugin for generate markdown table quickly like Typora.
Sheets Extended
3 years ago by NicoNekoru
Plugin that adds features to tables in obsidian including merging, vertical headers, and custom css
CSV Table
5 years ago by Adam Coddington
Have a CSV file you want to render some or all of the data from? This plugin allows you to display that data in your obsidian preview.
Habit Tracker 21
2 years ago by zoreet
Word Sprint
4 years ago by Andrew Lombardi
Obsidian Word Sprint plugin
Markdown table checkboxes
3 years ago by DylanGiesberts
Obsidian plugin. Allows for the usage of checkboxes inside markdown tables.
Keep the Rhythm
a year ago by Ezben
An Obsidian plugin to track your daily word count through a heatmap.
Daily Activity
5 years ago by trydalch
Table to CSV Exporter
4 years ago by Stefan Wolfrum
An Obsidian Plugin that allows to export tables from a pane in reading mode to CSV files.
Habit Calendar
3 years ago by Hedonihilist
Monthly Habit Calendar for DataviewJS. This plugin helps you render a calendar inside DataviewJS code block, showing your habit status within a month.
Plotly
5 years ago by Dmitriy Shulha
Obsidian plugin to embed Plotly charts into markdown notes.
Financial Doc
3 years ago by Studio Webux
Financial Documentation and Tracking using CSV format and Chart.js directly in Obsidian
Enhanced tables
2 years ago by pistacchio
A plugin for Obsidian to add advanced controls (like sorting and filtering) to standard markup tables
JSON table
3 years ago by Dario Baumberger
Simply switch between JSON and tables in your Obsidian notes.
AsciiDoc Blocks Plugin
4 years ago by Juracy Filho
A plugin to render asciidoc blocks in Obsidian, initially asciidoc tables
Table Checkbox Renderer
5 months ago by Daniel Aguerrevere
Interactive checkboxes for Markdown tables in Obsidian. Toggle checkboxes in Reading Mode and instantly update your Markdown file. Supports multiple checkboxes per cell and any table layout.
Vega Visualizations
3 years ago by Justin Kim
Create Vega and Vega-Lite visualizations in https://obsidian.md/.
Old Note Admonitor
3 years ago by tadashi-aikawa
Sortable Tables
9 months ago by filippov112
A plugin for Obsidian that adds the ability to interactively sort Markdown tables in preview mode.
Size History
3 years ago by Piotr Borowski
Graph with vault size over time
Easy Tracker
4 months ago by Hunter Ji
An Obsidian plugin for ultra-simple goal and habit tracking in any note.
Strava Sync
2 years ago by Howard Wilson
Sync Strava activities to your Obsidian vault
Account Viewer
2 years ago by Muaz Yediyüzkırkiki
Obsidian Plugin that automatically generate accounting tables from Markdown code blocks tagged with "accounting" alias.
Waka time box
3 years ago by complexzeng
Workout Tracker
a year ago by wanabeunique
Obsidian plugin for track workouts
Filtered Opener
2 years ago by Roman Kubiv
Sets of notes defined by filters to open notes.
Track-a-Lot
2 years ago by Iulian Onofrei
This is a tracker plugin for Obsidian
SQLite DB
a year ago by Stefano Frigerio
Foodiary
2 years ago by vkostyanetsky
Food tracker plugin for Obsidian
SQLSeal Charts
a year ago by hypersphere
Charting extension for SQLSeal Obsidian Plugin. Visualise your data!
Hill Charts
2 years ago by stufro
Add Hill Charts to your Obsidian notes.
CSV All-in-One
a year ago by hihangeol
Fastimer
2 years ago by vkostyanetsky
Intermittent fasting tracker plugin for Obsidian
TinyChart
2 years ago by Alin Coop
Dead simple ASCII charts for Obsidian.
Daily Note Metrics
a year ago by Andre-Diamond
Obsidian Plugin that parses Daily Notes and uses data to create charts
Tiny Habits
8 months ago by Diego Nazoa
Obsidian Plugin for habit tracking with Svelte
HTML checkboxes
a year ago by Anareaty
Table Line Break Mobile
3 months ago by marcelflymark
Obsidian plugin: Insert a new line break inside a table cell using the <br> HTML element
IMDb
2 years ago by Andrew Chen
A simple plugin for syncing movies from IMDb to Obsidian
List to table converter
6 months ago by paddomanno
Boardgame Search
a year ago by Marlon May
A plugin to create notes for boardgames based on the BGG API
AI Nutrition Tracker
6 months ago by rnaidenov
Crackboard
2 years ago by Franklin
Obsidian plugin for crackboard.dev