Skip to content

Tech Stack Decisions ​

Language Choices ​

DomainTechnologyDecision
Controller / Web APIRust + Axum + TokioPrimary choice
Native WorkerRust + TokioPrimary choice
SupervisorRust + TokioPrimary choice
Core protocolProtobufUnified contract
KBEngine BridgePythonRequired by the engine scripting environment
BigWorld BridgeDepends on the actual SDK / bot environmentTo be verified
Python SDKPythonProvided later
Lua SDKLuaNot implemented in v1
C++ AdapterSeparate process or isolated shimAs needed
Go SDKGoProvided later, outside the core
Report analysisRust in the main pipeline; Python may be used as an offline analysis toolDoes not affect the core

Rust Ecosystem Suggestions ​

PurposeSuggested ComponentNotes
Async RuntimeTokioCore async runtime
HTTPAxumController API
RPCTonicgRPC control channel
Serializationprost / serdeProtobuf and configuration
DatabaseSQLxMetadata storage for the resident Controller
CLIClapCLI
Logging / TracingtracingStructured logging
MetricsOpenTelemetry Rust + custom aggregationMetric export
HistogramHDR Histogram compatible implementationUnified parameters and blob versions
Parquetparquet-rs / ArrowVersion and performance need verification
Report QueryDuckDBCan serve as an external analysis engine; embedding is not required

Dependency versions should be frozen after Phase 0 establishes a version matrix and a minimal runnable prototype. Do not write unverified crate versions into the plan document ahead of time.

Is a Database Required? ​

  • CLI-only single Swell runs: the file system, Parquet, JSON, and DuckDB are enough; no resident database is needed.
  • Resident Dashboard, multiple users, concurrent management of multiple Swells: persistent Controller metadata is needed; PostgreSQL is recommended.
  • Single-machine development mode: SQLite is an option.
  • Test detail records and high-frequency time series should not all be written to PostgreSQL; prefer file partitioning and Parquet.

The Controller's metadata storage and experiment data storage must be separated.