Open-source project
viperrcrypto/Siftly avatar
viperrcrypto/Siftly

Siftly: a local Twitter/X bookmark manager with an AI pipeline and a mindmap

Local Twitter/X bookmark organizer with AI categorization and mindmap visualization

3,047 stars284 forksTypeScriptMIT

At a glance

What is it?
Siftly is a self-hosted Next.js app that imports your X bookmarks, runs a four-stage pipeline over them, and stores everything in SQLite on your machine. The interesting part is the import path and the incremental pipeline; the weak part is that its zero-config AI auth is macOS-only.
Who is it for?
Adopt Siftly if you archive X bookmarks and want them searchable and categorized on your own disk, and if you are on macOS or willing to paste an Anthropic API key. Skip it if you need a hosted, multi-user service or a supported Windows path for zero-config AI auth.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 163 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 17, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What Siftly solves, and for whom

X bookmarks are write-only for most people. You save a thread, never open it again, and the only retrieval tool is X's own search, which matches keywords rather than meaning. Siftly's pitch is that your bookmarks should be a local, searchable knowledge base rather than a list inside someone else's product. The README frames it as a "searchable, categorized, visual knowledge base" that runs entirely on your machine, with the caveat that AI API calls leave the machine when you configure a provider.

The intended user is a single person with a personal archive, comfortable running Node.js and a terminal. There is no account system in the README beyond optional HTTP Basic Auth via SIFTLY_USERNAME and SIFTLY_PASSWORD, which the .env.example describes as recommended when exposing the app through something like a Cloudflare Tunnel. That is a single-user design with a padlock bolted on, not a multi-tenant product. If you want a team-shared bookmark library with permissions, this is the wrong shape.

The four-stage pipeline and what actually leaves your machine

The README describes a pipeline with four named stages. Entity Extraction mines hashtags, URLs, @mentions and what the README calls "100+ known tool/product names" from stored tweet JSON, and the documentation states this stage makes zero API calls. Vision Analysis then reads images, GIFs and video thumbnails, producing what the README describes as 30 to 40 visual tags per image. Semantic Tagging combines tweet text with image context to generate 25 to 35 tags per bookmark, plus sentiment, people and company names. Categorization assigns one to three categories per bookmark with confidence scores.

The data flow is worth stating plainly: import writes raw tweet JSON into SQLite, the enrichment stages add derived fields, and the UI reads from those derived fields. The README says the pipeline is incremental and resumes where it left off if interrupted. That matters more than the tag counts, because a vision pass over a few thousand images is the expensive part and a crash midway through should not cost you the whole run.

The honest limitation is the second stage. Vision Analysis is the only stage that sends image content to a model, and the README's "everything stays local except the AI API calls you configure" is doing real work in that sentence. If your bookmarks are mostly screenshots of private conversations, the vision stage is the one to think about before you run it.

Installing Siftly and running a first import

The README gives three setup paths. The recommended one is a shell script at the repository root. It installs dependencies, sets up the database, checks for Claude CLI auth and opens the app.

bash
git clone https://github.com/viperrcrypto/Siftly.git
cd Siftly
./start.sh

If that works, the app is at http://localhost:3000. The manual path is four commands and is the one to use if start.sh fails on your platform, because it fails loudly instead of silently.

bash
npm install
npx prisma generate
npx prisma migrate dev --name init
npx next dev

The database URL comes from .env.example, which you copy to .env.local. The default is a local SQLite file, so there is nothing to provision.

bash
DATABASE_URL="file:./prisma/dev.db"

AI auth is detected in a documented priority order: Claude Code CLI first, then a key pasted in Settings, then ANTHROPIC_API_KEY, then a custom endpoint via ANTHROPIC_BASE_URL. On macOS the README says Siftly reads the Claude CLI session from the keychain, and the Settings page shows a green badge when that works. On Linux and Windows the README tells you to add an API key in Settings instead. The .env.example also lists MINIMAX_API_KEY and OPENAI_API_KEY as alternative providers.

For the first real use, go to the Import page and use the bookmarklet: drag the "Export X Bookmarks" link to your bookmark bar, open x.com/i/bookmarks while logged in, click the bookmarklet, hit the auto-scroll button, then click the export button. A file named bookmarks.json downloads. Upload it on the Import page. The README states categorization starts automatically after import and that re-imports skip duplicates.

Where Siftly breaks down

The macOS-only keychain path is the sharpest edge. The README is explicit that zero-config auth works on macOS and that Linux and Windows users must add an API key. That is not a bug, but it does mean the "no API key needed" headline applies to one platform, and anyone reading the badge without the note will be surprised.

The second constraint is the import mechanism itself. Both import methods scrape the x.com bookmarks page from a logged-in browser session. The bookmarklet injects a button into that page; the console script is pasted into DevTools. Neither is an API integration, so both depend on X's page structure staying stable and on auto-scroll actually reaching the bottom of your list. The README does not describe what happens when a session expires mid-scroll or when the page changes shape.

Third, the README is silent on a few things you would want before a large run: there is no documented rollback for categorization, no stated cost ceiling for the vision stage, and no documented rate-limit handling. The README's own cost note, roughly $0.00025 per bookmark at Haiku pricing, is a per-bookmark figure and does not tell you what a vision-heavy archive costs. Treat that number as a starting point, not a budget.

Finally, versioning is confusing. The README badge says Next.js 16 and package.json pins next at 16.1.6, but package.json declares version 0.2.0 while the releases list shows v0.3.0 as the most recent tag. The last push to the repository was on 2026-04-08, so the code has not moved in about five months.

How it compares to other ways of keeping bookmarks

The obvious comparison is a generic read-later or bookmark service such as a link-saving app with tags and full-text search. The difference is the retrieval model. A conventional bookmark tool indexes the page you saved and searches its text. Siftly indexes the tweet and its attached media, then searches over generated tags and categories, which is why the README can promise finding something by meaning, its example being a search for a funny meme about crypto crashing. A keyword index cannot do that; it also cannot be wrong about what an image contains, which Siftly's vision stage can.

A second comparison is a plain SQLite dump plus a script. If all you want is your bookmark JSON on disk, the import tooling here is the only part you need, and you could stop after step six of the bookmarklet flow. What Siftly adds beyond that is the enrichment pipeline, the mindmap view built on @xyflow/react, and the export options (CSV, JSON, ZIP). If you do not want generated tags, the pipeline is cost and complexity you are choosing not to use.

The third comparison is any hosted AI bookmark product. Those win on setup and multi-device sync. Siftly wins on data custody and on not having a subscription, at the cost of running a Next.js server yourself and managing your own API credentials.

Maintenance, licence and upgrade cost

Siftly is MIT licensed, which permits commercial use, modification and redistribution provided the copyright notice and permission notice are retained. The repository ships LICENSE, SECURITY.md, CONTRIBUTING.md and CODE_OF_CONDUCT.md, so the project has the usual governance files. Nothing here is legal advice; if you plan to redistribute a modified build, read the LICENSE text rather than a summary.

The upgrade path is the part to weigh. Prisma migrations are part of setup (npx prisma migrate dev --name init), so schema changes arrive as migrations you apply to your existing SQLite file. The README does not document a downgrade path, and the release sequence is unusual: v1.0.1 in March, then v0.2.0 and v0.3.0 in late March and April. If you pin a version, read the release notes for the tags between your version and the target before running migrate. The last push was on 2026-04-08, so a five-month gap in commits is the current state; there is no evidence of an active release cadence right now.

Editorial conclusion

Adopt Siftly if you archive X bookmarks and want them searchable and categorized on your own disk, and if you are on macOS or willing to paste an Anthropic API key. Skip it if you need a hosted, multi-user service or a supported Windows path for zero-config AI auth. Before trusting it with a large archive, verify three things yourself: that ./start.sh completes on your machine, that the Settings page shows either the Claude CLI badge or accepts your key, and that a small test import produces bookmarks.json with the fields the pipeline expects. The README does not document rollback, so keep the SQLite file at DATABASE_URL="file:./prisma/dev.db" backed up before you re-run categorization over an existing library.

Frequently asked questions

Does Siftly need an Anthropic API key?

Not on macOS if you have Claude Code CLI signed in, because the README states Siftly reads the session from the macOS keychain automatically. On Linux and Windows the README says to add an API key in Settings instead. The .env.example also lists ANTHROPIC_API_KEY, MINIMAX_API_KEY and OPENAI_API_KEY as options.

How do I import my X bookmarks into Siftly?

The README describes two built-in methods on the Import page, a bookmarklet and a browser console script, both of which require no extension. You run either one on x.com/i/bookmarks while logged in, auto-scroll to capture the list, and download a bookmarks.json file to upload back into Siftly. Re-importing skips duplicates.

Is Siftly free to self-host?

The code is MIT licensed, so there is no licence fee. The README notes that AI calls leave your machine when you configure a provider, and mentions Haiku pricing of roughly $0.00025 per bookmark as a reference point. Using an existing Claude Code subscription avoids per-call API billing on macOS.

Official sources

  1. Issues
  2. License: MIT
  3. README
  4. Releases
  5. viperrcrypto/Siftly on GitHub
Community notes

Community notes