Skip to content

Jen88uk/melt-linux

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

melt

🟢 Status: The BLE library has been swapped from @abandonware/noble to @stoprocent/noble for 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.

 ███╗   ███╗███████╗██╗  ████████╗
 ████╗ ████║██╔════╝██║  ╚══██╔══╝
 ██╔████╔██║█████╗  ██║     ██║
 ██║╚██╔╝██║██╔══╝  ██║     ██║
 ██║ ╚═╝ ██║███████╗███████╗██║
 ╚═╝     ╚═╝╚══════╝╚══════╝╚═╝

Install

Clone the repo and run the installer:

git clone https://github.com/jen88uk/melt-linux.git
cd melt-linux
chmod +x install.sh
./install.sh

The installer will:

  • Install bluez and bluez-utils via pacman
  • Enable the Bluetooth service
  • Compile native dependencies
  • Grant BLE permissions to Node.js (setcap)
  • Install a pacman hook to preserve permissions on Node upgrades
  • Register melt as a global command

Note: You will need sudo access. Node.js 18+ must be installed beforehand (sudo pacman -S nodejs npm).

Uninstall

./uninstall.sh

Removes 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.sh is generated by install.sh and tailored to your machine — it only removes what was actually installed. It is not included in the repo.

Usage

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 address

Tip: If you have multiple Bluetooth adapters, select a specific one with:

NOBLE_HCI_DEVICE_ID=1 melt status

Tip: 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 status

Troubleshooting

Cannot 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:

  1. Open your system's Bluetooth settings or run bluetoothctl.
  2. Unpair / Forget the Puffco Proxy completely. Do not attempt to pair it via the OS Bluetooth menu.
  3. Ensure the Puffco Proxy is powered on.
  4. 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:

bluetoothctl

Then, inside the [bluetooth]# prompt, type:

scan on

Wait 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).

Requirements

  • 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)

Screenshot

melt screenshot

Credits

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.

Disclaimer

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:

Buy Me A Coffee

About

CLI tool (adjusted for linux compatibility) for controlling your puffco with a terminal command. Currently supports the puffco proxy.

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • JavaScript 82.2%
  • Shell 17.8%