18,918 orphaned bookmarks and the rule they taught us
On the morning of 2 October 2026 our test library held 40,824 bookmarks. That's a lot for one test account, and looking back, it was a clue. Of those, 18,918 belonged to no source at all, and 18,911 were copies of links our Chrome source already had.
How it doubled
Every bookmark that comes from a browser carries a link to its source. When a source was deleted, the database removed that link and kept the bookmarks, so they stayed in All Bookmarks with nothing pointing at them. That is what happened to a browser source we had deleted. Its whole tree, from a sync on 26 April, stayed behind, and when we paired Chrome again it arrived as a new source with nothing to match against. The sync created every bookmark a second time.
Imported files had the same gap. A bookmarks.html import had no source at all, so nothing in the app could tell those bookmarks apart from leftovers.
We had been warned twice
In April a review pointed out that importing a file deleted the whole library first, and we added a warning before it. On 10 June our review notes asked the question outright: an HTML import wipes synced bookmarks too, so would every paired browser duplicate them on its next sync, and was that intended? We never answered it.
In September we did close one way in. When you pair a browser now, the app suggests your matching old source and asks whether to reconnect to it or start a new one, and the first sync after a reconnect keeps what it can't find rather than marking it deleted. That protected new pairings, but the copies already sitting in our library stayed where they were.
The rule
Since 2 October every set of bookmarks in Reading Rewind has a source, including a file you import. An HTML import becomes its own source, named "HTML Import" followed by the file name. It's added next to your library instead of replacing it, and importing a file with the same name again replaces only that source.
Deleting a source in Settings now takes its bookmarks and folders with it, except bookmarks that another source also holds, which stay where they are. Settings also lists Unlinked Bookmarks, with a count of how many are in your other sources too and a button to delete them; it asks for your password if you haven't entered it recently. By default, a link you add by hand doesn't go into an import source. And sources you don't name are called Chrome 1, Chrome 2, Firefox 1 and so on, so you can tell them apart.
Deleting nearly half the library
We used the new button on our own library that evening. One confirmation removed 18,918 bookmarks and the folders they left empty, a little under half of everything in the account.
It was a strange feeling to delete that much and lose almost nothing. All but 7 of those links were still there afterwards, once, in the Chrome source.
The build log stops here for now. If you want to try the app it describes, you can start a free reading list.
More from the build log
-
How we cut a 115-second sync to 4 seconds
Measured speed-ups in Reading Rewind: a full re-sync from 115 s to 4.2 s, a 5,000-link import from 7.5 s to 0.8 s, and lighter clicks across the app.
-
Locking the doors on a small read-later app
How we approached security in 2026: safer link fetching, single-use pairing links, rate limits on the busy parts of the app, and security headers.
-
The redesign we reverted within the hour
Over two days Reading Rewind became a read-later app first. We shipped a reading desk, reverted it, compared eight layouts and rebuilt the lists.