64 lines
1.9 KiB
Markdown
64 lines
1.9 KiB
Markdown
---
|
|
id: 2cf3058c-85f4-481a-bbe7-17ebb9b9e908
|
|
type: decision
|
|
title: "SBA Scout Python-to-Rust TUI migration: recommended stack and approach"
|
|
tags: [sba-scout, rust, migration, ratatui, research, decision, tui]
|
|
importance: 0.7
|
|
confidence: 0.8
|
|
created: "2026-02-23T18:05:05.367031+00:00"
|
|
updated: "2026-02-27T01:19:05.955043+00:00"
|
|
relations:
|
|
- target: c9add129-283a-445a-8dff-4525ec7fa9b6
|
|
type: BUILDS_ON
|
|
direction: incoming
|
|
strength: 0.9
|
|
edge_id: 5cde624d-cbf0-456b-aa87-076e7e999dde
|
|
---
|
|
|
|
# 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
|
|
|
|
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`.
|