1.7 KiB
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 |
|
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.
Recommended Stack (Option A - Lean and Idiomatic)
- 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
- Data structs (models)
- sqlx queries (database layer)
- API client (reqwest)
- Config (figment)
- First screen: Roster (screens layer)
- 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.