LJ OS112 downloadsCreate Markdown-based trackers with tappable buttons that log timestamped rows to monthly CSV files, with summaries, dashboards, and settings-based editing.
TapLog is a one-tap tracker for Obsidian.
Use it to track snacks, cannabis, habits, symptoms, supplies, chores, inventory, or any simple event you want in plain files. Each tracker is a normal Markdown note. The tracker note contains readable taplog frontmatter, and a taplog code block renders the buttons in Reading View.
When you tap a button, TapLog appends a timestamped row to a monthly CSV file under TapLog/Logs/YYYY-MM/.
TapLog/Trackers/Snack Tracker.md.TapLog/Logs/YYYY-MM/snacks.csv to see the logged row.TapLog creates missing folders, CSV files, and CSV headers automatically.
To change the tracker later, open TapLog settings and use Edit existing tracker.
A tracker note has two important parts.
The editable config lives in the taplog frontmatter at the top of the note:
---
taplog:
id: snacks
output_type: csv
output_folder: TapLog/Logs
output_file_pattern: YYYY-MM/snacks.csv
columns:
- timestamp
- item
- quantity
- unit
- category
buttons:
- label: Ate Mosh Bar
values:
item: Mosh Bar
quantity: 1
unit: bar
category: snack
---
The rendered buttons come from a taplog code block in the note body:
```taplog
id: snacks
```
The code block id must match taplog.id.
For normal edits, use TapLog settings:
Buttons appear as compact editable cards. Change Name, use Logged values rows for the value name and logged value that should be written to the CSV, select Add logged value to add another row, select Add button to add another button, or select Remove button to remove one.
The settings editor writes changes back to the taplog frontmatter in the selected Markdown tracker note. Existing CSV logs are not deleted.
Tracker ids are read-only in settings. Create a new tracker if you need a different id.
Tracker notes are still the source of truth. You can also edit a tracker manually:
TapLog/Trackers/Snack Tracker.md.taplog section at the top of the note.The buttons use the updated config after Obsidian refreshes the note.
You can make these changes from Settings -> TapLog -> Edit existing tracker. The examples below show the Markdown config that TapLog updates for you.
In settings, load the tracker and edit the button's label field.
Advanced users can edit the label text directly:
buttons:
- label: Ate Protein Bar
values:
item: Mosh Bar
quantity: 1
unit: bar
category: snack
The label changes the button text. The values decide what gets written to the CSV.
In settings, edit the button's Logged values rows:
Value: item Logged value: Protein Bar
Value: quantity Logged value: 1
Value: unit Logged value: bar
Value: category Logged value: snack
Advanced users can edit the same values in Markdown:
buttons:
- label: Ate Protein Bar
values:
item: Protein Bar
quantity: 1
unit: bar
category: snack
Future taps use the new values. Existing CSV rows stay as they are.
In settings, select Add button, then set the new row's label and values.
Advanced users can add a button block directly:
buttons:
- label: Red Bull
values:
item: Red Bull
quantity: 1
unit: can
category: drink
Make sure every value key you want to save also appears in columns.
In settings, select Remove button on that button row.
Advanced users can delete the whole button block:
- label: Beef Jerky
values:
item: Beef Jerky
quantity: 1
unit: bag
category: snack
Removing a button does not remove old CSV rows.
Some trackers use defaults. For example, the Cannabis Tracker uses defaults for strain and method.
defaults:
strain: Neon Moon - Gunpowder Haze
method: dab
Change the value in the tracker note:
defaults:
strain: New Strain Name
method: dab
Buttons merge defaults with the button's own values. In this example, each dab button logs the current strain plus its own size.
Add the column name to columns:
columns:
- timestamp
- item
- quantity
- unit
- category
- note
Then add values for that column where needed:
buttons:
- label: Ate Mosh Bar
values:
item: Mosh Bar
quantity: 1
unit: bar
category: snack
note: afternoon
New CSV files use the updated columns. Existing CSV files are not rewritten automatically. If the current month's CSV already exists, update its header manually or change output_file_pattern before logging with the new columns.
Change output_file_pattern:
output_file_pattern: YYYY-MM/snacks.csv
For example:
output_file_pattern: YYYY-MM/snack-log.csv
Future taps write to the new file. Old CSV files stay where they are.
Tracker ids are read-only in the settings editor. Create a new tracker if you need a different id.
Advanced users can change an id manually, but the frontmatter id, code block id, and any dashboard blocks must stay in sync.
taplog:
id: snacks
must match:
```taplog
id: snacks
```
For built-in trackers, changing the output file name is usually safer than changing the tracker id. Generated dashboard blocks and settings order use tracker ids.
Use Edit existing tracker in settings to fix labels, buttons, columns, defaults, or output file names.
If you want a new custom tracker id to appear in settings and generated dashboard/index content, create a new custom tracker from settings. Advanced users can also open the generated tracker note in TapLog/Trackers/ and edit the taplog frontmatter directly.
Move, rename, archive, or delete the tracker note like any other Markdown file. CSV logs under TapLog/Logs/ are separate files and are not deleted when you remove a tracker note.
If the old tracker appears in TapLog/TapLog Index.md or TapLog/Dashboard.md, edit those Markdown notes or regenerate them as described below.
Tracker notes:
TapLog/Trackers/
Monthly CSV logs:
TapLog/Logs/YYYY-MM/*.csv
Monthly summaries and validation reports:
TapLog/Summaries/YYYY-MM/
Index note:
TapLog/TapLog Index.md
Dashboard note:
TapLog/Dashboard.md
Example output:
TapLog/Trackers/Snack Tracker.md
TapLog/Logs/2026-05/snacks.csv
TapLog/Summaries/2026-05/snacks Summary.md
TapLog/Summaries/2026-05/snacks Validation.md
TapLog/Summaries/2026-05/Monthly Rollup.md
The tracker commands create a tracker note if it does not exist, then open it. If the note already exists, TapLog opens it.
TapLog settings are helpers, not the only way to manage trackers.
Use settings to:
The custom tracker builder asks for a tracker name, optional tracker id, columns, defaults, and buttons.
Columns are one per line:
activity
quantity
unit
category
Defaults are key=value lines:
category=health
unit=count
Buttons are one per line. Use a plain label, or a label with values:
Took Vitamin | activity=Took Vitamin, quantity=1, unit=count
Headache | activity=Headache, quantity=1, unit=event
Walked
If a button is only a label, TapLog logs label and value: 1. timestamp is always included as the first column.
After a tracker is created, use Edit existing tracker for common changes. Existing tracker buttons are edited as compact cards with Name, Logged values, and add/remove controls. For advanced changes, open the tracker note and edit the taplog frontmatter directly.
Run TapLog: Create tracker index to create or open TapLog/TapLog Index.md.
The index is a normal Markdown note with links to trackers, output paths, and command names. It is not a live database view.
Run TapLog: Create dashboard to create or open TapLog/Dashboard.md.
The dashboard is a normal Markdown note that renders buttons from multiple tracker notes:
```taplog
id: snacks
source: tracker
```
Dashboard blocks use the tracker notes as the source of truth. Tapping a dashboard button writes to that tracker's normal monthly CSV.
The dashboard is not an analytics dashboard. It does not include charts, live widgets, or drag-and-drop layout.
If tracker order or tracker list changes, the existing index/dashboard notes are not overwritten automatically. Edit them by hand, or delete/rename the existing index/dashboard note and run the create command again.
Run TapLog: Create monthly summary for active tracker while viewing a tracker note. TapLog reads that tracker's current month CSV and creates or updates:
TapLog/Summaries/YYYY-MM/{tracker-id} Summary.md
Snack summaries can include item totals and simple par/restock guidance when taplog.par_levels exists. Cannabis summaries group usage by size and strain when those columns exist.
Run TapLog: Create monthly rollup summary to summarize the current month's CSV files under:
TapLog/Logs/YYYY-MM/
The rollup creates or updates:
TapLog/Summaries/YYYY-MM/Monthly Rollup.md
Run TapLog: Validate active tracker while viewing a tracker note to create a validation report:
TapLog/Summaries/YYYY-MM/{tracker-id} Validation.md
If a tracker is invalid, TapLog shows a setup problem Notice with the first issue it found.
taplog.id.id matches taplog.id in the frontmatter.taplog.output_type: csv.output_folder and output_file_pattern are set.TapLog/Logs/YYYY-MM/.Open TapLog settings, choose the tracker under Edit existing tracker, and update the button values or defaults. Future taps use the updated config. If an old CSV row is wrong, edit the CSV row directly.
Open TapLog settings and use Edit existing tracker to fix common fields. If the tracker is easier to start over, create a new custom tracker from settings and archive the old tracker note.
Switch out of Reading View and back, or close and reopen the note. Obsidian may need a moment to refresh frontmatter metadata.
Use shorter button labels where practical. If a long label wraps poorly, edit the button label from Edit existing tracker in settings. The CSV value can stay detailed in values.
Read the message shown in the TapLog block. It usually points to the missing or mismatched part of the config. You can also run TapLog: Validate active tracker from the command palette while viewing the tracker note.
taplog.defaults, which you can edit in settings or directly in the tracker note.taplog code blocks and dashboard references.