Your Echo Show 5, rebuilt. Linux inside, Home Assistant in charge, no Amazon cloud.

Built on EchoLocal · Why · Screenshots · Stock vs TECHO5 · Install · Under the hood · Credits · TECHO5 Dot


TECHO5 (Tech Echo 5) is open firmware for the Amazon Echo Show 5, 2nd generation (2021, cronos). It replaces Android and Alexa with a small Alpine Linux image and one Go daemon, turning the Show into a fast, private Home Assistant voice satellite with a touch screen of its own.

Built on EchoLocal

TECHO5 started from EchoLocal by Yuri Gelfand (MIT), which already turns the Echo Dot 2 (biscuit, the same MT8163 family) into an ESPHome-native Home Assistant satellite, with a single static Go daemon that drives the hardware directly. TECHO5's echod is that daemon, vendored and ported to the Show 5's cronos, and much of it is still EchoLocal's code: the wake word engine, the ALSA client and the service framework almost unchanged, and the voice satellite, media player and component registry grown from EchoLocal's own. What TECHO5 added is the Show's hardware, the screen, the camera, Bluetooth, the update and slot system, phone calls, and a minimal Alpine root filesystem in place of Android. See NOTICE for the full attribution and EchoLocal's license.

Why TECHO5

🐧 Real Linux, no Android The Show boots straight into a minimal Alpine Linux root filesystem. No Android framework, no Google services, no app store: one daemon drives the microphones, speaker, screen, camera and radios directly.
🚫 No Alexa, no Amazon account, no Amazon cloud Your voice goes only to your Home Assistant, over its encrypted ESPHome API. The Show reaches the internet just for what you use: update checks against this repo, network time, radio streams with their song and cover lookups, and the rain radar map. Voice and control keep working with the internet down, as long as your Home Assistant pipeline is local.
🎙️ Wake word on the device microWakeWord runs locally: "Alexa", "Okay Nabu", "Hey Jarvis" or "Hey Mycroft", chosen on the screen or in Home Assistant. Echo cancellation keeps it listening over music.
🔐 Secure by default SSH is keys-only and off until you turn it on; keys arrive only through Home Assistant. The camera and screen web pages start closed. No password logins, not even in rescue.
🔄 Updates that can't brick it Releases install over the air from Home Assistant's update card into the spare of two root filesystem slots, boot on trial, and fall back on their own if the new one doesn't settle.
📺 A screen that's actually useful Clock and weather, the conversation as it happens, now playing with song and cover art, forecasts and a live rain radar, live Home Assistant cameras, timers and alarms, Wi-Fi setup, 13 themes.
📻 Weather and radio with no setup A new Show uses the forecast every Home Assistant has, and lists the radio stations near home from Home Assistant's Radio Browser. Pick another weather entity (your own station, say) on the screen, and keep your own favorite stations too.
Alarms that ring on their own Set on the screen, by Home Assistant, or followed from its helpers; they ring from the Show's own clock even when Home Assistant is down. Snooze included.
🎧 Bluetooth, rebuilt Earbuds and speakers over A2DP, plus a Home Assistant Bluetooth proxy, on a kernel rebuilt with Bluetooth from the LineageOS source.
📞 A speakerphone again Calls through your own SIP provider: "call Alex" by voice, calls that ring on the screen, calls between your own devices, and a help call that alerts your phones and dials people in turn. Encrypted end to end to the provider, and off until you sign it in. docs/phone.md
📷 A camera you control The front camera becomes a Home Assistant camera entity, off unless something is watching, and physically off while the mute button is engaged.
🛟 Always recoverable A rescue environment with a USB serial console, and TWRP left in place: LineageOS is one flash away.

Screenshots

Straight from the device's own screen.

Clock with weather and the next alarm An alarm ringing, with Stop and Snooze
Clock, weather and the next alarm Alarm ringing, big enough to hit half awake
Settings: Device tab Settings: Alarms tab
Settings: volume, brightness, Wi-Fi, wake word Alarms: set on the device, no app needed
Alarm editor Settings: <a href=Security tab">
Alarm editor with day chips Security: every open door has a switch
Settings: Theme tab
Themes: presets or your own colours

Stock vs TECHO5

Stock Echo Show 5 (Alexa) TECHO5
Operating system Fire OS (Android) Alpine Linux, one daemon
Voice assistant Alexa, in Amazon's cloud Home Assistant Assist, with any pipeline you run
Where your voice goes Amazon Your Home Assistant, encrypted
Wake word "Alexa", processed for Amazon On the device: Alexa, Okay Nabu, Hey Jarvis, Hey Mycroft
Screen Alexa cards and ads Clock, weather, now playing, cameras, timers, alarms, settings
Music Amazon Music and skills Home Assistant radio lists with cover art, Music Assistant (Sendspin), Home Assistant media
Timers and alarms Alexa Home Assistant timers on screen; alarms that ring without Home Assistant
Camera Video calls, Drop In A Home Assistant camera entity, off unless watched
Bluetooth Speaker and phone audio Audio to earbuds and speakers; Home Assistant Bluetooth proxy
Smart home Alexa routines Everything Home Assistant does
Updates Amazon, automatic, whenever From this repo's releases, when you press Install; A/B slots with automatic fallback
Remote access None SSH with keys, off by default
Listening on your network Amazon's services Home Assistant's encrypted API and the Sendspin player; SSH and web pages only when switched on. A signed-in phone keeps its own connection out to the provider
Calling Alexa calling and Drop In Phone calls through your own SIP provider (TLS and SRTP), placed from Home Assistant or by voice, answered on the screen; device to device calls in the house
Shopping, skills Yes No. Those are Alexa cloud services

Install

New to this? Start with Getting started: every step from a stock Echo Show 5, Dot or Spot, with the unlock guides linked, what to check after each step, and notes for Windows, Linux and macOS.

You need a Show 5 2nd gen unlocked with amonet-cronos and running LineageOS 18.1, a USB cable, a computer (Windows, Linux or macOS) with Python 3, adb and fastboot, and Home Assistant. Each release carries everything else: the boot image (with Bluetooth) and the root filesystem. Nothing is built.

git clone https://github.com/HuskerMinion/techo5
cd techo5
python3 tools/install-show.py --serial <adb serial> --name "Kitchen"

It downloads and checks the release, flashes the boot image, creates the slot store and installs over the USB serial console, and prints where the Home Assistant key is kept. Later updates come from Home Assistant. Every step by hand, and the fixes for what can go wrong: docs/install.md.

Status: in daily use on two Echo Show 5 units. It's a hobby project, not a product: keep your backups, and expect rough edges.

Under the hood

Layer What
Boot Amazon's LK, unlocked with amonet; the LineageOS 4.9 kernel rebuilt with Bluetooth; a rescue initramfs that picks a slot
System Alpine Linux armv7 in two root filesystem slots, read-only, with a trial-and-commit boot counter
Daemon echod, one Go binary: audio, wake word, echo cancellation, screen renderer, touch, camera ISP, Bluetooth, updates
Home Assistant The native ESPHome API: voice satellite, media player, camera, update entity, dozens of settings

Sister project

TECHO5 Dot does the same for the Echo Dot 2nd generation: Linux in place of Fire OS, all seven microphones, Bluetooth speaker mode, signed updates. Both run the same daemon source, built per device.

Standing on shoulders

TECHO5 exists because of these projects and the people behind them.

The path here

What runs on the device

See NOTICE for licenses of code carried in this repository.

The older route: the daemon beside LineageOS (Windows, PowerShell)

Before the Linux image, the daemon ran as an init service on LineageOS 18.1. That still works, on a unit with USB debugging and rooted debugging enabled:

cd echod
$env:GOOS='linux'; $env:GOARCH='arm'; $env:GOARM='7'; $env:CGO_ENABLED='0'
go build -trimpath -ldflags '-s -w' -o ../bin/echod-arm ./cmd/echod
cd ..
.\tools\install-cronos.ps1 -Serial <adb serial> -Name "Kitchen" -KeyFile .\kitchen.psk

The installer puts the daemon in place as an init service, switches Android to its null audio HAL (the daemon owns the microphone and speaker), provisions the name, API key and wake word models, and reboots. Home Assistant then discovers the device as an ESPHome node; paste the key when asked. Android and any app on the screen keep running, silently.