claude-memory/graph/decisions/sba-scout-python-to-rust-tui-migration-recommended-stack-and-2cf305.md

1.7 KiB

id type title tags importance confidence created updated
2cf3058c-85f4-481a-bbe7-17ebb9b9e908 decision SBA Scout Python-to-Rust TUI migration: recommended stack and approach
sba-scout
rust
migration
ratatui
research
decision
tui
0.7 0.8 2026-02-23T18:05:05.367031+00:00 2026-02-23T18:05:05.367031+00:00

SBA Scout Python-to-Rust TUI Migration Research

Context

SBA Scout is a Python TUI app using Textual + SQLAlchemy + httpx + pydantic-settings. Research was conducted to evaluate converting it to Rust.

  • UI: ratatui 0.30 + crossterm
  • Async runtime: tokio
  • Database: sqlx 0.8.6 (sqlite, async)
  • HTTP client: reqwest 0.12.28
  • Config: figment 0.10.19
  • Serialization: serde + toml
  • Math: pure f64 (no external crate needed)
  • Rust edition: 2024

Alternative Stack (Option B - Higher Abstraction)

  • UI: tui-realm 3.3 on top of ratatui
  • Config: config-rs 0.15.19 with YAML

Rejected Libraries

  • Diesel: rejected — no async SQLite support
  • rusqlite: rejected — sync only, not Send
  • serde_yaml: deprecated — migrate config to TOML instead of YAML

Migration Order

  1. Data structs (models)
  2. sqlx queries (database layer)
  3. API client (reqwest)
  4. Config (figment)
  5. First screen: Roster (screens layer)
  6. Iterate remaining screens

Key Challenges

  • Calc layer is the easiest port (pure math, f64)
  • Screens are the hardest: ratatui is immediate-mode (draw loop), while Textual is retained-mode (component tree with reactive state)
  • Async patterns differ significantly between Python and Rust

Reference

Full research saved to NoteDiscovery at projects/sba-scout/rust-tui-migration-research.