Source: https://seerepo.com/r/charmbracelet/crush/built
Markdown source: https://seerepo.com/r/charmbracelet/crush/built.md
Description: crush is a Go repo built with net/http. It stores its data in SQLite, signs people in with golang.org/x/oauth2, and uses AI through Model Context Protocol.

# What is crush built with?

crush is a Go repo built with net/http. It stores its data in SQLite, signs people in with golang.org/x/oauth2, uses AI through Model Context Protocol, measures its use with PostHog, makes its content with github.com/JohannesKaufmann/html-to-markdown, github.com/disintegration/imaging, and github.com/PuerkitoBio/goquery, validates its data with github.com/invopop/jsonschema, is tested with github.com/stretchr/testify, github.com/charmbracelet/x/exp/golden, and go.uber.org/goleak, deploys with gopkg.in/natefinch/lumberjack.v2, and uses github.com/ncruces/go-sqlite3, github.com/pressly/goose/v3, and MCP. It has 200,570 written lines, with 433 test files.

Read on November 8, 2026, at commit 8f1f029.

Repository: https://github.com/charmbracelet/crush

## Frontend

### Styles

- **[charm.land/lipgloss/v2](https://seerepo.com/uses/charmland-lipgloss-v2)**: 75 files

### Interface

- **charm.land/bubbletea/v2**: 70 files
- **charm.land/bubbles/v2**: 40 files
- **github.com/charmbracelet/ultraviolet**: 36 files
- **charm.land/glamour/v2**: 5 files
- **github.com/gen2brain/beeep**: 1 file

## Backend

### The base

- **[net/http](https://seerepo.com/uses/net-http)**

### Data

- **[SQLite](https://seerepo.com/uses/sqlite)**: 2 files · [internal/db/connect_modernc.go, line 10](https://github.com/charmbracelet/crush/blob/8f1f02951cabc30b82e497fd916ca434bad1e6f4/internal/db/connect_modernc.go#L10)
- **github.com/ncruces/go-sqlite3**: 1 file
- **github.com/pressly/goose/v3**: 1 file

### Sign-in

- **[golang.org/x/oauth2](https://seerepo.com/uses/golangorg-x-oauth2)**: 2 files

### AI

- **[Model Context Protocol](https://seerepo.com/uses/model-context-protocol)**

### Services

- **[MCP](https://seerepo.com/uses/mcp)**: 5 files · [internal/agent/tools/mcp/channel.go, line 16](https://github.com/charmbracelet/crush/blob/8f1f02951cabc30b82e497fd916ca434bad1e6f4/internal/agent/tools/mcp/channel.go#L16)
- **[PostHog](https://seerepo.com/uses/posthog)**: 1 file · [internal/event/event.go, line 13](https://github.com/charmbracelet/crush/blob/8f1f02951cabc30b82e497fd916ca434bad1e6f4/internal/event/event.go#L13)

## Support

### Content

- **github.com/JohannesKaufmann/html-to-markdown**: 2 files
- **github.com/disintegration/imaging**: 1 file
- **github.com/PuerkitoBio/goquery**: 1 file

### Validation

- **[github.com/invopop/jsonschema](https://seerepo.com/uses/githubcom-invopop-jsonschema)**: 2 files

### Testing

- **github.com/stretchr/testify**: 349 files
- **github.com/charmbracelet/x/exp/golden**: 2 files
- **go.uber.org/goleak**: 1 file

### Deploy

- **[gopkg.in/natefinch/lumberjack.v2](https://seerepo.com/uses/gopkgin-natefinch-lumberjackv2)**: 1 file

### Tools

- **github.com/spf13/cobra**: 12 files

### Other

- **github.com/charmbracelet/x/ansi**: 50 files
- **charm.land/fantasy**: 47 files
- **[Google](https://seerepo.com/uses/google)**: 12 files
- **mvdan.cc/sh/v3**: 11 files
- **github.com/charmbracelet/x/term**: 10 files
- **github.com/sahilm/fuzzy**: 9 files
- **golang.org/x/sys**: 9 files
- **github.com/pkg/browser**: 7 files
- **github.com/alecthomas/chroma/v2**: 6 files
- **github.com/rivo/uniseg**: 4 files
- **github.com/aymanbagabas/go-udiff**: 3 files
- **github.com/charmbracelet/colorprofile**: 3 files
- **github.com/tidwall/sjson**: 3 files
- **github.com/zeebo/xxh3**: 3 files
- **github.com/creack/pty**: 2 files
- **github.com/Microsoft/go-winio**: 2 files
- **github.com/tidwall/gjson**: 2 files
- **golang.org/x/net**: 2 files
- **golang.org/x/sync**: 2 files
- **charm.land/log/v2**: 1 file
- **github.com/bmatcuk/doublestar/v4**: 1 file
- **github.com/charlievieth/fastwalk**: 1 file
- **github.com/charmbracelet/x/editor**: 1 file
- **github.com/charmbracelet/x/exp/ordered**: 1 file
- **github.com/clipperhouse/displaywidth**: 1 file
- **github.com/clipperhouse/uax29/v2**: 1 file
- **github.com/denisbrodbeck/machineid**: 1 file
- **github.com/dustin/go-humanize**: 1 file
- **github.com/go-git/go-git/v5**: 1 file
- **github.com/itchyny/gojq**: 1 file
- **github.com/joho/godotenv**: 1 file
- **github.com/lucasb-eyer/go-colorful**: 1 file
- **github.com/MakeNowJust/heredoc**: 1 file
- **github.com/mattn/go-isatty**: 1 file
- **github.com/nxadm/tail**: 1 file
- **golang.org/x/text**: 1 file
- **gopkg.in/yaml.v3**: 1 file
- **mvdan.cc/sh/x**: 1 file

## Other repos with a similar stack

- [infiniflow/ragflow](https://seerepo.com/r/infiniflow/ragflow/built): net/http, MCP, golang.org/x/oauth2, Model Context Protocol, github.com/JohannesKaufmann/html-to-markdown, github.com/PuerkitoBio/goquery, gopkg.in/natefinch/lumberjack.v2 · [Compare](https://seerepo.com/compare/charmbracelet/crush/vs/infiniflow/ragflow)
- [alibaba/open-code-review](https://seerepo.com/r/alibaba/open-code-review/built): net/http, MCP, charm.land/lipgloss/v2, charm.land/bubbletea/v2, charm.land/bubbles/v2, Model Context Protocol · [Compare](https://seerepo.com/compare/alibaba/open-code-review/vs/charmbracelet/crush)
- [siyuan-note/siyuan](https://seerepo.com/r/siyuan-note/siyuan/built): SQLite, MCP, golang.org/x/oauth2, Model Context Protocol, github.com/disintegration/imaging, github.com/PuerkitoBio/goquery · [Compare](https://seerepo.com/compare/charmbracelet/crush/vs/siyuan-note/siyuan)
- [AlistGo/alist](https://seerepo.com/r/AlistGo/alist/built): net/http, SQLite, MCP, golang.org/x/oauth2, github.com/disintegration/imaging · [Compare](https://seerepo.com/compare/AlistGo/alist/vs/charmbracelet/crush)
- [mudler/LocalAI](https://seerepo.com/r/mudler/LocalAI/built): net/http, SQLite, MCP, golang.org/x/oauth2, Model Context Protocol · [Compare](https://seerepo.com/compare/charmbracelet/crush/vs/mudler/LocalAI)
- [cli/cli](https://seerepo.com/r/cli/cli/built): charm.land/lipgloss/v2, charm.land/bubbletea/v2, charm.land/bubbles/v2, charm.land/glamour/v2 · [Compare](https://seerepo.com/compare/charmbracelet/crush/vs/cli/cli)

## Frequently asked questions

### What language is crush written in?

crush is written in Go, with 200,570 written lines.

### What framework does crush use?

crush is built with net/http.

### What database does crush use?

crush stores its data in SQLite.

The proof: [internal/db/connect_modernc.go, line 10](https://github.com/charmbracelet/crush/blob/8f1f02951cabc30b82e497fd916ca434bad1e6f4/internal/db/connect_modernc.go#L10)

### What does crush sign people in with?

crush signs people in with golang.org/x/oauth2.

### Does crush use AI?

Yes. crush uses AI through Model Context Protocol.

### What services does crush use?

crush measures its use with PostHog and uses github.com/ncruces/go-sqlite3, github.com/pressly/goose/v3, and MCP.

The proof: [internal/event/event.go, line 13](https://github.com/charmbracelet/crush/blob/8f1f02951cabc30b82e497fd916ca434bad1e6f4/internal/event/event.go#L13)

### Does crush have tests?

Yes. crush has 433 test files and is tested with github.com/stretchr/testify, github.com/charmbracelet/x/exp/golden, and go.uber.org/goleak.

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

The ones that share most of its stack: infiniflow/ragflow, alibaba/open-code-review, and siyuan-note/siyuan.

## 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.
