Sourcegraph extension manifest - package.json

Sourcegraph extensions use a package.json file for metadata and configuration.


Name Required Type Details
name ✔️ string Extension identifier: all lowercase, alphanumeric with hyphens and underscores.
description ✔️ string The extension’s description, which summarizes the extension’s purpose and features.
version string Semantic versioning format.
publisher ✔️ string Your Sourcegraph username (or the name of an organization you’re a member of)
license string The type of license chosen.
main string Path to the transpiled JavaScript file for your extension.
contributes object An object describing the contributions (features) this extension provides. See “Extension contribution points” for a full listing.
activationEvents ✔️ array A list of events that cause this extension to be activated.
dependencies object npm dependencies.
devDependencies object npm dependencies needed for development.
scripts ✔️ object npm’s scripts with Sourcegraph specific entries such as sourcegraph:prepublish.
browserslist string Modern list of browsers for build tools to target when transpiling.
repository object npm field for the repository location.
categories string[] Categories that describe this extension, from the predefined set Programming languages, Linters, Code analysis, External services, Reports and stats, Other.
tags string[] Arbitrary tags that describe this extension.
wip boolean Indicates that this is a work-in-progress extension.

See the npm package.json documentation for other fields.

Note: Including the repository field is recommended so anyone can follow the link from the extension detail page to view the source code.

"repository": {
  "type": "git",
  "url": ""


Here is an example package.json created by the Sourcegraph extension creator.

  "name": "my-extension",
  "description": "An awesome Sourcegraph extension",
  "publisher": "your-sourcegraph-username",
  "repository": {
    "type": "git",
    "url": ""
  "categories": ["Programming languages"],
  "tags": ["awesome"],
  "activationEvents": [
  "contributes": {
    "actions": [
    "menus": {
      "editor/title": [],
      "commandPalette": []
    "configuration": {}
  "version": "0.0.0-DEVELOPMENT",
  "license": "MIT",
  "main": "dist/my-extension.js",
  "scripts": {
    "typecheck": "tsc -p tsconfig.json",
    "build": "parcel build --out-file dist/my-extension.js src/my-extension.ts",
    "serve": "parcel serve --no-hmr --out-file dist/my-extension.js src/my-extension.ts",
    "watch:typecheck": "tsc -p tsconfig.json -w",
    "watch:build": "tsc -p tsconfig.dist.json -w",
    "sourcegraph:prepublish": "npm run build"
  "browserslist": [
    "last 1 Chrome versions",
    "last 1 Firefox versions",
    "last 1 Edge versions",
    "last 1 Safari versions"
  "devDependencies": {
    "@sourcegraph/tsconfig": "^4.0.1",
    "@sourcegraph/eslint-config": "^0.11.3",
    "parcel-bundler": "^1.12.4",
    "sourcegraph": "^24.0.0",
    "eslint": "^6.8.0",
    "typescript": "^3.8.3"

Evaluating expressions in manifest fields

You can interpolate Context key expressions in some string fields in the manifest, allowing you to set dynamic values.