Changelog
v4.0.0
The biggest Dune Weaver release yet — a ground-up UI rewrite, a full built-in LED engine, smart-home integration, and dozens of quality-of-life improvements across the board. 🚀 (Click the image for a walkthrough video)
1. 📱 Brand New Modern Interface — Installable as an App
The entire web interface has been rebuilt from scratch with React 19, replacing the legacy Jinja2 templates with a fast, responsive, app-like experience.
- Install as a PWA — add Dune Weaver to your iOS or Android home screen for a native app feel, complete with your custom icon and app name
- Works offline — pattern previews, static assets, and recent API responses are cached locally so the UI stays snappy even on spotty Wi-Fi
- Dark and light mode — follows your system preference or set it manually; every page is designed for both themes
- Responsive layout — works beautifully on phones, tablets, and desktops with touch-optimized controls throughout
- Smooth animations — page transitions, expandable panels, and drag interactions are all fluid and polished
2. 🎛️ Multi-Table Control from One Interface
Manage multiple sand tables from a single Dune Weaver app.
- Auto-discovery — tables on your local network are found automatically
- Instant switching — tap the table selector in the header to jump between tables
- Per-table state — each table remembers its own connection, playlists, and settings
- Per-table branding — assign a custom name and logo to each table
3. 🔍 Smarter Pattern Browsing
Finding and running patterns is faster and more intuitive.
- Fuzzy search — type "clear from out" and it finds
clear_from_out - Instant previews — pattern thumbnails load from a local cache; no waiting for server renders
- Upload patterns — add custom
.thrfiles directly from the Browse page - Play time badges — see how long each pattern takes at a glance based on execution history
4. ▶️ Enhanced Now Playing Experience
The Now Playing bar is a full-featured control center for whatever's running.
- Live canvas preview — the expanded view draws the pattern in real time as the ball moves, with smooth interpolation and a 16-coordinate offset to match physical latency
- Playback controls — play, pause, stop, and skip with speed adjustment (100–6000 mm/s)
- Progress tracking — elapsed time, remaining time, and percentage; ETA pulls from execution history when available for better accuracy
- Queue management — drag-and-drop to reorder upcoming patterns; "Play Next" and "Add to Queue" from any pattern; move items to top or bottom
- Waiting state — between patterns, see the countdown timer and a preview of what's coming next
- Mobile-first — swipe up to expand, swipe down to collapse; safe area support for notched devices
5. 🖥️ Touch App Improvements
The QML-based DW Touch interface for dedicated touchscreens got significant upgrades.
- Fixed 100% CPU usage — resolved a rendering loop that pegged the processor
- Full playlist management — browse, select, and switch playlists directly from the touch screen
- Restart and shutdown buttons — control the Raspberry Pi without SSH
- Persistent settings — shuffle, repeat mode, and other playlist settings survive restarts
- Better dark mode — improved contrast and visibility across all touch screens
- Proper logging — replaced print statements with structured logging for easier debugging
6. 🛡️ Better Error Recovery
The table handles problems more gracefully.
- GRBL auto-recovery — automatically retries on mid-pattern GRBL errors instead of freezing
- Homing failure popup — a clear overlay explains what went wrong and offers recovery options
- Homing overlay with live logs — a blocking overlay during homing streams real-time log output so you can see exactly what's happening; copy logs to clipboard for troubleshooting
- Connection overlay — when the backend is unreachable, a full-screen overlay shows reconnection attempts with a counter and live status messages
7. 🔧 Serial Debug Terminal
A built-in terminal for sending raw commands to your motor controller, available on the Table Control page.
- Independent connection — opens a separate serial connection so it doesn't interfere with normal operation
- Port selector — lists available serial ports with connect/disconnect controls
- Color-coded history — sent commands in cyan, responses in green, errors in red, all with timestamps
- Soft reset — one-click button to send a Ctrl+X reset to the FluidNC controller
- Safety warning — alerts you not to use the terminal while a pattern is running
8. ⚙️ Under the Hood
For contributors and developers — the project infrastructure has been modernized.
- Test suite — backend unit tests, frontend component and integration tests (Vitest + Testing Library), and Playwright end-to-end tests covering pattern flow, playlist management, and table control
- Docker two-container architecture — separate nginx (frontend) and FastAPI (backend) containers for cleaner deployment
- Pre-commit hooks — Ruff linting and frontend test suite run automatically on every commit
- CI/CD pipeline — GitHub Actions run tests, linting, E2E tests, and publish Docker images on push
- Vite build system — fast development with hot module replacement, API proxying, and optimized production builds
- Modern stack — React 19, TypeScript, Tailwind CSS v4, shadcn/ui, Zustand, TanStack Query, React Router v7, dnd-kit, and Motion
