DAWPilot is a free, open-source configurable remote control surface for any DAW. It runs on your studio PC, opens a clean mobile-friendly deck on your local network, and triggers DAW shortcuts and workflow macros on the host machine.
Control transport, editing, mixing, and more from any phone, tablet, or browser while recording, comping, or mixing.
- Runs as a simple local Node.js server on Windows
- Access the control deck from any browser on the same network
- Supports multiple DAWs: REAPER, Ableton Live, FL Studio, Cubase, Pro Tools, Studio One
- Supports button pages, pinned controls, color groups, and visual icons
- Sends DAW hotkeys and macro chains through AutoHotkey v2
- Includes a built-in JSON editor for quick deck customization
- Supports optional password protection for LAN access
- Fully configurable — open-source and MIT licensed
- Designed to stay lightweight for low-latency studio use
- Windows host computer
- Node.js 18+
- AutoHotkey v2 on the host machine for hotkey sending
AutoHotkey download: https://www.autohotkey.com/
- Go to GitHub Releases and download
DAWPilot.exefrom the latest release. - Install AutoHotkey v2 on the same Windows PC running your DAW.
- Run
DAWPilot.exe. - Open DAWPilot from another device on the same network, select your DAW, and start using the controls.
- Install dependencies.
npm install- Create a local password config.
copy config\auth.example.json config\auth.json-
Edit
config/auth.jsonand set your own password. -
Start the server.
npm start- Open the printed LAN URL from a device on the same network.
Example URLs:
Create a standalone executable so end users do not need Node.js installed.
- Build the executable.
npm run build:win- The output will be:
dist/DAWPilot.exe
- On first launch, the app creates a local
configfolder next to the EXE with:
config/buttons.jsonconfig/auth.example.json
- To enable password protection on the EXE build:
- Copy
config/auth.example.jsontoconfig/auth.json - Set your password in
config/auth.json
- Distribute
DAWPilot.exeand the generatedconfigfolder together.
When you push to main (or master), GitHub Actions will:
- Build
dist/DAWPilot.exeon Windows - Use
assets/reaperpilot.icoas the EXE logo source when present - Publish or update a GitHub Release tagged
latest - Attach the EXE as a release asset
Workflow file:
.github/workflows/release.yml
Important:
- In your GitHub repo settings, keep Actions > Workflow permissions set to Read and write permissions so the workflow can create or update Releases.
- On Windows EXE builds, DAWPilot starts a tray icon automatically when AutoHotkey v2 is installed.
- The tray menu includes:
Open DAWPilot(openshttp://localhost:4219)Exit DAWPilot(stops the server)
- The console window is hidden in tray mode.
Disable tray mode if needed:
$env:DAWPILOT_DISABLE_TRAY="1"; .\DAWPilot.exeMain files:
config/buttons.jsonconfig/daws/*.jsonconfig/auth.json(local only, ignored by git)config/auth.example.json(committed template)
You can edit the deck in two ways:
- Edit a DAW file in
config/daws/directly - Use the in-app config editor from the browser UI (saves to the currently selected DAW)
- Root object:
title,subtitle,theme,pages - Optional root object:
globalButtonsfor pinned controls shown on every tab - Each page:
id,name,rows,columns,buttons - Each button supports:
icon: short visual marker likeREC,>>,MXcombo: simple hotkey string likeCtrl+Vactions: macro array
Supported action types:
hotkeytextdelaycommand
Password protection can be configured in two ways:
- Local file:
config/auth.json - Environment variables:
HOTKEYS_AUTH_PASS, optionalHOTKEYS_AUTH_REALM
Environment variables override the local file.
This project is intended for trusted LAN environments. Password protection is useful, but you should still avoid exposing it directly to the public internet.
config/auth.jsonis ignored by git so local passwords do not get committed- Use
config/auth.example.jsonas the public template node_modulesis ignored and should never be committed
Run in watch mode:
npm run devMIT