• Stars
    star
    3,392
  • Rank 12,605 (Top 0.3 %)
  • Language
    Go
  • License
    MIT License
  • Created about 8 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Distributed, lock-free, self-hosted health checks and status pages

Checkup

GoDoc Sourcegraph

Checkup is distributed, lock-free, self-hosted health checks and status pages, written in Go.

It features an elegant, minimalistic CLI and an idiomatic Go library. They are completely interoperable and their configuration is beautifully symmetric.

Checkup was created by Matt Holt, author of the Caddy web server. It is maintained and sponsored by Sourcegraph. If you'd like to dive into the source, you can start here.

This tool is a work-in-progress. Please use liberally (with discretion) and report any bugs!

Recent changes

Due to recent development, some breaking changes have been introduced:

  • providers: the json config field provider was renamed to type for consistency,
  • notifiers: the json config field name was renamed to type for consistency,
  • sql: by default the sqlite storage engine is disabled (needs build with -tags sql to enable),
  • sql: storage engine is deprecated in favor of new storage engines postgres, mysql, sqlite3
  • mailgun: the to parameter now takes a list of e-mail addresses (was a single recipient)
  • LOGGING IS NOT SWALLOWED ANYMORE, DON'T PARSE checkup OUTPUT IN SCRIPTS
  • default for status page config has been set to local source (use with checkup serve)

If you want to build the latest version, it's best to run:

  • make build - builds checkup with mysql and postgresql support,
  • make build-sqlite3 - builds checkup with additional sqlite3 support

The resulting binary will be placed into builds/checkup.

Intro

Checkup can be customized to check up on any of your sites or services at any time, from any infrastructure, using any storage provider of your choice (assuming an integration exists for your storage provider). The status page can be customized to your liking since you can do your checks however you want. The status page is also mobile-responsive.

Checkup currently supports these checkers:

  • HTTP
  • TCP (+TLS)
  • DNS
  • TLS

Checkup implements these storage providers:

  • Amazon S3
  • Local file system
  • GitHub
  • MySQL
  • PostgreSQL
  • SQLite3
  • Azure Application Insights

Currently the status page does not support SQL or Azure Application Insights storage back-ends.

Checkup can even send notifications through your service of choice (if an integration exists).

How it Works

There are 3 components:

  1. Storage. You set up storage space for the results of the checks.
  2. Checks. You run checks on whatever endpoints you have as often as you want.
  3. Status Page. You (or GitHub) host the status page.

Quick Start

Download Checkup for your platform and put it in your PATH, or install from source:

$ go get -u github.com/sourcegraph/checkup/cmd/checkup

You'll need Go 1.8 or newer. Verify it's installed properly:

$ checkup --help

Then follow these instructions to get started quickly with Checkup.

Create your Checkup config

You can configure Checkup entirely with a simple JSON document. You should configure storage and at least one checker. Here's the basic outline:

{
    "checkers": [
        // checker configurations go here
    ],

    "storage": {
        // storage configuration goes here
    },

    "notifiers": [
        // notifier configuration goes here
    ]
}

Save the checkup configuration file as checkup.json in your working directory.

We will show JSON samples below, to get you started. But please refer to the godoc for a comprehensive description of each type of checker, storage, and notifier you can configure!

Here are the configuration structures you can use, which are explained fully in the godoc. Only the required fields are shown, so consult the godoc for more.

HTTP Checker

godoc: check/http

{
    "type": "http",
    "endpoint_name": "Example HTTP",
    "endpoint_url": "http://www.example.com"
    // for more fields, see the godoc
}

TCP Checker

godoc: check/tcp

{
    "type": "tcp",
    "endpoint_name": "Example TCP",
    "endpoint_url": "example.com:80"
}

DNS Checkers

godoc: check/dns

{
    "type": "dns",
    "endpoint_name": "Example of endpoint_url looking up host.example.com",
    "endpoint_url": "ns.example.com:53",
    "hostname_fqdn": "host.example.com"
}

TLS Checkers

godoc: check/tls

{
    "type": "tls",
    "endpoint_name": "Example TLS Protocol Check",
    "endpoint_url": "www.example.com:443"
}

Exec Checkers

godoc: check/exec

The exec checker can run any command, and expects an zero-value exit code on success. Non-zero exit codes are considered errors. You can configure the check with "raise":"warning" if you want to consider a failing service as DEGRADED. Additional options available on godoc link above.

{
    "type": "exec",
    "name": "Example Exec Check",
    "command": "testdata/exec.sh"
}

Amazon S3 Storage

godoc: S3

{
    "type": "s3",
    "access_key_id": "<yours>",
    "secret_access_key": "<yours>",
    "bucket": "<yours>",
    "region": "us-east-1"
}

To serve files for your status page from S3, copy statuspage/config_s3.js over statuspage/config.js, and fill out the required public, read-only credentials.

File System Storage

godoc: FS

{
    "type": "fs",
    "dir": "/path/to/your/check_files"
}

GitHub Storage

godoc: GitHub

{
    "type": "github",
    "access_token": "some_api_access_token_with_repo_scope",
    "repository_owner": "owner",
    "repository_name": "repo",
    "committer_name": "Commiter Name",
    "committer_email": "[email protected]",
    "branch": "gh-pages",
    "dir": "updates",
    "commit_message_suffix": "[ci skip]"
}
  • "dir" is a subdirectory within the repo to push all the check files
  • "commit_message_suffix" is appended to each commit message (default: "[ci skip]", to remove set to " " (single space))

Setup instructions:

  1. Create a repository,
  2. Copy the contents of statuspage/ from this repo to the root of your new repo,
  3. Update the URL in config.js to https://your-username.github.com/dir/,
  4. Create updates/.gitkeep,
  5. Enable GitHub Pages in your settings for your desired branch.

MySQL Storage

godoc: storage/mysql

A MySQL database can be configured as a storage backend.

Example configuration:

{
    "type": "mysql",
    "create": true,
    "dsn": "checkup:checkup@tcp(mysql-checkup-db:3306)/checkup"
}

When create is set to true, checkup will issue CREATE TABLE statements required for storage.

SQLite3 Storage (requires CGO to build, not available as a default)

godoc: storage/sqlite3

A SQLite3 database can be configured as a storage backend.

Example configuration:

{
    "type": "sqlite3",
    "create": true,
    "dsn": "/path/to/your/sqlite.db"
}

When create is set to true, checkup will issue CREATE TABLE statements required for storage.

PostgreSQL Storage

godoc: storage/postgres

A PostgreSQL database can be configured as a storage backend.

Example configuration:

{
    "type": "postgres",
    "dsn": "host=postgres-checkup-db user=checkup password=checkup dbname=checkup sslmode=disable"
}

When create is set to true, checkup will issue CREATE TABLE statements required for storage.

Azure Application Insights Storage

godoc: appinsights

Azure Application Insights can be used as a storage backend, enabling Checkup to be used as a source of custom availability tests and metrics. An example use case is documented here.

A sample storage configuration with retries enabled:

{
  "type": "appinsights",
  "test_location": "data center 1",
  "instrumentation_key": "11111111-1111-1111-1111-111111111111",
  "retry_interval": 1,
  "max_retries": 3,
  "tags": {
    "service": "front end",
    "product": "main web app"
  }
} 

The following keys are optional:

  • test_location (default is Checkup Monitor)
  • retry_interval (default is 0)
  • max_retries (default is 0)
  • timeout (defaults to 2 seconds if omitted or set to 0)
  • tags

If retries are disabled, the plugin will wait up to timeout seconds to submit telemetry before closing.

When check results are sent to Application Insights, the following values are included in the logged telemetry:

  • success is set to 1 if the check passes, 0 otherwise
  • message is set to Up, Down, or Degraded
  • duration is set to the average of all check result round-trip times and is displayed as a string in milliseconds
  • customMeasurements is set to a JSON object including the number of the check as a string and the round-trip time of the check in nanoseconds
  • If the check included a threshold_rtt setting, it will be added to the customDimensions JSON object as key ThresholdRTT with a time duration string value (ie: 200ms)
  • If any tags were included in the storage configuation, they will be added to the customDimensions JSON object

Currently the status page does not support Application Insights storage.

Slack notifier

Enable notifications in Slack with this Notifier configuration:

{
    "type": "slack",
    "username": "username",
    "channel": "#channel-name",
    "webhook": "webhook-url"
}

Follow these instructions to create a webhook.

Mail notifier

Enable E-mail notifications with this Notifier configuration:

{
    "type": "mail",
    "from": "[email protected]",
    "to": [ "[email protected]", "[email protected]" ],
    "subject": "Custom subject line",
    "smtp": {
        "server": "smtp.example.com",
        "port": 25,
        "username": "username",
        "password": "password"
    }
}

The settings for subject, smtp.port (default to 25), smtp.username and smtp.password are optional.

Mailgun notifier

Enable notifications using Mailgun with this Notifier configuration:

{
    "type": "mailgun",
    "from": "[email protected]",
    "to": [ "[email protected]", "[email protected]" ],
    "subject": "Custom subject line"
    "apikey": "mailgun-api-key",
    "domain": "mailgun-domain",
}

Pushover notifier

Enable notifications using Pushover with this Notifier configuration:

{
    "type": "pushover",
    "token": "API_TOKEN",
    "recipient": "USER_KEY"
    "subject": "Custom subject line"
}

Setting up storage on S3

The easiest way to do this is to give an IAM user these two privileges (keep the credentials secret):

  • arn:aws:iam::aws:policy/IAMFullAccess
  • arn:aws:iam::aws:policy/AmazonS3FullAccess

Implicit Provisioning

If you give these permissions to the same user as with the credentials in your JSON config above, then you can simply run:

$ checkup provision

and checkup will read the config file and provision S3 for you. If the user is different, you may want to use explicit provisioning instead.

This command creates a new IAM user with read-only permission to S3 and also creates a new bucket just for your check files. The credentials of the new user are printed to your screen. Make note of the Public Access Key ID and Public Access Key! You won't be able to see them again.

IMPORTANT SECURITY NOTE: This new IAM user will have read-only permission to all S3 buckets in your AWS account, and its credentials will be visible to any visitor to your status page. If you do not want to grant visitors to your status page read access to all your S3 buckets, you need to modify this IAM user's permissions to scope its access to the Checkup bucket. If in doubt, restrict access to your status page to trusted visitors. It is recommended that you do NOT include ANY sensitive credentials on the machine running Checkup.

Explicit Provisioning

If you do not prefer implicit provisioning using your checkup.json file, do this instead. Export the information to environment variables and run the provisioning command:

$ export AWS_ACCESS_KEY_ID=...
$ export AWS_SECRET_ACCESS_KEY=...
$ export AWS_BUCKET_NAME=...
$ checkup provision s3

Manual Provisioning

If you'd rather do this manually, see the instructions on the wiki but keeping in mind the region must be US Standard.

Checkup status page

Checkup now has a local HTTP server that supports serving checks stored in:

  • FS (local filesystem storage),
  • MySQL
  • PostgreSQL
  • SQLite3 (not enabled by default)

You can run checkup serve from the folder which contains checkup.json and the statuspage/ folder.

Setting up the status page for GitHub

You will need to edit `

Setting up the status page for S3

In statuspage/js, use the contents of config_s3.js to fill out config.js, which is used by the status page. This is where you specify how to access the S3 storage bucket you just provisioned for check files.

As you perform checks, the status page will update every so often with the latest results. Only checks that are stored will appear on the status page.

Performing checks

You can run checks many different ways: cron, AWS Lambda, or a time.Ticker in your own Go program, to name a few. Checks should be run on a regular basis. How often you run checks depends on your requirements and how much time you render on the status page.

For example, if you run checks every 10 minutes, showing the last 24 hours on the status page will require 144 check files to be downloaded on each page load. You can distribute your checks to help avoid localized network problems, but this multiplies the number of files by the number of nodes you run checks on, so keep that in mind.

Performing checks with the checkup command is very easy.

Just cd to the folder with your checkup.json from earlier, and checkup will automatically use it:

$ checkup

The vanilla checkup command runs a single check and prints the results to your screen, but does not save them to storage for your status page.

To store the results instead, use --store:

$ checkup --store

If you want Checkup to loop forever and perform checks and store them on a regular interval, use this:

$ checkup every 10m

And replace the duration with your own preference. In addition to the regular time.ParseDuration() formats, you can use shortcuts like second, minute, hour, day, or week.

You can also get some help using the -h option for any command or subcommand.

Posting status messages

Site reliability engineers should post messages when there are incidents or other news relevant for a status page. This is also very easy:

$ checkup message --about=Example "Oops. We're trying to fix the problem. Stay tuned."

This stores a check file with your message attached to the result for a check named "Example" which you configured in checkup.json earlier.

Doing all that, but with Go

Checkup is as easy to use in a Go program as it is on the command line.

Using Go to set up storage on S3

First, create an IAM user with credentials as described in the section above.

Then go get github.com/sourcegraph/checkup and import it.

Then replace ACCESS_KEY_ID and SECRET_ACCESS_KEY below with the actual values for that user. Keep those secret. You'll also replace BUCKET_NAME with the unique bucket name to store your check files:

storage := checkup.S3{
	AccessKeyID:     "ACCESS_KEY_ID",
	SecretAccessKey: "SECRET_ACCESS_KEY",
	Bucket:          "BUCKET_NAME",
}
info, err := storage.Provision()
if err != nil {
	log.Fatal(err)
}
fmt.Println(info) // don't lose this output!

This method creates a new IAM user with read-only permission to S3 and also creates a new bucket just for your check files. The credentials of the new user are printed to your screen. Make note of the PublicAccessKeyID and PublicAccessKey! You won't be able to see them again.

Using Go to perform checks

First, go get github.com/sourcegraph/checkup and import it. Then configure it:

c := checkup.Checkup{
	Checkers: []checkup.Checker{
		checkup.HTTPChecker{Name: "Example (HTTP)", URL: "http://www.example.com", Attempts: 5},
		checkup.HTTPChecker{Name: "Example (HTTPS)", URL: "https://www.example.com", Attempts: 5},
		checkup.TCPChecker{Name:  "Example (TCP)", URL:  "www.example.com:80", Attempts: 5},
		checkup.TCPChecker{Name:  "Example (TCP SSL)", URL:  "www.example.com:443", Attempts: 5, TLSEnabled: true},
		checkup.TCPChecker{Name:  "Example (TCP SSL, self-signed certificate)", URL:  "www.example.com:443", Attempts: 5, TLSEnabled: true, TLSCAFile: "testdata/ca.pem"},
		checkup.TCPChecker{Name:  "Example (TCP SSL, validation disabled)", URL:  "www.example.com:8443", Attempts: 5, TLSEnabled: true, TLSSkipVerify: true},
		checkup.DNSChecker{Name:  "Example DNS test of ns.example.com:53 looking up host.example.com", URL:  "ns.example.com:53", Host: "host.example.com", Attempts: 5},
	},
	Storage: checkup.S3{
		AccessKeyID:     "<yours>",
		SecretAccessKey: "<yours>",
		Bucket:          "<yours>",
		Region:          "us-east-1",
		CheckExpiry:     24 * time.Hour * 7,
	},
}

This sample checks 2 endpoints (HTTP and HTTPS). Each check consists of 5 attempts so as to smooth out the final results a bit. We will store results on S3. Notice the CheckExpiry value. The checkup.S3 type is also checkup.Maintainer type, which means it can maintain itself and purge any status checks older than CheckExpiry. We chose 7 days.

Then, to run checks every 10 minutes:

c.CheckAndStoreEvery(10 * time.Minute)
select {}

CheckAndStoreEvery() returns a time.Ticker that you can stop, but in this case we just want it to run forever, so we block forever using an empty select.

Using Go to post status messages

Simply perform a check, add the message to the corresponding result, and then store it:

results, err := c.Check()
if err != nil {
	// handle err
}

results[0].Message = "We're investigating connectivity issues."

err = c.Storage.Store(results)
if err != nil {
	// handle err
}

Of course, real status messages should be as descriptive as possible. You can use HTML in them.

Other topics

Getting notified when there are problems

Uh oh, having some fires? πŸ”₯ You can create a type that implements checkup.Notifier. Checkup will invoke Notify() after every check, where you can evaluate the results and decide if and how you want to send a notification or trigger some event.

Other kinds of checks or storage providers

You can implement your own Checker and Storage types. If it's general enough, feel free to submit a pull request so others can use it too!

Building Locally

Requires Go v1.14 or newer. Building with the latest Go version is encouraged.

git clone [email protected]:sourcegraph/checkup.git
cd checkup
make

Building the SQLite3 enabled version is done with make build-sqlite3. PostgreSQL and MySQL are enabled by default.

Building a Docker image

If you would like to run checkup in a docker container, building it is done by running make docker. It will build the version without sql support. An SQL supported docker image is currently not provided, but there's a plan to do that in the future.

More Repositories

1

sourcegraph

Code AI platform with Code Search & Cody
Go
9,521
star
2

conc

Better structured concurrency for go
Go
6,764
star
3

thyme

Automatically track which applications you use and for how long.
Go
2,237
star
4

appdash

Application tracing system for Go, based on Google's Dapper.
Go
1,720
star
5

webloop

WebLoop: Scriptable, headless WebKit with a Go API. Like PhantomJS, but for Go.
Go
1,357
star
6

cody

AI that knows your entire codebase
TypeScript
1,247
star
7

go-langserver

Go language server to add Go support to editors and other tools that use the Language Server Protocol (LSP)
Go
1,163
star
8

srclib

srclib is a polyglot code analysis library, built for hackability. It consists of language analysis toolchains (currently for Go and Java, with Python, JavaScript, and Ruby in beta) with a common output format, and a CLI tool for running the analysis.
Go
944
star
9

doctree

First-class library documentation for every language (based on tree-sitter), with symbol search & more. Lightweight single binary, run locally or self-host. Surfaces usage examples via Sourcegraph.
Go
848
star
10

javascript-typescript-langserver

JavaScript and TypeScript code intelligence through the Language Server Protocol
TypeScript
793
star
11

sg.nvim

Experimental Sourcegraph + Cody plugin for Neovim
Lua
619
star
12

go-diff

Unified diff parser and printer for Go
Go
407
star
13

thesrc

Example of a 3-layer (frontend, API, datastore) Go web app (based on the code that powers https://sourcegraph.com)
Go
396
star
14

go-selenium

Selenium WebDriver client for Go
Go
364
star
15

go-webkit2

WebKit API bindings (WebKitGTK+ v2) for Go
Go
305
star
16

syntaxhighlight

Go package for syntax highlighting of code
Go
263
star
17

src-cli

Sourcegraph CLI
Go
261
star
18

zoekt

Fast trigram based code search
Go
229
star
19

scip

SCIP Code Intelligence Protocol
Rust
215
star
20

prototools

documentation generator & other tools for protobuf/gRPC
Go
162
star
21

jsonrpc2

Package jsonrpc2 provides a client and server implementation of JSON-RPC 2.0 (http://www.jsonrpc.org/specification)
Go
159
star
22

awesome-code-ai

A list of AI coding tools (assistants, completions, refactoring, etc.)
157
star
23

careers

Want to work at Sourcegraph?
132
star
24

lsif-go

Language Server Indexing Format (LSIF) generator for Go
Go
111
star
25

deploy-sourcegraph

Deploy Sourcegraph to a Kubernetes cluster for large-scale code search and intelligence
Shell
104
star
26

python-langserver

Language server which talks LSP via JSONRPC for Python.
Python
101
star
27

emacs-lsp

LSP support for Emacs
Emacs Lisp
101
star
28

apiproxy

apiproxy proxies HTTP/REST APIs with configurable cache timeouts, etc.
Go
96
star
29

syntect_server

HTTP code syntax highlighting server written in Rust.
Rust
89
star
30

handbook

πŸ“˜ The Sourcegraph handbook
TypeScript
87
star
31

about

Sourcegraph blog, feature announcements, and website (about.sourcegraph.com)
TypeScript
84
star
32

sourcegraph-vscode-DEPRECATED

*️⃣+ πŸ†š = ❀️
TypeScript
83
star
33

go-vcs

manipulate and inspect VCS repositories in Go
Go
77
star
34

llmsp

LLM-power language server protocol implementation.
Go
75
star
35

deploy-sourcegraph-docker

Sourcegraph with Docker Compose deployment reference
Shell
73
star
36

go-lsp

Go types for the messages used in the Language Server Protocol.
Go
71
star
37

scip-java

SCIP Code Intelligence Protocol (LSIF) generator for Java
Java
60
star
38

docsite

The documentation site used by Sourcegraph
Go
57
star
39

codenotify

Go
55
star
40

codeintellify

Adds code intelligence to code views on the web ✨
TypeScript
55
star
41

browser-extensions

Sourcegraph's browser extensions: MOVED. See https://docs.sourcegraph.com/integration/browser_extension.
TypeScript
49
star
42

go-ses

Amazon AWS Simple Email Service (SES) client for Go
Go
49
star
43

sourcegraph-extension-api

Sourcegraph extension API: use and build extensions that enhance reading and reviewing code in your existing tools. "The extension API you wish your code host had."
TypeScript
44
star
44

srclib-cpp

43
star
45

go-sourcegraph

Go
43
star
46

go-template-lint

Linter for Go text/template (and html/template) template files
Go
40
star
47

android-sdk-jars

HTML
40
star
48

scip-typescript

SCIP indexer for TypeScript and JavaScript
TypeScript
39
star
49

run

πŸƒβ€β™‚οΈ A new way to execute commands and manipulate command output in Go
Go
37
star
50

sourcegraph-jetbrains

Sourcegraph for JetBrains IDEs (IntelliJ)
Java
36
star
51

lsif-node

Language Server Indexing Format (LSIF) generator for JavaScript and TypeScript
TypeScript
36
star
52

codesearch.ai

codesearch.ai semantic code search engine
Go
35
star
53

sourcegraph-typescript

Provides code intelligence for TypeScript
TypeScript
34
star
54

lsif-py

Language Server Indexing Format (LSIF) generator for Python
Python
31
star
55

srclib-c

Makefile
30
star
56

emacs-cody

Sourcegraph Cody in Emacs
Emacs Lisp
29
star
57

srclib-go

Go toolchain for srclib
Go
29
star
58

s3cache

Amazon S3 storage interface for a Go cache
Go
29
star
59

pydep

a simple command line tool / package that prints the dependencies of a python project
Python
28
star
60

srclib-python

Python
28
star
61

lsp-adapter

lsp-adapter provides a proxy which adapts Sourcegraph LSP requests to vanilla LSP requests
Go
28
star
62

app

Issue tracker for the Sourcegraph app - a lightweight single-binary version of Sourcegraph for your local machine
27
star
63

sg

sg releases
27
star
64

code-intel-extensions

Provides precise code intelligence via LSIF and Language Servers, and fuzzy code intelligence using ctags and text search
TypeScript
26
star
65

scip-clang

C++
25
star
66

makex

makex is a "make" clone for Go that makes it easier to write build tools in Go. It lets you define tasks and dependencies in the familiar Makefile format, and unlike just shelling out to "make", it gives you programmatic access (in Go) to the progress and console output of your tasks.
Go
24
star
67

scip-python

SCIP indexer for Python
Python
23
star
68

codemod

A collection of codemods powered by TS-Morph and PostCSS
TypeScript
22
star
69

jsonx

Extended JSON parser and writer for Go
Go
21
star
70

srclib-csharp

placeholder for a srclib C# toolchain
C#
20
star
71

learn

Sourcegraph Learn: an educational hub to support all developers
TypeScript
19
star
72

lsif-jsonnet

Language Server Index Format (LSIF) generator for JSonnet
Go
19
star
73

vcsstore

vcsstore stores VCS repositories and makes them accessible via HTTP
Go
19
star
74

sourcegraph-sublime

Sourcegraph for Sublime Text 3
Python
18
star
75

sourcegraph-git-extras

A Sourcegraph extension that adds Git blame and other useful features to code views on Sourcegraph, GitHub, GitLab, etc.
TypeScript
18
star
76

xconf

xconf.io is a config file search engine built on the Sourcegraph (https://sourcegraph.com) API. It currently supports Dockerfiles.
Go
18
star
77

go-jsonschema

EXPERIMENTAL: A Go library for working with JSON Schema (draft-07): parsing schemas, generating Go types from a JSON Schema
Go
17
star
78

themes

Color themes for Sourcegraph and editors
Shell
17
star
79

talks

Talks given about Sourcegraph or by Sourcegraphers
Go
17
star
80

phabricator-extension

Get code intelligence on Phabricator
PHP
16
star
81

batch-change-examples

A collection of examples for Batch Changes
Python
16
star
82

httpfstream

httpstream provides HTTP handlers for simultaneous streaming uploads and downloads of objects, as well as persistence and a standalone server.
Go
16
star
83

sourcegraph-alfred

Sourcegraph workflow for Alfred
Python
15
star
84

gen-mocks

Go
14
star
85

sbt-sourcegraph

sbt plugin to upload LSIF indexes to Sourcegraph for precise code intelligence
Scala
13
star
86

go-vcsurl

Lenient VCS repository URL parsing library for Go
Go
13
star
87

helix-docker

Docker images for Perforce Helix
Dockerfile
13
star
88

srclib-javascript

JavaScript (node.js) toolchain for srclib
JavaScript
12
star
89

go-papertrail

Go API client for papertrail (https://papertrailapp.com), a hosted log management service.
Go
12
star
90

appmon

Appmon tracks API calls in Web applications that use Go.
Go
12
star
91

srclib-php

PHP toolchain for srclib (https://srclib.org) - WORK IN PROGRESS
PHP
12
star
92

yj

Convert YAML to JSON
Go
12
star
93

log

OpenTelemetry-compatible Zap logger for Sourcegraph
Go
11
star
94

scip-go

SCIP indexer for Golang
Go
11
star
95

annotate

Go package for applying multiple sets of annotations to a region of text
Go
11
star
96

codesearchguide.org

Everything you ever wanted to know about code search. (WIP, will be online soon!)
CSS
11
star
97

multicache

Package multicache provides a "fallback" cache implementation that short-circuits gets and writes/deletes to all underlying caches.
Go
11
star
98

cody.nvim

Experimental: Cody in Neovim.
Lua
10
star
99

lsif-test

Language Server Index Format Test Utilities
Go
10
star
100

sitemap

(DEPRECATED) Package sitemap generates sitemap.xml files based on the sitemaps.org protocol.
Go
10
star