Sign In

parse-bookmarks

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

parse-bookmarks

Parse any bookmark export into clean JSON — browser bookmark HTML, Pocket, Instapaper, Raindrop CSV — and convert between formats. Zero dependencies, zero build.

latest
Source
npmnpm
Version
0.1.0
Version published
Weekly downloads
66
-66.5%
Maintainers
1
Weekly downloads
 
Created
Source

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-bookmarks

Parse 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:

SourceFormatNotes
Chrome / Firefox / Safari / Edge / Vivaldi exportNetscape bookmark HTMLfolders (nested), ADD_DATE, Firefox TAGS
Pocket CSV exportpocket-csvpipe-separated tags, archive status
Instapaper CSV exportinstapaper-csvfolders, timestamps
Raindrop.io CSV exportraindrop-csvcomma tags, ISO dates
A pasted list of URLsurl-listURL, 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 import

The 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 --test for 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

Keywords

bookmarks

FAQs

Package last updated on 06 Aug 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts