Skip to content

What is Moonriver? ​

Moonriver is a terminal-based console for connecting to and interacting with Klipper instances via the Moonraker WebSocket API.

Overview ​

Moonriver provides a fast, efficient, and color-coded way to monitor and control your 3D printer, all from the comfort of your command line. Built entirely in Rust for speed and reliability.

The Problem ​

While web interfaces like Mainsail and Fluidd are excellent, there are scenarios where a terminal-based solution is preferable:

  • Remote Access: SSH into your printer's host without needing X forwarding or VNC
  • Automation: Integrate printer commands into scripts and workflows
  • Speed: Keyboard-driven interface is often faster than clicking through a web UI
  • Multiple Printers: Manage many printers simultaneously using tools like GNU Parallel
  • Resource Usage: Minimal overhead compared to running a web browser

Key Features ​

🚀 Connectivity & Performance ​

  • Real-Time WebSocket: Direct connection to Moonraker's WebSocket API
  • No Polling: Efficient real-time updates without constant HTTP requests
  • Rust Performance: Fast, memory-safe implementation
  • Auto-Reconnect: Automatically reconnects if Klipper restarts

💻 Terminal Experience ​

  • Rich Coloring: Color-coded output for different message types
  • Command History: Navigate previous commands with arrow keys
  • Tab Completion: Autocomplete G-code commands and macros
  • Syntax Highlighting: Visual feedback as you type

🖨️ Printer Control ​

  • G-code Execution: Submit any G-code command
  • Macro Support: Execute user-defined Klipper macros
  • Status Monitoring: Real-time temperature and position data
  • Emergency Stop: Quick M112 support

Use Cases ​

System Administration ​

Manage printers via SSH without needing a GUI:

bash
ssh pi@printer.local
moonriver --host localhost --port 7125

Automation Scripts ​

Integrate printer control into maintenance scripts:

bash
#!/bin/bash
moonriver --host printer.local --port 7125 "G28, M105"

Printer Farms ​

Control multiple printers efficiently:

bash
parallel moonriver --host {} --port 7125 G28 ::: printer{1..10}.local

Development & Debugging ​

Quick access to printer internals:

bash
moonriver --host test-printer --port 7125
> GET_POSITION
> QUERY_ENDSTOPS
> FIRMWARE_RESTART

Architecture ​

Moonriver is built with modern async Rust:

  • tokio: Async runtime for non-blocking I/O
  • tokio-tungstenite: WebSocket client implementation
  • rustyline: Interactive line editing with history
  • clap: Command-line argument parsing
  • colored: Terminal color output

Comparison with Other Tools ​

FeatureMoonriverMainsail/FluiddSSH + G-code
Terminal-based✅❌✅
Real-time updates✅✅❌
Tab completion✅❌❌
Command history✅❌❌
Syntax highlighting✅✅❌
Scriptable✅❌✅
Multiple printers✅❌⚠️
Resource usageLowMediumLow

Next Steps ​

Released under the MIT License.