All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Interactive 3D Viewer: Real-time G-code toolpath visualization using Three.js
- Toolpath Preview: Automatic G-code parsing and 3D rendering of movement commands
- Gradient Coloring: Visual indication of toolpath progression (blue to cyan)
- Machine Position Indicator: Real-time orange sphere showing current machine position
- Interactive Camera Controls: Orbit, zoom, and pan with mouse
- View Modes: Quick access buttons for Top, Front, Side, and Isometric views
- Coordinate Axes: Color-coded XYZ axes with labels (Red/Green/Blue)
- Reference Grid: Ground plane grid for spatial reference
- Bounds Display: Automatic calculation and display of workpiece dimensions
- WebGL Acceleration: Hardware-accelerated 3D rendering at 60 FPS
- Created
ui/src/viewer3d.jswith GCodeViewer3D class (310 lines) - Integrated Three.js r128 and OrbitControls via CDN
- Added 3D viewer container and controls to UI (400px height, responsive)
- Automatic toolpath loading when G-code file is selected
- Real-time position updates synchronized with status polling
- Coordinate system transformation (G-code XYZ → Three.js)
- Comprehensive documentation in
docs/3D_VISUALIZATION.md
- G-code Parsing: Extracts G0/G1 movement commands with X/Y/Z coordinates
- Performance: Efficiently handles 10,000+ toolpath points
- Memory Efficient: Line geometry for minimal memory footprint
- Lighting: Ambient and directional lights for depth perception
- Camera: Perspective camera with auto-centering on toolpath
- Damping: Smooth, inertial camera movement
- Window Resize: Responsive rendering with proper aspect ratio
- Parse G0/G00 (rapid) and G1/G01 (feed) commands
- Support for comments and empty lines (ignored)
- Automatic bounds calculation (min/max X/Y/Z)
- Glow effect on machine position indicator
- Semi-transparent UI controls overlay
- Real-time info display (points, bounds)
- Clean integration with existing UI theme
- Progress Bars: Real-time visual progress tracking with percentage and line counters
- File Validation: Pre-flight G-code file validation with error detection
- Time Estimation: Estimated job duration calculation based on command count
- Elapsed Time Tracking: Real-time elapsed time display during job execution
- Job History: Comprehensive job history with status tracking, duration, and timestamps
- History Management: Clear history functionality and persistent storage during session
- File Info Display: Shows line count, estimated duration, and warnings before streaming
- Streaming Controls: Integrated Start/Pause/Resume/Cancel buttons with proper state management
- Status Badges: Color-coded job status indicators (Success/Failed/Cancelled)
- Modern UI Design: Enhanced styling with progress animations and responsive layouts
- Created
src-tauri/src/main.rswith full Tauri backend (397 lines) - Added 9 new Tauri commands for enhanced functionality
- Implemented 3 new data structures: JobProgress, JobHistoryEntry, FileValidationResult
- Enhanced
ui/index.htmlwith 203 lines of new UI components and JavaScript - Added comprehensive CSS styling for progress bars, history, and file validation
- Integrated with existing streaming and controller APIs
- Added filesystem and dialog permissions to Tauri config
- Type-safe Rust backend with proper error handling
- State management using Arc<Mutex<>> for thread-safety
- Async/await patterns for all operations
- 250ms polling intervals for smooth progress updates
- Efficient UI updates with show/hide logic
- Defensive programming with null checks and error messages
- Initial Rust port of Universal G-Code Sender
- Core model types (Position, Axis, Units, Alarm)
- Serial communication layer using tokio-serial
- GRBL controller implementation
- Basic Tauri GUI application
- Connection management (connect/disconnect)
- Machine status monitoring
- Jogging controls (X/Y/Z axes)
- Homing cycle support
- G-code command sending
- Alarm unlock functionality
- Soft reset support
- Real-time status updates
- Console logging
- Cross-platform support (Windows, macOS, Linux)
- Command-line interface (CLI) for terminal use
- Response handling system (Task 2)
- Serial read loop with async buffering
- GRBL response parsing and dispatching
- Real-time state updates from controller
- Event notification system
- SerialPort Send trait issue: Changed from Box to Arc<Mutex> for thread-safety
- Async trait implementation: Properly implemented async/await with tokio::sync::Mutex throughout
- Type mismatches: Fixed all Result types requiring .await
- Connection error handling: Fixed ConnectionError::SerialPort error conversion
- Status polling: Fixed tokio mutex lock issues in background tasks
- Sync methods: Implemented proper try_lock patterns for methods requiring sync access
- Unused imports: Cleaned up unused Connection, Position, and Arc imports
- Variable warnings: Suppressed warnings for future-use methods
- Serial read loop: Async task for reading from serial port
- Line buffering: Splits incoming data on newlines
- Response dispatcher: GrblListenerHandle for parsing and routing
- Status parsing: Real-time position updates from status messages
- Alarm handling: Detect and propagate GRBL alarms
- Event system: Notify application listeners of all events
- Task management: Clean shutdown of read tasks
- Integration tests: Added controller tests (19 tests total passing)
- G-code file loading: Load and parse files from disk
- File streaming system: Complete streaming engine with flow control
- Streaming state machine: Idle, Streaming, Paused, Complete, Error states
- Automatic flow control: Wait for "ok" before sending next command
- Progress tracking: Track and report current line / total lines
- Pause/Resume/Cancel: Full control over streaming
- Event notifications: FileStreamStarted, Progress, Complete events
- Error handling: Graceful handling of command errors during streaming
- 7 streaming tests: Comprehensive test suite (all passing)
- Mock connection: Complete fake serial port for testing
- Response queue system: Configurable response sequences
- Command history tracking: Verify all sent commands
- Latency simulation: Test timing-dependent code
- Response injection: Simulate incoming data at any time
- TestListener helper: Collect and query controller events
- 18 integration tests: Complete mock-based testing
- 3 mock self-tests: Internal validation
- 47 total tests passing: Comprehensive coverage (~90%)
- Status polling lifecycle: Proper start/stop with connection
- Polling task management: JoinHandle tracking and abort on disconnect
- Enhanced status parsing: Extract feed rate (F:) and spindle speed (FS:)
- Configurable polling rate: Adjustable update frequency (default 200ms)
- Enable/disable control: Toggle status updates on demand
- Extended status support: Parse basic and extended GRBL status formats
- 7 status polling tests: Comprehensive test coverage
- 54 total tests passing: All tests passing (100%)
- Real-time monitoring: Continuous position and state updates
- Replaced parking_lot::Mutex with tokio::sync::Mutex for async compatibility
- Implemented Arc<Mutex> pattern for serial port sharing
- Added proper async spawning for listener notifications
- Fixed all compilation errors - library now compiles cleanly
- Tests pass successfully (2/2 passing)
- Modular design with separate crates for communication, controller, gcode, etc.
- Async/await throughout using Tokio runtime
- Event-driven architecture with listener pattern
- Type-safe API with strong error handling
- Thread-safe state management with Arc/Mutex
- README with feature comparison to UGS
- AGENTS.md with development guidelines
- Inline documentation for all public APIs
- Code examples in documentation
- STATS.md with detailed project metrics
- SPEC.md with project specification
- docs/IMPLEMENTATION.md with technical details
- Test structure in
tests/directory - Unit tests for core models
- Utils tests (clean_gcode_line, format_duration)
- Integration test placeholders
- Response handling not yet wired up (parsers exist but unused)
- G-code file streaming not yet implemented
- No 3D visualization
- Limited to GRBL (TinyG, g2core, Smoothieware planned)
- Wire up response handlers for status/alarm parsing
- G-code file streaming with progress tracking
- 3D toolpath visualization
- TinyG/g2core controller support
- Smoothieware support
- Macro system
- Probe operations
- Continuous jogging
- Keyboard shortcuts
- Work coordinate system management (G54-G59)
- Tool length offset
- Feed/spindle speed overrides
- Settings persistence
- Multiple language support
- Plugin system
- Implement proper connection reader loop for responses
- Add comprehensive test suite for all modules
- Implement proper G-code file parser
- Add connection retry logic
- Add structured logging with tracing