Roam stores creation & modification times on every block, which you can see e.g. by hovering over a bullet, and can access via the API or queries.
I was just surprised to see that freshly syncing my Logseq Sync graph to a new computer shows all pages as created and modified at the time of the initial sync, which made me start poking around more, and I’m wondering: does Logseq reliably keep creation/modification dates on anything at all? I’d really like block-level precision, but at minimum having page-level metadata is critical.