HuskerMinion/techo5-dot
HuskerMinion/techo5-dot has 252 GitHub stars and 15 forks. GitHot measured +4 stars in 24 hours and +33 in 7 days. Last checked 2026-11-12 21:29 UTC. Last push 2026-11-03.
Linux firmware for the Echo Dot (2nd gen): no Fire OS, no Alexa. A local Home Assistant voice satellite with all seven mics, Bluetooth speaker mode, signed A/B updates and SSH.
Measured star growth
- in 24h
- +4
- in 7 days
- +33
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
Original
TECHO5 Dot
The 2016 Echo Dot, minus Amazon's cloud. Linux inside, Home Assistant in charge.
What changed · Stock vs TECHO5 Dot · Install · Echo 2nd gen · Echo Dot 3rd gen · Credits · TECHO5 for the Echo Show 5
TECHO5 Dot replaces Fire OS on the Amazon Echo Dot 2nd generation (codename biscuit), the Echo
2nd generation (2017, codename radar) and the Echo Dot 3rd generation (2018, codename donut) with a
small Alpine Linux image and one daemon. The Dot becomes a Home Assistant voice satellite: it hears the
wake word on the device, talks to Home Assistant over its encrypted native API, and sends nothing to
Amazon. It still uses the internet for what you'd expect: checking this repo for signed updates and
setting its clock.
| 🐧 Real Linux, no Fire OS | Linux boots from the recovery partition and no Android process runs, not even for Wi-Fi. |
| 🚫 No Alexa, no Amazon account | Your voice goes to your Home Assistant, over its encrypted API, and nowhere else. |
| 🎙️ All seven microphones | Averaged, with echo cancellation, and a wake word heard on the device. |
| 🔊 A Bluetooth speaker again | Pair a phone, or send the Dot's audio to a speaker; a Home Assistant Bluetooth proxy on top. |
| 📞 A speakerphone again | Calls through your own SIP provider, placed by voice or from Home Assistant, answered with the action button; a help call that alerts your phones and dials people in turn. |
| 🔐 Locked down | A firewall that blocks inbound traffic except what the Dot serves (Home Assistant, mDNS, SSH, Sendspin, the setup page, DHCP, ping and DLNA discovery), plus AirPlay and Spotify Connect on Wi-Fi while they are on; SSH is keys-only and starts off, and the setup page answers only while it is open. |
| 🎤 Record takes of a word | For training a wake word: a switch under Privacy & Security in Home Assistant, off by default. With it on, the setup page can ask for a recording and the action button starts it. See TECHO5's training guide. |
| 🔄 Signed updates with rollback | ed25519-signed releases install into a spare slot and roll back on their own if they don't come up healthy. |
Built on EchoLocal by Yuri Gelfand (MIT), which first
made the Echo Dot 2 an ESPHome-native Home Assistant satellite with one Go daemon on Fire OS. TECHO5
Dot's daemon is that daemon, by way of TECHO5's echod (EchoLocal's code vendored and developed
further), and much of it is still EchoLocal's. What this project adds is Linux in place of Fire OS:
the boot image and slots, Wi-Fi without Android, the seven-microphone work, rebuilt Bluetooth, signed
updates and the installer. See NOTICE.
It's a sibling of TECHO5, which did the same for the Echo Show 5. Both run the same daemon source, built per device.
Status: in daily use on three units. Everything marked ✅ below was verified on a bench Dot that came from Fire OS 6574.1, and the installer and updates on two more. Expect rough edges, and keep your backups. The Echo 2nd gen and the Echo Dot 3rd gen are supported too, the Echo 2nd gen tested on one unit so far and the Dot 3rd gen on two; see Echo 2nd gen and Echo Dot 3rd gen.
What happened to the Dot
- Fire OS is gone at runtime. Linux boots from the recovery partition. No Android process
runs, not even for Wi-Fi:
cmd/wmtuptalks to MediaTek's combo chip directly, where Amazon's loader used to. - All seven microphones work together. The daemon averages all seven microphones and cancels the speaker's own echo from that average. Measured against the center mic alone, the average heard speech 1–2.5 dB better, and 2–4 dB better between 1.5 and 4.7 kHz. Steering a delay-and-sum beam added nothing on this 72 mm ring, so it isn't the default. The numbers and method are in docs/microphones.md.
- Bluetooth came back, rebuilt. Stock Bluetooth belonged to Fire OS. Here the Dot runs:
- a kernel built from Amazon's GPL source with Bluetooth turned on and 48 upstream security fixes backported (BlueBorne and later);
- a bridge from the chip's raw HCI channel to BlueZ;
- bluez-alsa, rebuilt with an upstream crash fix Alpine's package lacks.
- Updates can't be forged, and a bad one rolls itself back. Releases are signed (ed25519). An update installs into the spare of two root filesystem slots and boots on trial. If it doesn't come up healthy, the Dot returns to the previous slot by itself.
Stock Echo Dot 2 vs TECHO5 Dot
| Stock Echo Dot 2 (Alexa) | TECHO5 Dot | |
|---|---|---|
| Voice assistant | Alexa, in Amazon's cloud | Home Assistant Assist ✅. Wake word on the device (microWakeWord: "Okay Nabu", "Hey Jarvis", "Hey Mycroft", "Alexa", and eight from the community collection — "Computer", "Jarvis", "Hey Friday", "GLaDOS", "HAL", "Terminator", "Marvin", "Home Assistant") ✅. Speech-to-text and replies come from whatever your Home Assistant pipeline uses |
| Where your voice goes | Amazon | Your Home Assistant, over its encrypted native API ✅ |
| Microphones | 7-mic array, Amazon's processing | All 7 averaged, with echo cancellation on the average ✅ |
| Talking over music | Alexa ducks on wake | Ducks on wake, and also for a few seconds after a near miss, so the second try is heard ✅. With echo cancellation on, the microphones stay open while the wake sound plays, so you can speak right after the wake word |
| Speaker | Yes | Yes, a Home Assistant media player ✅ |
| Light ring | Alexa's colors | Wake, listening, thinking, replying and error effects, set from Home Assistant ✅. Choose Follows the Music in Ring follows the room and, while music plays, the ring moves with its level, bass, middle and treble and swells on the beat. The ring is a configuration entity, so Assist doesn't turn it on with the room's lights |
| Voice and call volume | One volume | Voice volume (replies and announcements) and Call volume (intercom calls) can each sit a few steps above or below the music volume. Clearer speech takes the bass down while replies play, off by default. Replies can play on another Home Assistant media player, with the Dot as the fallback. Details |
| Sounds of your own | No | The volume, button, Bluetooth, listening-ended and Drop In sounds can be your own recordings, one at a time or as a sound pack, on the setup page. Details |
| Baby monitor | No | A private link plays the room's sound live in a phone's browser. Off until you turn it on; the light ring pulses amber while someone listens, and the mute button stops it. Details |
| Recent voice requests, live log | No | The last 10 voice requests and the Dot's log as it's written, on the setup page. Details |
| Buttons (action, volume, mic mute) | Yes | Yes, all four ✅. Mute is the hardware mute line |
| Timers | Yes | Yes (Home Assistant timers) |
| 3.5 mm audio out | Yes | In the daemon (jack detection, headphone path), with an Audio output choice on the setup page and in Home Assistant |
| Bluetooth: phone to Dot (Dot as a speaker) | Yes | Yes ✅. Hold the action button for 5 seconds (the ring pulses blue), or turn on Bluetooth pairing in Home Assistant, or say "pair Bluetooth" with this automation. Then pick the Dot on your phone; a chime says it worked. Phone volume works, the wake word still works over the music, and whichever started last plays: phone or Home Assistant media |
| Bluetooth: Dot to a speaker or headphones | Yes | Yes ✅. If no phone pairs within 20 s, pairing mode connects the strongest speaker it hears, since there's no screen to choose on |
| Home Assistant Bluetooth proxy | No | Yes ✅, alongside Bluetooth audio. It keeps scanning after Secure Connections restarts the radio |
| Multi-room music | Alexa groups | Sendspin (Music Assistant) client on port 8928. Built in |
| AirPlay and Spotify Connect | Spotify Connect | Both: off until turned on, on the setup page (Sound & Voice) or in Home Assistant. The Dot shows up under its own name in the Apple and Spotify apps (Spotify Premium), and an iPhone can group it with other AirPlay 2 speakers |
| Calling | Alexa calling and Drop In | Yes ✅, through your own SIP provider (TLS and SRTP): "call Alex" by voice, a help call that alerts phones and dials people in turn, calls between your own devices. The action button answers and hangs up, and the ring pulses green. Off until Home Assistant signs the Dot in. See TECHO5's phone.md |
| Skills, shopping | Yes | No. Those are Alexa cloud services |
| Routines and smart home control | Alexa | Whatever Home Assistant does ✅ |
| Updates | Amazon, automatic | Signed releases from this repo, offered in Home Assistant, A/B slots with automatic rollback ✅ |
| Remote access | None | SSH, keys only, behind a Home Assistant switch that starts off ✅ |
| Network exposure | Amazon's | Firewall: inbound only the Home Assistant API, mDNS, SSH, Sendspin, the setup page, DLNA discovery (SSDP), DHCP replies and ping, and on Wi-Fi AirPlay and Spotify Connect (nothing listens there unless they are on) ✅ |
| Changing Wi-Fi | Alexa app | wifi-set on the Dot, or tools/set-wifi.py from a computer over USB ✅ |
| If it won't boot | Factory reset | Rescue mode (USB console, SSH, firewall) after five bad boots. Fire OS and TWRP are still on the device, one command away ✅ |
Numbers from the bench unit:
- Memory: about 445 MB of 481 MB free with everything running, Bluetooth included.
- Wake word: about 30% of one core.
- Root filesystem: 49 MB.
Boot time
Timed from a reboot command until Home Assistant's API answers from another machine, on the same Dot:
| Reboot to Home Assistant API | |
|---|---|
| Fire OS 6 with the daemon as an Android service | 43.6 s |
| TECHO5 Dot v0.2.0 | 45.5–46.4 s (three runs) |
About the same, not faster. By Linux's own clock the Dot is on Wi-Fi at 21 s and listening for the wake word at 26 s. The other ~19 s come before that clock starts: shutting down, the bootloader, and loading the kernel. An earlier build waited for Bluetooth before starting the daemon and took 128 s; now Bluetooth comes up in the background and a paired speaker reconnects when it's ready.
What you need
- An Echo Dot 2nd gen, already unlocked with amonet, with Fire OS 6574.1 in its system slots, and sitting in TWRP or running Fire OS with root adb (for example with EchoLocal installed). Unlocking isn't part of this project; Getting started has every command. For an Echo 2nd gen, see Echo 2nd gen: it's unlocked the same way, over wires soldered inside. For an Echo Dot 3rd gen, unlocked with kamakiri-donut, see Echo Dot 3rd gen for what differs.
- Two files for the unlock, both linked from the amonet-biscuit XDA thread (see Getting started): the amonet-biscuit release ZIP (it holds
boot-root.zip) and the Fire OS update fileupdate-kindle-biscuit_puffin-NS6574_user_7623_0013121734532.bin. The installer downloads everything else. - The Dot joined to Wi-Fi once in Fire OS (optional). If it hasn't been, or you pass
--wifi "<network name>", the installer asks for the passphrase. - A Windows, Linux or macOS computer with Python 3, adb and git (setup for each), plus Home Assistant. Nothing is compiled.
Installing
Starting from a stock Dot? Getting started walks through it in order: updating Fire OS, the amonet unlock (linked), this installer, and Home Assistant.
git clone https://github.com/HuskerMinion/techo5-dot
cd techo5-dot
python3 tools/install-dot.py --dry-run # checks, backups, download, boot image; writes nothing
python3 tools/install-dot.py
It finds the Dot on its own (asking which, if several are plugged in) and asks what to call it in Home
Assistant when it has no name yet. From a script, pass --serial <adb serial> --name "Kitchen" and it
asks nothing.
The installer:
- Backs up every boot-critical partition to
backups/<serial>/and checks each copy against the device. On TWRP it reads the real bootloader partitions, not amonet's decoys. - Downloads the latest signed release (the root filesystem, the Bluetooth kernel and the rescue
environment's packages). The manifest is only believed once the release key's signature over it
checks out — the same key the device itself trusts — and every file is checked against the
checksums it carries.
--release dot-v0.6.0picks a version instead of the newest — releases here are taggeddot-vX.Y.Z, so the tag is what goes in, not the bare version;--rootfsand--kerneltake your own builds (docs/building.md). - Builds this unit's boot image from its own recovery backup, with the Bluetooth kernel for its
board (
--no-bluetooth-kernelkeeps the unit's own, without Bluetooth). No Amazon binary is ever downloaded or published. - Writes the image to recovery, and the root filesystem into slot a.
- Keeps an existing Home Assistant name and key, or asks for a name and makes a key.
- Reboots, then waits on the Dot's USB console until the boot reports healthy.
Home Assistant then finds the Dot as an ESPHome device.
Updates after that come from this repo's releases, through Home Assistant's update card. They carry the
root filesystem only; a Dot installed before the Bluetooth kernel gets it with
python3 tools/update-boot.py --serial <serial> --address <address> (SSH switched on in Home Assistant).
On Windows, type python for python3.
Echo 2nd gen

The Echo 2nd gen (2017, model XC56PY, radar) has the Dot's SoC and boot chain, so it uses the same release and the
same installer. The installer and the daemon tell the two apart. Supported, tested on one unit so far.
Details are in docs/hardware-radar.md.
Tested on that unit: the speaker (with the unit's own EQ), the headphone jack (mono), voice with Home Assistant, Bluetooth (a phone plays to it), Wi-Fi, all seven microphones, the buttons, the light ring and the light sensor. Not yet: the vendor's own sound tuning files aren't used. It plays without them.
It can also run LibreEcho's Linux 6.1 kernel instead of
the 3.18 one, opt-in: --linux-61 on the installer or on update-boot.py, and --linux-318 goes back.
Bluetooth and the headphone jack aren't tested on 6.1 yet. See
docs/hardware-radar.md.
USB is inside. There's no USB port on the case, only D+, D- and GND pads on the amplifier board inside, marked TP15 (D+), TP14 (D-) and TP13 (GND).
- Open the case. LibreEcho's disassembly guide shows the way in.
- Solder short wires from a USB cable to D+, D- and GND. Leave its red (5 V) wire unconnected: the Echo runs from its own barrel-jack supply. A 3D-printed pogo-pin dock was tried and dropped out once TWRP started. Soldered wires were steady.
Once it's installed you rarely need USB (updates, SSH and Home Assistant all go over Wi-Fi), so the wires can come off afterward. Note which pad is which first.
Unlock with amonet-radar v1.0.0 (R0rt1z2's amonet, branch
mt8163-radar, release zip amonet-radar-v1.0.0.zip):
- Hold the action button (the dot) while you plug in the power. The ring turns blue, then white: that's stock fastboot.
- Run
fastbrick.ps1on Windows, orfastbrick.sh. It printsExploit most likely successful!. If the script never sees the unit, check the wires and try again. With a flaky pogo dock, Windows reported "Port Reset Failed" and "Device Descriptor Request Failed". - If the ring then stays green for minutes, unplug the power, hold + (volume up) and plug it back in. A white ring is amonet's TWRP.
Stock fastboot and TWRP both show white, so go by the step you're on, not only the color. Volume down
at power-on gives amonet's fastboot (a rainbow ring). It doesn't support fastboot boot, and
fastboot reboot from it returns to Fire OS. Until TECHO5 is installed, holding + at power-on gets you back to TWRP.
Afterward TECHO5 sits in the recovery partition where TWRP was: to-twrp puts TWRP back (Getting
started, "Going back to TWRP or Fire OS").
Back up. The installer backs up every boot partition itself and checks each copy by md5. A full copy of the eMMC from TWRP is worth having too: the whole disk is about 3.9 GB and took about 30 minutes over the soldered wires.
Install from TWRP:
python3 tools/install-dot.py --wifi "<network name>"
It asks for the Wi-Fi passphrase and a name for Home Assistant. --ssh-key <file.pub> adds your SSH
key. From dot-v1.0.19 on, the release carries the Echo 2nd gen's own Bluetooth kernel and the installer
takes it. With an older release the unit keeps its own kernel, without Bluetooth.
On Windows, a PC that has seen other Amazon devices may bind the TECHO5 USB console (18d1:4ee7) to
Google's ADB driver instead of a COM port. The install still finished, because Wi-Fi came up. To get
the console, pick USB Serial Device for it in Device Manager.
Echo Dot 3rd gen

The Echo Dot 3rd gen (2018, model D9N29T, donut) is a different machine from the Dot 2: a MediaTek
MT8516, four microphones, and Wi-Fi and Bluetooth on an MT7668. It uses the same release, installer and
update channel, with its own build of the daemon and its own root filesystem. Supported, tested on one
unit so far. Details are in docs/hardware-donut.md. The 2019 refresh and the
model with a clock are other boards and aren't supported.
Tested on that unit: voice with Home Assistant, all four microphones, the speaker, the headphone jack,
the buttons, mute and its light, the light ring, Wi-Fi, Bluetooth (a phone plays to it), the Bluetooth
proxy, and an update to dot-v1.0.31 from Home Assistant. Not yet tried on a Dot 3: update-boot.py,
the rescue after five failed boots, and installing on a unit with no saved Wi-Fi network.
It differs from the Dot 2 in a few places:
- It keeps its own kernel. The image carries the unit's stock kernel, which loads Amazon's Wi-Fi and Bluetooth drivers from the unit's own system partition. The Bluetooth stack that kernel lacks ships as modules built from source, and each release carries their complete source.
- Linux goes in
swdl. There's no recovery partition: the unlock bootsswdlas recovery, where the kit put TWRP. The installer keeps TWRP's copy in the store, soto-twrpworks as on the Dot 2. - Our own wpa_supplicant. Alpine's 2.11 can't finish a Wi-Fi handshake with this driver; ours carries a one-line fix (see the hardware notes).
USB is under the base. There's no USB port on the case. D− and D+ are on test pads TM4 and TM5, ground on TM1. Solder short wires from a USB cable: white (D−) to TM4, green (D+) to TM5, black to TM1. Leave the red (5 V) wire unconnected; the Dot runs from its own adapter. Once it's installed you rarely need USB, since updates, SSH and Home Assistant all go over Wi-Fi.
Unlock with the kamakiri-donut v1.0.0 kit from
its XDA thread:
hold the action (dot) button while you plug in the power to reach the bootrom, and start kamakiri with
the Dot powered off. The kit leaves TWRP in swdl and stock Fire OS in both slots. Then flash its
boot-root.zip for root adb.
Install from Fire OS with root adb, or from TWRP:
python3 tools/install-dot.py
It backs up every boot partition, including swdl with TWRP in it, builds the image on the unit's own
kernel, and puts the root filesystem on userdata. On Windows the TECHO5 console shows up as a USB serial
device (1d6b:0104).
Where things are
- docs/porting-plan.md: how it was built, milestone by milestone, and what each step proved.
- docs/hardware.md: the board, partitions, kernels, and the Bluetooth kernel's security backports.
- docs/hardware-radar.md: the Echo 2nd gen: its board, audio, kernel, unlock and USB.
- docs/hardware-donut.md: the Echo Dot 3rd gen: its board, partitions, boot image, Wi-Fi, audio and Bluetooth modules.
- docs/microphones.md: the array measurements, echo cancellation, and the LED whine that turned out to be Fire OS's.
tools/: the installer, the Wi-Fi tool, the boot image updater, andtools/linux/(initramfs, root filesystem overlay, slot tool, firewall, kernel and bluez-alsa build scripts and patches).cmd/wmtup: Wi-Fi chip bring-up without Android.- docs/building.md: building the kernel, bluez-alsa, the daemon and the root filesystem yourself.
- The daemon's source: TECHO5, branch
main, built with-tags dot(-tags dot,donutfor the Echo Dot 3rd gen).
Credits
See NOTICE for the full list.
- The badges: BISCUIT is a homemade Southern buttermilk biscuit with sorghum syrup, photo by Georgiabrown24, Wikimedia Commons, CC BY-SA 4.0 (the cropped badge is CC BY-SA 4.0 too). RADAR is the 30-foot dish of NSSL's first research Doppler weather radar, NOAA Photo Library, OAR/ERL/National Severe Storms Laboratory, public domain, Wikimedia Commons. DONUT is a chocolate-glazed doughnut with sprinkles, photo by Kiran Foster, Wikimedia Commons, CC BY 2.0.
- EchoLocal (MIT, Yuri Gelfand): the Echo Dot 2 daemon this project is built on (see above).
- EchoMuse / emOS (MIT, Wil Bowes): the first Linux userspace on this hardware. Its notes on the USB gadget, Wi-Fi patch download and the mic array saved days.
- amonet and kaeru (R0rt1z2): the unlock. The Echo Dot 3rd gen's kamakiri-donut kit and its XDA thread.
- Pallav Aggarwal's teardown of the Echo Dot 3rd gen.
- @proffalken: the step-by-step install from Linux (the exact Fire OS build, trusting the adb key, byte-safe backups, the Linux serial console lookup) that the getting started guide and the cross-platform installer are based on.
- jxlarrea: echo cancellation measurements on the Echo Show family.
- bluez-alsa (arkq): the upstream fix for the fdk-aac capability crash (6ccf455).
- The Linux kernel's Bluetooth developers: every backported fix is listed with its commit.
- TECHO5: the daemon, the Linux image tooling and the root filesystem slot design this project shares.
- Amazon's GPL kernel source releases for the Echo Dot (2nd generation), Echo_Dot_src-6.5.7.1-20251024, and the Echo (2nd generation), Echo_v2_src-6.5.7.1-20251024: the kernels the Bluetooth builds start from. For the Echo Dot 3rd gen's Bluetooth modules, the Echo Input's (Echo_Input_src-6.5.4.7-20210719, as imported in bengris32/android_kernel_amazon_cupcake).
- wpa_supplicant (Jouni Malinen and contributors, BSD): Wi-Fi on the Echo Dot 3rd gen, rebuilt with one change.
- Alpine Linux, BlueZ and BusyBox: the system underneath.
- microWakeWord (Kevin Ahrendt) and the ESPHome wake word models: the wake word on the device.
- Home Assistant, ESPHome and go-esphome-device: the voice pipeline and the API the Dot speaks; Music Assistant for Sendspin.
License
MIT for this project. See LICENSE and NOTICE. The kernel patches in
tools/linux/kernel-patches and the bluez-alsa patch keep their upstream licenses (GPL-2.0 and
MIT), and so do the Echo Dot 3rd gen's wpa_supplicant patch (BSD) and Bluetooth modules (GPL-2.0).
TECHO5 Dot isn't affiliated with Amazon. Echo and Alexa are trademarks of Amazon.com, Inc.
Explore related projects
trimstray/the-book-of-secret-knowledge
A collection of inspiring lists, manuals, cheatsheets, blogs, hacks, one-liners, cli/web tools and more.
257,995 starsHack-with-Github/Awesome-Hacking
A collection of various awesome lists for hackers, pentesters and security researchers
125,360 starsswisskyrepo/PayloadsAllTheThings
A list of useful payloads and bypass for Web Application Security and Pentest/CTF
82,623 starscaddyserver/caddy
Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS
79,020 stars