Skip to content

Rewrite Go CLI in Rust#9061

Merged
lukekim merged 14 commits intotrunkfrom
phillip/260122-cli-rust
Jan 24, 2026
Merged

Rewrite Go CLI in Rust#9061
lukekim merged 14 commits intotrunkfrom
phillip/260122-cli-rust

Conversation

@phillipleblanc
Copy link
Contributor

@phillipleblanc phillipleblanc commented Jan 22, 2026

Summary

Complete rewrite of the Go CLI (bin/spice/) in Rust (bin/spice-cli/). This unifies the CLI with the spiced runtime codebase.

What's Included

All 27 commands implemented with full feature parity:

  • Core: version, status, run, sql, init, install
  • Data Inspection: datasets, catalogs, models, pods, workers
  • Operations: refresh, upgrade, acceleration, add, connect, dataset
  • Authentication (login + 7 subcommands): Spice.ai, Dremio, S3, Postgres, Snowflake, Databricks, Delta Lake, Spark
  • Cloud (18 subcommands): login/logout/whoami, apps CRUD, deployments, logs, secrets, link/unlink, regions, images, api-keys
  • AI/ML: chat (streaming SSE), nsql, search, eval
  • Infrastructure: cluster tls init/add, trace

Technical Approach

  • CLI Framework: clap with derive macros
  • Error Handling: SNAFU with centralized Error enum
  • Async: tokio runtime
  • Table Output: comfy-table via TableOutput struct
  • HTTP: reqwest client via RuntimeContext
  • Streaming: futures::StreamExt for SSE (chat command)
  • Certificates: rcgen with x509-parser for TLS certs

Next Steps

  • Integration tests using assert_cmd crate
  • Feature parity verification against Go version
  • Cross-platform CI builds (Linux/macOS/Windows)
  • Documentation updates
  • Deprecation plan for Go CLI
Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

3 participants