SCIP Code Intelligence Protocol

SCIP (pronounciation: “skip”) is a language-agnostic protocol for indexing source code, which can be used to power code navigation functionality such as Go to definition, Find references, and Find implementations.

This repository includes:

  • A protobuf schema for SCIP.
  • Rich Go bindings for SCIP: This includes many utility functions to help build tooling on top of SCIP.
  • Auto-generated bindings for TypeScript, Rust and Haskell.
  • The scip CLI makes SCIP indexes a breeze to work with.

If you’re interested in better understanding the motivation behind SCIP, check out the announcement blog post.

If you’re interested in writing a new indexer that emits SCIP, check out our documentation on how to write an indexer.

SCIP CLI reference

  scip convert [--from=<path>] [--to=<path>]
  scip stats [--from=<path>]
  scip snapshot [--from=<path>] [--output=<path>]
  scip --version
  scip -h | --help

  --from=<path>   Input file for conversion [default: index.scip].
  --to=<path>     Output file for conversion [default: dump.lsif].
  --output=<path> Output directory [default: scip-snapshot].
  --version       Show version.
  -h --help       Show help text.

A single dash path ('-') for --from (--to) is interpreted as stdin (stdout).

The 'convert' subcommand currently only supports conversion from SCIP to LSIF.


We welcome questions, suggestions as well as code and docs contributions.

For submitting contributions, check out to better understand project structure and common workflows.

Contributors should abide by the Sourcegraph Code of Conduct.


View Github