Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Tech Stack

Every dependency was researched and validated. Here’s what we use and why.

Core

CrateVersionPurposeWhy This One
tokiolatestAsync runtimeIndustry standard, full features
ratatui0.30TUI framework19.1K stars, only mature option, Component Architecture
crosstermlatestTerminal backendratatui default, cross-platform
rusqlite0.39DatabaseBundled SQLite, zero external deps, ideal for CLI
refinerylatestDB migrationsClean integration with rusqlite

TUI Components

CratePurpose
rat-widgetForm widgets (text input, date, number, checkbox, tabs)
tui-textareaMulti-line text editing
tui-scrollviewScrollable content views
throbber-widgets-tuiLoading spinners for async operations
similarText diff for resume comparison

Networking & Scraping

CrateVersionPurposeWhy
reqwest0.13HTTP client412M downloads, rustls-tls
scraper0.26HTML parsingCSS selectors, built on html5ever
chromiumoxide0.9Headless browserCDP protocol, async, needed for Indeed

LLM Integration

CrateVersionPurposeWhy
rig-core0.33LLM framework6.6K stars, native Anthropic support, structured output, streaming

Why rig-core over raw HTTP?

  • Multi-provider support (Claude, GPT, Gemini) — switch models without code changes
  • Structured output with Serde — deserialize LLM responses directly into Rust structs
  • Tool calling support — for potential future agent workflows
  • Streaming responses — show LLM output in real-time in the TUI

Alternatives considered

AlternativeVerdict
Raw reqwest to Anthropic APIWorks but reinvents serialization, retry, streaming
anthropic-ai-sdk (37K downloads)Low adoption, uncertain maintenance
async-anthropic (32K downloads)Stale since May 2025
genai 0.6 betaStill in beta, less mature than rig

Error Handling

CrateLayerPurpose
thiserrorLibrary cratesCustom error types per crate
color-eyreBinary crateBeautiful error reports, terminal-aware

Key Decisions

rusqlite vs sqlx

  • bundled feature = SQLite compiled into binary, zero runtime deps
  • No compile-time query checking needed for this scale
  • Faster builds (no proc macros)
  • Note: rusqlite and sqlx cannot coexist in the same binary (libsqlite3-sys conflict)

ratatui vs cursive

  • Ecosystem: 2,800+ dependent crates vs cursive’s shrinking community
  • Control: immediate-mode rendering gives pixel-perfect layouts
  • Async: first-class tokio integration

chromiumoxide vs fantoccini

  • Direct CDP access (can intercept network, modify headers)
  • Async-native (tokio)
  • Better anti-detection capabilities than WebDriver-based tools