Fuzzy search your X/Twitter likes from the terminal. Fetches all your liked tweets into a local SQLite database with FTS5 full-text search, then lets you browse them interactively with fzf.
git clone https://github.com/sasha-computer/x-likes.git
cd x-likes
uv syncSymlink the main script somewhere on your PATH:
ln -sf "$(pwd)/x-likes" /opt/homebrew/bin/x-likesx-likes # open fzf with all likes
x-likes "rust" # start with a queryPress Enter to open the tweet in your browser. The preview panel shows full tweet text, metrics, quoted tweets, and links.
uv run search.py "async rust"
uv run search.py --author swyx "ai agents"
uv run search.py --after 2025-01-01 "zk proofs"
uv run search.py --limit 5 "domain hacks"Supports FTS5 query syntax: phrases ("exact match"), boolean (AI AND agents), prefix (encryp*), column filters (author_username:swyx).
Requires a Chromium-based browser running with remote debugging enabled and logged into x.com:
# Launch your browser with CDP enabled
chromium --remote-debugging-port=9222
# Fetch likes
uv run fetch.py
uv run fetch.py --limit 500 # just the latest 500The fetcher extracts your auth cookies from the browser automatically via Chrome DevTools Protocol. No API keys needed.
- Fetch — Uses twikit to paginate through your liked tweets, extracting text, authors, URLs, quotes, and engagement metrics. Stores everything in SQLite with WAL mode.
- Index — An FTS5 virtual table indexes author names, usernames, tweet text, quoted tweets, and URLs. Triggers keep the index in sync on insert/update/delete.
- Search — The fzf interface loads all likes into memory and lets you fuzzy-filter instantly. The preview panel runs a SQLite query for full details. CLI search uses FTS5
MATCHwith ranked results.
| Variable | Default | Description |
|---|---|---|
X_LIKES_DB |
~/.local/share/x-likes/likes.db |
Database path |
XDG_DATA_HOME |
~/.local/share |
Base data directory |
MIT
