Source: https://seerepo.com/r/juanfont/headscale/built
Markdown source: https://seerepo.com/r/juanfont/headscale/built.md
Description: headscale is a Go repo built with chi. It stores its data in HashiCorp and Postgres and reaches it with gorm.io/gorm.

# What is headscale built with?

headscale is a Go repo built with chi. It stores its data in HashiCorp and Postgres, reaches it with gorm.io/gorm, signs people in with github.com/coreos/go-oidc/v3 and golang.org/x/oauth2, makes its content with github.com/tailscale/hujson, is tested with rapid, github.com/stretchr/testify, Google, Ory, and github.com/oauth2-proxy/mockoidc, deploys with github.com/rs/zerolog, Prometheus, Docker, github.com/prometheus/common, github.com/libdns/cloudflare, and 1 more, and uses github.com/glebarez/sqlite and SQLite. It has 222,641 written lines, with 257 test files.

Read on November 6, 2026, at commit 0bdc332.

Repository: https://github.com/juanfont/headscale

## Backend

### The base

- **[chi](https://seerepo.com/uses/chi)**: 5 files

### Data

- **HashiCorp**: 2 files
- **[Postgres](https://seerepo.com/uses/postgres)**: 2 files · [hscontrol/db/db.go, line 19](https://github.com/juanfont/headscale/blob/0bdc332886b3692b88e0c3623f37c2c07a00d262/hscontrol/db/db.go#L19)
- **github.com/glebarez/sqlite**: 1 file
- **[SQLite](https://seerepo.com/uses/sqlite)**: 1 file · [go.mod, line 84](https://github.com/juanfont/headscale/blob/0bdc332886b3692b88e0c3623f37c2c07a00d262/go.mod#L84)

### Data access

- **gorm.io/gorm**: 17 files

### Sign-in

- **github.com/coreos/go-oidc/v3**: 2 files
- **[golang.org/x/oauth2](https://seerepo.com/uses/golangorg-x-oauth2)**: 1 file

## Support

### Content

- **github.com/tailscale/hujson**: 3 files

### Testing

- **rapid**
- **github.com/stretchr/testify**: 200 files
- **[Google](https://seerepo.com/uses/google)**: 41 files
- **Ory**: 18 files
- **github.com/oauth2-proxy/mockoidc**: 7 files

### Deploy

- **github.com/rs/zerolog**: 44 files
- **[Prometheus](https://seerepo.com/uses/prometheus)**: 5 files
- **[Docker](https://seerepo.com/uses/docker)**: 3 files
- **github.com/prometheus/common**: 2 files
- **github.com/libdns/cloudflare**: 1 file
- **[go.uber.org/zap](https://seerepo.com/uses/gouberorg-zap)**: 1 file

### Tools

- **github.com/spf13/cobra**: 17 files
- **golang.org/x/mod**: 3 files
- **github.com/davecgh/go-spew**: 1 file
- **github.com/pkg/profile**: 1 file

### Other

- **Tailscale**: 69 files
- **go4.org/netipx**: 14 files
- **github.com/cenkalti/backoff/v5**: 7 files
- **github.com/spf13/viper**: 6 files
- **github.com/miekg/dns**: 3 files
- **golang.org/x/exp**: 3 files
- **golang.org/x/sync**: 3 files
- **gopkg.in/yaml.v3**: 3 files
- **github.com/caddyserver/certmagic**: 2 files
- **github.com/go-json-experiment/json**: 2 files
- **github.com/libdns/libdns**: 2 files
- **github.com/mholt/acmez/v3**: 2 files
- **github.com/coder/websocket**: 1 file
- **github.com/fsnotify/fsnotify**: 1 file
- **github.com/go-viper/mapstructure/v2**: 1 file
- **github.com/samber/lo**: 1 file
- **github.com/sasha-s/go-deadlock**: 1 file
- **golang.org/x/crypto**: 1 file

## Other repos with a similar stack

- [mudler/LocalAI](https://seerepo.com/r/mudler/LocalAI/built): Postgres, github.com/glebarez/sqlite, SQLite, gorm.io/gorm, github.com/coreos/go-oidc/v3, golang.org/x/oauth2, Prometheus, Docker · [Compare](https://seerepo.com/compare/juanfont/headscale/vs/mudler/LocalAI)
- [photoprism/photoprism](https://seerepo.com/r/photoprism/photoprism/built): chi, Postgres, SQLite, gorm.io/gorm, golang.org/x/oauth2, Prometheus, github.com/prometheus/common · [Compare](https://seerepo.com/compare/juanfont/headscale/vs/photoprism/photoprism)
- [QuantumNous/new-api](https://seerepo.com/r/QuantumNous/new-api/built): Postgres, github.com/glebarez/sqlite, gorm.io/gorm, github.com/coreos/go-oidc/v3, golang.org/x/oauth2, Prometheus · [Compare](https://seerepo.com/compare/juanfont/headscale/vs/QuantumNous/new-api)
- [go-gitea/gitea](https://seerepo.com/r/go-gitea/gitea/built): chi, Postgres, SQLite, golang.org/x/oauth2, Prometheus · [Compare](https://seerepo.com/compare/go-gitea/gitea/vs/juanfont/headscale)
- [pingcap/tidb](https://seerepo.com/r/pingcap/tidb/built): gorm.io/gorm, golang.org/x/oauth2, Prometheus, github.com/prometheus/common, go.uber.org/zap · [Compare](https://seerepo.com/compare/juanfont/headscale/vs/pingcap/tidb)
- [fatedier/frp](https://seerepo.com/r/fatedier/frp/built): github.com/coreos/go-oidc/v3, golang.org/x/oauth2, Prometheus, github.com/prometheus/common · [Compare](https://seerepo.com/compare/fatedier/frp/vs/juanfont/headscale)

## Frequently asked questions

### What language is headscale written in?

headscale is written in Go, with 222,641 written lines.

### What framework does headscale use?

headscale is built with chi.

### What database does headscale use?

headscale stores its data in HashiCorp and Postgres and reaches it with gorm.io/gorm.

### What does headscale sign people in with?

headscale signs people in with github.com/coreos/go-oidc/v3 and golang.org/x/oauth2.

### What services does headscale use?

headscale uses github.com/glebarez/sqlite and SQLite.

### Does headscale have tests?

Yes. headscale has 257 test files and is tested with rapid, github.com/stretchr/testify, Google, Ory, and github.com/oauth2-proxy/mockoidc.

### Which repos have a stack like headscale's?

The ones that share most of its stack: mudler/LocalAI, photoprism/photoprism, and QuantumNous/new-api.

## What is your repo built with?

Any public repo, with no account: https://seerepo.com/r/owner/repo/built, with the owner and name it has on GitHub.
