BindBoard is a macro keyboard app for Windows. Turn one or more spare keyboards or numpads into macro pads — open sites and programs, press shortcuts, play sounds, switch modes — while your main keyboard keeps working as normal.
Built on Windows Raw Input API — no drivers, no third-party software required.
| Several keyboards | Key combinations |
|---|---|
![]() |
![]() |
| Press keys / shortcuts | Window background & transparency |
|---|---|
![]() |
![]() |
| Launch |
|---|
![]() |
- 🎹 Per-device key interception — keys from the second keyboard trigger actions; your main keyboard is untouched
- 🔌 Any USB or Bluetooth keyboard — devices are listed by their real names, and two keyboards of the same model can be selected separately
- ⌨️ Several keyboards at once — add a second, third… macro keyboard; each one has its own layout, modes and binds
- 🔗 Key combinations — hold one key of the macro keyboard and press another to run a separate action
- ➕ Custom layouts — scan extra keys (arrows, macro keys, F13–F24…) and add them to any template
- 🗂 Modes — create multiple binding profiles and switch between them with a single key press
- 🖥 Mode overlay — a brief on-screen hint appears whenever you switch modes
- 🚀 Action types — open a URL, launch a program or shortcut, start a Steam game, play a sound via Soundpad, press a key or shortcut (e.g.
Ctrl+Shift+V), or switch mode - 🔍 App & game picker — browse installed programs and Steam games by name, no manual path or ID entry needed
- 🎨 Themes — dark, light or your own: 8 ready-made palettes or any colours, and the whole window follows (Windows 11 title bar too); share a palette as a
BB1:theme code - 🪟 Window background — Glass (what is behind the window, blur 0 / 50 / 100 %), Windows 11 Mica, or your desktop wallpaper / any picture with any blur from 0 to 100 %; the transparency of the sidebar, main area, cards, keys and fields can be set apart, text stays crisp
- 🌐 English & Russian UI — language is detected automatically from your system locale
- 🔔 System tray — closing the window minimizes to tray; the listener keeps running in the background
- 🪶 Light on resources — no keyboard hook: other keyboards' keys pass through Windows untouched, and the app idles at ~0% CPU in the tray
- Go to the latest release
- Download
BindBoard-vX.Y.Z.zip(for exampleBindBoard-v1.0.8.zip) - Extract to any folder
- Run
BindBoard\BindBoard.exe
Updating: close BindBoard (tray icon → Exit) and replace the folder — your settings are kept separately in %USERPROFILE%\BindBoard\.
Requires Windows 10/11 with WebView2 Runtime (already included in Windows 11)
Requirements: Python 3.10+, Windows 10/11
git clone https://github.com/Mark-mark-228/BindBoard.git
cd BindBoard
pip install -r requirements.txt
python app.py- Launch BindBoard
- Go to Keyboard → click Use next to your spare keyboard (+ Add connects one more) → pick its size and click Apply layout
- Go to Bindings → click any key → choose an action on the right → click Save
- Go to Launch → click Start (or use the status button in the sidebar)
Your keys are live! Changes are saved automatically; Save & Apply saves right away.
Modes let you have multiple sets of bindings on the same physical keys — for example one profile for music control and another for gaming.
- Click + Mode to create a new profile
- Assign any key the "Switch mode" action to jump between profiles
- A brief overlay appears on screen whenever the mode changes
- With several keyboards, each one keeps its own current mode
On the Keyboard tab, Use picks the keyboard you are setting up, and + Add adds one more. Every keyboard has its own layout, modes and binds; switch between them with the chips at the top of the Keyboard and Bindings tabs. Start runs all of them at once — a keyboard that is unplugged is picked up as soon as it is connected again.
Select a key on the Bindings tab → Add combination → click the second key on the picture → choose an action. Now holding the first key and pressing the second runs that action.
A key that starts a combination runs its own action when it is released (so it does not fire while you use it for a combination); all other keys still fire instantly on press.
The Press keys action sends a key or a shortcut to the active window — for example Ctrl+C, Ctrl+Shift+V, Win+Shift+S, Ctrl+-, F13 or MediaPlayPause. Click Record and press the shortcut on your main keyboard — Windows shortcuts like Win+Shift+S are recorded too (Windows may also run them; just close what opens). You can also double-click the field and type it by hand. Test waits 2 seconds before pressing it, so you can switch to the window you want to try it in.
The macro key itself still reaches the active window too (Windows can't block keys of one keyboard without a driver). Keys that type nothing — F13–F24, or a numpad in apps that ignore digits — work best. Windows doesn't let normal apps send keys to windows that run as administrator.
| Option | What it does |
|---|---|
--minimized |
Start hidden in the tray (useful for a startup shortcut) |
--selftest |
Load the UI hidden, check the JS ↔ Python bridge, write selftest.json to the config folder and exit (code 0 = OK) |
Settings live in %USERPROFILE%\BindBoard\ (config.json, backups\, bindboard.log). Set BINDBOARD_HOME to use another folder.
.\build.ps1build.ps1 installs the requirements, builds with BindBoard.spec, runs the new EXE with --selftest, then packs the installer (or a ZIP). The build is at dist\BindBoard\.
python -m unittest discover -s tests -vThe suite covers config saving/backups, the app filter, key normalisation, the listener and modes, actions, the Soundpad pipe client, icons, and real Raw Input via SendInput (set BINDBOARD_SKIP_INPUT_TESTS=1 to skip the tests that inject F23/F24 presses and a Shift tap). tests/check_frontend.mjs statically checks app.html (needs Node.js).
BindBoard/
├── app.py — backend: Raw Input, bindings engine, tray, API
├── app.html — frontend: single-page app (HTML / CSS / JS)
├── tests/ — unittest suite + frontend static checks
├── bindboard.ico — app icon
├── BindBoard.spec — PyInstaller build config
├── requirements.txt — Python dependencies
├── screenshots/ — README screenshots
└── assets/ — UI icons and resources
| Package | Purpose |
|---|---|
pywebview |
App window (Chromium WebView2) |
pystray |
System tray icon |
Pillow |
Icons, wallpaper and background pictures |
pyinstaller |
EXE build (dev only) |
Every update is announced on Reddit: u/No_Echo_2124. Ideas and bug reports are welcome there or in Issues.
MIT — free to use, modify, and distribute.




