<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Bingfeng</title>
    <description>The latest articles on DEV Community by Bingfeng (@bfzhao).</description>
    <link>https://dev.to/bfzhao</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4130872%2F719891ea-5a49-4938-b4e4-73a50b3c8bc9.jpg</url>
      <title>DEV Community: Bingfeng</title>
      <link>https://dev.to/bfzhao</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bfzhao"/>
    <language>en</language>
    <item>
      <title>Notion Version History Is Just Timestamps. Here’s What Real Versioning Looks Like</title>
      <dc:creator>Bingfeng</dc:creator>
      <pubDate>Thu, 29 Oct 2026 03:08:59 +0000</pubDate>
      <link>https://dev.to/bfzhao/notion-version-history-is-just-timestamps-heres-what-real-versioning-looks-like-2lp4</link>
      <guid>https://dev.to/bfzhao/notion-version-history-is-just-timestamps-heres-what-real-versioning-looks-like-2lp4</guid>
      <description>&lt;p&gt;I write technical documentation in Notion. A few weeks ago I needed to get back to “the version I sent to the client before the review” — a specific state I remembered clearly but couldn’t locate. I opened Page History and got a flat list of timestamps. No labels, no summaries, no way to tell which snapshot was the one I wanted. I clicked through a dozen entries, comparing them by eye, and gave up.&lt;/p&gt;

&lt;p&gt;That was the moment I realized: Notion’s version history isn’t version control. It’s a list of timestamps. And for anyone who has used Git, that gap is hard to unsee.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Notion actually gives you
&lt;/h2&gt;

&lt;p&gt;Notion’s Page History records snapshots on a &lt;strong&gt;time interval&lt;/strong&gt;. A new version is saved every 10 minutes while you’re actively editing or two minutes after you stop edit. The retention window depends on your plan and it's 7 days on free tier.&lt;/p&gt;

&lt;p&gt;That’s a reasonable design for its actual purpose: undoing a recent mistake. If you overwrite a paragraph and notice within the hour, Page History gets you back. It’s a safety net for the last few days of editing, and it does that job fine.&lt;/p&gt;

&lt;p&gt;But this is not a versioning system, and the difference matters once you treat Notion as a place where long-lived documents live.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s missing, from a developer’s perspective
&lt;/h2&gt;

&lt;p&gt;If Git worked like Notion’s Page History, it would look like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No commit messages.&lt;/strong&gt; Every snapshot is identified only by its timestamp. You can’t name a version, tag it, or attach a note explaining what changed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No diff view.&lt;/strong&gt; You can preview a full page as it looked at a point in time, but you can’t see &lt;em&gt;what changed&lt;/em&gt; between two versions without opening them side by side and scanning manually.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time-driven, not event-driven.&lt;/strong&gt; You can’t manually mark a version at a meaningful moment — before a major rewrite, after a client review, at the end of a sprint. The timer decides, not you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bounded and non-portable.&lt;/strong&gt; Retention expires by plan, and even on Enterprise the history lives inside Notion’s system. You can’t export it, browse it independently, or keep it if you leave.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these are bugs. They’re consequences of a design optimized for “undo a recent edit,” not “maintain a versioned record of a long-lived document.” But if your Notion workspace holds specs, runbooks, or client-facing docs, that design leaves a real gap.&lt;/p&gt;

&lt;h2&gt;
  
  
  What real versioning would look like
&lt;/h2&gt;

&lt;p&gt;The properties I wanted, and couldn’t find in Notion’s native tooling:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Semantic snapshots.&lt;/strong&gt; A version I can name — “pre-review,” “v2.1,” “sent to client” — rather than a timestamp I have to guess at.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual comparison.&lt;/strong&gt; The ability to see differences between multiple snapshots at a glance, not open them one by one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retention I control.&lt;/strong&gt; History that persists as long as I choose, independent of my subscription tier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local ownership.&lt;/strong&gt; A copy that lives on my machine, not inside a service I depend on.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is close to what Git gives you for code, minus the branching and merging that documents don’t need. It’s also what most “backup” tools for Notion don’t provide — they capture data, but they don’t make it navigable or comparable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;I ended up building a side project for this: &lt;strong&gt;NotionManager&lt;/strong&gt;, a local-first backup and versioning tool for Notion.&lt;/p&gt;

&lt;p&gt;The design follows directly from the gaps above:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Snapshots on your terms.&lt;/strong&gt; You can capture a version manually — before a rewrite, after a review — or on a schedule you set. Each snapshot can be named and kept as a meaningful version, not just a timestamp.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual comparison across backups.&lt;/strong&gt; You can see what changed between snapshots at a glance, instead of opening them one by one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local-first storage.&lt;/strong&gt; Backups live on your machine. Retention is limited by your disk, not your plan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native-like browsing.&lt;/strong&gt; Backups are browsable and searchable offline, in an interface that feels close to Notion itself — so the archived version is actually usable, not just stored.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s not a replacement for Notion’s Page History. If you need to undo an edit from this morning, Notion’s built-in tool is the right one. NotionManager is for the layer above that: a durable, inspectable record of what your workspace looked like over time, under your control.&lt;/p&gt;

&lt;h2&gt;
  
  
  An open question
&lt;/h2&gt;

&lt;p&gt;If you manage long-lived technical documents in Notion, how do you handle versioning today? Have you run into the “which timestamp was the version I sent?” problem, or worked around it with naming conventions, duplicate pages, or external backups?&lt;/p&gt;

&lt;p&gt;I’m genuinely curious how other people solve this — it’s the question that led me to build the tool in the first place.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;NotionManager is free to start for anyone who wants to try it: &lt;a href="https://notionmanager.com" rel="noopener noreferrer"&gt;notionmanager.com&lt;/a&gt;. Feedback welcome — especially from people who’ve tried to version Notion docs and hit the same wall.&lt;/em&gt;&lt;/p&gt;




</description>
      <category>productivity</category>
      <category>showdev</category>
      <category>versioncontrol</category>
      <category>notion</category>
    </item>
  </channel>
</rss>
