Changelog
v1.6.9 - August 2026
Section titled “v1.6.9 - August 2026”One fix, and it is worth updating for if you leave notes open while you work.
Automatic sending stopped working on any note you had open
Section titled “Automatic sending stopped working on any note you had open”If a note was open in a tab while N2O fetched it from Notion, automatic sending could stop for that note and never start again. You would keep editing it, and nothing would go up. Pressing Sync by hand still worked, which is what made it easy to miss: the note was not broken, it had just quietly dropped out of automatic sync.
The cause was a guard I added in 1.6.8 to stop N2O sending a half-written sentence while you are still typing. It decided you were typing whenever what your editor was showing did not match the file on disk. That is true while you type, and it is also true when a tab is simply showing an older version of a note, which is exactly what my own fetch produces: every fetch rewrites the note, and an open tab does not always catch up.
So it waited for you to stop typing when you were not typing, and it waited forever.
It now looks at which way the two differ. A tab showing something older than the file has nothing of yours in it, so there is nothing to wait for. If you really are mid-sentence, it still waits, and what gets sent is the saved version of your note rather than the half-finished line.
If sending is ever held up for more than about half a minute, N2O now says so in its log with the name of the note, instead of going quiet.
This one is almost entirely about edits that used to go missing. If you sync a note from two sides, or you have ever answered a conflict prompt, this release is worth taking. I found most of these by building a test that types on both sides at once and then checks every line is still there, and it turned up more than I expected.
An edit you make in Notion no longer disappears after you answer a conflict.
Section titled “An edit you make in Notion no longer disappears after you answer a conflict.”You picked “keep my version” in a conflict prompt. From that moment on, that note never took another change from Notion again. Not a later edit, not the next day. It looked like sync had simply stopped caring about that one note, and there was nothing to tell you why.
Keeping your version no longer claims N2O has seen the Notion side. The next edit in Notion comes down normally.
Conflict backups stopped multiplying, and one of them could overwrite your Notion page.
Section titled “Conflict backups stopped multiplying, and one of them could overwrite your Notion page.”A conflict wrote a backup note. That backup lived inside your synced folder, so N2O treated it as a note to sync, which produced another conflict, which wrote another backup. One conflict turned into 61 notes in the worst case I reproduced, and because the copies were being synced, one of them could be pushed over your actual Notion page.
Backups are not synced notes any more, and answering the same conflict twice no longer writes a second copy.
A note that never settled, sending and fetching forever.
Section titled “A note that never settled, sending and fetching forever.”One note could get into a state where every sync sent it to Notion, then fetched it back, then sent it again, indefinitely. It never converged and nothing said so. A cycle now stops after six hops and tells you which note it was.
Your edit reaching Notion after a two-way merge.
Section titled “Your edit reaching Notion after a two-way merge.”When N2O merged your change with a Notion change, the merged result was written to your vault and then not sent. Your side of the merge stayed in Obsidian. That is fixed, along with a related one: while a conflict prompt was open waiting for you, nothing else in the vault was sent either, not just the conflicted note.
Two versions really are both on disk before you are asked to choose.
Section titled “Two versions really are both on disk before you are asked to choose.”The conflict dialog used to appear before the backup copy had been written. Answering quickly could lose the version you were choosing between. Both versions are saved first now.
The dialog also stopped showing a precise timestamp for the Notion side. Notion only records the minute, so the seconds were invented, and a made-up number is worse than none when you are deciding which copy to keep.
Clearing a note no longer clears the Notion page.
Section titled “Clearing a note no longer clears the Notion page.”If a note ended up empty, from a crash mid-write, a truncated file, or a sync going wrong, that emptiness was pushed and your Notion page was wiped. There was a guard, but it only protected pages with three or more blocks, so small pages went. Nothing is deleted from a Notion page by an empty note now, whatever its size. If you genuinely want a page emptied, clear it in Notion.
Which folder owns a note is a rule now, not the order you added them.
Section titled “Which folder owns a note is a rule now, not the order you added them.”With two synced folders covering the same note, the one that got it depended on which you set up first. That is not something you should have to know. The decision is made from what each folder actually refuses, and a pull-only folder no longer wins a note it will not write.
Automatic sending waits until you stop typing.
Section titled “Automatic sending waits until you stop typing.”Auto-push could fire while you were still writing a sentence and send a half-finished line. It checks whether the editor has unsaved work now and waits.
The setting’s own description also changed. It used to promise more than automatic sync can deliver, and it now says plainly what it does and does not guarantee.
Smaller things you might notice
Section titled “Smaller things you might notice”A very long paragraph no longer fails the whole page. Notion caps a block of text at 2000 characters and N2O now splits at that boundary instead of the page erroring out.
The sync preview shows what would be SENT as well as what would arrive.
The dashboard says when it could not read something, instead of showing a confident zero.
A synced block whose source is not in your vault says so, instead of rendering as a broken embed. Rollup properties and views that fell back to a different layout also say what they are.
One thing I want to be straight about
Section titled “One thing I want to be straight about”There is a narrow case I know about and have not fixed. If you edit a page in Notion within about a second of N2O sending that same note, your Notion edit can be lost. It is a real window, it is small, and the fix for it is a larger change I would rather do properly than rush into this release. Everything above is unaffected by it.
v1.6.7 - August 2026
Section titled “v1.6.7 - August 2026”Every synced folder now decides for itself what comes in and where it goes. If you have more than one, several things that quietly only ever worked for the first one now work for all of them. And one fix I want at the top: typing into a note while it syncs no longer loses what you typed.
An edit you make while a note is syncing in the background survives.
Section titled “An edit you make while a note is syncing in the background survives.”You edit a note. N2O is pulling that same note from Notion in the background, which takes a moment over the network. The Notion version landed on top of your paragraph and it was gone, with no conflict note and nothing in the UI to say so. A note being pulled can now only be written if it is still exactly as N2O found it before the fetch; if you changed it in between, the write is skipped and the next sync merges your edit and the Notion change the normal way. The same holds for a note you create at a path the first sync is about to fill.
Read this one before you update: a folder that has picked nothing now syncs nothing.
Section titled “Read this one before you update: a folder that has picked nothing now syncs nothing.”There used to be a “Sync scope” setting in Settings, covering the whole vault, shipped as “Everything”. It overruled every folder’s own picker. So a folder you had picked nothing in still pulled your entire Notion workspace, while its own card said a sync would bring in nothing.
The setting is gone. Each folder now says on its own card whether it takes Everything or Only what I pick, and nothing outside the folder can override it.
If you were relying on the old vault-wide “Everything”, your folder will sync nothing until you open it and choose. That is one click, on the card, under What syncs.
Sending to Notion no longer only looks in your first folder.
Section titled “Sending to Notion no longer only looks in your first folder.”With more than one synced folder, pressing the push scanned the first one and stopped. Notes you edited in any other folder were never sent, nothing failed, and the run reported success. It then told you those notes sat outside your first folder and suggested moving them there, which was advice to undo your own setup.
It looks in every synced folder now, deletions included, and the message names all of them.
You can pick a page and leave one of its children out.
Section titled “You can pick a page and leave one of its children out.”Tick a parent page and every page under it came in, all or nothing. Now you can untick any child, and everything under it stays out. It remembers the page rather than its name, so renaming it in Notion does not quietly undo your choice.
A database bigger than the limit says so instead of going quiet.
Section titled “A database bigger than the limit says so instead of going quiet.”A very large database pulled what fitted and reported success. The rest were simply absent, on every sync, and nothing said so. N2O now tells you the database is incomplete, how many rows came down, and what to do about it. The limit itself went up tenfold along the way.
Sync stops refusing to run because of one folder.
Section titled “Sync stops refusing to run because of one folder.”If your first folder was set to Send to Notion, pressing Sync refused the whole vault, including folders that had plenty to bring in. Each folder is now asked about its own direction.
Skipping a path tells you it works both ways.
Section titled “Skipping a path tells you it works both ways.”A skip has always stopped notes going out AND coming in. Only one screen ever mentioned the second half, and it was the one screen where you cannot add a skip. The section says so now, before you add one.
The synced folders panel was rebuilt around one question per section.
Section titled “The synced folders panel was rebuilt around one question per section.”Direction, then what is linked, then what syncs. Each box carries a dot showing whether that side is ready, folders are drawn with a folder icon wherever they are named, and the wording says what will happen rather than naming the fields it is stored in.
Smaller things
Section titled “Smaller things”- A note that is not inside any synced folder now says exactly that when you try to send it, instead of naming a setting that no longer exists.
- The dashboard row and the folder card no longer disagree: a folder pulling four pages said “1 item selected” in one place and “No destination” in the other.
- Choosing what to skip is a folder picker now, showing only folders inside the one you are skipping in, instead of a box you typed a path into.
- With extended metadata turned on, N2O paces its requests to Notion instead of sending them all at once.
v1.6.6 - August 2026
Section titled “v1.6.6 - August 2026”If your first sync never worked, or stopped part way and never explained itself, this is the release to update to.
A freshly connected workspace now syncs.
Section titled “A freshly connected workspace now syncs.”This is the big one. After connecting Notion, N2O started up set to sync a specific selection, with nothing selected. That combination means “sync nothing”, so the button did nothing and there was no way to tell why. It is the single worst bug this product has had. A fresh install now starts ready to sync everything you granted access to on Notion’s own consent screen, and narrowing it down stays one click away.
N2O stops sprinting into Notion’s rate limit.
Section titled “N2O stops sprinting into Notion’s rate limit.”Notion allows a fixed budget of requests over a rolling ten minutes, not a fixed speed. N2O was spending that budget as fast as it could, hitting the wall part way through a large sync, and then waiting. Measured over full runs, going faster arrived at exactly the same place, later. It now sprints when the whole job fits inside one window and walks steadily when it does not, which is faster in practice on anything large.
A big sync in progress no longer looks like a failure.
Section titled “A big sync in progress no longer looks like a failure.”A first sync of a large workspace reported three percent, showed over a thousand items “needing attention”, and turned the panel red, while nothing had actually gone wrong. Normal progress is now reported as progress. A run with a handful of things worth a look says so quietly instead of raising an alarm.
When a sync stops early, it now tells you why.
Section titled “When a sync stops early, it now tells you why.”The panel used to say “Sync incomplete” for every kind of interruption. If Notion has asked N2O to wait, it now says so, and how long, and that it will pick up where it left off. If N2O does not know the reason, it still does not invent one.
A long first sync warns you it is long, once, with an estimate.
Section titled “A long first sync warns you it is long, once, with an estimate.”Pages you pasted a Notion link into are recognised instead of duplicated.
Section titled “Pages you pasted a Notion link into are recognised instead of duplicated.”Pasting a page URL into a note’s notion_id now links that note to the page. It used to create a second copy of the page in Notion.
A blank line you never typed stops costing you a conflict.
Section titled “A blank line you never typed stops costing you a conflict.”Columns containing nested content reach Notion.
Section titled “Columns containing nested content reach Notion.”A column holding a toggle, a callout or a list could lose that content on the way to Notion. It now arrives.
An interrupted image replacement finishes on the next sync, instead of staying half done.
Section titled “An interrupted image replacement finishes on the next sync, instead of staying half done.”A trial with a key waiting no longer stays locked out.
Section titled “A trial with a key waiting no longer stays locked out.”If your trial key was created but your copy of N2O never received it, there was nothing you could do: the plugin had no way to ask for it, and the dashboard told you to start a trial you had already started three weeks earlier. It now asks your account for a key whenever it does not hold one.
Synced blocks stop warning you on every single sync.
Section titled “Synced blocks stop warning you on every single sync.”If the original had been deleted in Notion, N2O kept asking for content that no longer exists, failing, and then telling you something was missing. Every run, the same blocks, with no way for it to ever succeed.
Custom Templates settings take effect when you change them.
Section titled “Custom Templates settings take effect when you change them.”Turning Templates on used to do nothing until you reloaded the plugin. A database you told N2O to leave alone forgot that on every restart. And a template file you had just written could be ignored for a few seconds after saving it, which looked like your template was wrong when it was fine.
Syncing right after a plugin reload no longer reports a database failure that did not happen.
Section titled “Syncing right after a plugin reload no longer reports a database failure that did not happen.”A reinstall recovers your licence without you having to find a button.
Section titled “A reinstall recovers your licence without you having to find a button.”If you reinstall or move to a new machine, N2O now restores your paid licence on its own.
The correct prices.
Section titled “The correct prices.”The plugin was still showing the old lifetime price. It now shows the current one, and there is a plan page rather than numbers baked into the app.
Folder settings ask which direction first.
Section titled “Folder settings ask which direction first.”The folder panel asked what to link and what to sync before asking which way the sync goes, which is the question that decides whether the other two matter. It asks direction first now.
v1.6.5 - August 2026
Section titled “v1.6.5 - August 2026”Choosing a side in a conflict now actually sticks.
Section titled “Choosing a side in a conflict now actually sticks.”When a page changed in both places, N2O asked which version to keep. Picking one wrote it into your vault and told you the conflict was resolved, and then the next sync quietly put the other version back. Notion never received your choice at all. Your choice is now sent to Notion and survives the next sync.
A page property called Created is no longer destroyed.
Section titled “A page property called Created is no longer destroyed.”If a Notion page had a property named Created, syncing could overwrite it. A sync where you had changed nothing could also rewrite the file on disk for no reason. Both are fixed.
Pushing a page no longer drops blocks from Notion in silence.
Section titled “Pushing a page no longer drops blocks from Notion in silence.”Some blocks could go missing from a page when N2O pushed it, and the run still reported success. Every place that can drop a block now has to say which one and why.
A note that is longer in your vault than in Notion stops failing every sync.
Section titled “A note that is longer in your vault than in Notion stops failing every sync.”N2O will not overwrite a note that has more in it than the Notion page does. That part is right, and it is staying. What was wrong is that it reported the refusal as a failed sync, every single run, for as long as you left the page alone. There was nothing you could do to clear it. It now reports what actually happened: that one page was left as it is, and the rest of your sync is fine.
An editor you have open stops sending old text back to Notion.
Section titled “An editor you have open stops sending old text back to Notion.”If you had a note open in Obsidian while N2O pulled a change into it, your editor could write its older copy back over the top, and that older copy then went to Notion as though you had typed it. The Notion edit vanished and nothing said so. N2O now recognises that text as the copy it just replaced, refuses to send it, and tells you.
Syncing asks Notion for a lot more at once.
Section titled “Syncing asks Notion for a lot more at once.”N2O was making requests to Notion one small batch at a time. It now runs many more of them in parallel, and a first sync no longer re-walks your whole vault once for every page it pulls. Large pulls finish considerably sooner.
Workspaces bigger than 5000 pages sync properly.
Section titled “Workspaces bigger than 5000 pages sync properly.”Discovery stopped at a fixed ceiling of 5000 pages and told you it had hit a page limit, which was not what had happened. The ceiling is far higher now, and if a walk ever does stop early the message names the folder, says what still synced, and tells you how many pages were skipped.
v1.6.3 - August 2026
Section titled “v1.6.3 - August 2026”Connecting to Notion now works even when Obsidian questions the link.
Section titled “Connecting to Notion now works even when Obsidian questions the link.”Obsidian 1.13 started asking for confirmation before letting a website open the app, and that dialog could swallow the final step of connecting N2O to Notion: you approved in the browser, and nothing arrived. The connect flow now also gives you a short code. If the hand-off does not complete on its own, paste the code into N2O’s settings and the connection finishes there, no dialog involved.
Media buried deep inside toggles and columns now survives a push.
Section titled “Media buried deep inside toggles and columns now survives a push.”If a page had an image or file nested several layers down, inside a toggle inside a column, say, pushing that page could replace the media in Notion with an internal placeholder instead of leaving it alone. Your Notion page showed a broken block where the image used to be. Deeply nested media is now preserved through a push, the same as media at the top level.
The startup notice about a locked licence tells the truth.
Section titled “The startup notice about a locked licence tells the truth.”When N2O started up locked, the notice guessed at an expiry and could name a reason that was not the real one. It now reads the actual lock state and says what the server said, the same honest message you get everywhere else since 1.6.2.
v1.6.2 - August 2026
Section titled “v1.6.2 - August 2026”Update this one, or N2O will tell you your licence has expired when it has not.
Section titled “Update this one, or N2O will tell you your licence has expired when it has not.”N2O’s licensing has moved onto our own server. Your key is the same key and you do not need a new one, but the version you have installed asks the old place, and the old place no longer answers. Until you update, Pro features and trials read as locked.
Nothing has touched your vault, your Notion workspace, or anything you have synced. This is only the licence check.
Update N2O and it unlocks. There is nothing to re-enter.
When your licence does stop working, N2O now tells you why.
Section titled “When your licence does stop working, N2O now tells you why.”Every refusal used to say the same thing: “Your Pro license has expired. Please renew to restore Pro features.” That was true for one case and wrong for the others, and the worst of them was being one machine over your two-device limit, where you were told to buy the product again.
Each reason now says what actually happened and what to do about it. A device limit says it is a device limit. A key the server cannot find tells you to re-copy it from your purchase email.
Connecting to Notion no longer fails with “check the console for details”.
Section titled “Connecting to Notion no longer fails with “check the console for details”.”If the connect failed, that sentence was the entire message, and the real explanation had already been thrown away before anything could show it. N2O now reads what the server said and shows you that instead, including when the problem is plainly on our side rather than yours.
The same applied to the email opt-in in settings, which said “Subscribed!” whether or not it had worked. It now tells you if it did not.
A problem at our hosting can no longer look like a problem with your licence.
Section titled “A problem at our hosting can no longer look like a problem with your licence.”If our server had a billing lapse, an outage, or anything in front of it refusing requests, N2O read the refusal as a decision about you and locked Pro. It now treats anything that is not a real answer from our own code as a temporary failure and keeps working. Two more response codes that could lock you out are fixed at the same time.
This one is invisible when everything is fine, which is rather the point.
v1.5.0 - August 2026
Section titled “v1.5.0 - August 2026”Versions 1.2.1 through 1.4.x were never released, so if you are coming from 1.2.0 everything below arrives at once. The first item is new.
You can sync more than one folder now, and each one has its own rules.
Section titled “You can sync more than one folder now, and each one has its own rules.”N2O used to watch exactly one folder in your vault, with one direction setting for everything in it. That works until you want two different things at once, which most people do fairly quickly: a reading list you only ever want to read, and a drafts folder you write in Obsidian and publish to Notion. Those are opposite jobs and one setting could not serve both.
A synced folder now links one folder in your vault to one place in Notion, and carries its own direction, its own selection of pages, and its own pause switch. Add as many as you need. The three modes say what they promise:
- Both ways. Changes travel in both directions.
- Get from Notion. Notion is the source. Nothing there is written back to Notion.
- Send to Notion. That folder is the source. A sync never overwrites those notes.
The last two are guarantees rather than labels. A folder set to “Get from Notion” refuses to send your edits even if you ask, and tells you which folder is stopping them.
You do not have to change anything. Your existing setup becomes one synced folder set to “Both ways” and keeps working exactly as it did. Find them on the dashboard under Synced folders, and there is a full guide.
If you sync more than one folder, the rest of this release is for you.
Section titled “If you sync more than one folder, the rest of this release is for you.”N2O was asking the wrong folder what to do. Whether a note was allowed to go to Notion got decided by your FIRST synced folder’s setting, whatever folder the note was actually sitting in. A folder set to “Both ways” would quietly refuse to send if your first folder happened to be “Get from Notion”, and the “Local changes detected” dialog would offer to push notes it was then going to decline. Every place that asks now asks the folder the note is really in, and that dialog no longer offers to send notes from a folder that does not send. Rows it cannot push say which folder is stopping them and why.
Nothing to do beyond updating. If you only ever sync one folder, none of this could reach you.
Several ways you could end up with two notes for one Notion page.
Section titled “Several ways you could end up with two notes for one Notion page.”This is the group worth reading. Each of these produced a duplicate, and duplicates are the thing that makes a vault feel untrustworthy.
Rename a note in Obsidian, then reorganise your folders, and the next sync could create a second note for the same Notion page while the one you renamed kept your content. Resolving a conflict on a note you had renamed could write the result back to the old filename and leave you with both. And a sync interrupted partway, by closing Obsidian or losing your connection, could re-create a note it already had.
All three are fixed. A page in Notion now maps to exactly one note, and N2O finds an existing note before deciding it needs to make one. If you already have duplicates from this, N2O will not merge them for you, so delete the copy you do not want and the next sync will keep the one you kept.
Every synced note tells you where it stands, in the file explorer.
Section titled “Every synced note tells you where it stands, in the file explorer.”You should not have to open a dashboard to find out whether your work is safe. Synced notes and folders now carry a small badge next to their name, the way OneDrive and Dropbox mark theirs: green when both sides match, and something specific when they do not. Waiting to sync, syncing now, changed on both sides, failed, in Notion but incomplete, paused, or skipped on purpose.
A folder shows whichever mark inside it most needs you, so a folder of forty synced notes with one conflict shows the conflict rather than a reassuring tick. Each mark has its own shape as well as its own colour. There is a full legend.
A paused folder now looks paused.
Section titled “A paused folder now looks paused.”You could pause a folder while you rearranged things in Notion and then forget. Two weeks later your notes were stale and nothing had ever told you why, because a paused folder looked exactly like an active one. Paused folders now carry a pause icon in the file explorer and say so on the dashboard.
Scanning your vault no longer forgets notes it cannot see.
Section titled “Scanning your vault no longer forgets notes it cannot see.”If your vault lives in iCloud, Dropbox or on an external drive, and you opened Obsidian before it had finished mounting, “Scan vault” saw an empty folder and threw away what it knew about every note in it. The next push then treated your whole vault as new pages and copied it into Notion again.
It now reports what is missing and removes nothing. If the files were just slow to arrive, the next scan picks them straight back up. If you did delete them on purpose, use “Delete synced files”, which is still the way to actually remove things.
Sending to Notion no longer risks a pull writing over it.
Section titled “Sending to Notion no longer risks a pull writing over it.”A folder set to “Send to Notion” is your source, so a sync should never write into it. It could. A pull was able to move and overwrite notes in a send-only folder, which is the one thing that mode exists to promise it will not do.
Smaller things.
Section titled “Smaller things.”Picking a page that another folder already syncs used to look like it worked and then do nothing. The picker now shows you which folder holds it, so you can see where a page went instead of wondering. N2O dialogs no longer stack on top of each other after the plugin reloads.
v1.2.0 - July 2026
Section titled “v1.2.0 - July 2026”Sync no longer fails partway through on Windows.
Section titled “Sync no longer fails partway through on Windows.”If you sync on Windows, this is the one that matters. N2O saves its own record of what it has synced, and while a sync was running it could try to save that record several times at once. On Windows those saves collided and the sync stopped with “Failed to write core database to disk”, usually on automatic syncs, then failed again on the next attempt. It accounted for more failures than every other error put together, and it was almost a quarter of all sync runs on Windows.
The saves are now queued so they cannot collide. On the test pull that used to produce ten of these failures, there are now none. Nothing about your vault or your Notion pages needed changing, and no data was lost when it happened, but a sync that stopped early may not have recorded everything it did, so your first sync after updating may re-check more pages than usual. That is expected and it settles after one run.
The dashboard shows you what the first scan is doing.
Section titled “The dashboard shows you what the first scan is doing.”On a new connection the dashboard used to sit on “Discovering workspace…” until the whole scan finished, so a big workspace looked like it had hung. It now shows the same live progress the status bar does, so you can watch it work through your pages instead of guessing whether it is stuck.
A page with images is no longer treated as changed when it has not changed.
Section titled “A page with images is no longer treated as changed when it has not changed.”When you edit a page in both places within the same minute, N2O compares the content of the two versions to decide what to do. On pages holding images that comparison could never come out equal, so a page you had only touched locally was handled as if both sides had changed and took the slow merge path. Those pages are now compared properly and go the direct route when nothing on the Notion side actually moved.
A failed database write tells you why.
Section titled “A failed database write tells you why.”If N2O could not save its own sync database, all you saw was “Failed to write core database to disk.” That one message covered a full disk, a locked file and a permissions problem alike, so there was nothing to act on. It now carries the real reason your system gave, and if the file is being held by something else you can see that.
A license key that is refused tells you why.
Section titled “A license key that is refused tells you why.”Entering a key that was not accepted used to say “Invalid license key” and stop there, which covers a mistyped character and a key that is simply too old to work any more. Those are now told apart: you are pointed at re-copying the key from your purchase email, and if the key predates the current store you are told it cannot be revived so you can ask for a replacement. When the server refuses for a specific reason, such as a cancelled subscription or the device limit, you now see that reason instead of “please contact support”. And if your trial is running when a key is refused, N2O says so plainly, so a working trial no longer looks like the app ignoring you.
One copy button on code blocks.
Section titled “One copy button on code blocks.”A code block rendered with Notionify styling carried two copy buttons sitting on top of each other. Obsidian’s own button is the one that stays.
On sync speed, honestly.
Section titled “On sync speed, honestly.”This release began as a performance pass, and a number of repeated lookups inside a single sync are gone: the same database views enumerated twice, a workspace crawl repeated per unresolved linked view, block trees fetched again in a later phase. I then measured it against the previous build on the same 167 item workspace, and the wall clock did not move. A cold pull went from 806 to 784 seconds and a warm one from 472 to 492, which is noise. Sync time on a workspace that size is set by how fast Notion permits anyone to read it, not by the work N2O layers on top, so I am not going to tell you this release is faster. The actual lever is not re-reading pages that have not changed since the last sync, and that is what 1.2.1 goes after.
v1.1.0 - July 2026
Section titled “v1.1.0 - July 2026”Big images sync to Notion, even on the free plan.
Section titled “Big images sync to Notion, even on the free plan.”Notion’s free plan caps uploads at 5 MB, so a large photo used to stay in your vault with a warning and never reach Notion. Now N2O makes an optimized copy that fits under the limit and sends that, so the image actually shows up. The full-quality original never leaves your vault, and when you pull the page back the note stays pointed at your original rather than the smaller copy. Transparent images keep their transparency. If you would rather keep the old warning, you can turn this off under Sync settings.
Web images stay as links instead of being re-uploaded.
Section titled “Web images stay as links instead of being re-uploaded.”When a page has an image that came from a web address, N2O now remembers where it came from. Push that page and, if the web image is still reachable, it stays a link to the original instead of being uploaded as a Notion-hosted copy. If the original has gone, N2O uploads your local copy so the image is never missing.
Long page titles keep their full name.
Section titled “Long page titles keep their full name.”A page with a long title used to get its name cut short in your vault, and very long titles in other languages could break the file. Titles now keep much more of their length, the original Notion title is always saved alongside the note, and the filename is sized to what your system can actually store. Your existing notes pick up the fuller title on their next pull.
v1.0.0 - July 2026
Section titled “v1.0.0 - July 2026”N2O reaches 1.0.
Section titled “N2O reaches 1.0.”The full sync loop, pull, push, round-trip edits, auto-push and auto-pull, now runs a release pipeline against a real Notion workspace and real Obsidian before anything ships: thousands of unit checks, live end-to-end runs, and a page-by-page visual comparison of 84 real pages on both sides. This release is the first to pass every one of those gates, so it carries the 1.0 mark.
Errors finally tell you what happened.
Section titled “Errors finally tell you what happened.”When something fails, you now see the real reason. An image too large for your Notion plan says exactly that, with the size and the limit, instead of “no details”. A push that fails names the page and shows the actual errors instead of “Unknown error”. And one file that cannot upload no longer blocks the whole page: the rest of your edits sync, and you get one clear warning about the file that needs attention.
No more crying wolf.
Section titled “No more crying wolf.”The red “Auto-push failed” notice that appeared even though your edits were syncing fine is gone. When you edit a note in both places and N2O quietly merges the two, it now says so calmly instead of alarming you. A red notice now means something actually needs you.
Code blocks in any language sync.
Section titled “Code blocks in any language sync.”A code block labelled txt, sh, or any other name Notion does not recognise now maps to the closest supported language (plain text when there is none), so the block always arrives instead of failing the push.
Editing right after a pull no longer trips a false conflict.
Section titled “Editing right after a pull no longer trips a false conflict.”Pulling a page and editing it straight away could make the push claim “Notion changed since the last sync” even though nothing did. The timestamps are handled properly now, so a local-only edit pushes clean.
Gallery and list database views come across as themselves.
Section titled “Gallery and list database views come across as themselves.”When a page pulls in a database as a gallery, a list, or several views of one database side by side, each now shows as the view it actually is in Notion instead of falling back to a table. A page built around a few different cuts of the same database, a gallery of covers next to a list of quotes, reads the way you laid it out. Your existing notes pick this up on the next sync.
Links to connected apps show a card.
Section titled “Links to connected apps show a card.”A link to a GitHub pull request, a Jira ticket, or another connected app, the kind Notion turns into a live preview, now shows as a clean card with its address instead of vanishing. Notion only hands us the address for these, so the card is lean by design, but the link is there and clickable.
Web embeds get a sensible size.
Section titled “Web embeds get a sensible size.”A plain web embed that Notion did not give a size to used to render as a cramped frame with its own scrollbars. It now gets a proper height, so a bare embed reads as a panel instead of a sliver.
v0.16.0 - July 2026
Section titled “v0.16.0 - July 2026”Synced blocks finally stay in sync.
Section titled “Synced blocks finally stay in sync.”A synced block you reference in more than one place is now one block shown twice, not a copy. Edit it in either spot and both change, whether the reference sits on the same page or a different one, and callouts, code and multi-block regions inside a synced block all come across whole. This is the piece that makes a mirrored Notion workspace behave the way Notion does.
Pasted links show Notion’s chip.
Section titled “Pasted links show Notion’s chip.”When Notion renders a link as an inline chip with its favicon and title, N2O now shows that same chip instead of a bare web address. The details come straight from Notion, so it works without enabling anything.
Bookmarks read lean by default.
Section titled “Bookmarks read lean by default.”A plain bookmark now shows the site name and the full address, matching Notion, without fetching from the web on every sync. If you want the full card with a cover image and description, turn on enhanced metadata and bookmarks come back enriched.
Toggles, breadcrumbs and synced-block spacing.
Section titled “Toggles, breadcrumbs and synced-block spacing.”Toggle headings sit apart like ordinary headings again, the breadcrumb trail reads as a quiet grey path instead of a row of bright links, and a synced-block reference sits snug against the text around it the way it does in Notion. Your existing notes pick this up on the next sync.
A broken embed no longer pops a dialog.
Section titled “A broken embed no longer pops a dialog.”An embed pointing at a Figma or Excalidraw file you cannot open used to throw a native “Importing from backend failed” box every time the page rendered. Embeds are now sandboxed the way Notion sandboxes them, so a broken one fails quietly in its own frame instead of interrupting you.
v0.15.12 - July 2026
Section titled “v0.15.12 - July 2026”This one is about staying out of your way.
Section titled “This one is about staying out of your way.”Mostly reliability under the hood. When a command can’t finish, it now tells you with a notice instead of failing silently, so you are never left guessing whether it worked. A note whose saved settings got corrupted or hand-edited no longer takes a sync down with it; N2O repairs what it can and carries on. Opening the dashboard from a collapsed sidebar no longer throws an error. And N2O’s local storage engine is checked before it loads, so a bad copy can never run. Nothing to do on your side, your existing vaults just hold together better.
v0.15.11 - July 2026
Section titled “v0.15.11 - July 2026”Toggles, bookmarks and callouts now look like Notion.
Section titled “Toggles, bookmarks and callouts now look like Notion.”A pile of fidelity fixes from a page-by-page comparison against the real thing. Toggles arrive collapsed, the way Notion shows them on a fresh page load, and render as a plain row with a small arrow instead of a blue callout box. Bookmark cards show the site name on top with the full address underneath, the right way round at last, and a bookmark’s caption sits under the card instead of replacing its title. Video captions read under the player. Callouts got Notion’s real card shape: its rounded corners, its padding, and normal text weight instead of everything in bold.
Spacing that matches your Notion page.
Section titled “Spacing that matches your Notion page.”Synced pages read noticeably airier than their source. Every gap was measured against Notion and corrected: between paragraphs, around headings, between list items, and above and below quotes and tables. A page now has the same rhythm as the page you copied it from. Your existing notes pick this up on the next sync.
A stray “nbsp” no longer appears while editing.
Section titled “A stray “nbsp” no longer appears while editing.”Empty spacer paragraphs from Notion showed a literal HTML entity in Live Preview. They are just a blank line now, in both editing and reading views.
v0.15.10 - July 2026
Section titled “v0.15.10 - July 2026”Databases look like Notion databases.
Section titled “Databases look like Notion databases.”Select, status and multi-select values render as Notion’s coloured capsules with their real palette, including in the Status column and in database views you open directly. Notion’s block background colours now paint in both editing and reading views, and number columns show plain numbers instead of bar graphics that were never in your Notion page.
More of your page survives the trip.
Section titled “More of your page survives the trip.”Tables of contents render instead of vanishing. Long equations scroll instead of being cut off with no way to reach the rest, and coloured equations keep their colour. Callouts use Notion’s exact background colour and show the emoji you actually chose rather than a generic icon. Nested numbered lists cycle a/b/c and i/ii/iii like Notion’s do. Mixed bold and italic in a heading renders instead of breaking, and consecutive highlights no longer collapse into literal equals signs.
Fixes now reach the pages you already synced.
Section titled “Fixes now reach the pages you already synced.”A rendering fix used to apply only to pages you synced afterwards, so older notes kept the old bug. Renderer improvements now re-render your existing notes on the next sync. This release also gathers the quick 0.15.6 to 0.15.9 fidelity releases.
Media and images.
Section titled “Media and images.”The same image used twice on one page no longer loses its second copy, and media pulled from Notion is no longer re-uploaded on every push, which makes pushing faster and quieter.
v0.15.2 - July 2026
Section titled “v0.15.2 - July 2026”Notion’s page icon and cover, in the note itself.
Section titled “Notion’s page icon and cover, in the note itself.”Your page’s emoji icon and banner image now render at the top of the note, the way they do in Notion.
Your notes come through faithfully.
Section titled “Your notes come through faithfully.”A long list of rendering and round-trip fixes, most of which you would only notice as things quietly being wrong: yellow highlights, backslash escapes, nested to-dos, anchored wikilinks, single-line equations, H5 and H6 headings, heading 4 (which used to be dropped entirely), currency amounts that were being read as maths, dash-only table rows, footnotes, and numeric-looking frontmatter that was getting mangled. Captions on media are pushed back to Notion, and your own Obsidian frontmatter is preserved across a pull instead of being overwritten.
Steadier automatic syncing.
Section titled “Steadier automatic syncing.”Auto-push no longer gets starved by unrelated file activity, an edit you make during a sync is queued rather than dropped, fast polling yields while a full sync runs, and a stuck tick can no longer wedge every sync after it. Waking your computer from sleep no longer fires the entire retry backlog at once.
v0.14.2 - July 2026
Section titled “v0.14.2 - July 2026”Safer recovery, safer merges.
Section titled “Safer recovery, safer merges.”If the local sync database is ever damaged, recovery now salvages everything it can rather than only part of it. Automatic merging is stricter too: N2O only merges on its own when both sides of a change apply cleanly and agree, and asks you otherwise.
v0.14.0 - July 2026
Section titled “v0.14.0 - July 2026”Your Notion page will not be clobbered.
Section titled “Your Notion page will not be clobbered.”The most important release for anyone syncing both ways. A push now checks Notion’s own last-edited time first, so an edit made in Notion while you were working is not silently overwritten. When a page has to be rebuilt, the new content is added before the old is removed, so a failure part-way through can never leave you with an empty page. Edits inside nested blocks (a paragraph in a toggle, a row in a table) now sync instead of being skipped, and locally merged edits actually get pushed back.
Conflicts are handled properly.
Section titled “Conflicts are handled properly.”When N2O cannot merge on its own it writes a conflict note, and that note can no longer overwrite your original file. Merging also copes with Notion’s timestamps, which are only accurate to the minute.
v0.13.4 - July 2026
Section titled “v0.13.4 - July 2026”Your data stays put.
Section titled “Your data stays put.”The sync databases are now written atomically, so a crash or a power cut mid-write cannot corrupt them. A local file that fails to parse no longer wipes the Notion page it belongs to. Cover and banner images whose filenames contain spaces are no longer deleted by mistake.
Lists and tables render like lists and tables.
Section titled “Lists and tables render like lists and tables.”Bulleted and numbered lists render tight instead of as spaced-out lines, numbered lists count 1, 2, 3 instead of restarting at 1, and tables actually render.
v0.11.2 - July 2026
Section titled “v0.11.2 - July 2026”Stronger protection against license sharing.
Section titled “Stronger protection against license sharing.”N2O now ties your license to your computer using a fingerprint derived from your hardware. It is computed and one-way hashed on your device before anything is sent, so your actual hardware details never leave your machine. This is groundwork, nothing changes about how you use N2O, and Pro still covers two devices (a laptop and a desktop). The updated privacy policy spells out exactly what is collected.
v0.11.1 - July 2026
Section titled “v0.11.1 - July 2026”Move your license between computers yourself.
Section titled “Move your license between computers yourself.”Switching to a new computer no longer needs a support email. The Account tab now has two clear controls: Move license to this device, which frees your license from your other computers and activates it here, and Deactivate on this device, which releases this computer’s seat so you can activate somewhere else. Your license isn’t cancelled either way, and using N2O in many vaults on the same computer still counts as one device. This works whether you activated with a license key or signed in through Notion.
v0.11.0 - July 2026
Section titled “v0.11.0 - July 2026”Buying Pro now switches you to Pro, right away.
Section titled “Buying Pro now switches you to Pro, right away.”After paying, some people stayed stuck on the trial or hit an activation that wouldn’t take. Upgrades now apply immediately, and opening the Account tab in settings re-checks your license on the spot, so a purchase you just made shows up without restarting Obsidian.
One license covers all your vaults on a computer.
Section titled “One license covers all your vaults on a computer.”Your license is tied to your computer, not to a single vault. Use N2O in as many vaults as you like on the same machine without being asked to activate again or having one vault take the seat from another.
Fewer surprise lock-outs.
Section titled “Fewer surprise lock-outs.”Your license no longer hinges on a hardware fingerprint that can drift, so an OS update, a computer rename, or a reinstall won’t sign you out. A dropped connection or a brief hiccup on our side now rides through a grace period instead of locking you out. And if you stop using N2O on an old computer, that seat is released on its own, so activating a new machine doesn’t need a support request.
v0.10.2 - June 2026
Section titled “v0.10.2 - June 2026”Embeds render like embeds again.
Section titled “Embeds render like embeds again.”Tweets, Spotify players, Google Maps, Figma files, Loom videos, SoundCloud, and Airtable now show the actual card or player at the right size, instead of a service login page, a cookie banner, a cropped frame, or - for Loom - a broken-image icon. N2O now uses each service’s proper embed link and applies the height the block has in Notion, so a tweet shows the full tweet, a Spotify playlist shows its track list, and a map shows the map. Re-sync a page (or run Sync) to refresh its embeds.
Multi-column rows of text no longer go blank.
Section titled “Multi-column rows of text no longer go blank.”A row of side-by-side text columns (for example a five-column layout) could render as empty space in reading view even though the text synced correctly. Fixed - the columns show their content now. Layouts with images were never affected.
v0.10.1 - June 2026
Section titled “v0.10.1 - June 2026”Sync controls that say what they do.
Section titled “Sync controls that say what they do.”The automation settings used to be a confusing mix of “auto-sync”, “real-time”, and “fast polling”. They are now two plain switches: Get changes from Notion (pull updates automatically) and Send my edits to Notion (push your changes automatically). The dashboard buttons and command names match - plain Sync, Get, and Send instead of jargon. The one-way action that replaces your local copy is now clearly called Overwrite from Notion and asks you to confirm first, so you can’t wipe local edits by accident.
A dashboard that tells you what it’s doing.
Section titled “A dashboard that tells you what it’s doing.”When automatic sync is on, the dashboard now shows a calm Watching for changes state with a gentle pulse and a line describing exactly what’s running (“Automatically getting Notion changes and sending your edits”). When it’s off, it tells you plainly that changes arrive only when you press Sync. No more guessing.
Background sync stopped overwriting local edits.
Section titled “Background sync stopped overwriting local edits.”If an automatic pull ran while you had unsaved changes to the same note, it could quietly overwrite them. Automatic pulls now go through the same safe merge as a manual Sync, so your edits are protected - and a backup copy is kept if there’s a genuine conflict.
Steadier automatic checking.
Section titled “Steadier automatic checking.”The near-real-time checker now runs on a calm one-minute cadence while you’re active and quietly backs off when nothing is changing. It stays light instead of hammering Notion, which also means fewer rate-limit slowdowns.
Creating a page in Notion just works.
Section titled “Creating a page in Notion just works.”Two fixes. Making a brand-new note in Notion no longer dead-ends with a “no parent configured” error - N2O asks where to put it with a searchable page picker and remembers your choice. And notes that contain numbered lists no longer fail to create at all (a numbering detail Notion rejects is no longer sent).
Errors you can actually read.
Section titled “Errors you can actually read.”When Notion rejects something, N2O now shows the real reason instead of a useless “no details”. Much easier to tell what went wrong and fix it.
The dashboard opens at the right width.
Section titled “The dashboard opens at the right width.”On a narrow sidebar the panel used to open too thin with clipped buttons until you nudged the width to “wake it up”. It now opens at its proper width every time, no shake needed.
Plainer wording everywhere.
Section titled “Plainer wording everywhere.”Settings, the sync picker, the setup wizard, and the documentation all got a language pass: “Everything / Selected items” instead of “Entire Workspace”, “Smart merge” instead of “three-way merge”, “Known Notion pages” instead of “Page Cache”, and more. Same features, clearer words. The docs site and its screenshots were refreshed to match.
v0.10.0 - June 2026
Section titled “v0.10.0 - June 2026”N2O loads cleanly, with no startup error.
Section titled “N2O loads cleanly, with no startup error.”Some people saw a “Core database not initialized” error when Obsidian started or when the plugin reloaded. The cause was N2O closing its local database while a sync was still finishing. It now waits for in-flight work to settle before shutting down, so startups and reloads are quiet - no error, no interruption.
v0.9.99 - June 2026
Section titled “v0.9.99 - June 2026”Settings, reorganized.
Section titled “Settings, reorganized.”The Sync settings are now grouped into focused, collapsible sections, so you can find what you need without scrolling past everything else. There’s a dedicated Notionify tab for the Notion-style reading experience (including the multi-column toggle), and automation now lives under Sync where it belongs.
Move your license to a new computer.
Section titled “Move your license to a new computer.”Switched machines? You can now move your single-device license to the new computer yourself from the Account tab, no support request needed.
A cleaner connected dashboard.
Section titled “A cleaner connected dashboard.”A small gap on the right edge of the connected dashboard is gone. The panel now lines up flush inside the sidebar.
v0.9.97 - June 2026
Section titled “v0.9.97 - June 2026”Polished visual formatting and typography.
Section titled “Polished visual formatting and typography.”We have resolved and replaced punctuation inconsistencies (such as replacing em-dashes with standard spaced hyphens) across the entire documentation vault and the plugin interface for a cleaner, more standardized visual signature.
Redesigned email templates.
Section titled “Redesigned email templates.”All automated system emails (Welcome, Trial Expiring, Trial Expired, and Subscription Activated) have been completely redesigned with responsive layout structures to ensure they render beautifully across all devices and screen sizes.
v0.9.96 - June 2026
Section titled “v0.9.96 - June 2026”Prevented conflict modal freezes on large notes.
Section titled “Prevented conflict modal freezes on large notes.”When resolving conflicts on very large notes (50KB+), the conflict resolution modal could temporarily freeze the Obsidian user interface for tens of seconds. We have capped the diff-matching algorithm’s timeout to 1 second, ensuring that the app remains fully responsive and smooth while fallback comparison strategies are automatically applied.
Reliable Pro Trial activation.
Section titled “Reliable Pro Trial activation.”Resolved an activation issue where starting a fresh 7-day Pro Trial would occasionally fail to activate automatically if the app did not register a machine identifier. Unbound trial activations are now cleanly handled and auto-validated.
v0.9.95 - May 2026
Section titled “v0.9.95 - May 2026”The dashboard fits in narrow sidebars now.
Section titled “The dashboard fits in narrow sidebars now.”If you’ve docked the N2O dashboard into a slim Obsidian sidebar (around 240 to 320 pixels wide), buttons used to spill off the edge and the tier banner sat awkwardly inside the footer. The dashboard now adapts to whatever width it actually has: stacked layout under 360px, side-by-side above. Tested at 240, 280, 320, and 400 pixels, no clipping.
Failed media downloads stop being invisible.
Section titled “Failed media downloads stop being invisible.”Previously, if an image or attachment failed to download (network blip, expired Notion file URL, etc.), the failure only landed in the logs. The dashboard now surfaces those files so you can see exactly which attachments didn’t make it and re-run them.
Right-click “Verify against Notion”.
Section titled “Right-click “Verify against Notion”.”A new command in the file context menu reads the live state from Notion and compares it to what’s in your vault. Useful when you want to spot-check a single page without running a full sync.
Background integrity audit (opt-in).
Section titled “Background integrity audit (opt-in).”If you turn this on in settings, N2O periodically picks a small random sample of pages and verifies them against Notion in the background, every six hours. It catches drift between Notion and the vault that would otherwise build up silently. Off by default, free to leave it that way.
7-day sync health on the dashboard.
Section titled “7-day sync health on the dashboard.”A small rollup at the top of the dashboard now shows your sync health over the last week: successful runs, retried items, and any persistent failures. Lets you see at a glance whether things are quietly degrading.
Discovery-only failures are visible.
Section titled “Discovery-only failures are visible.”Until now, pages that failed to discover during a workspace scan would just be missing - no clear indication why. The dashboard now surfaces those pages with the reason, so you can decide whether to retry or skip.
Push verification is on by every push.
Section titled “Push verification is on by every push.”When N2O pushes a page to Notion, it now reads the page back and confirms the change actually landed. If a push silently dropped content or properties, the dashboard flags it instead of pretending the push succeeded.
Under the hood
Section titled “Under the hood”- Notion test tokens were removed from the test suite and replaced with environment variables.
- Slow Notion API responses no longer flake the test suite - timeouts are tuned to real-world API latency.
- The pre-commit hook and CI now check for
.tscircular dependencies, not just.js(catches issues earlier). - All circular dependencies between source modules have been eliminated (was 9, now 0).
What this means for you
Section titled “What this means for you”Most of this release is about catching silent failures earlier. If you previously had pages quietly missing media, or syncs that “succeeded” but didn’t actually push, those will now show up in the dashboard. Re-running the affected pages should clear them.
v0.9.94 - May 2026
Section titled “v0.9.94 - May 2026”Linked view filters actually work now.
Section titled “Linked view filters actually work now.”If you embed a “linked view” of a database on another page (think: a filtered slice of your Notes DB showing only books, or a Tasks view showing only this week), Obsidian now shows exactly what Notion shows. Same rows, same count. Filtered views sync the filtered rows. Unfiltered views sync everything they display.
- Filter rules from Notion translate end-to-end. A view showing “Tags contains Book AND Type is Quote or Poem” syncs those 8 rows, not the entire 800-row source DB. The .base file Obsidian generates carries the filter so the view pane shows the right subset, and only the matching rows are pulled from Notion in the first place.
- Per-view filters land in the .base YAML. Each linked view of a database writes its own .base file with its own filter, so you can have multiple views of the same DB on different pages and each one shows its specific subset.
- Inline databases on a page now sync all their rows. If your page contains an actual database (not a linked view), every row of that database lands in the vault. Previously they were registered but their rows weren’t pulled, leaving the .base file empty.
- Nested linked views inside database items resolve. When a row in your Relationships DB contains a filtered view of People (e.g. “show only people with this relationship type”), that nested view now resolves to a real .base file instead of the placeholder
Untitled Database (xxxxxxxx).base.
The root cause of the filter bug was a property-id-to-name lookup against an empty schema - fetching schemas via the wrong identifier returned no properties, so every filter clause silently dropped. Fixed at the schema-fetch layer, so the fix applies to every filter path.
Sync no longer races with workspace discovery.
Section titled “Sync no longer races with workspace discovery.”When you install fresh, the plugin runs a background scan to populate the tree-picker cache (so it can show item counts when you pick what to sync). Until now, if you triggered a sync immediately after install, it competed with that scan for the Notion rate limit - your sync ran 2-3x slower than necessary and the timing made it look like the sync itself was over-pulling.
Sync now waits for that background scan to finish before starting. The status bar shows “Waiting for discovery…” so you know what’s happening. After the first install completes, subsequent syncs don’t wait at all.
What this means for you
Section titled “What this means for you”- Old setup that was returning 0 rows on linked views: re-run Sync -> Pull and they’ll fill in.
- Old setup that was returning all rows of a huge source DB on every sync: re-run and only the filtered subset will land.
- Old setup with placeholder
Untitled Database (...).basewikilinks: re-run and they’ll resolve to real .base files. The renderer will keep the placeholder as a stable fallback for blocks that genuinely cannot be resolved (e.g. permission issues), but for everything reachable via the official API this works now.
v0.9.92 - April 2026
Section titled “v0.9.92 - April 2026”Pages with mentions and linked views now sync correctly.
Section titled “Pages with mentions and linked views now sync correctly.”If you have dashboards, MOCs, or hub pages that link out to other Notion pages and databases, this release fixes the cases where those references didn’t come through cleanly.
- Mentioned pages and database rows land in the right folder. When a page mentions a row from your Tasks DB, that row now appears under your Tasks DB folder instead of getting orphaned under the page that mentioned it. Before, you’d find duplicates scattered across
_Pages/for items that already belonged to a database. - Linked views automatically generate their
.basefile. A “linked view” is when you embed a filtered slice of a database into another page. Obsidian needs a.basefile to render those, and the plugin now generates it inline as part of the sync. No manual setup, no missing tables. - Mention-following stays sane on big pages. Inline mentions are followed once from your seed pages, not transitively. Pages with 80+ mentions no longer trigger workspace-wide BFS explosions that took ages to finish (or never did).
A subtle resolver bug that quietly stuck blocks as “unresolved.”
Section titled “A subtle resolver bug that quietly stuck blocks as “unresolved.””Some block references couldn’t be resolved on the first sync attempt - usually for legitimate reasons like the target hadn’t been fetched yet. The plugin was caching that “unresolved” state and re-using it on every future sync, so those blocks stayed permanently broken even after the underlying issue went away.
The cache now stores only successful resolutions. Failed resolutions are retried fresh on the next sync - when conditions change, the block resolves automatically without you having to reset anything.
Behind the scenes
Section titled “Behind the scenes”This release is heavy on discovery and apply-pipeline fixes for the gnarliest cross-reference cases. If you previously had pages where mentions came through as plain text or wikilinks that didn’t resolve, run Sync -> Pull on the affected pages and they should pick up the new behavior.
v0.9.90 - April 2026
Section titled “v0.9.90 - April 2026”Big sync runs now feel alive instead of frozen.
Section titled “Big sync runs now feel alive instead of frozen.”The dashboard tells you what’s actually happening while a sync runs.
- Files appear as they land. The Recent Activity card on the dashboard now updates live during a sync. Before, it only refreshed after the run finished, so a 30-minute sync looked stuck on the previous run’s items the whole time.
- Hero gauge fills smoothly. Open the dashboard mid-sync and the percentage ring animates up to where you are instead of teleporting. The ring also breathes gently while syncing so it reads as “working” at a glance.
- PASS 1 / PASS 2 chip. Selected pages get pulled first (PASS 1) so your vault starts filling fast, then a second pass picks up nested child pages and databases (PASS 2). The chip in the hero tells you which pass you’re on.
- Per-database progress. Each selected database in the Notion/ scopecard now shows “synced / total” while the run is active - e.g. “Books DB - 47 / 245” - so you can see which DBs are done and which are still working.
- Live file count. The “files” tile on the Notion/ scopecard reflects the actual
.mdcount in your vault as the sync writes new files. Before it sat at the count from the previous run until the current one ended.
Two data-loss bugs fixed.
Section titled “Two data-loss bugs fixed.”These are the kind of bugs that quietly eat content. Both gone now.
- Pages with 100+ blocks were getting silently truncated on certain Notion API code paths. Long pages now sync in full.
- YouTube and embed URLs were being saved as
.binfiles. If you had a YouTube video or Vimeo embed in a Notion page, the plugin tried to download the URL as a file, couldn’t figure out what kind of file it was, and saved it as a useless.bin. Embed URLs are now left as inline embeds, which Obsidian renders directly.
Cancel really cancels now.
Section titled “Cancel really cancels now.”The “Pause” buttons in the dashboard were misleading - clicking them actually cancelled the sync. They’ve been removed. The Cancel button is the only mid-sync control, and it’s honest about what it does.
If you cancel mid-sync, anything already written stays. The next run picks up from there.
Faster first sync on big workspaces.
Section titled “Faster first sync on big workspaces.”The plugin now starts writing your selected pages to disk while it’s still discovering nested content. Big initial syncs feel responsive from the first few seconds instead of staring at “Discovering…” for minutes.
Re-runs are also leaner - the second pass reuses block data fetched during the first pass, cutting Notion API calls roughly in half.
Factory reset really resets.
Section titled “Factory reset really resets.”If you used “Reset N2O” in v0.9.39 or earlier, the dashboard could keep showing a “still synced” record for a page that was already cleared from the database. The leftover entry would clear on the next plugin reload but was confusing in the meantime. Reset is now consistent - everything is gone the moment it returns.
Linked-view databases render correctly again.
Section titled “Linked-view databases render correctly again.”Nested linked database views (the ones that show another database’s pages inside the current page) were sometimes generating empty .base files because the discovery walk was only going one level deep. The walk now goes the full depth, so linked views render their items the first time around.
v0.9.39 - April 2026
Section titled “v0.9.39 - April 2026”A calmer Connect to Notion screen, and your sidebar gets its margins back.
Section titled “A calmer Connect to Notion screen, and your sidebar gets its margins back.”A small follow-up to v0.9.38. Two fixes you’ll notice the first time you open the dashboard.
”Connect to Notion” no longer surprises you.
Section titled “”Connect to Notion” no longer surprises you.”When you click Connect to Notion, the dashboard now shows a calm “Approve in Notion.” screen for a few seconds before the browser actually opens. Same screen explains what’s about to happen (“Opening Notion in your browser in a moment…”) so the OAuth tab doesn’t pop up unannounced.
The waiting screen is also focused now - no more “What you get” card or marketing copy underneath the spinner. Once you’ve clicked Connect, you don’t need to be sold the feature again. Just the status, the timeout, and a clear “Cancel and go back” link if you change your mind.
If you cancel during the first few seconds, the browser tab never opens.
Fixed: the connected dashboard had a horizontal scrollbar.
Section titled “Fixed: the connected dashboard had a horizontal scrollbar.”If you connected to Notion in v0.9.38, you may have noticed the dashboard’s right edge had no padding and a horizontal scrollbar at the bottom. That’s gone. The connected view now lines up cleanly inside the sidebar, same as the connect screen.
This was a CSS specificity slip from a refactor in v0.9.38. The “Not connected” hero never had the bug, only the connected view.
v0.9.38 - April 2026
Section titled “v0.9.38 - April 2026”Conflicts that read like English, motion that respects your settings, and a quieter sync engine.
Section titled “Conflicts that read like English, motion that respects your settings, and a quieter sync engine.”A maintenance release. Most of the work this round is invisible - faster lookups, smaller memory ceilings, fewer wasted round-trips. The user-visible parts:
The conflict modal speaks English now.
Section titled “The conflict modal speaks English now.”When N2O detected the same page edited in both Notion and Obsidian it used to show you a panel labeled “Base (Ancestor)” and ask you to “Accept Notion / Accept Obsidian”. The wording read like a merge algorithm spec. It now reads like a sentence:
- “This page was edited in both places” instead of “Resolve Conflict”
- “Last synced” / “Now in Notion” / “Now in Obsidian” panels instead of “Base (Ancestor)” / “Notion Version” / “Obsidian Version”
- “Use Notion’s version” / “Use Obsidian’s version” / “Decide later” instead of “Accept Notion” / “Accept Obsidian” / “Skip”
Same flow, same outcomes. Easier to read at a glance.
N2O now respects “Reduce motion” in your OS settings.
Section titled “N2O now respects “Reduce motion” in your OS settings.”If you have macOS Reduce Motion or Windows “Show animations” turned off, every pulse, shimmer, slide-in, and progress sweep across the plugin now collapses to near-zero duration automatically. Useful for vestibular disorder / motion sensitivity, and faster on slow hardware. The plugin’s own buttons still register state changes - they just don’t visibly animate.
Tree picker filter is much faster on big workspaces.
Section titled “Tree picker filter is much faster on big workspaces.”When you opened the sync picker and started typing in the filter box, the entire tree used to be destroyed and rebuilt on every keystroke. On a workspace with hundreds of pages this made typing feel laggy. The picker now hides non-matching rows in place. Same result, no rebuild.
Less wasted CPU during sync.
Section titled “Less wasted CPU during sync.”Two background quality-of-life fixes:
- The block cache now reflects the current Notion state even when a push fails partway through. Pre-fix, a failed push left the cache stale and every subsequent push for that page paid an extra Notion API round-trip.
- The internal sync state is read 15+ times per sync cycle. Those reads now share a cached result that invalidates on every write. Noticeable speedup on workspaces with hundreds of synced pages.
Bigger media uploads stop bloating memory.
Section titled “Bigger media uploads stop bloating memory.”The download cache used to bound itself by entry count only. 200 large videos in a row could push memory past 1GB on a slow connection. The cache is now byte-bounded (200MB total ceiling, 25MB per item), so memory stays predictable regardless of what you’re syncing.
Permanent sync failures no longer hide silently.
Section titled “Permanent sync failures no longer hide silently.”When a page failed to sync 5 times in a row, the retry queue used to drop it without a sound. Now the sync record’s last error message gets updated to “Permanently failed after N retries: …” so you can see in the dashboard which pages are stuck and why.
Behind the scenes.
Section titled “Behind the scenes.”- Long-range block moves (more than 25 positions) keep their Notion block IDs. Pre-fix, these became delete-and-reinsert which dropped comments and threads attached to those blocks.
- The frontmatter writeback loop is closed. Pages with
created/updated/notion_id/n2o_*fields no longer trigger a spurious second push just because the post-push writeback shifted those bytes. - Schema migration errors that aren’t “duplicate column name” (disk full, lock contention, real corruption) now surface instead of being silently caught.
If you hit any of these in the past month, retry after updating. Nothing in your settings needs to change.
v0.9.37 - April 2026
Section titled “v0.9.37 - April 2026”Connect to Notion works again on Edge / Win 11.
Section titled “Connect to Notion works again on Edge / Win 11.”A few of you ran into “Invalid session ID format” when you went through Quick Connect on Microsoft Edge. The Notion login worked, the page-picker worked, the browser even showed the “Redirecting to Obsidian” screen - but the moment Obsidian came back to the front, the connection failed with that error and you were stuck.
That’s fixed. Edge sometimes hands the obsidian:// link back with extra whitespace tucked onto the end, and the plugin used to reject anything that wasn’t an exact 64-character match. It now trims whitespace and accepts a wider range of session shapes, so the hand-off from your browser back into Obsidian works whether you’re on Edge, Chrome, Firefox, or Arc.
If you hit this in the past week, retry Quick Connect after updating. Nothing on your side needs to change.
v0.9.36 - April 2026
Section titled “v0.9.36 - April 2026””Sync current file” you can finally trust, plus bookmarks that survive push.
Section titled “”Sync current file” you can finally trust, plus bookmarks that survive push.”A rolling release of everything that’s landed since v0.9.32. Nothing in your settings needs to change.
”Sync current file” picks up your latest edit, every time.
Section titled “”Sync current file” picks up your latest edit, every time.”If you ever ran “Sync current file” right after editing the same page on both sides, you might have noticed nothing happened, or the wrong side won, or your local edit just disappeared. All three are fixed now.
Two things changed:
- Silent local-edit loss is gone. If both sides had changes and
you ran “Sync current file”, N2O used to overwrite your local
edit without warning. Now it always preserves the discarded
version next to the file as a
.conflict-*.md(or shows the conflict modal if you’re on the Ask strategy). - Same-minute edits are no longer missed. When an Obsidian edit and a Notion edit landed in the same minute, N2O used to think nothing had changed and skip the sync entirely. Now it always reads Notion fresh and decides from the actual content, not from a timestamp.
What “Sync current file” does now:
- Nothing changed -> skip
- Only Notion changed -> pull the new version into your vault
- Only your local file changed -> push your edit up to Notion
- Both sides changed -> three-way merge, with a
.conflict-*.mdbackup if there’s a real conflict
Background syncing (the scheduler, auto-push, fast-poll) is unchanged. Those run often enough that a missed sub-minute edit gets picked up on the next tick. This work targets the command you run yourself when you want a page synced right now.
Bookmarks survive push.
Section titled “Bookmarks survive push.”If you had a Notion page with rich bookmark previews, the ones with cover images, favicons, and page descriptions, every push used to quietly flatten them into plain URL text in your vault. The Notion side stayed fine. Your Obsidian copy didn’t. Pull again and they’d come back, but the next push would strip them again.
That’s fixed. Bookmarks now keep their cover image, favicon, title, and description through a full push-then-pull cycle.
v0.9.32 - April 2026
Section titled “v0.9.32 - April 2026”Sync you can trust. Push that feels fast.
Section titled “Sync you can trust. Push that feels fast.”If you’ve been holding back from using N2O for the two-way stuff - if you’ve been pulling from Notion but scared to push the other way because something always came back a little wrong - this is the release where you can stop holding back.
Every Notion block you care about now survives a round-trip cleanly. Images stop duplicating on every push. Attachments live in one tidy folder. The dashboard stops telling you you’re disconnected when you’re not. Edit-in-place pushes are measurably faster. Conflicts show you a modal instead of silently picking a side.
Nothing in your setup needs to change. Update, sync, and the fixes just start applying.
Your Notion pages come back looking like your Notion pages
Section titled “Your Notion pages come back looking like your Notion pages”For a while, some of Notion’s richer features would quietly lose shape when they came through Obsidian. A headerless table would get a header. A red-background callout would turn generic blue. A lettered list (a., b., c.) would flip to plain numbers on push. Those small papercuts are what made bidirectional sync feel untrustworthy, even when it was technically working.
v0.9.32 fixes that class of problem across the board.
- Tables keep their shape. Headerless Notion tables stay headerless. Row headers stay row headers. And when you edit a single cell and push, N2O updates that row instead of rebuilding the whole table from scratch.
- Toggles stay toggleable. That empty toggleable heading you made in Notion? The arrow’s still there after a round-trip.
- Lettered and roman lists stop turning into decimals.
a. b. c.staysa. b. c..i. ii. iii.staysi. ii. iii. - Colors stick. Red-background callouts stay red. Blue headings stay blue. Colored quotes, todos, equations, dividers - all of it keeps its color instead of resetting to default every time you push.
- Callouts keep their custom icon. That 🔁 or 🚧 or 💡 emoji you set as the callout icon - it stays that emoji. It used to reset to the generic blue info icon on every push.
- Code blocks keep their language. No more silent fallback to “plain text” on uncommon languages.
- Embeds stay embeds. Notion’s embed and bookmark blocks look similar but aren’t the same thing. They now preserve their type instead of flattening into each other.
- Synced-block references work. Referenced synced blocks from other Notion pages now survive round-trip as actual synced blocks instead of degrading into plain page links.
- Filenames with brackets stop leaking. If an image file is
named
My [2024] Notes.png, it embeds correctly instead of spilling “Notes.png]]” into the visible text.
Most of this works through invisible markers in source mode that let the parser reconstruct Notion-specific attributes on the next pull. You never see them in Live Preview or Reading view. Your content just keeps working.
Images stop duplicating on every push
Section titled “Images stop duplicating on every push”This one was the single most common complaint, and the fix is permanent. Before v0.9.32, every time you pushed an Obsidian note containing an image back to Notion, the image block got recreated from scratch. Push five times - your Notion page has five copies of the same image, your vault has five garbage attachment files with weird hash suffixes.
That’s done. Every synced block now carries a permanent identity marker, so the next push recognizes “this image is already in Notion, don’t add it again.” First-time push also works correctly: after the push, the local file picks up Notion’s authoritative IDs so the next push works too.
And the “download pending” placeholder that used to appear after pushing a new image? That’s gone. Images download as part of the push so the preview works immediately in your vault.
If you’ve been avoiding pushing notes because of this, try it again.
Push feels 1-2 seconds faster per edit
Section titled “Push feels 1-2 seconds faster per edit”When you edit an existing note and push it, N2O used to do a chunk of work it didn’t strictly need to - two extra round-trips to Notion to double-check things that hadn’t changed. It now notices when your local file is already in sync and skips that work.
Concretely: an edit-in-place push is 1.4 to 2.4 seconds faster than it was in v0.9.20. If you push often, it adds up.
The “Sync this file” command is also meaningfully better. It used to take a shortcut that could silently overwrite your local edits if Notion had also changed. It now runs the same real three-way merge that full sync does.
Attachments live in one folder now
Section titled “Attachments live in one folder now”Every synced image, PDF, and file now lands in a single shared folder
-
Notion/_files/at the root of your sync folder. No more per-page attachment folders sprinkled throughout your vault. -
Easier to back up. Back up one folder, you’ve got every attachment.
-
Easier to search. Every attachment is in one place.
-
Easier to audit. You can see at a glance what N2O has pulled.
-
Deduplicated automatically. If the same PDF is referenced from four different synced pages, it’s stored once and wikilinked from all four.
There’s a new opt-in Auto-organize toggle in Settings >
Attachments. If you’ve been loose about where images land in your
vault, turn it on and N2O will move stray vault-root media into
_files/ on the next sync. Nothing gets deleted; files are moved,
not copied.
Files larger than 20 MiB now upload correctly too - they used to
fail silently because Notion’s single-part upload endpoint caps at
20 MiB. N2O now uses the multi-part endpoint for anything larger.
PDFs and other attachments also render as proper embed wikilinks
(![[doc.pdf]]) so preview works in Live Preview and Reading view.
The dashboard tells the truth
Section titled “The dashboard tells the truth”A few small-but-grating trust issues with the sidebar panel are fixed:
- “Not connected” no longer shows when you’re connected. If you set your Notion token programmatically (via settings-set, template, or any path that skipped the in-app connect flow), the dashboard used to insist you weren’t connected. It now reads the token directly instead of trusting a stale cache.
- The scope card shows your actual scope. If you set sync scope to three specific pages, the card says three pages. It used to show whole-vault totals, which made it look like nothing was set up right.
- Recent Activity always has a surface. The activity feed used to vanish entirely when there was nothing recent. It now always shows something - empty-state copy, a placeholder, or your actual recent syncs.
- Stale red errors clear on success. A transient failure used to leave a permanent red error on the dashboard even after the next push succeeded. It now clears the moment things recover.
Sync does the honest thing when something’s ambiguous
Section titled “Sync does the honest thing when something’s ambiguous”- Conflicts are conflicts. If you edit a note in Obsidian while the same section changes in Notion, N2O used to occasionally pick one side and move on. Now you see a conflict modal with both versions and you choose.
- Archive actually archives. When you archive a page in Notion, the local sync record marks it as archived instead of quietly re-pulling the archived content as if nothing changed.
- Reset actually stops.
Reset N2Oused to kick off a scheduler tick and start a whole-workspace sweep before you had a chance to reconfigure. It now lands in a quiet state - reconnect at your own pace, no surprise pull starts in the background. - Mentions and block-links stop breaking on push. Text-only edits used to regenerate Notion block IDs on every push. Any @mention or block-link in Notion pointing at the edited block would silently break. Block IDs are now preserved through text edits; only the content actually changes.
- Per-page failures are visible. A single bad page in a large pull used to fail silently. It now shows up in Recent Activity with the specific page named, and goes into the retry queue to try again on the next tick.
- Schema drift is a warning, not a silent drop. If you push a row with properties that no longer exist in Notion, the drop used to be invisible. It now warns you in Recent Activity with the specific property names.
Errors stop spamming you
Section titled “Errors stop spamming you”A sync that hit 50 errors used to fire 50 toasts that piled up in the corner. Errors from the same sync cycle now consolidate into a single grouped notice with a count. One summary, not a flood.
Bigger files, larger workspaces
Section titled “Bigger files, larger workspaces”Rate-limited syncs used to get stuck in a weird state where 30 queued calls would fire against whatever the user was doing now, even though they’d been sitting around for a minute. Those stale calls now expire gracefully.
If Notion’s paginated discovery returns an incomplete response, N2O now detects the truncation and surfaces the partial state instead of treating it as “done.”
Extensively tested
Section titled “Extensively tested”Every fix above is verified end to end against a real Notion workspace on every build. Visual regression tests catch UI drift. Recovery tests intentionally damage the local database to confirm N2O handles it cleanly.
You won’t see any of that at runtime. It’s what keeps the fixes sticking.
v0.9.20 - April 2026
Section titled “v0.9.20 - April 2026”The dashboard is new. All of it.
Section titled “The dashboard is new. All of it.”v0.9.20 is a ground-up redesign of the N2O dashboard. The sidebar panel now feels like a calm, living product surface instead of a stack of settings rows. Every state the plugin can be in - not connected, connecting, connected, syncing, discovering, idle, success, error, paused - has its own hero scene, its own copy, its own motion. You glance at the panel and you know what N2O is doing.
A short list of what that means in practice:
- A hero gauge that breathes. The central N₂O ring gently pulses in a 2.6-second cadence so the panel always feels alive, even when nothing’s syncing. Inner and outer accent hairlines frame the track with a soft glow.
- A state pill at the top. “Not connected / Connecting / Connected / Syncing / Paused / All caught up” - the pill color-codes with the dot, so you always know the plugin’s mood at a glance.
- A radar scan, not a spinner. When N2O is discovering pages in your workspace, the ring becomes a live radar - sweeping hand, crosshair, bearing ticks, blinking blips, and a hot spot of light that the hand paints onto the ring as it rotates. See the next entry for the full story.
- Theme-aware everything. Every new surface reads well in both light and dark Obsidian themes. The hero gradient, gauge track, scope card, automation toggles, and shimmer levels are tuned per-theme so nothing looks washed out on white or muddy on dark.
- A consistent vertical rhythm. Scope card, Automation, Recent activity, and every section in Settings now share the same 14px internal padding and 16px external spacing. The dashboard and settings feel like the same design system instead of two.
The rest of this section unpacks the individual pieces.
Live radar while N2O scans your workspace
Section titled “Live radar while N2O scans your workspace”The dashboard plays a full radar animation in the hero while N2O is discovering pages in your Notion workspace - whether it’s the first scan after connecting, a kebab “Rediscover”, or the background refresh that fires when you open the tree picker. The radar has a rotating sweep fan, a bright hand, a crosshair reticle, eight bearing ticks that flash as the hand passes, blips that pulse in staggered sequence, and a concentrated hotspot of accent light that “paints” the ring wherever the hand is currently pointing - so the effect reads as “the hand is actively lighting the ring.”
Live progress flows into the hero subtitle as the scan runs: “Querying databases 6 of 11 / Exercises DB / Productivity Techniques…”. Small workspaces always get at least 10 seconds of visible scan, so even a five-page workspace shows the radar long enough for you to register it.
Connect to Notion is one continuous screen
Section titled “Connect to Notion is one continuous screen”Clicking “Connect to Notion” used to rebuild the whole panel three times - hero, then a bare waiting spinner, then a celebration screen, then the main dashboard. The flow now lives in a single hero panel where only the primary button morphs in place:
- Connect to Notion - solid orange CTA, ready to click.
- Connecting… - same position, button disabled, three dots shimmer in a ripple, a soft left-to-right highlight sweeps across the button, “Timeout in 1:54 / Cancel” appears below.
- Yes Connected to <workspace> - button turns green, a check icon appears, a narrow progress bar counts down the 2-second hand-off to the main dashboard.
The pill at the top reflects the current state the whole time (Not connected / Connecting / Connected) so you always know where you are in the flow. One panel, three states, zero jarring rebuilds.
Tree picker joins the existing scan instead of starting a new one
Section titled “Tree picker joins the existing scan instead of starting a new one”Opening the tree picker while a discovery is already running used to show partial cached data with no indication more was coming. Now the picker joins the in-flight scan, shows the same “Querying databases…” progress banner the hero does, and loads the full tree once discovery finishes. There is exactly one discovery in flight across the plugin at any time - no matter how many places asked for it.
Factory Reset actually returns to first-install state
Section titled “Factory Reset actually returns to first-install state”Previous Factory Reset hand-listed a handful of fields to wipe, so newly-added settings (OAuth workspace ID, sync folder, property mappings, automation intervals, child-page flags, and more) silently persisted across resets. It now clears every profile field back to the shipping defaults. The confirmation modal also shows accurate copy for each variant - “Reset N2O” is explicit that it preserves your token and license; “Factory Reset” is explicit that it removes them.
Open sync log lands on the Activity tab
Section titled “Open sync log lands on the Activity tab”The “Open sync log” kebab item used to open the N2O plugin tab and leave you to click into Activity yourself. It now opens Settings > N2O > Activity directly, where Recent Activity and Sync History live.
Enable real-time sync from the kebab menu
Section titled “Enable real-time sync from the kebab menu”A new “Enable real-time sync” entry sits right next to “Enable auto-sync” in the dashboard kebab menu, so you can flip on bidirectional real-time without scrolling down to the Automation section.
Notion’s built-in callout icons render in Obsidian
Section titled “Notion’s built-in callout icons render in Obsidian”Callouts created in Notion with the new built-in icon picker (the coloured symbols like ☘, ⚗, 📌) used to render as generic “note” callouts with no icon. N2O now reads Notion’s icon name and inlines the matching emoji into the callout title, so the symbol you picked in Notion shows up in Obsidian.
Every Obsidian Base gets the full layout set
Section titled “Every Obsidian Base gets the full layout set”Each .base file N2O generates now ships with the same 7 built-in
view layouts (Table, Gallery, List, Board, Timeline, Compact,
Books) plus one view that matches what Notion shows. So even for a
simple Notion gallery, you get the full set of Obsidian Bases
layouts to explore your data - Board and Timeline views become
available for any database without any manual setup. The Manage
Base Views modal has a new “Apply N2O defaults” button that stamps
the same 7 layouts into any hand-created .base file.
v0.9.17 - April 2026
Section titled “v0.9.17 - April 2026”Real-time pull stays alive across pauses
Section titled “Real-time pull stays alive across pauses”Pausing sync, toggling real-time off and on, or switching settings no longer kills the real-time pull. Previously the first pause would silently drop the change listener, so every edit in Notion after that was invisible to Obsidian until a full plugin reload. Now callbacks survive every stop and start.
Unresolved linked views render cleanly
Section titled “Unresolved linked views render cleanly”When a child database block couldn’t be resolved on first sync, N2O used to write a multi-line [!missing] callout that could overwrite a real .base embed further down the page. Unresolved child databases now render as a stable placeholder embed (![[Untitled Database (<id>).base]]) that keeps a consistent filename across re-syncs and doesn’t destroy neighbouring content.
Stable filenames for linked views
Section titled “Stable filenames for linked views”Linked database views now get a deterministic name derived from their identity (Gallery - Parent Page (abc12345).base) rather than a title that can drift between syncs. The underlying block identity is cached for seven days so the same block keeps the same file even when Notion’s titles change or the view temporarily can’t be resolved.
Paragraph-before-database push fix
Section titled “Paragraph-before-database push fix”When you had a paragraph sitting right before a child-database embed on a Notion page, pushing from Obsidian used to drop the paragraph’s position anchor. The push now emits a sentinel that preserves the block’s location so the database stays where it should.
v0.9.14 - April 2026
Section titled “v0.9.14 - April 2026”75% faster sync with Views API
Section titled “75% faster sync with Views API”N2O now uses Notion’s official Views API to discover linked database views. Instead of scanning every page’s blocks to find linked views (254+ API calls), it makes 11 list calls plus one retrieve per view (~64 total). Discovery that took over a minute now takes seconds.
Linked views resolve without Enhanced Metadata
Section titled “Linked views resolve without Enhanced Metadata”The Views API gives N2O everything it needs to resolve linked database views: which database they point to, what page they live on, their view type, and which properties are visible. No unofficial API token needed. Pages that previously showed ”[!missing] Linked Database View” now render correctly for all users.
Gallery views show what Notion shows
Section titled “Gallery views show what Notion shows”Gallery card property visibility now comes from the official Views API. If your Notion gallery shows only cover images and titles, Obsidian matches. When Notion hasn’t customized a gallery (default view), N2O shows cover and title only - matching Notion’s clean default.
10 audit fixes
Section titled “10 audit fixes”A three-agent code audit found and fixed 10 issues: CSS injection vulnerability in bookmark covers, auto-push data safety guard when content hash is missing, format metadata round-trip (image width, code wrap, alignment survive push back to Notion), image width extracted from markdown, bookmark HTML cards parsed back for push, column width preserved with custom callout types, memory leak guard in link hover previews, extended column CSS range, and stable progress counter.
v0.9.12 - April 2026
Section titled “v0.9.12 - April 2026”Hover over any link to see a preview
Section titled “Hover over any link to see a preview”Move your mouse over any [[wiki link]] and a preview card appears: the page’s banner image, title, first paragraph, tags, and when it was last updated. No clicks needed, no navigation away from what you’re reading. Cards position themselves smartly so they never clip off the edge of your screen. Inspired by Wikipedia’s page previews and Arc Browser’s hover cards.
Bookmarks look like Notion
Section titled “Bookmarks look like Notion”Notion bookmarks render as clean cards with a title, description, site favicon, and cover image. N2O now does the same in Obsidian. Hover over a bookmark card to see the full cover image and description in a centered popup. All data comes from your synced Notion content, so there’s no loading delay and it works offline.
Columns match Notion’s layout
Section titled “Columns match Notion’s layout”If you set a 60/40 column split in Notion, it shows as 60/40 in Obsidian now. Previously all columns were equal width regardless of what Notion had. Images inside columns fill the available space instead of rendering at a fixed pixel size.
Gallery views show what Notion shows
Section titled “Gallery views show what Notion shows”If your Notion gallery only displays cover images and titles, the Obsidian Base now matches. N2O reads which properties are visible in each Notion view and hides the rest. No more cluttered card views showing every property.
Images at the right size
Section titled “Images at the right size”Images display at the width you set in Notion instead of full-width or a fixed 140px. Resize an image in Notion, sync, and Obsidian renders it at the same size.
Smarter failed download handling
Section titled “Smarter failed download handling”When media downloads fail, you can now see exactly which files failed and why (timeout, server error, empty response) right on the dashboard. Click Retry and only the failed pages re-sync, not your entire workspace. Large files get a 120-second timeout instead of 60.
Pull-only by default
Section titled “Pull-only by default”New installations start in read-only mode: Notion to Obsidian only. Nothing in Notion gets modified until you explicitly enable push in settings. When you do enable it, you’ll see a clear warning about what push does, and a confirmation dialog before pushing more than five pages.
Update notifications
Section titled “Update notifications”A small banner appears on the dashboard when a newer version of N2O is available. Check once a day, dismiss to hide. No more wondering if you’re running the latest.
Sync history in settings
Section titled “Sync history in settings”The separate Sync Log sidebar panel is gone. All your sync history, with expandable details per entry, now lives in Settings under the Activity tab.
Linked database views actually resolve
Section titled “Linked database views actually resolve”Pages that had placeholder [!missing] callouts for unresolved linked views now fix themselves. When the view gets resolved (through the unofficial API or the resolver modal), the page re-renders automatically instead of staying stuck with the placeholder.
v0.9.4 - April 2026
Section titled “v0.9.4 - April 2026”Relation filters trim cleanly
Section titled “Relation filters trim cleanly”Relation property page names with trailing spaces no longer break Bases filters. If a Notion relation pointed to “Project Alpha ” (with a trailing space), the filter would silently fail to match. Spaces are now trimmed automatically.
Unofficial API linked view detection fixed
Section titled “Unofficial API linked view detection fixed”Linked database views that were silently failing to resolve via the unofficial API now work correctly. View type detection (gallery, table, list) is also more reliable.
v0.9.3 - March 2026
Section titled “v0.9.3 - March 2026”Performance audit
Section titled “Performance audit”Cache invalidation is smarter and deferred warmup reduces startup time. Part of a broader performance sweep across the sync pipeline.
BRAT install method
Section titled “BRAT install method”You can now install N2O via BRAT for beta testing. Instructions added to the README.
v0.9.2 - March 2026
Section titled “v0.9.2 - March 2026”Settings redesign
Section titled “Settings redesign”The settings page is cleaner and better organized. Sync settings are more compact, the Advanced tab is tidied up, and a shared footer with version info appears across all tabs.
Dashboard polish
Section titled “Dashboard polish”Advanced buttons are flattened into the main layout instead of hidden behind a submenu. The dashboard footer now shows version and helpful links.
Enhanced Metadata moved to Connection tab
Section titled “Enhanced Metadata moved to Connection tab”The Enhanced Metadata toggle (for unofficial API features like view detection and linked view resolution) is now in the Connection tab where it belongs, not buried in Advanced.
v0.9.1 - March 2026
Section titled “v0.9.1 - March 2026”Security and quality audit
Section titled “Security and quality audit”A full 360-degree audit covering security fixes, test coverage improvements, and code quality cleanup. Nothing user-facing changed, but the codebase is significantly more robust.
WASM fallback for sql.js
Section titled “WASM fallback for sql.js”If the bundled sql-wasm.wasm file fails to load, N2O now falls back to a CDN copy. This fixes a rare issue where the database engine couldn’t start on some systems.
v0.9.0 - March 2026
Section titled “v0.9.0 - March 2026”One-click Notion connect
Section titled “One-click Notion connect”No more hunting for integration tokens. Connect to Notion with OAuth - click “Connect”, authorize in your browser, and you’re syncing. Manual tokens still work if you prefer them.
Child pages nest into folders
Section titled “Child pages nest into folders”When a Notion page has child pages, N2O now mirrors that hierarchy in your vault. The parent becomes both a markdown file and a folder containing its children - browse your Notion structure the same way in Obsidian.
Linked database views sync as filtered Bases
Section titled “Linked database views sync as filtered Bases”Database item pages that contain linked views (like a filtered gallery or table inside a Relationships page) now generate filtered .base files. Each linked view is its own Bases file, organized into a _views/ subfolder. You see exactly the data that Notion shows - not the entire database. Requires Enhanced Metadata.
Default Bases view auto-detected from Notion
Section titled “Default Bases view auto-detected from Notion”N2O reads which view is set as default in Notion and uses that as the default view in your .base file. No manual configuration needed. Requires Enhanced Metadata.
Push sync that doesn’t destroy your pages
Section titled “Push sync that doesn’t destroy your pages”N2O now protects Notion-hosted images, videos, and PDFs during push. Uploaded media stays untouched even when you edit the surrounding text in Obsidian. Inline database views (like linked gallery or table views inside a page) are also preserved.
Automatic conflict merging
Section titled “Automatic conflict merging”When you edit a page in both Obsidian and Notion, N2O tries to merge the changes automatically. If your edits are in different parts of the page, they merge silently - no interruption. The conflict modal only appears when N2O genuinely can’t decide.
Delete from Notion
Section titled “Delete from Notion”New command: trash a page in Notion and delete the local file in one action. Works from the file menu, command palette, or multi-file selection. Confirmation step so nothing gets deleted by accident.
Smarter same-minute conflict detection
Section titled “Smarter same-minute conflict detection”Notion timestamps only update once per minute. N2O now compares content instead of clocks when both sides were edited close together - so you don’t get a false conflict just because you saved twice in the same minute.
H4 heading support
Section titled “H4 heading support”Notion’s heading_4 block type is now fully supported in both directions. Use #### in Obsidian and it syncs to Notion as a proper H4 - and vice versa.
Typed embeds preserved
Section titled “Typed embeds preserved”Embeds with specific types - tweets, Google Maps, Figma, Google Drive, GitHub Gist, Miro, CodePen, Replit, Excalidraw - now round-trip correctly through sync. The embed type and URL are preserved so they stay linked to the right service. Requires Enhanced Metadata.
Pagination in the pages picker
Section titled “Pagination in the pages picker”Browsing large Notion workspaces in the tree picker now shows a “Load More” button instead of trying to load everything at once. Search also queries across all your Notion pages - not just ones you’ve previously synced.
Reset button
Section titled “Reset button”A new Reset button in the dashboard clears all sync state, block cache, and retry queue while keeping your Notion connection and license intact. Useful for starting fresh or recovering from an unusual state.
File property images display at proper size
Section titled “File property images display at proper size”Images from Notion’s files-type properties now display at their natural size. Width is determined by Notion’s format data when the unofficial API is enabled.
v0.8.0 - February 2026
Section titled “v0.8.0 - February 2026”Obsidian Bases views from your Notion databases
Section titled “Obsidian Bases views from your Notion databases”Every Notion database you sync now generates a native Obsidian Bases .base file - table, cards, and list views with your actual properties, filters, and sorts. No Dataview plugin required. Your databases look like databases, not just folders of markdown files.
Auto-push: Obsidian edits sync back to Notion automatically
Section titled “Auto-push: Obsidian edits sync back to Notion automatically”Edit your markdown in Obsidian and changes push to Notion automatically after a short delay. This is the live bidirectional half - your vault and Notion workspace stay in sync without manually triggering a push (Pro).
Fast-poll near real-time sync
Section titled “Fast-poll near real-time sync”A lightweight scheduler checks for Notion changes every 30 seconds on recently active pages. When something changes, it syncs immediately - without the overhead of a full workspace scan (Pro).
Push only syncs what changed
Section titled “Push only syncs what changed”Editing a heading no longer rewrites your entire Notion page. N2O diffs at the block level and only updates what actually changed - faster syncs, fewer API calls, and Notion block IDs stay stable.
Persistent retry queue
Section titled “Persistent retry queue”If a sync fails because Notion is temporarily down or rate-limited, N2O queues the operation and retries automatically - starting at 30 seconds, backing off up to 15 minutes, up to 5 attempts. Nothing gets silently dropped.
Column layouts
Section titled “Column layouts”Notion pages with multi-column layouts now sync correctly. Columns appear as organized content in Obsidian and round-trip back to Notion without losing structure.
Filter what you sync, per database
Section titled “Filter what you sync, per database”Don’t want to sync every row in a large database? Set per-database filters in settings - by status, tag, owner, date, or any property. Only matching items sync.
Rename and reshape frontmatter properties
Section titled “Rename and reshape frontmatter properties”Map Notion properties to any frontmatter key name you want. Rename, reorder, exclude, or change the format. Your vault structure doesn’t have to mirror Notion’s.
Custom page templates
Section titled “Custom page templates”Define how synced pages look using templates with {{property.Name}}, {{body}}, conditional blocks, and loops. One template per database, stored in _templates/n2o/.
Side-by-side conflict resolution
Section titled “Side-by-side conflict resolution”When a conflict does need your input, a clear modal shows Notion’s version and your Obsidian version side by side. Accept one, accept the other, or take the auto-merged result. Resolve multiple conflicts in one pass.
Toggle headings look like headings
Section titled “Toggle headings look like headings”Toggle headings (H1/H2/H3 with a collapse arrow in Notion) now display with proper heading styles in Obsidian, not as plain text. They collapse and expand just like Notion’s.
PDFs and files open as links
Section titled “PDFs and files open as links”PDF and file attachment blocks now render as clean clickable links instead of full-size embeds, keeping your pages readable and fast.
Recover sync state from existing files
Section titled “Recover sync state from existing files”Already have synced files in your vault? “Scan Vault” reads their frontmatter metadata and rebuilds sync state - so N2O knows what’s already synced and won’t re-download everything or create duplicates.
All selected pages visible in picker
Section titled “All selected pages visible in picker”The tree picker now shows all currently-selected pages at a glance, so you can review your full sync scope before confirming.
v0.7.0 - January 2026
Section titled “v0.7.0 - January 2026”Initial release
Section titled “Initial release”- Pull sync - Notion pages and databases sync to Obsidian as markdown files with YAML frontmatter properties
- All block types - Headings, paragraphs, lists, toggles, callouts, code blocks, tables, quotes, dividers, images, videos, PDFs, file attachments, bookmarks, embeds, synced blocks, columns, and more
- All property types - Text, number, select, multi-select, date, checkbox, URL, email, phone, formula, relation, rollup, files, people, created/last edited time
- Media download - Images, videos, PDFs, and files saved locally in your vault with stable filenames
- Selective sync - Tree picker lets you choose exactly which pages and databases to sync; skip what you don’t need
- Incremental sync - Only pages changed since the last sync are re-fetched; first sync is fast, subsequent syncs are faster
- Database folders - Each Notion database becomes a folder; each database item becomes a markdown file with all its properties as frontmatter
- Auto-sync scheduling - Set a sync interval and N2O runs in the background automatically (Pro)
- Free tier - 100 items, pull sync, no time limit