A React/TypeScript web application for configuring Faderpunk via WebUSB. The configurator provides a modern, intuitive interface for managing device layouts, apps, and global settings.
The Faderpunk Configurator is the primary interface for setting up and customizing your Faderpunk device. It communicates directly with the hardware via WebUSB, allowing real-time configuration of:
- Device Layout: Arrange and configure apps across the 16 channels
- App Management: Browse available apps, configure parameters, and assign them to channels
- Global Settings: Configure MIDI, I2C, clock, quantizer, and auxiliary settings
- Real-time Updates: Changes are immediately synchronized with the hardware
- Visual Channel Overview: See all 16 channels at a glance with their assigned apps
- Drag & Drop Layout: Intuitive interface for rearranging apps across channels
- Real-time Status: Live display of fader positions, button states, and LED colors
- Quick Configuration: Click any channel to instantly configure its assigned app
- App Library: Browse all available apps with descriptions and icons
- Categorized Browsing: Apps organized by function (LFO, Sequencer, Utility, etc.)
- Parameter Configuration: Rich UI for configuring app-specific parameters including:
- Boolean switches and toggles
- Numeric inputs with validation
- Color pickers for LED customization
- Curve and waveform selectors
- Note and range inputs
- Enum dropdowns for mode selection
Comprehensive global device configuration:
- MIDI Settings: Configure MIDI input/output channels and routing
- I2C Settings: Set up communication with Eurorack modules (16n protocol)
- Clock Settings: External clock synchronization and timing
- Quantizer Settings: Musical quantization and scale configuration
- Auxiliary Settings: Additional device-specific configurations
- React 19 with TypeScript for type-safe development
- Vite for fast development and optimized builds
- HeroUI component library for modern, accessible UI components
- Tailwind CSS for utility-first styling
- Zustand for lightweight state management
- @dnd-kit: Drag and drop functionality for layout management
- react-hook-form: Form handling with validation
- framer-motion: Smooth animations and transitions
- zod: Runtime type validation and schema definition
- classnames: Conditional CSS class management
- WebUSB API: Direct browser-to-device communication
- COBS Encoding: Consistent Overhead Byte Stuffing for reliable data transmission
- Postcard Serialization: Efficient binary serialization protocol
- Type-safe Protocol: Generated TypeScript bindings from Rust types
WebUSB is required for device communication. Supported browsers:
- β Chrome/Chromium 61+
- β Edge 79+
- β Opera 48+
- β Firefox (WebUSB not supported)
- β Safari (WebUSB not supported)
- Faderpunk device with USB connection
- Compatible Raspberry Pi Pico (RP2350) firmware
-
Clone the repository:
git clone https://github.com/ATOVproject/faderpunk.git cd faderpunk/configurator -
Install dependencies:
pnpm install
Start the development server:
pnpm devThe configurator will be available at http://localhost:5173
Build the application:
pnpm buildThe built files will be available in the dist/ directory.
Run ESLint:
pnpm lintRun TypeScript type checking:
tsc --noEmit- Power on your Faderpunk device and connect it via USB
- Open the configurator in a supported browser
- Click "Connect Device" to initiate the WebUSB connection
- Select your Faderpunk device from the browser's device picker
- Start configuring! The device will automatically sync its current state
- Browse Apps: Navigate to the "Apps" tab to see all available applications
- Drag to Assign: Drag apps from the library onto channels in the "Device" tab
- Configure Parameters: Click on any assigned app to open its configuration modal
- Real-time Updates: Changes are immediately sent to the hardware
- Drag & Drop: Rearrange apps by dragging them between channels
- Multi-channel Apps: Some apps can span multiple channels for expanded functionality
- Empty Channels: Unused channels remain available for future app assignment
- Save Layouts: Device automatically saves layout changes to persistent storage
src/
βββ components/ # React components
β βββ input/ # Parameter input components
β βββ settings/ # Settings tab components
β βββ App.tsx # Main application component
β βββ Layout.tsx # Layout wrapper with modals
β βββ ...
βββ utils/ # Utility functions
β βββ usb-protocol.ts # WebUSB communication
β βββ config.ts # Device configuration helpers
β βββ types.ts # TypeScript type definitions
βββ store.ts # Zustand state management
βββ main.tsx # Application entry point
The application uses Zustand for state management with the following key state:
usbDevice: Active WebUSB device connectionapps: Map of all available apps with metadatalayout: Current channel layout and app assignmentsconfig: Global device configuration settings
The configurator communicates with the Faderpunk firmware using:
- COBS Encoding: Frames messages for reliable transmission
- Postcard Serialization: Compact binary format for efficiency
- Type-safe Messages: Generated TypeScript types from Rust protocol definitions
- Bidirectional Communication: Real-time updates and configuration sync
- Define the parameter in the firmware's Rust code
- Regenerate bindings using
./gen-bindings.shfrom the project root - Create UI component in
src/components/input/for the new parameter type - Update
AppParam.tsxto handle the new parameter type
- Add new setting to
GlobalConfigin the shared library - Regenerate TypeScript bindings
- Create settings component in
src/components/settings/ - Import and use in
SettingsTab.tsx
Enable USB protocol debugging by opening browser dev tools:
- Messages are logged to the console
- WebUSB errors are clearly reported
- COBS encoding/decoding can be inspected
| Feature | Chrome | Edge | Firefox | Safari |
|---|---|---|---|---|
| WebUSB | β | β | β | β |
| ES2022 | β | β | β | β |
| CSS Grid | β | β | β | β |
| Drag & Drop | β | β | β | β |
Note: WebUSB is the limiting factor. Firefox and Safari users cannot connect to the device directly but can still view the interface.
Device not appearing in browser picker:
- Ensure device is powered on and connected via USB
- Try a different USB cable or port
- Check that firmware is properly flashed
WebUSB not available:
- Use Chrome, Edge, or Opera browser
- Ensure browser is up to date
- Check that site is served over HTTPS (required for WebUSB)
Connection drops unexpectedly:
- Check USB cable connection
- Avoid USB hubs if possible
- Monitor browser console for error messages
Slow drag and drop:
- Close other browser tabs to free memory
- Disable browser extensions that might interfere
- Try refreshing the page
Laggy parameter updates:
- Reduce the number of simultaneous parameter changes
- Check USB connection stability
- Monitor browser performance tools
COBS decoding errors:
- Usually indicates USB transmission issues
- Try reconnecting the device
- Check for firmware compatibility
Serialization errors:
- May indicate version mismatch between configurator and firmware
- Ensure both are from the same release
- Check browser console for detailed error messages
- Fork the repository
- Create a feature branch
- Install dependencies with
pnpm install - Make your changes
- Run tests and linting
- Submit a pull request
- TypeScript: Strict mode enabled with comprehensive type checking
- ESLint: Configured with React and TypeScript rules
- Prettier: Automatic code formatting
- Naming: Use descriptive names and follow React conventions
Currently using manual testing with hardware. Automated testing infrastructure is planned for future releases.
This project is licensed under the terms specified in the LICENSE file.
- Community: Discord Server
- Issues: GitHub Issues
- Website: atov.de
- Built with β€οΈ in Berlin by ATOV
- UI and UX by the wonderful and extraordinarily talented Leise St. Clair
- Icon design by papernoise
- log, lin and exp icons by Robbe de Clerck
- MIDI icon by onlinewebfonts
- Some UI components based on HeroUI
Faderpunk Configurator - Bridging the gap between digital configuration and analog performance.