A three-tier HTTP server for controlling Rhino 3D from the command line with robust process management and health monitoring.
Client (rhino CLI) → HTTP → Go Server → TCP → Python Server (in Rhino)
The Go server manages Rhino as a subprocess, provides REST API on port 9090, handles request queuing with 4 workers, and monitors Rhino health every 30 seconds with auto-restart on failures.
Key Features:
- Detached Rhino subprocess with zombie prevention
- Multi-layer health checks (HTTP + process PIDs)
- Graceful shutdown with timeout and force-kill fallback
- TCP/Unix socket support for Python server communication
Learn more about the architecture →
go build -o rhino cmd/rhino/main.goPrerequisites: Run rhino doctor --fix to disable autosave before starting.
# Start server (port 9090)
rhino server
# Check if server is running
rhino ping
# Start MCP server for Claude Desktop
rhino mcp
# Execute Python code
rhino exec --code "rs.AddPoint([0,0,0]); sc.doc.Views.Redraw()"
# Evaluate expressions
rhino eval --expr "rs.UnitSystem()"- Architecture - How the server and manager work
- API Reference - HTTP endpoints
- MCP Server - Model Context Protocol integration
- Claude Desktop Setup - Configure Claude Desktop
- Configuration - Environment variables
- Commands - CLI command reference
- Troubleshooting - Common issues
# Build
go build -o rhino cmd/rhino/main.go
# Test
./rhino server
./rhino exec --code "print('Hello from Rhino')"