Source: https://seerepo.com/r/Automattic/harper/built
Markdown source: https://seerepo.com/r/Automattic/harper/built.md
Description: harper is a Rust repo built with Tokio, SvelteKit, Svelte, Tauri, @tauri-apps/api, and 4 more. It stores its data in lru.

# What is harper built with?

harper is a Rust repo built with Tokio, SvelteKit, Svelte, Tauri, @tauri-apps/api, and 4 more. It stores its data in lru, reaches it with Drizzle and drizzle-zod, measures its use with PostHog, makes its content with pulldown-cmark, zip, ammonia, and marked, is tested with libfuzzer-sys, playwright, Vitest, @vscode/test-electron, and Jasmine, deploys with Fastlane, tracing, tracing-subscriber, and tracing-wasm, and uses cached and lru-cache. It has 180,779 written lines, with 112 test files.

Read on November 6, 2026, at commit d52aeac.

Repository: https://github.com/Automattic/harper

## Backend (/)

### Data

- **cached**
- **[lru](https://seerepo.com/uses/lru)**: 4 files

## Support (/)

### The base

- **[Tokio](https://seerepo.com/uses/tokio)**: 4 files

### Content

- **[pulldown-cmark](https://seerepo.com/uses/pulldown-cmark)**: 2 files
- **[zip](https://seerepo.com/uses/zip)**: 2 files
- **ammonia**: 1 file

### Testing

- **libfuzzer-sys**

### Deploy

- **Fastlane**
- **[tracing](https://seerepo.com/uses/tracing)**: 3 files
- **[tracing-subscriber](https://seerepo.com/uses/tracing-subscriber)**: 1 file
- **tracing-wasm**: 1 file

### Tools

- **is-macro**: 10 files
- **tree-sitter**: 9 files
- **tower-lsp-server**: 7 files
- **clap**: 4 files
- **paste**: 4 files
- **Typst**: 3 files
- **clap_complete**: 1 file
- **tree-sitter-bash**: 1 file
- **tree-sitter-c**: 1 file
- **tree-sitter-c-sharp**: 1 file
- **tree-sitter-cmake**: 1 file
- **tree-sitter-cpp**: 1 file
- **tree-sitter-elixir**: 1 file
- **tree-sitter-go**: 1 file
- **tree-sitter-groovy**: 1 file
- **tree-sitter-haskell**: 1 file
- **tree-sitter-html**: 1 file
- **tree-sitter-java**: 1 file
- **tree-sitter-javascript**: 1 file
- **tree-sitter-kotlin-ng**: 1 file
- **tree-sitter-lua**: 1 file
- **tree-sitter-nix**: 1 file
- **tree-sitter-php**: 1 file
- **tree-sitter-powershell**: 1 file
- **tree-sitter-python**: 1 file
- **tree-sitter-r**: 1 file
- **tree-sitter-ruby**: 1 file
- **tree-sitter-rust**: 1 file
- **tree-sitter-scala**: 1 file
- **tree-sitter-solidity**: 1 file
- **tree-sitter-swift**: 1 file
- **tree-sitter-toml-ng**: 1 file
- **tree-sitter-typescript**: 1 file
- **tree-sitter-zig**: 1 file

### Other

- **getrandom**
- **once_cell**
- **serde**: 44 files
- **hashbrown**: 36 files
- **itertools**: 30 files
- **serde_json**: 20 files
- **anyhow**: 10 files
- **smallvec**: 7 files
- **strum**: 6 files
- **strum_macros**: 6 files
- **foldhash**: 4 files
- **rand**: 4 files
- **thiserror**: 4 files
- **ariadne**: 3 files
- **enum_dispatch**: 3 files
- **rayon**: 3 files
- **bitflags**: 2 files
- **dirs**: 2 files
- **indexmap**: 2 files
- **ordered-float**: 2 files
- **wasm-bindgen**: 2 files
- **boxcar**: 1 file
- **chrono**: 1 file
- **console_error_panic_hook**: 1 file
- **fst**: 1 file
- **futures**: 1 file
- **globset**: 1 file
- **levenshtein_automata**: 1 file
- **open**: 1 file
- **regex**: 1 file
- **ruzstd**: 1 file
- **serde-wasm-bindgen**: 1 file
- **unicode-script**: 1 file
- **unicode-width**: 1 file
- **uuid**: 1 file

## Frontend (harper-desktop)

### The base

- **[SvelteKit](https://seerepo.com/uses/sveltekit)**: [in packages/web/package.json](https://github.com/Automattic/harper/blob/d52aeac0a6de1cdb030b231705ab7e7e4e12e197/packages/web/package.json)
- **[Svelte](https://seerepo.com/uses/svelte)**: 11 files
- **[Tauri](https://seerepo.com/uses/tauri)**: 7 files
- **[@tauri-apps/api](https://seerepo.com/uses/tauri-apps-api)**: 3 files

### Styles

- **[Tailwind CSS](https://seerepo.com/uses/tailwind-css)**

### Interface

- **[winit](https://seerepo.com/uses/winit)**: 3 files
- **[core-graphics](https://seerepo.com/uses/core-graphics)**: 2 files
- **egui-wgpu**: 2 files
- **egui-winit**: 1 file
- **uiautomation**: 1 file

## Backend (harper-desktop)

### Data

- **cached**: 3 files

## Support (harper-desktop)

### The base

- **[Tokio](https://seerepo.com/uses/tokio)**: 11 files
- **egui**: 10 files
- **[objc2-app-kit](https://seerepo.com/uses/objc2-app-kit)**: 3 files
- **[objc2-foundation](https://seerepo.com/uses/objc2-foundation)**: 2 files

### Deploy

- **[tracing](https://seerepo.com/uses/tracing)**: 4 files
- **[tracing-subscriber](https://seerepo.com/uses/tracing-subscriber)**: 1 file

### Tools

- **clap**: 2 files
- **is-macro**: 1 file

### Other

- **serde_json**: 8 files
- **accessibility-sys**: 7 files
- **serde**: 7 files
- **accessibility**: 6 files
- **core-foundation**: 6 files
- **tauri-apps**: 3 files
- **thiserror**: 3 files
- **fastrand**: 2 files
- **tauri-plugin-opener**: 2 files
- **tauri-plugin-os**: 2 files
- **tauri-plugin-updater**: 2 files
- **windows**: 2 files
- **base64**: 1 file
- **dirs**: 1 file
- **objc2**: 1 file
- **pollster**: 1 file
- **reqwest**: 1 file
- **send_wrapper**: 1 file
- **tauri-plugin-autostart**: 1 file

## Frontend (packages/chrome-plugin)

### The base

- **[Svelte](https://seerepo.com/uses/svelte)**: 4 files

### Styles

- **[Tailwind CSS](https://seerepo.com/uses/tailwind-css)**

### Icons

- **@fortawesome/free-solid-svg-icons**: 2 files

## Backend (packages/chrome-plugin)

### Data

- **[lru-cache](https://seerepo.com/uses/lru-cache)**: 1 file

## Support (packages/chrome-plugin)

### Testing

- **playwright**: 17 files

### Tools

- **@crxjs/vite-plugin**: 1 file
- **gulp**: 1 file
- **gulp-zip**: 1 file

### Other

- **Lodash**: 1 file

## Frontend (packages/components)

### The base

- **[Svelte](https://seerepo.com/uses/svelte)**: 11 files

### Styles

- **[Tailwind CSS](https://seerepo.com/uses/tailwind-css)**

## Frontend (packages/harper-editor)

### The base

- **[Svelte](https://seerepo.com/uses/svelte)**: 4 files

### Styles

- **[Tailwind CSS](https://seerepo.com/uses/tailwind-css)**

### Interface

- **quill**: 1 file

## Support (packages/harper.js)

### Content

- **[marked](https://seerepo.com/uses/marked)**: 1 file

### Testing

- **Vitest**: 5 files

### Other

- **fflate**: 1 file
- **p-memoize**: 1 file

## Frontend (packages/lint-framework)

### Icons

- **[Font Awesome](https://seerepo.com/uses/font-awesome)**: 1 file

## Support (packages/lint-framework)

### Tools

- **type-fest**: 1 file

### Other

- **colorjs.io**: 1 file

## Frontend (packages/obsidian-plugin)

### Interface

- **[CodeMirror](https://seerepo.com/uses/codemirror)**: 4 files

## Support (packages/obsidian-plugin)

### Testing

- **Vitest**: 4 files

### Tools

- **obsidian**: 4 files

### Other

- **crelt**: 1 file
- **Lodash**: 1 file
- **minimatch**: 1 file

## Support (packages/vscode-plugin)

### Testing

- **@vscode/test-electron**: 1 file
- **Jasmine**: 1 file

### Tools

- **esbuild**: 1 file
- **vscode-languageclient**: 1 file

## Frontend (packages/web)

### The base

- **[Svelte](https://seerepo.com/uses/svelte)**: 19 files
- **[SvelteKit](https://seerepo.com/uses/sveltekit)**: 13 files · [in packages/web/package.json](https://github.com/Automattic/harper/blob/d52aeac0a6de1cdb030b231705ab7e7e4e12e197/packages/web/package.json)

### Styles

- **[Tailwind CSS](https://seerepo.com/uses/tailwind-css)**
- **@docsearch/css**: 1 file

### Interface

- **[Chart.js](https://seerepo.com/uses/chartjs)**: 2 files
- **@docsearch/js**: 1 file
- **brace**: 1 file
- **typed.js**: 1 file

## Backend (packages/web)

### Data access

- **[Drizzle](https://seerepo.com/uses/drizzle)**: 7 files
- **drizzle-zod**: 4 files

### Services

- **[PostHog](https://seerepo.com/uses/posthog)**: 1 file · [packages/web/src/routes/+layout.svelte, line 5](https://github.com/Automattic/harper/blob/d52aeac0a6de1cdb030b231705ab7e7e4e12e197/packages/web/src/routes/+layout.svelte#L5)

## Support (packages/web)

### Other

- **detect-browser**: 1 file

## Frontend (packages/wordpress-plugin)

### The base

- **[React](https://seerepo.com/uses/react)**: 12 files

## Support (packages/wordpress-plugin)

### Other

- **Lodash**: 1 file

## Other repos with a similar stack

- [hoppscotch/hoppscotch](https://seerepo.com/r/hoppscotch/hoppscotch/built): lru, Tokio, Tauri, @tauri-apps/api, PostHog, zip, tracing, tracing-subscriber, Tailwind CSS, CodeMirror · [Compare](https://seerepo.com/compare/Automattic/harper/vs/hoppscotch/hoppscotch)
- [janhq/jan](https://seerepo.com/r/janhq/jan/built): Tokio, Tauri, @tauri-apps/api, objc2-app-kit, objc2-foundation, PostHog, React, pulldown-cmark, zip, Tailwind CSS · [Compare](https://seerepo.com/compare/Automattic/harper/vs/janhq/jan)
- [tinyhumansai/openhuman](https://seerepo.com/r/tinyhumansai/openhuman/built): Tokio, Tauri, @tauri-apps/api, objc2-app-kit, objc2-foundation, React, zip, tracing, tracing-subscriber, Tailwind CSS · [Compare](https://seerepo.com/compare/Automattic/harper/vs/tinyhumansai/openhuman)
- [farion1231/cc-switch](https://seerepo.com/r/farion1231/cc-switch/built): Tokio, Tauri, @tauri-apps/api, objc2-app-kit, objc2-foundation, React, zip, Tailwind CSS, CodeMirror · [Compare](https://seerepo.com/compare/Automattic/harper/vs/farion1231/cc-switch)
- [NousResearch/hermes-agent](https://seerepo.com/r/NousResearch/hermes-agent/built): Tokio, Tauri, @tauri-apps/api, React, tracing, tracing-subscriber, Tailwind CSS, CodeMirror · [Compare](https://seerepo.com/compare/Automattic/harper/vs/NousResearch/hermes-agent)
- [clash-verge-rev/clash-verge-rev](https://seerepo.com/r/clash-verge-rev/clash-verge-rev/built): Tokio, Tauri, @tauri-apps/api, objc2-app-kit, objc2-foundation, React, zip, tracing · [Compare](https://seerepo.com/compare/Automattic/harper/vs/clash-verge-rev/clash-verge-rev)

## Frequently asked questions

### What language is harper written in?

harper is written in Rust, with 180,779 written lines.

### What framework does harper use?

harper is built with Tokio, SvelteKit, Svelte, Tauri, @tauri-apps/api, egui, objc2-app-kit, objc2-foundation, and React.

### What database does harper use?

harper stores its data in lru and reaches it with Drizzle and drizzle-zod.

### What services does harper use?

harper measures its use with PostHog and uses cached and lru-cache.

The proof: [packages/web/src/routes/+layout.svelte, line 5](https://github.com/Automattic/harper/blob/d52aeac0a6de1cdb030b231705ab7e7e4e12e197/packages/web/src/routes/+layout.svelte#L5)

### Does harper have tests?

Yes. harper has 112 test files and is tested with libfuzzer-sys, playwright, Vitest, @vscode/test-electron, and Jasmine.

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

The ones that share most of its stack: hoppscotch/hoppscotch, janhq/jan, and tinyhumansai/openhuman.

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