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
  • Themes
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

Log Keeper

jimjambimbamjimjambimbam494 downloads

Generate time stamps automatically as changes are made to a note.

Add to Obsidian
  • Overview
  • Scorecard
  • Updates5

Track changes to your notes within your Obsidian Vault as you type. When the content of a note changes within a vault, a new time stamp is generated or an original time stamp is edited, depending on the settings. This log is then added to a note's YAML property.

Property Example Example of the 'last-modified' property seen in Obsidian.

All time stamps are formatted according to the ISO 8601 standard format YYYY-MM-DDTHH:mm:ss where:

  • YYYY: Is the current year (e.g. "2025" for the current year)
  • MM: Is the current month (e.g. "04" for the 4th month)
  • DD: Is the current day (e.g. "05" for the 5th day of the month)
  • T: Separates the date and time values
  • HH: Is the current hour from 0-23
  • mm: Is the current minute from 0-59
  • ss: Is the current second from 0-59

Plugin Note Example Example of the 'last-modified' property being updated in a note when the Log Keeper plugin is enabled.

Uses

Contribution Graph / Dataview

Combine Note Modification Tracker with other plugins such as Dataview and Contribution Graph to create a contribution graph like in Github.

Contribution Graph Example

The snippet of javascript code can display a contribution graph from all the notes that contain a 'last-modified' property. Note: To make it work, remember to replace 'js' with 'dataviewjs' at the start of the code block.

    ```js
    // code goes here...
    ```

Becomes:

    ```dataviewjs
    // code goes here...
    ```

Code Snippet

const currentYear = new Date().getFullYear()
const from = currentYear + '-01-01'
const to = currentYear + '-12-31'
let data = []
let dates = []

// Must collect all the files that have data on file modification
let pages = dv.pages()
    .where(p => p["last-modified"])

// Grab all the dates, even duplicates, and push to an array.
for (let i = 0; i < pages.length; i++) {
    let page = pages[i]
    for (let j = 0; j < page["last-modified"].length; j++) {
        dates.push(page["last-modified"][j])
    }
}

// Reduce the array down to a key value pairs.
// Key is the date with the time component removed and,
// value is the number of times the key appears in the array.
let dateCount = dates.reduce((acc, date) => {
    let dateKey = date.toString().split("T")[0]

    acc[dateKey] = (acc[dateKey] || 0) + 1

    return acc
}, {})

// We manipulate the key value pairs so that they 
data = Object.keys(dateCount).map(key => 
    ({
        date: key,
        value: dateCount[key]
    }))
    
const calendarData = {
    title:  "Contribution Graph Example", // graph title
    data: data, // data
    fromDate: from, // from date, yyyy-MM-dd
    toDate: to // to date, yyyy-MM-dd
}
renderContributionGraph(this.container, calendarData)

Contributing

Feel free to contribute to this plugin however you want. Bug reports, bug fixes and feature requests are always welcome.

Goals

Listed in level of priority:

Plugin

  • Add setting that allows users to format the time stamps of their notes using valid Momentjs syntax.
  • Add commands to temporarily suspend time stamping if the user needs to make changes to the properties of a note, to avoid excessive updates. Time stamping will resume after a note is closed, or the command is called again.
  • Add setting that allows users to change the property name used for storing time stamps.
  • Add a command that allows users to change the property name that is used to track changes. For example, changing "last-modified" to "log date".

Github Repo

  • Add a CONTRIBUTORS.md file for anyone that has contributed to repo.
  • Add Github action that automatically adds contributors to CONTRIBUTORS.md file.
  • Add CONTRIBUTOR.md file reference to README.md file.
75%
HealthGood
ReviewSatisfactory
About
Track changes to notes in your vault as you type and record a timestamp for each modification. Format timestamps using ISO 8601 and store them in a note's YAML property (e.g., last-modified), enabling Dataview or Contribution Graph to build contribution-style visualizations.
Markdown
Details
Current version
3.1.0
Last updated
12 months ago
Created
Last year
Updates
5 releases
Downloads
494
Compatible with
Obsidian 0.15.0+
Platforms
Desktop, Mobile
License
GPL-3.0
Report bugRequest featureReport plugin
Author
jimjambimbamjimjambimbam
github.com/JimJamBimBam
GitHubjimjambimbam
  1. Community
  2. Plugins
  3. Markdown
  4. Log Keeper

Related plugins

Importer

Import data from Notion, Evernote, Apple Notes, Microsoft OneNote, Google Keep, Bear, Roam, and HTML files.

Outliner

Work with your lists like in Workflowy or Roam Research.

Various Complements

Complete words similar to auto-completion in an IDE.

Linter

Format and style your notes. Linter can be used to format YAML tags, aliases, arrays, and metadata; footnotes; headings; spacing; math blocks; regular Markdown contents like list, italics, and bold styles; and more with the use of custom rule options.

Fantasy Statblocks

Create, manage and view a Fantasy Bestiary with Dungeons and Dragons style statblocks.

Custom Frames

Turn web apps into panes using iframes with custom styling. Also comes with presets for Google Keep, Todoist and more.

Auto Link Title

Automatically fetches the titles of links from the web.

Chronos Timeline

Render interactive timelines inline in your notes from simple markdown

Consistent Attachments and Links

Move note attachments and update links automatically.

Automatic Table Of Contents

Create a table of contents in a note that updates itself when the note changes.