Provide a setting to record the block created-at timestamp in the metadata of the block, and to store it in the respective Markdown or Org files.
This achieves an important feature parity with a number of tools like Roam Research, plain-text note-taking systems (Zettelkasten, etc), and other text and wiki tools (Drafts, etc).
Although Logseq technically contains block level timestamps via :feature/enable-block-timestamps? in config.edn, the featureset is limited, unpredictable, and sometimes buggy. This makes it hard to use. Below is a comprehensive feature request around block level timestamps.
Why bullet-level timestamps are useful
They provide useful context. Knowing when a bullet was written shows us the context under which an idea evolved or knowledge was gained, how outdated up to date it is, and so forth. This is a vital part of PKM
Scope
Every block aka bullet, should track two timestamps: creation and “last updated”
This means each individual bullet, subbullet, subsubbullet, etc. gets its own timestamp
Pages should have their own timestamp set as well
Semantics
Created time should never change after the very first creation, even upon refresh/re-index, etc.
Updated time should only be updated upon true block updates, and be written to disk immediately
When a block is dragged and moved up/down, it should retain its original creation date. Updated time should change with a block move
When a block is cut and pasted, it should retain its original creation date
Interface
Human readable time for create/update should be visible on each block’s right-click menu.
Storage
Ideally, these timestamps would be considered as block metadata, and stored within the .md file
if that is too much clutter, timestamps could be stored in a block-timestamps.edn file. However, such storage should be ordered predictably, so that a visual inspection of the .edn file via a tool like git diff clearly shows the diffs as expected (current .edn storage seems to be a dictionary that is randomly ordered each time it is written, which is not desirable)
I have enabled it and it works now. I also just realized that the time-format is UNIX time. So here is a convenient (and fast) epoch/time converter: https://www.epochconverter.com/
One slight nuisance is that the “created at” and “update” timestamp are (on my device) always the same, which means that it essentially only displays the time it was last updated.
(I have just checekd and this upadted time is not activated when the cursor is passing through, but it seemst to be activated once one starts typing - even if one erases it immediately).
This means that the timestamps are not as good for retrospective metadata for blocks one retroactively modifies.
I reached it using a workaround, actively tagging it in the block attribute, (because currently logoseq is almost missing sorting and retrieval capabilities, while datascript has powerful features,
How to bind items in block-timestamps.edn back to the markdown file?
Sounds inserting something like id:: for all blocks in the markdown is inevitable.
The ability to (optionally) see time stamps would be huge for me because it’s often something I want to see later (when did I do the thing that made me write this down?). That would be a lot nicer than always having to manually type /time and then see the timestamp even when I don’t want to see it (even worse: It would be stored non-semantically as a part of the text field).
The time could be displayed like the task time tracking - on the right side, as slightly de-empathized meta-info. When you hover over it, you could be shown the block’s edit history.
You can already see a page’s revision history inside of Logseq using the git integration, so I would think that this would be relatively easy and make a lot of sense to implement.
All the metadata (that is already there!) would be stored in the repository and wouldn’t pollute your files.
The only issue is that you need some form of connection between the gut and the file because git cannot tell whcih block is whcih. What happens when you change the contents of a block? What happens if you delete a block?
Git doesn’t know something happened to a block just that x to x line changed. And the lines can change as you type more or less.
It’s not possible to get changes in blocks down to the level required by looking at file diffs, which is what git would offer, without being able to refer to each block individually
You’re right that it’s not perfect, but I’d argue it’s probably good enough for the use case. It’s good enough for almost every programmer to use almost every day, after all. A lot of things can be deduced from the context and I personally am mostly interested in when the block was created. Minor updates will be easily spotted by Git and if the content is completely different, it can be argued that a given block shouldn’t even be tied to its old identity.
Seems like Logseq is already aware of the create/update date for any block. I’m guessing this is only inside the Logseq database, and isn’t reflected in the Markdown file (which might not be a big deal). Is it just me or it looks like the heavy lifting has already been done? It would just be a matter of showing this metadata next to each block.
Using Dev mode in Logseq it is possible to look at each block’s metadata. As you can see, the block’s create/update timestamps are present: