🟢 Status: The BLE library has been swapped from
@abandonware/nobleto@stoprocent/noblefor better Linux support, with custom logic to handle BlueZ advertisement filtering, subscription delays, and packet drops. Live device communication is fully tested and working on Linux.
Full melt hash control. Terminal-based Puffco controller.
███╗ ███╗███████╗██╗ ████████╗
████╗ ████║██╔════╝██║ ╚══██╔══╝
██╔████╔██║█████╗ ██║ ██║
██║╚██╔╝██║██╔══╝ ██║ ██║
██║ ╚═╝ ██║███████╗███████╗██║
╚═╝ ╚═╝╚══════╝╚══════╝╚═╝
Clone the repo and run the installer:
git clone https://github.com/jen88uk/melt-linux.git
cd melt-linux
chmod +x install.sh
./install.shThe installer will:
- Install
bluezandbluez-utilsviapacman - Enable the Bluetooth service
- Compile native dependencies
- Grant BLE permissions to Node.js (
setcap) - Install a
pacmanhook to preserve permissions on Node upgrades - Register
meltas a global command
Note: You will need
sudoaccess. Node.js 18+ must be installed beforehand (sudo pacman -S nodejs npm).
./uninstall.shRemoves only what the melt installer added: the global melt command, the pacman hook, the udev rule, and node_modules. It will not remove Node.js, npm, bluez, or the Bluetooth service. You will be prompted before BLE capabilities are removed from Node.js, in case other tools depend on them.
Note:
uninstall.shis generated byinstall.shand tailored to your machine — it only removes what was actually installed. It is not included in the repo.
melt # show help
melt status # battery, temp, dab count
melt profiles # list heat profiles
melt heat 0 # heat with profile 0
melt stop # stop heating
melt reset # fix connection issues
melt config [mac] # set custom MAC addressTip: If you have multiple Bluetooth adapters, select a specific one with:
NOBLE_HCI_DEVICE_ID=1 melt statusTip: If your device has a custom name (e.g., "Codsworth") and isn't being discovered automatically, you can explicitly specify its MAC address:
PUFFCO_MAC="f0:ad:4e:48:24:41" melt statusCannot connect to the device / melt times out:
If your Puffco Proxy is already paired with your Linux system via the OS Bluetooth settings (e.g., Gnome/KDE Bluetooth menus or bluetoothctl), melt will not be able to connect to it. melt uses raw HCI sockets (via noble) to communicate directly with the device, and the OS Bluetooth manager (BlueZ) will interfere if it considers the device paired.
To fix this:
- Open your system's Bluetooth settings or run
bluetoothctl. - Unpair / Forget the Puffco Proxy completely. Do not attempt to pair it via the OS Bluetooth menu.
- Ensure the Puffco Proxy is powered on.
- Run
melt status— the app will handle the connection automatically without OS-level pairing.
Note: The Chrome web app works with paired devices because it uses the BlueZ D-Bus API, unlike melt which bypasses it for direct hardware access.
Device has a custom name and isn't found: If you gave your device a custom name via the official app (e.g., "Codsworth"), it might stop broadcasting the default "Proxy" name and Puffco UUID. You can connect to it directly by saving its MAC address to your local config.
To find your device's MAC address, turn the device on and run:
bluetoothctlThen, inside the [bluetooth]# prompt, type:
scan onWait a few seconds. You will see a stream of nearby devices. Look for your device's custom name to appear, which will look something like this:
[NEW] Device F0:AD:4E:48:24:41 My Custom Name
Type scan off and then exit to close bluetoothctl. Copy the MAC address (the part that looks like F0:AD:4E...).
You can then save your specific MAC address to melt so it connects automatically every time:
melt config YOUR:MAC:ADDRESS:HERE
melt status(You can also use the PUFFCO_MAC="fa..." melt status environment variable if you prefer not to save it globally).
- Linux (Arch-based: Arch, Manjaro, EndeavourOS, etc.)
- Node.js 18+
- BlueZ (
bluez,bluez-utils) — installed automatically by the installer - Puffco Proxy (tested on latest firmware)
melt was originally created by ryleyio for macOS.
This repository is a Linux port, adapted to run on Arch-based systems using @stoprocent/noble and BlueZ.
Full credit for the original application, protocol work, and UI goes to ryleyio.
Unofficial tool. Not affiliated with Puffco. Use at your own risk.
If you'd like to support the work that made this possible, you can buy the original author (ryleyio) a coffee:
