Fast, local search across computer science research literature.
sec-grep builds a local SQLite/FTS5 index from DBLP and gives you a clean CLI
and TUI for searching papers with an expressive query language across title,
authors, abstract, venue, year, rank, tag, and DOI.
- Search across configurable computer science venue catalogs.
- Keep the corpus local and query it quickly with SQLite/FTS5.
- Search in the CLI or TUI, and export CSV, JSON, or BibTeX for scripts.
Requires Rust 1.95 or newer.
cargo install --git https://github.com/philippnormann/sec-grep sec-grepOr from a local checkout:
cargo install --path crates/sec-grepCargo installs to ~/.cargo/bin on macOS/Linux and
%USERPROFILE%\.cargo\bin on Windows. Make sure that directory is on PATH.
Or use nix:
nix run "github:philippnormann/sec-grep" -- <arguments> # run once
nix shell "github:philippnormann/sec-grep" # add to PATHsec-grep init
sec-grep update --since 2018
sec-grep --tuiIn the TUI, use Tab to cycle sort modes, arrow keys to move, and Enter to
open the selected paper URL.
Sort CLI results with --sort relevance, --sort year, --sort venue, or
--sort rank.
Search from the shell:
sec-grep 'title:fuzzing venue:ndss year:2020-'
sec-grep '"side channel" OR cache' --venue CCS,SP
sec-grep 'doi:10.1145' --fields venue,year,title,doiMore examples:
# Recent malware-detection papers in A/A* venues
sec-grep 'malware detection' --year 2022- --rank A --rank 'A*' --sort year
# Export matching papers as BibTeX
sec-grep 'kernel fuzz*' --venue USENIX-SEC --format bibtex > papers.bib
# Script-friendly JSON output
sec-grep 'large language model' --year 2023- --format json
# Limit output for quick triage
sec-grep 'ransomware OR botnet' --year 2020- --limit 20
# Search a custom database path
sec-grep --db ./papers.db 'symbolic execution' --venue ccs- Boolean search:
AND,OR,NOT, parentheses, and quoted phrases. - Text fields:
title:,author:,abstract:. - Metadata filters:
venue:,year:,rank:,tag:,doi:. - Prefix search:
fuzz*.
Year filters accept 2020, 2018-2024, 2020-, and -2019.
Metadata filters can be written inline:
sec-grep 'malware detection year:2022- rank:A'or as CLI flags:
sec-grep 'malware detection' --year 2022- --rank ABoolean operators apply only to full-text terms. Metadata filters are ORed within one field and ANDed across fields.
sec-grep 'malware OR botnet' --rank A --rank 'A*'
sec-grep 'malware OR botnet' --year 2018 --year 2029
sec-grep 'malware OR botnet' --rank A --tag systemsBundles select venue sets for subfields such as security, ML, and software engineering. Tags filter papers within the indexed corpus.
sec-grep update --bundle security,ml
sec-grep enrich --bundle ml# ML venue papers
sec-grep 'mechanistic interpretability' --tag ml --year 2023-
# AI-security crossover papers
sec-grep 'prompt injection OR jailbreak' --tag ai-securityBundled venue catalogs live in crates/sec-grep-core/venues/.
After sec-grep init, you can extend or override the catalog with a user
config.yaml:
- macOS:
~/Library/Application Support/sec-grep/config.yaml - Linux:
~/.config/sec-grep/config.yaml - Windows:
%APPDATA%\sec-grep\config.yaml
You can also pass a specific file with --config path/to/config.yaml.
bundles selects bundled venue sets for subfields. User venues are always
merged after selected bundles by id: reuse an existing id to override a
bundled venue, or add a new id to extend the catalog.
bundles: [security, ml, se]
defaults:
min_year: 2018
venues:
- id: DIMVA
name: Conference on Detection of Intrusions and Malware & Vulnerability Assessment
dblp_stream: conf/dimva
aliases: [dimva]
rank: B
tags: [systems, network, malware]Then ingest and search it:
sec-grep update --venue DIMVA
sec-grep 'malware' --venue DIMVAdblp_stream is the DBLP stream id used by the RDF endpoint, such as
conf/dimva.
Abstract enrichment is optional, cached, and best-effort. sec-grep uses paper DOIs and DBLP paper URLs to find abstracts.
sec-grep update --abstracts
sec-grep enrich --jobs 8No API keys are required, but keys can improve rate limits and coverage.
| Variable | Used for | Get a key |
|---|---|---|
OPENALEX_API_KEY |
OpenAlex lookups | openalex.org/settings/api |
SEMANTIC_SCHOLAR_S2_KEY |
Semantic Scholar lookups | semanticscholar.org/product/api |
OPENREVIEW_USERNAME / OPENREVIEW_PASSWORD |
OpenReview lookups | OpenReview API docs |
Set them in the shell:
export OPENALEX_API_KEY=...
export SEMANTIC_SCHOLAR_S2_KEY=...
export OPENREVIEW_USERNAME=...
export OPENREVIEW_PASSWORD=...Or place them in a local .env file:
OPENALEX_API_KEY=
SEMANTIC_SCHOLAR_S2_KEY=
OPENREVIEW_USERNAME=
OPENREVIEW_PASSWORD=.env is loaded automatically when present.
Inspired by top4grep.
Released under the MIT License.
