parse-bookmarks
v0.1.0
Published
Parse any bookmark export into clean JSON — browser bookmark HTML, Pocket, Instapaper, Raindrop CSV — and convert between formats. Zero dependencies, zero build.
Maintainers
Readme
parse-bookmarks
Parse any bookmark export into clean JSON, and convert between formats.
Every browser and read-later app exports bookmarks in a different shape: the ancient Netscape HTML file (Chrome, Firefox, Safari, Edge — with unclosed tags, because 1996), Pocket's CSV, Instapaper's CSV, Raindrop's CSV. If you build anything that touches saved links, you end up writing these parsers yourself. This is that code, written once, tested, with zero dependencies and zero build step.
npm install parse-bookmarksParse anything
import { parse } from "parse-bookmarks"
const { format, bookmarks, warnings } = parse(fileContents)
// format → "netscape-html" | "pocket-csv" | "instapaper-csv" | "raindrop-csv" | "url-list"
// bookmarks→ [{ title, url, addedAt, tags, folder }, ...]Auto-detection covers:
| Source | Format | Notes |
|---|---|---|
| Chrome / Firefox / Safari / Edge / Vivaldi export | Netscape bookmark HTML | folders (nested), ADD_DATE, Firefox TAGS |
| Pocket CSV export | pocket-csv | pipe-separated tags, archive status |
| Instapaper CSV export | instapaper-csv | folders, timestamps |
| Raindrop.io CSV export | raindrop-csv | comma tags, ISO dates |
| A pasted list of URLs | url-list | URL, Title \| URL, Title - URL, [Title](URL) |
Every parser returns the same unified shape:
interface Bookmark {
title: string
url: string
addedAt: string | null // ISO 8601
tags: string[]
folder: string | null // "Work/Reading"
}Convert to anything
import { toMarkdown, toCsv, toJson, toNetscapeHtml } from "parse-bookmarks"
toMarkdown(bookmarks) // - [Title](url), grouped by folder
toCsv(bookmarks) // title,url,addedAt,tags,folder
toJson(bookmarks) // pretty JSON
toNetscapeHtml(bookmarks) // HTML file every browser can importThe last one is the escape hatch people ask for the most: Pocket CSV in, browser-importable HTML out — your saved list back in a place that will outlive any single app.
import { parse, toNetscapeHtml } from "parse-bookmarks"
toNetscapeHtml(parse(pocketCsv).bookmarks)Design constraints
- Zero dependencies, zero build. Plain ES modules + JSDoc + hand-written
.d.ts.node --testfor tests. Works in Node ≥18 and modern browsers. - Never throws on dirty rows. Bad rows are skipped and reported in
warnings, because real exports are messy. - No network, no telemetry. It's a parser.
Who makes this
Built by the team behind Burn 451, a read-later app where every save gets 24 hours before it burns. This library is deliberately neutral — use it to build a Burn competitor if you like.
Pairs well with bookmarks-mcp, which uses it to make your live browser bookmarks readable by AI assistants.
License
MIT
