Application Launcher — Tauri v2 + React + Rust with vector search
This repository has been archived on 2026-06-08. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
  • Rust 78.6%
  • TypeScript 17.2%
  • CSS 1.8%
  • JavaScript 1.6%
  • Shell 0.8%
Find a file
beasty 1f6d2f52be Remove pre-push Playwright test hook
- Delete the `pre-push` Lefthook command that ran `npx playwright test`
- Keep Rust tests in `pre-commit` unchanged
2026-03-07 19:50:21 +01:00
.claude feat: add Claude Code automations — hooks, skills, agent, pre-push (#49) 2026-02-05 16:40:44 +01:00
.codex/skills chore: codex parity (agents/skills/mcp) 2026-02-16 19:36:05 +01:00
docs/screenshots docs: rewrite README with badges, screenshots, corrected facts, and full CLI docs (#46) 2026-02-05 13:40:38 +01:00
e2e feat: auto-refresh desktop app cache 2026-03-07 19:02:13 +01:00
scripts fix: address code review findings (#59) 2026-03-07 19:27:54 +01:00
src feat: auto-refresh desktop app cache 2026-03-07 19:02:13 +01:00
src-tauri fix: address code review findings (#59) 2026-03-07 19:27:54 +01:00
.gitignore feat: add legacy .doc file extraction via LibreOffice headless (#3) 2026-01-30 22:57:40 +01:00
AGENTS.md fix: address code review findings (#59) 2026-03-07 19:27:54 +01:00
CLAUDE.md fix: address code review findings (#59) 2026-03-07 19:27:54 +01:00
favicon.svg Add Burrow favicon SVG icon 2026-03-07 19:36:44 +01:00
index.html feat: scaffold Burrow launcher with Tauri v2 + React + Rust 2026-01-30 15:34:38 +01:00
lefthook.yml Remove pre-push Playwright test hook 2026-03-07 19:50:21 +01:00
MODIFIERS.md feat: add modifier key actions for all result categories (#4) 2026-01-30 22:57:46 +01:00
package.json fix: address code review findings (#59) 2026-03-07 19:27:54 +01:00
playwright.config.ts fix: address code review findings (#59) 2026-03-07 19:27:54 +01:00
pnpm-lock.yaml feat: add Codex JSONL output window with structured rendering (#57) 2026-03-06 18:14:24 +01:00
README.md fix: address code review findings (#59) 2026-03-07 19:27:54 +01:00
tsconfig.json feat: scaffold Burrow launcher with Tauri v2 + React + Rust 2026-01-30 15:34:38 +01:00
tsconfig.node.json feat: scaffold Burrow launcher with Tauri v2 + React + Rust 2026-01-30 15:34:38 +01:00
vite.config.ts feat: add toggle CLI command and improve install script (#39) 2026-02-04 18:16:36 +01:00
worktrees.json fix: remove examples symlink, use cp in worktrees 2026-01-31 04:01:31 +01:00

Burrow

A fast, keyboard-driven application launcher for Linux

Version Tauri v2 Rust Platform License Stars

One input bar. Apps, files, AI chat, SSH, passwords, math — all at your fingertips.

Burrow launcher showing frecency-ranked apps

Features

  • App search — Fuzzy-match installed desktop applications, ranked by frecency (frequency + recency)
  • File search — Find files by name across configured directories
  • Content search — Semantic search over file contents using Ollama embeddings and cosine similarity
  • SSH hosts — Search and connect to hosts from ~/.ssh/config
  • 1Password — Search and auto-type or copy credentials via 1Password CLI
  • Calculator — Inline math evaluation with copy support
  • AI chat — Conversational AI with optional RAG context from indexed files (Ollama or OpenRouter)
  • Launch history — Frecency-ranked recent launches for instant access
  • Special commands — Extensible #-prefixed commands (e.g. #cowork)
  • Modifier keys — Shift+Enter and Ctrl+Enter trigger alternate actions per category (see MODIFIERS.md)
Fuzzy app search File search with space prefix
Fuzzy app search File search

Quick Start

Requirements

Install

git clone https://github.com/beastyrabbit/burrow.git
cd burrow
pnpm install

# Development (hot-reload)
pnpm tauri dev

# Production build
pnpm tauri build

The production binary is output to src-tauri/target/release/burrow.

Usage

Query Prefixes

Type a prefix to route your query to a specific provider:

Prefix Provider Example
(none) App search (or math if expression detected) firefox, 2+2
(space) File search notes.md
* (space + asterisk) Content/vector search *rust lifetime
! 1Password !github
ssh SSH hosts ssh prod
# Special commands #cowork
? AI chat ?explain this error

An empty query shows your most frequently launched apps.

Keyboard Shortcuts

Key Action
Enter Execute default action
Shift+Enter Alternate action (copy password, open dir in terminal, copy math result)
Ctrl+Enter Secondary action (copy username, open in VS Code, copy SSH command)
Arrow Up/Down Navigate results
Escape Clear search / close

See MODIFIERS.md for the full modifier key action table per category.

CLI

Burrow includes a full CLI for managing the launcher without the GUI.

burrow                        Launch the GUI
burrow toggle                 Toggle window visibility

Indexing

burrow reindex [-q]           Full reindex of all configured directories
burrow update [-q]            Incremental update (only new/modified files)
burrow index <file> [-f]      Index a single file (--force to re-index)
burrow progress               Show current indexer progress

System

burrow health [--json]        Check system health (Ollama, Vector DB, API key)
burrow stats [--json]         Show statistics (indexed files, launch count)
burrow config [--path]        Open config file in editor (--path to print path)

Daemon

burrow daemon                 Start the background daemon
burrow daemon start [-b]      Start daemon (--background to daemonize)
burrow daemon stop            Stop a running daemon
burrow daemon status          Check daemon status

AI Chat

burrow chat "query"           Chat with AI (no document context)
burrow chat-docs "query"      Chat with AI using document context (RAG)
burrow chat --small "query"   Use small/fast model instead of large
burrow chat-docs --small "q"  Use small model with RAG context

Models

burrow models list            Show current model configuration
burrow models set             Interactive model configuration
burrow models set chat_large  Configure a specific model type

Model types: embedding, chat, chat_large — Providers: ollama, openrouter

History

burrow history                List recent launch history
burrow history list           List recent launch history
burrow history clear          Clear all launch history
burrow history remove <id>    Remove specific item from history

Configuration

Config file: ~/.config/burrow/config.toml — auto-created with defaults on first run.

Environment variables (BURROW_*) override config file values. For example, BURROW_OLLAMA_URL overrides ollama.url.

Models

[models.embedding]
name = "qwen3-embedding:8b"
provider = "ollama"

[models.chat]
name = "gpt-oss:20b"
provider = "ollama"

[models.chat_large]
name = "gpt-oss:120b"
provider = "ollama"

All Defaults

Section Key Default
ollama url http://localhost:11434
ollama timeout_secs 30
ollama chat_timeout_secs 120
models.embedding name / provider qwen3-embedding:8b / ollama
models.chat name / provider gpt-oss:20b / ollama
models.chat_large name / provider gpt-oss:120b / ollama
chat rag_enabled true
chat max_context_snippets 5
vector_search enabled true
vector_search top_k 10
vector_search min_score 0.3
vector_search max_file_size_bytes 1000000
vector_search index_mode all
vector_search index_dirs ~/Documents, ~/Projects, ~/Downloads
indexer interval_hours 24
indexer file_extensions txt, md, rs, ts, tsx, js, py, toml, yaml, yml, json, sh, css, html, pdf, doc, docx, xlsx, xls, pptx, odt, ods, odp, csv, rtf
indexer max_content_chars 4096
history max_results 6
search max_results 10
search debounce_ms 80
openrouter api_key "" (empty)

Architecture

Burrow is a Tauri v2 app with a React + TypeScript frontend and a Rust backend. The frontend communicates with the backend through Tauri's IPC bridge (or an axum HTTP bridge on 127.0.0.1:3001 during development, enabling browser-based testing with Playwright).

Input routing is prefix-based — the router inspects the first characters of a query and dispatches to the appropriate provider. Launch history is stored in SQLite (~/.local/share/burrow/history.db). Semantic content search uses Ollama to generate embeddings, stored as BLOBs in a separate SQLite database (~/.local/share/burrow/vectors.db) with brute-force cosine similarity — no HNSW index needed at the expected scale.

Development

# Full Tauri app with hot-reload (backend + frontend)
pnpm tauri dev

# Frontend dev server only (served through Portless; backend bridge still listens on 127.0.0.1:3001)
pnpm dev

# Print the current worktree-aware dev URL
pnpm dev:url

# Bypass Portless and use raw Vite on http://localhost:1420
PORTLESS=0 pnpm dev

pnpm dev and pnpm tauri dev use worktree-aware Portless hostnames by default. The main checkout serves at http://burrow.localhost:1355; linked worktrees use http://<branch>.burrow.localhost:1355.

Testing

# Rust unit tests
cd src-tauri && cargo test

# Playwright e2e tests (starts test-server + pnpm dev automatically if needed)
npx playwright test

Project Structure

src/                         React frontend
  App.tsx                    Main UI component
  types.ts                   Shared types
  mock-tauri.ts              HTTP bridge client for browser/Playwright testing
src-tauri/src/               Rust backend
  cli/                       CLI (clap) — subcommands, output formatting
  commands/                  Search providers (apps, files, ssh, onepass, vectors, chat, etc.)
  actions/                   Modifier key action dispatch
  router.rs                  Query classification and search dispatch
  config.rs                  TOML configuration with env var overrides
  indexer.rs                 Background file indexer
  ollama.rs                  Ollama embedding client + cosine similarity
  chat.rs                    AI chat (Ollama / OpenRouter) with RAG context
  text_extract.rs            Document text extraction (PDF, DOCX, XLSX, etc.)
  dev_server.rs              Axum HTTP bridge for dev/testing (debug builds only)
  icons.rs                   Freedesktop icon → base64 data URI resolution
e2e/                         Playwright e2e tests

Data Storage

File Purpose
~/.config/burrow/config.toml User configuration
~/.local/share/burrow/history.db Launch history (SQLite)
~/.local/share/burrow/vectors.db File content embeddings (SQLite)