What You’ll Need
Compatible Device
Nest Generation 1 or 2 thermostat with at least 50% battery chargeCheck compatibility →
Computer
Linux or macOS only❌ Windows is NOT supported — see below
USB Cable
Mini USB (Gen 1) or Micro USB (Gen 2)Must be data-capable, not charge-only
Phillips screwdriver
For Gen 1 OnlyMetal tweezers/conductive tool
Step 1: Download Firmware Installer
Download the firmware installer for your operating system:Download for macOS (Intel)
macOS (Intel x64)Intel MacsClick to download →
Download for macOS (Apple Silicon)
macOS (Apple Silicon)M1/M2/M3/M4 MacsClick to download →
Download for Linux
Linux (x64)Ubuntu, Debian, Fedora, etc.Click to download →
Step 2: Prepare the Installer
- Linux (AppImage)
- macOS
-
Install dependencies:
-
Extract the downloaded .zip file:
-
Make the AppImage executable:
-
Add USB device permissions (Optional, but recommended):
If you skip this and hit a “permission denied” error later, come back and run these, then retry.
-
Run the AppImage:
The installer GUI will open and walk you through the rest of the process.
You can follow the on-screen wizard instead of reading the steps below.
Installer not working? Try manual installation
Installer not working? Try manual installation
If the pre-built installer doesn’t work for you, you can run it manually from source:
- Linux
- macOS
This will run the installer directly from source using Electron. The installer GUI will open just like the pre-built version.
Step 3: Enter DFU Mode
When you launch the installer, it will first run a system check and then ask you to select your device generation:
System Check — The installer verifies that required dependencies are present before proceeding.If it fails:
- libusb not found — You skipped the dependency install step. Run
sudo apt-get install -y libusb-1.0-0-dev libudev-dev(Linux) orbrew install libusb(macOS), then relaunch the installer. - Permission error / USB access denied — On Linux, add the udev rule from Step 2 and relaunch. On macOS, grant USB access in System Preferences → Security & Privacy.
- On macOS: “app is damaged” or won’t open — Right-click → Open, then click Open in the dialog. Or go to System Preferences → Security & Privacy → General → click “Open Anyway”.

Select Generation — Choose whether your thermostat is a Generation 1 or Generation 2 device. If you’re unsure, check the compatibility page. Selecting the wrong generation will flash incorrect firmware — if this happens, simply re-run the installer and select the correct option.
Custom Firmware (advanced users)
Custom Firmware (advanced users)

Why use custom firmware? There are a few reasons you might want to build your own:Copy the output into the installer before running it:Then point the installer at your custom firmware using the option shown above.
- Self-hosted server URL — The default firmware points to the No Longer Evil hosted service. If you’re self-hosting and want the thermostat to connect to your server out of the box — without needing the wizard — you can bake your server’s URL directly into the firmware.
- Custom root filesystem — The firmware builder gives you access to the full root filesystem. You can add, remove, or modify scripts and files before the image is built, then flash that customized image to all of your Nest devices consistently.
- Generation 2 (Easy)
- Generation 1 (Advanced)
Gen 2: Simple Reboot Method
Follow these steps carefully:- Attach to back plate - Connect your Nest to the wall back plate and wait 2–3 seconds — this arms the DFU trigger
- Remove from back plate - Remove the Nest from its back plate/wall mount
- Connect via USB immediately - Plug the Nest into your computer using a micro USB cable
- Make sure the No Longer Evil installer app is open and on the flashing screen, waiting for the device
- Reboot the device - Press and hold down on the display for 10-15 seconds until the device reboots
- DFU mode active - Once it reboots, the device will enter DFU mode and the installer will recognize it and begin flashing
The back plate step is required every time. The back plate contact arms the DFU trigger in the bootloader — without it, the device boots normally instead of entering flash mode. If the installer doesn’t detect the device: unplug USB, re-seat on the back plate, wait 2–3 seconds, remove, plug USB again. Repeat the full sequence each attempt.The firmware installer will automatically detect the device and flash the custom bootloader (x-load, u-boot) and kernel (uImage).

Flashing in progress — The installer is writing the bootloader and kernel to the device. Do not unplug the USB cable until it completes.If it stalls or fails: Unplug USB, repeat the full back plate sequence (attach → 2–3 sec → remove → plug USB), and try again. If the installer never detects the device, check your USB cable (must be data-capable, not charge-only) and try a different USB port.

Firmware flashed successfully — The bootloader and kernel have been written to the device. Keep the USB cable connected — the device will now begin booting into the new firmware.If flashing failed mid-way: Unplug and repeat the back plate sequence, then re-run the installer. A partial flash will not permanently damage the device — the DFU bootloader is always recoverable.
Step 4: Wait for Boot
Keep the device plugged in via USB and wait for it to complete its boot sequence — this may take 3–4 minutes. When fully booted, you should see the default Nest temperature screen. Do not disconnect or power off the device during this time.Step 5: Complete the Wizard
Once the device has booted, the installer wizard takes over automatically.The wizard will guide you through:
- Establishing an SSH connection to the thermostat
- Configuring SSH access (disable or change the default password)
- Discovering your Home Assistant instance (optional)
- Discovering and registering your Nest device

Choose hosting mode — Select Cloud Hosted to use the No Longer Evil managed service (recommended for most users). Select Self-Hosted only if you have already set up your own NLE server. If you haven’t set up a server yet and pick Self-Hosted, the wizard will not be able to connect — go back and choose Cloud Hosted, or set up your server first.

SSH connection — The wizard connects to the thermostat over SSH to configure it. The device must still be connected via USB and should have booted into the new firmware by now.If SSH fails: Make sure the USB cable is still plugged in and the device has finished booting (when fully booted, you should see the default Nest temperature screen). If you see a connection timeout, unplug and replug the USB cable, wait 30 seconds, and click Retry.
SSH Password Setup (advanced)
SSH Password Setup (advanced)
If you choose to keep SSH enabled, this screen lets you change the default SSH password from
nolongerevil to a password of your choice. This is recommended if your thermostat is on a network you don’t fully control. You can SSH into the device at any time with ssh root@[THERMOSTAT-IP].

Finding your Nest on the network — The wizard scans your local network to locate the thermostat after it connects to WiFi. The device needs to be on the same network as your computer.If the Nest isn’t found: Check the WiFi credentials on the Nest device itself and confirm it shows as connected. The scan may take up to 60 seconds — wait for it to complete before retrying. Alternatively, if you know the thermostat’s IP address, you can enter it manually and click Use. If it still fails, see the Troubleshooting guide.

Configuring device — The wizard is writing the server URL and account settings to the thermostat. Do not unplug or power off the device during this step.If provisioning fails: Check your internet connection and try again. If it fails repeatedly, see the Troubleshooting guide for SSH-based manual configuration.

Setup complete — The thermostat is configured and connected. Continue to Steps 6 and 7 below to register your account and link the device to your dashboard.
Step 6: Register Account
Once the device has fully rebooted:- Visit https://nolongerevil.com in your web browser
- Register an account (or sign in if you already have one)
- Navigate to your Dashboard
Step 7: Link Your Device
To link your Nest device to your No Longer Evil account:- On your Nest device, navigate to: Settings → Nest App → Get Entry Code
- The device will display a unique entry code
- Enter this code on the No Longer Evil dashboard
- Your device is now linked and ready to use!
Step 8: Reinstall on Wall
Once everything is working:- Align the Nest with the backplate on the wall
- Push gently until it clicks into place
- The device will reconnect to HVAC power and charge
🎉 Success!
Your Nest Thermostat is now running No Longer Evil and connected to your account!Having trouble?
See the Troubleshooting guide →Credits & Acknowledgments
This project builds upon the excellent work of several security researchers and developers:- grant-h / ajb142 - omap_loader, the USB bootloader tool used to flash OMAP devices
- exploiteers (GTVHacker) - Original research and development of the Nest DFU attack, which demonstrated the ability to flash custom firmware to Nest devices gen 1 & gen 2
- guyman70718 - cuckoo_loader_gen1 guide and teardown documentation for Gen 1 DFU mode access
- FULU and all bounty backers - For funding the Nest Learning Thermostat Gen 1/2 bounty and supporting the right-to-repair movement
Get Help
Join our Discord community or open a GitHub issue for assistance


