Browser-only controller for LINAK Bluetooth sit/stand desks, including IKEA IDASEN desks using the DPG controller family.
This is a static Web Bluetooth app. It does not require a native app, Python, Node.js, or a local helper process for normal use.
Live site: https://smailzhu.github.io/linak-desk-web/
Web Bluetooth is required.
- Chrome or Edge on desktop
- Chrome on Android
- HTTPS or
localhost
Safari and Firefox generally do not expose the Web Bluetooth API needed by this app.
From this directory:
python3 -m http.server 8080Then open:
http://localhost:8080
Put the desk in Bluetooth pairing mode before connecting. When Chrome, Edge, or the system Bluetooth dialog opens, select the desk and choose Pair or Connect.
This repo is published with GitHub Pages from the main branch root:
https://smailzhu.github.io/linak-desk-web/
Any static HTTPS host works. Examples:
- GitHub Pages
- Cloudflare Pages
- Netlify
- Vercel static deployment
Keep the page private or access-controlled if you do not want other people to load it. The browser still requires a physical user gesture and per-origin Bluetooth permission before it can connect to a desk.
The initial implementation follows the GATT services used by rhyst/linak-controller:
- Control service:
99fa0001-338a-1024-8a49-009c0215f78a - Control command characteristic:
99fa0002-338a-1024-8a49-009c0215f78a - DPG service:
99fa0010-338a-1024-8a49-009c0215f78a - DPG characteristic:
99fa0011-338a-1024-8a49-009c0215f78a - Reference output service:
99fa0020-338a-1024-8a49-009c0215f78a - Height/speed characteristic:
99fa0021-338a-1024-8a49-009c0215f78a - Reference input service:
99fa0030-338a-1024-8a49-009c0215f78a - Target height characteristic:
99fa0031-338a-1024-8a49-009c0215f78a
Height values are encoded as tenths of a millimeter above the desk base height. The default base height is 620 mm, and the app attempts to read the configured base offset from the DPG characteristic after connection.
This app controls physical desk movement over Bluetooth. Watch the desk while moving it, keep the area clear, check cable slack, and be ready to stop movement with the app, the physical controls, or power if needed.
Test carefully after any code change or when using a new desk/controller model. The app sends normal LINAK BLE commands, but you are responsible for clearance, load, and anything on or around the desk.
This project was initially generated and iterated with assistance from AI tooling. The code and behavior should be reviewed and tested like any other software, especially because it controls physical desk movement over Bluetooth.
This project is based on protocol details and behavior learned from rhyst/linak-controller.
This repo is not a fork of that Python controller. It is a browser-only Web Bluetooth implementation using the same LINAK/IDASEN BLE GATT services.