Paul Chiu324 downloadsTrack workouts, exercises, weights, sets. Supports resistence and duration based exercises. Consolidated into dashboard and per-exercise trend charts.
FitKit is a workout tracker for Obsidian. Your sets, reps, weight, and durations are stored as plain Markdown in your vault, edited through a form built for use during workouts, with a rolled-up dashboard and per-exercise progression charts when you need it.
Every workout is a normal note with Dataview inline fields. If you uninstall FitKit tomorrow, your training history is still plain text in your vault. You choose where to store the notes and how you use your data.
The workout editor is optimised to be low-touch so you can expend workout effort on reps rather than data entry. Tap to add a set, type the weight, that's it. Once you have a few workouts logged, the dashboard and the per-exercise charts auto-populate.
FitKit needs the Dataview plugin to render history tables and recent-session views. Install it first from Obsidian's community plugins.
FitKit is listed in Obsidian's community plugin directory. To install it from the community plugins browser:
For beta builds with BRAT or a manual install from a GitHub release, see Install.
The defaults are designed so you can log a workout the moment FitKit is enabled. No setup is required.

Open today's workout from the command palette. FitKit creates today's note under Fitness/Workouts/ and opens it in the editor.Squat. If it is new, FitKit asks whether to create an exercise note for it; say yes for anything you want to chart and revisit later.That is it. The editor autosaves as you go, and the underlying Markdown stays readable:
---
type: workout
date: 2026-05-12
name: Squat Day
---
## [[Squat]]
- [exercise:: [[Squat]]] [set:: 1] [weight:: 50] [reps:: 5]
- [exercise:: [[Squat]]] [set:: 2] [weight:: 55] [reps:: 5]
Run Rebuild dashboard from FitKit's settings to generate Fitness/Fitness Dashboard.md. It lists your recent sessions, a personal best per exercise, and any next-session plans you recorded, followed by a per-exercise section backed by a Dataview query.

Exercise notes pick up a progression chart and a Recent sessions table without you wiring anything up. They are ordinary notes with type: exercise frontmatter, so the Notes section is yours to write in.
Names drift. You log 'Pushup' one week and 'Push Up' the next, or an exercise ends up living only in workout history with no note behind it. The registry in FitKit's settings lists every exercise the plugin knows about, labelled by where it came from, and is where you fix that.

Renaming from here renames the exercise note, rewrites every reference across your workout notes, and keeps the old name as an alias so nothing stops resolving. You see a preview of every file and row that will change, and can cancel before anything is written. Renaming onto a name already in use consolidates the two.
| Page | What it covers |
|---|---|
| Workout editor | Cards, sets, durations, the rest timer, next-session plans, autosave. |
| Exercise registry | Where exercises come from, rebuilding, renaming, consolidating, kinds and units. |
| Dashboard and charts | What the dashboard generates, how a PB is chosen, fitkit-chart options. |
| Note format | Frontmatter, inline fields, and exactly what survives a save. |
| Settings and maintenance | Every setting, every maintenance action, and the two commands. |
| Install | Installing with BRAT for beta builds, and installing manually from a release. |
[rpe:: 7], are dropped the next time the editor saves that note. Everything else in a workout note is preserved, see Note format.kg or lbs) only changes labels. There is no numeric conversion.See CONTRIBUTING.md for how to propose changes and what a good PR looks like.
Run npm install to install dependencies.
Run npm run dev to start esbuild in watch mode. It produces main.js next to manifest.json at the repo root.
To point a dev vault at the build, symlink main.js, manifest.json, and styles.css from the repo root into <vault>/.obsidian/plugins/fitkit/. Reload Obsidian, or toggle the plugin off and on, to pick up new builds.
The local gate is npm test, npm run lint, and npm run format. Run all three before pushing.
On merge to main, the Release workflow stamps a version using the PR's label (major, minor, patch, or norelease) and publishes a GitHub release with main.js, manifest.json, and styles.css attached.
See AGENTS.md for project conventions.
MIT.