Chrome extension for exporting bookmarks from social platforms.
| Platform | Status | Export Format |
|---|---|---|
| Twitter / X | Available | Tweet IDs |
| Available | Post URLs |
{
"type": "twitter",
"items": [
{ "id": "1893456789012345678" },
{ "id": "1891234567890123456" }
]
}{
"type": "instagram",
"items": [
{ "url": "arielyu.fit/p/DS2jhe0jrWK" },
{ "url": "zeemallick/p/DTonFIMjDL3" }
]
}Each exporter produces a typed JSON file with a type discriminator and an items array containing platform-specific identifiers.
- Click the extension icon and select Twitter / X Bookmarks
- The extension opens
x.com/i/bookmarks/allin a background tab - Authentication headers are captured automatically from your active session
- Bookmarks are fetched via Twitter's GraphQL API (100 per page, paginated)
- A JSON file containing all bookmark tweet IDs is downloaded via Save As dialog
- Click the extension icon and select Instagram Saved
- The extension opens
instagram.comin a background tab to capture auth headers - Saved posts are fetched via Instagram's REST API (
/api/v1/feed/saved/posts/), paginated - A JSON file containing all saved post URLs is downloaded via Save As dialog
No credentials are stored permanently. Auth tokens are captured from your existing browser session and held in local storage only for the duration of the export.
- Node.js 24.11.0+
- npm
npm install
npm run build # Production buildnpm run dev # Watch mode with source maps- Build the extension (
npm run build) - Open
chrome://extensions - Enable Developer mode
- Click Load unpacked and select the
dist/directory
npm test # Run tests
npm run test:coverage # Run with coverage
npm run typecheck # Type checkingsrc/
├── background/
│ ├── background.ts # Service worker entry, message routing
│ ├── twitter-auth.ts # webRequest header capture for Twitter auth
│ ├── twitter-bookmarks.ts # GraphQL bookmark fetching and JSON export
│ ├── instagram-auth.ts # webRequest header capture for Instagram auth
│ └── instagram-bookmarks.ts # REST API saved post fetching and JSON export
├── popup/
│ ├── popup.html # Extension popup UI
│ └── index.ts # Button handlers and status updates
└── types/
└── global.d.ts # Chrome API type declarations
Each exporter follows the same pattern:
- Create
src/background/<platform>-auth.tsfor session capture - Create
src/background/<platform>-bookmarks.tsfor data fetching and export - Add a message handler in
background.ts(e.g.,exportRedditBookmarks) - Add a button to
popup.htmlwith the platform icon - Wire the button in
popup/index.ts - Update
manifests/manifest.jsonwith any new host permissions
| Permission | Reason |
|---|---|
storage |
Temporarily store auth tokens during export |
downloads |
Save the exported JSON file |
webRequest |
Capture authentication headers from active sessions |
*://x.com/* |
Access Twitter/X API |
*://twitter.com/* |
Access Twitter legacy domain |
*://www.instagram.com/* |
Access Instagram API |
- TypeScript, esbuild, Manifest V3
- Vitest + happy-dom for testing
- No external runtime dependencies