Sor3nt/Flipper-Zero-ESP32-Port

443

stars

135

commits

C

primary language

Sep 8, 2026

updated

README

[!CAUTION]

๐Ÿšจ SECURITY WARNING โ€” DO NOT FLASH "L15Dev" FIRMWARE ๐Ÿšจ

A firmware build distributed under the name "L15Dev" / "Bitwire" has been reported to contain malware (a virus) and a backdoor. Do not download, flash, or run it under any circumstances.

Only use the official builds from this repository / the web flasher. If you already flashed an "L15Dev" image, re-flash a clean official build and treat any credentials/data on the device (WiFi passwords, captures) as compromised.

WARNING: I do not take responsibility if you damage your board or property. This guide is for educational purposes only โ€” proceed at your own risk.

Flipper Zero ESP32 Port

A port of the Flipper Zero firmware to ESP32-based development boards. This project brings the Flipper Zero UI, services, and application framework to affordable ESP32 hardware โ€” no Flipper Zero required.

Discord

Join the Flipper Zero meets ESP32 - Discord for support and announcements.

Supported Boards

img

BoardMCUDisplayInputSubGHzNFCIRSD Card
LilyGo T-Embed CC1101ESP32-S3 (Xtensa LX7)ST7789 320ร—170Rotary encoder + buttonCC1101PN532 (I2C)RMT TX + RXSPI
Waveshare ESP32-C6-LCD-1.9ESP32-C6 (RISC-V)ST7789V2 320ร—172CST816S touchโ€”โ€”โ€”SPI
Waveshare ESP32-C6-LCD-1.47 โš ๏ธESP32-C6 (RISC-V)JD9853 320ร—172AXS5106L touchโ€”โ€”โ€”SPI
DIY ESP32-S3 with 2.8" TFT โš ๏ธESP32-S3 (Xtensa LX7)2.8" ILI9341 320ร—2406ร— Tactile buttonsCC1101PN532 (I2C)TXSPI

โš ๏ธ Waveshare ESP32-C6-LCD-1.47 โ€” supported but barely usable. The board builds, boots and the UI/touch work, but the ESP32-C6 has only 512 KB SRAM and no PSRAM. RAM-heavy apps are effectively non-functional. In particular WiFi: a normal AP scan works, but monitor mode / handshake capture fails โ€” by the time the app's buffers are allocated the WiFi driver can no longer allocate its DMA buffers (esf_buf_setup_static: alloc eb fail โ†’ ESP_ERR_NO_MEM), so no frames are received. Treat this board as usable only for lightweight apps until the WiFi app's memory footprint is reduced (it was designed for the PSRAM-equipped T-Embed).

โš ๏ธ DIY ESP32-S3 with 2.8" TFT - Currently supported via a fork pending full integration, work in progress, ready to flash bins also available in the discord, updated each release

img

How to Flash

The easiest way is the web flasher โ€” no toolchain required, just a Chrome/Edge browser and a USB cable:

Flash via Browser

Connect your board, click flash, done. After flashing, copy the contents of sdcard.zip onto a FAT32 SD card and insert it โ€” most apps need files there to function.

Firmware Update

Since v2.0.0 the T-Embed can update itself โ€” no PC toolchain or re-flashing required:

  • Over WiFi (OTA): Settings โ†’ Update Firmware checks the release server for a newer build, downloads and installs it in the background, then reboots. It also keeps your SD card files in sync.
  • Over USB: use the qT-Embed desktop companion (a qFlipper-style app for this port) to stream the display, manage SD files and flash firmware over USB โ€” including a Full flash option (bootloader + partition table + firmware) to recover a device.

Requires the dual-OTA partition layout. A device on the old single-app layout has to be flashed once via the web flasher (or qT-Embed's Full flash) before wireless OTA updates work.

Apps

๐Ÿ“ก Wireless / RF

Sub-GHz

External CC1101 receiver/transmitter for 433โ€“868 MHz signals.

  • Receive & decode
  • Read RAW: capture unknown waveforms to .sub files for later analysis
  • Frequency analyzer with sweep & live RSSI
  • RF Spectrum Analyzer โ€” colorful, HackRF-style live spectrum view
  • Hopper: scan all preset bands during receive
  • Transmit saved files; manual signal creation (frequency, modulation, protocol, key/serial/counter)
  • Brute force / sub-brute attack with manufacturer dictionary
  • Playlist for sequential transmit
  • More protocols โ€” added KeeLoq variants (ERREKA, PUJOL, AERF, SIMPLE_JCM), Agilize Key Pro and Holtek HT6P20B
  • TPMS decoding โ€” tire-pressure sensors: Schrader GG4, Citroรซn, Ford, Renault, Toyota (PMV107J) and a generic decoder; dedicated info view with editable sensor data
  • Limitation: AES-encrypted manufacturer keystores (keeloq_mfcodes, nice_flor_s, alutech_at_4n) are not decryptable on this port โ€” only the plain-text keeloq_mfcodes_user works for Keeloq decoding.

Sub-GHz Remote

Multi-button remote layouts that batch saved .sub files. Map Up/Down/Left/Right/OK to individual transmit signals; switch between persistent remote profiles.

WiFi

Full WiFi pentest toolkit.

  • Scanner โ€” SSID, BSSID, channel, RSSI, auth mode
  • Connect โ€” auto-detect WPA/WPA2/WPA3, password input or saved password lookup (/ext/wifi/<ssid>.txt)
  • Deauther โ€” SSID-mode (single AP) or Channel-mode (all on channel)
  • Smart Deauth โ€” targeted, station-aware deauthentication
  • Sniffer โ€” capture packets to PCAP (saved to /ext/wifi/)
  • Handshake capture โ€” record EAPOL 4-way handshakes, optionally with deauth trigger
  • AirSnitch โ€” auto-bruteforce target with password list
  • Beacon Spam โ€” Funny SSIDs / Rickroll / Random / Custom
  • Network Scan / Port Scan โ€” host discovery + 19 common-port probe on the connected network
  • Web Crawler โ€” domain-based web crawler
  • Evil Portal โ€” captive portal with credential harvesting
    • Built-in templates: Google login, Router firmware update
    • Custom templates from /ext/wifi/evil_portal/login_template/*.html and /ext/wifi/evil_portal/router_template/*.html (filename = template name in dropdown)
    • Marker substitution: %ERROR%, %SSID_OPTIONS% (live AP scan)
    • Router-style verify flow: dropdown of real SSIDs, live WLAN re-auth check, captured-credentials screen on success, retry with error banner on fail
    • Pause/Resume of the AP from the run screen
    • Captured creds saved to /ext/wifi/evil_portal/<ssid>_creds.csv
    • Internet bridge (new) โ€” optional STA uplink with NAPT + DNS forwarding so victims get real internet behind the portal; iOS captive-portal "Success" handling; uplink SSID/password configured in-app
  • Web-Filesystem โ€” HTTP file server for the SD card; open it in a browser (device hotspot or your existing WiFi) to upload, download, rename and delete files, with drag & drop for whole folders
  • SMB Browser โ€” browse and download from SMB2/3 network shares (Windows / macOS / NAS) straight to the SD card; guest or password login
  • Android TV Remote โ€” control any Android / Google TV (Sony, NVIDIA Shield, Xiaomi Mi Box, Chromecast, โ€ฆ): scan โ†’ pair once with the on-screen PIN โ†’ on-screen remote (D-Pad, volume, media, power)
  • Global toggle โ€” WiFi is now an on/off switch like Bluetooth (from the lock menu); the connection persists across apps and reconnects automatically after a reboot

Mesh / Buddy (ESP-NOW)

Pair cheap headless ESP32 boards (buddies) to the T-Embed (master) over ESP-NOW to offload WiFi capture and run remote actions.

  • Buddy discovery, pair/remove and live status from the lock menu โ†’ Mesh Clients
  • Device Identify โ€” make a paired buddy blink to locate it
  • WiFi handshake capture โ€” buddy passively captures EAPOL handshakes on a chosen channel (1โ€“13)
  • Store-and-forward โ€” the buddy holds each complete handshake (M1โ€“M4 + beacon) durably (RAM + NVS) per BSSID and delivers it as one acknowledged unit, surviving master absence and buddy reboots
  • One .pcap per network written to /ext/wifi/buddy_<name>_<ssid>.pcap; "Handshake received" overlay on all mesh views
  • Buddy firmware ships in this repo under buddy_firmware/ (standalone headless ESP-IDF project)

Bluetooth

  • BLE Spam โ€” Apple Continuity (Pair/Action/NotYourDevice), Google FastPair (455+ models), Microsoft SwiftPair, Samsung Buds & Watch, Xiaomi QuickConnect
  • BLE Walk โ€” passive scanner with GATT service/characteristic inspection
  • BLE Clone (dev) โ€” replicate active BLE advertisements
  • FindMy โ€” emulate Apple AirTag, Samsung SmartTag, Tile beacons (clone or generate keypairs)
  • HID (see below) โ€” keyboard/mouse/media remote over BLE
  • Bad USB โ€” via USB or BLE

NRF24 (2.4 GHz, external nRF24L01)

  • Spectrum analyzer โ€” live 2.4 GHz channel activity
  • Jammer (rewritten) โ€” one engine with switchable channel sources (Protocol / Manual / WiFi / Activity scan), strategies (CW / Flood / Turbo) and presets; configuration persists per source
  • MouseJacker โ€” inject keystrokes into vulnerable wireless mice/keyboards
  • Also available as a FAP (nRF24_jammer)

Infrared

RMT-based TX + RX.

  • Learn signals (auto-decoded or raw)
  • Browse, edit, and send saved remotes
  • Universal remotes: TV, AC, audio, projectors, fans, LED controllers (databases on SD)
  • Brute force category-based databases
  • Configurable IR pin and 5 V GPIO power
  • Protocols: NEC, NEC42, Samsung32, RC5/RC5X, RC6, SIRC 12/15/20, Kaseikyo, RCA, Pioneer

๐Ÿชช NFC

NFC (PN532 over I2C)

  • Read, save, emulate, write NFC cards/tags
  • Manual card generation (custom UID/ATQA/SAK)
  • Mifare Classic dictionary attack (system + user dictionaries)
  • Mifare Ultralight-C dictionary unlock
  • ISO15693 SLIX unlock with manual or stored DEF key
  • FeliCa system info, MIFARE DESFire app inspection, EMV transaction history
  • 14 supported protocols: ISO14443-3A/3B/4A/4B, ISO15693-3, FeliCa, MIFARE Classic/Ultralight/Plus/DESFire, SLIX, ST25TB, NTAG4xx, Type-4
  • 30+ supported card auto-parsers (Charlie Card, Clipper, EMV, Gallagher, HID, Opal, Skylanders, Troika, โ€ฆ)

Passy (FAP)

Biometric passport (MRTD) reader โ€” reads and displays data groups from ePassports over NFC. Shipped as a prebuilt FAP in sdcard.zip.

TagTinker (FAP)

Infrared ESL (Electronic Shelf Label) research toolkit. Transmits custom images/text to graphics tags via IR. RLE streaming, Android companion app for image editing, monochrome + accent-color support.

โŒจ๏ธ HID / USB

Bad USB

HID payload runner for Ducky-script (.txt) files from /ext/badusb/.

  • 16+ Ducky commands (DELAY, STRING, REPEAT, HOLD/RELEASE, MEDIA keys, mouse, ALT-CHAR/ALT-STRING, SYSRQ)
  • Layouts under /ext/badusb/assets/layouts/*.kl (~30 included)
  • Configurable USB VID/PID + device name
  • BLE bonding with custom MAC and PIN-verify pairing
  • Mouse movement, scroll, button emulation; per-character typing delay
  • Transport: USB OTG (TinyUSB) on T-Embed, BLE on Waveshare

๐Ÿ›  System / Tools

Lock Menu / System Toggles

The desktop lock menu doubles as the central system control panel (board-dependent, scrollable):

  • qFlipper โ€” enable the qFlipper desktop bridge (VID/PID spoof + CDC RPC) so the official qFlipper app can connect (USB-OTG boards)
  • USB Storage โ€” expose the SD card as a USB mass-storage device (USB-OTG boards)
  • Bluetooth โ€” toggle BLE on/off
  • WiFi โ€” toggle WiFi on/off (mutually exclusive with Bluetooth; reconnects to the last network automatically)
  • Web-Filesystem โ€” start the SD-card web file server (see WiFi above)
  • Mesh Clients โ€” buddy discovery & control (see Mesh / Buddy above)

Archive

SD-card file browser with tabs per media type: Favorites, Sub-GHz, NFC, LF-RFID, Infrared, iButton, Bad USB, U2F, Apps, Internal, Browser. Pin/unpin favorites; copy, paste, rename, delete, create folder.

JS Runner

mJS-based JavaScript runtime for user scripts in /ext/apps/Scripts/*.js.

  • Available modules: gui (loading/menu/dialogs/text+byte input/popup/file picker/widget), notification, math, storage, event_loop, subghz, infrared, badusb, blebeacon
  • Excluded on this port (need HAL porting): js_serial, js_gpio, js_i2c, js_spi

๐ŸŽต Media

Streaming

Unified music & video player (replaces the old separate MP3/Video apps). Browse .mp3 and .mp4 files from /ext/apps_data/medien.

  • Music โ€” play locally through the speaker, or stream to AirPlay speakers
  • Cast to your network โ€” Chromecast / Google Cast and DLNA devices, including TVs (music & video)

๐ŸŽฎ Games

Doom

Full DOOM port. Place doom1.wad at /ext/apps_data/doom/doom1.wad. Encoder turns; click fires (short) / walks forward (long). Side-button uses doors/switches (short) / opens menu (long).

Snake

Classic snake game.

โš™ Settings & General

Bluetooth, backlight, clock, dolphin/passport, expansion port, input, notification, power, storage, system info, factory reset. Animated dolphin desktop on idle. File-pack manifest at /ext/Manifest (qFlipper-style asset list โ€” its presence suppresses the "No DB" boot animation).

  • Update Firmware โ€” wireless OTA firmware + SD-card update (see Firmware Update above)
  • Interface โ€” customize the main menu and its layout
  • Spoofing โ€” change the device name and the shell/terminal color

SD Card Layout

PathUsed by
/ext/ManifestDesktop (presence check)
/ext/dolphin/ + manifest.txtIdle animations
/ext/apps_assets/nfc/plugins/NFC protocol plugins (.fal)
/ext/apps_data/nfc/plugins/NFC card-parser plugins (.fal)
/ext/apps_data/js_app/plugins/JS module bindings (.fal)
/ext/apps_data/doom/doom1.wadDoom
/ext/badusb/Bad USB scripts + assets/layouts/*.kl
/ext/infrared/assets/Universal remote DBs (tv.ir, ac.ir, audio.ir, projectors.ir, fans.ir, leds.ir)
/ext/lfrfid/assets/iso3166.lfrfidLF-RFID country code lookup
/ext/nfc/assets/MIFARE & EMV dictionaries
/ext/subghz/assets/SubGHz keystores + dangerous_settings
/ext/u2f/assets/U2F cert + key
/ext/wifi/<ssid>.txtSaved WiFi passwords
/ext/wifi/buddy_<name>_<ssid>.pcapMesh/Buddy handshake captures
/ext/wifi/evil_portal/login_template/Custom captive-portal templates (no verify)
/ext/wifi/evil_portal/router_template/Custom captive-portal templates (with WLAN verify)

A complete starter kit is in sdcard.zip โ€” extract it onto a FAT32 SD.

Building

Prerequisites

  • ESP-IDF v5.4.1 (exact version required)
  • ESP-IDF export script sourced (default: ~/esp/esp-idf/export.sh)

Build & Flash (Linux / macOS)

# T-Embed (auto-detects /dev/cu.usbmodem*)
./buildAndFlash_T-Embed.sh

# Build only
./buildAndFlash_T-Embed.sh --build-only

# Waveshare ESP32-C6
./buildAndFlash_Waveshare_c6_1.47.sh
./buildAndFlash_Waveshare_c6_1.9.sh

Build & Flash (Windows)

Use winbuild.py โ€” a single CLI that wraps build, flash and serial-monitor steps for cmd.exe / PowerShell. Requires Python 3 and ESP-IDF v5.4.1 installed at C:\Espressif\frameworks\esp-idf-v5.4.1 (or override via ESP_IDF_DIR).

:: One-time: install ESP-IDF python env
python winbuild.py setup

:: Verify the toolchain activates
python winbuild.py check

:: Build T-Embed CC1101 (default board)
python winbuild.py build

:: Build Waveshare ESP32-C6
python winbuild.py build --board waveshare_c6

:: Flash (port defaults to %ESPPORT% or COM14)
python winbuild.py flash --port COM14

:: Stream serial output for N seconds
python winbuild.py monitor --duration 30

:: Build + flash + monitor in one go
python winbuild.py all --port COM14

Boards: t_embed (default), esp32s3, waveshare_c6 (or waveshare_c6_1.9), waveshare_c6_1.47. Override defaults with ESP_IDF_DIR and ESPPORT env vars. monitor --reset only works on USB-UART bridges, not on the ESP32-S3 native USB-Serial/JTAG โ€” use flash or all to capture boot logs.

Build a FAP

# Firmware must be built first (Linux/macOS)
./buildFap.sh applications/main/my_app

Porting Approach

This port preserves the original Flipper Zero architecture as closely as possible:

  • Furi OS runs on FreeRTOS with the same thread/mutex/event/record API
  • Services (GUI, Input, Storage, Loader, Desktop, BT) use the same message-queue and record-system patterns
  • HAL maps STM32 peripherals to ESP-IDF drivers (SPI โ†’ esp_lcd, I2C โ†’ CST816S/PN532, RMT โ†’ IR, Bluedroid โ†’ BLE, TinyUSB โ†’ USB-HID)
  • Display renders the original 128ร—64 mono framebuffer, then 2ร— upscales to RGB565 for the color LCD
  • Applications compile with minimal changes (#include path adjustments, no-op stubs for missing hardware like 1-Wire)
  • malloc is redefined to calloc โ€” STM32 heap starts zeroed, ESP32 does not
  • Crypto is stubbed (no Flipper-Enclave key) โ€” affects encrypted SubGHz keystores; everything else uses real mbedtls

Contributors

Sor3nt

30 commits

AmsaOne

20 commits

rawnullbyte

15 commits

Sor3nt/Flipper-Zero-ESP32-Port

443

stars

135

commits

C

primary language

Sep 8, 2026

updated

README

[!CAUTION]

๐Ÿšจ SECURITY WARNING โ€” DO NOT FLASH "L15Dev" FIRMWARE ๐Ÿšจ

A firmware build distributed under the name "L15Dev" / "Bitwire" has been reported to contain malware (a virus) and a backdoor. Do not download, flash, or run it under any circumstances.

Only use the official builds from this repository / the web flasher. If you already flashed an "L15Dev" image, re-flash a clean official build and treat any credentials/data on the device (WiFi passwords, captures) as compromised.

WARNING: I do not take responsibility if you damage your board or property. This guide is for educational purposes only โ€” proceed at your own risk.

Flipper Zero ESP32 Port

A port of the Flipper Zero firmware to ESP32-based development boards. This project brings the Flipper Zero UI, services, and application framework to affordable ESP32 hardware โ€” no Flipper Zero required.

Discord

Join the Flipper Zero meets ESP32 - Discord for support and announcements.

Supported Boards

img

BoardMCUDisplayInputSubGHzNFCIRSD Card
LilyGo T-Embed CC1101ESP32-S3 (Xtensa LX7)ST7789 320ร—170Rotary encoder + buttonCC1101PN532 (I2C)RMT TX + RXSPI
Waveshare ESP32-C6-LCD-1.9ESP32-C6 (RISC-V)ST7789V2 320ร—172CST816S touchโ€”โ€”โ€”SPI
Waveshare ESP32-C6-LCD-1.47 โš ๏ธESP32-C6 (RISC-V)JD9853 320ร—172AXS5106L touchโ€”โ€”โ€”SPI
DIY ESP32-S3 with 2.8" TFT โš ๏ธESP32-S3 (Xtensa LX7)2.8" ILI9341 320ร—2406ร— Tactile buttonsCC1101PN532 (I2C)TXSPI

โš ๏ธ Waveshare ESP32-C6-LCD-1.47 โ€” supported but barely usable. The board builds, boots and the UI/touch work, but the ESP32-C6 has only 512 KB SRAM and no PSRAM. RAM-heavy apps are effectively non-functional. In particular WiFi: a normal AP scan works, but monitor mode / handshake capture fails โ€” by the time the app's buffers are allocated the WiFi driver can no longer allocate its DMA buffers (esf_buf_setup_static: alloc eb fail โ†’ ESP_ERR_NO_MEM), so no frames are received. Treat this board as usable only for lightweight apps until the WiFi app's memory footprint is reduced (it was designed for the PSRAM-equipped T-Embed).

โš ๏ธ DIY ESP32-S3 with 2.8" TFT - Currently supported via a fork pending full integration, work in progress, ready to flash bins also available in the discord, updated each release

img

How to Flash

The easiest way is the web flasher โ€” no toolchain required, just a Chrome/Edge browser and a USB cable:

Flash via Browser

Connect your board, click flash, done. After flashing, copy the contents of sdcard.zip onto a FAT32 SD card and insert it โ€” most apps need files there to function.

Firmware Update

Since v2.0.0 the T-Embed can update itself โ€” no PC toolchain or re-flashing required:

  • Over WiFi (OTA): Settings โ†’ Update Firmware checks the release server for a newer build, downloads and installs it in the background, then reboots. It also keeps your SD card files in sync.
  • Over USB: use the qT-Embed desktop companion (a qFlipper-style app for this port) to stream the display, manage SD files and flash firmware over USB โ€” including a Full flash option (bootloader + partition table + firmware) to recover a device.

Requires the dual-OTA partition layout. A device on the old single-app layout has to be flashed once via the web flasher (or qT-Embed's Full flash) before wireless OTA updates work.

Apps

๐Ÿ“ก Wireless / RF

Sub-GHz

External CC1101 receiver/transmitter for 433โ€“868 MHz signals.

  • Receive & decode
  • Read RAW: capture unknown waveforms to .sub files for later analysis
  • Frequency analyzer with sweep & live RSSI
  • RF Spectrum Analyzer โ€” colorful, HackRF-style live spectrum view
  • Hopper: scan all preset bands during receive
  • Transmit saved files; manual signal creation (frequency, modulation, protocol, key/serial/counter)
  • Brute force / sub-brute attack with manufacturer dictionary
  • Playlist for sequential transmit
  • More protocols โ€” added KeeLoq variants (ERREKA, PUJOL, AERF, SIMPLE_JCM), Agilize Key Pro and Holtek HT6P20B
  • TPMS decoding โ€” tire-pressure sensors: Schrader GG4, Citroรซn, Ford, Renault, Toyota (PMV107J) and a generic decoder; dedicated info view with editable sensor data
  • Limitation: AES-encrypted manufacturer keystores (keeloq_mfcodes, nice_flor_s, alutech_at_4n) are not decryptable on this port โ€” only the plain-text keeloq_mfcodes_user works for Keeloq decoding.

Sub-GHz Remote

Multi-button remote layouts that batch saved .sub files. Map Up/Down/Left/Right/OK to individual transmit signals; switch between persistent remote profiles.

WiFi

Full WiFi pentest toolkit.

  • Scanner โ€” SSID, BSSID, channel, RSSI, auth mode
  • Connect โ€” auto-detect WPA/WPA2/WPA3, password input or saved password lookup (/ext/wifi/<ssid>.txt)
  • Deauther โ€” SSID-mode (single AP) or Channel-mode (all on channel)
  • Smart Deauth โ€” targeted, station-aware deauthentication
  • Sniffer โ€” capture packets to PCAP (saved to /ext/wifi/)
  • Handshake capture โ€” record EAPOL 4-way handshakes, optionally with deauth trigger
  • AirSnitch โ€” auto-bruteforce target with password list
  • Beacon Spam โ€” Funny SSIDs / Rickroll / Random / Custom
  • Network Scan / Port Scan โ€” host discovery + 19 common-port probe on the connected network
  • Web Crawler โ€” domain-based web crawler
  • Evil Portal โ€” captive portal with credential harvesting
    • Built-in templates: Google login, Router firmware update
    • Custom templates from /ext/wifi/evil_portal/login_template/*.html and /ext/wifi/evil_portal/router_template/*.html (filename = template name in dropdown)
    • Marker substitution: %ERROR%, %SSID_OPTIONS% (live AP scan)
    • Router-style verify flow: dropdown of real SSIDs, live WLAN re-auth check, captured-credentials screen on success, retry with error banner on fail
    • Pause/Resume of the AP from the run screen
    • Captured creds saved to /ext/wifi/evil_portal/<ssid>_creds.csv
    • Internet bridge (new) โ€” optional STA uplink with NAPT + DNS forwarding so victims get real internet behind the portal; iOS captive-portal "Success" handling; uplink SSID/password configured in-app
  • Web-Filesystem โ€” HTTP file server for the SD card; open it in a browser (device hotspot or your existing WiFi) to upload, download, rename and delete files, with drag & drop for whole folders
  • SMB Browser โ€” browse and download from SMB2/3 network shares (Windows / macOS / NAS) straight to the SD card; guest or password login
  • Android TV Remote โ€” control any Android / Google TV (Sony, NVIDIA Shield, Xiaomi Mi Box, Chromecast, โ€ฆ): scan โ†’ pair once with the on-screen PIN โ†’ on-screen remote (D-Pad, volume, media, power)
  • Global toggle โ€” WiFi is now an on/off switch like Bluetooth (from the lock menu); the connection persists across apps and reconnects automatically after a reboot

Mesh / Buddy (ESP-NOW)

Pair cheap headless ESP32 boards (buddies) to the T-Embed (master) over ESP-NOW to offload WiFi capture and run remote actions.

  • Buddy discovery, pair/remove and live status from the lock menu โ†’ Mesh Clients
  • Device Identify โ€” make a paired buddy blink to locate it
  • WiFi handshake capture โ€” buddy passively captures EAPOL handshakes on a chosen channel (1โ€“13)
  • Store-and-forward โ€” the buddy holds each complete handshake (M1โ€“M4 + beacon) durably (RAM + NVS) per BSSID and delivers it as one acknowledged unit, surviving master absence and buddy reboots
  • One .pcap per network written to /ext/wifi/buddy_<name>_<ssid>.pcap; "Handshake received" overlay on all mesh views
  • Buddy firmware ships in this repo under buddy_firmware/ (standalone headless ESP-IDF project)

Bluetooth

  • BLE Spam โ€” Apple Continuity (Pair/Action/NotYourDevice), Google FastPair (455+ models), Microsoft SwiftPair, Samsung Buds & Watch, Xiaomi QuickConnect
  • BLE Walk โ€” passive scanner with GATT service/characteristic inspection
  • BLE Clone (dev) โ€” replicate active BLE advertisements
  • FindMy โ€” emulate Apple AirTag, Samsung SmartTag, Tile beacons (clone or generate keypairs)
  • HID (see below) โ€” keyboard/mouse/media remote over BLE
  • Bad USB โ€” via USB or BLE

NRF24 (2.4 GHz, external nRF24L01)

  • Spectrum analyzer โ€” live 2.4 GHz channel activity
  • Jammer (rewritten) โ€” one engine with switchable channel sources (Protocol / Manual / WiFi / Activity scan), strategies (CW / Flood / Turbo) and presets; configuration persists per source
  • MouseJacker โ€” inject keystrokes into vulnerable wireless mice/keyboards
  • Also available as a FAP (nRF24_jammer)

Infrared

RMT-based TX + RX.

  • Learn signals (auto-decoded or raw)
  • Browse, edit, and send saved remotes
  • Universal remotes: TV, AC, audio, projectors, fans, LED controllers (databases on SD)
  • Brute force category-based databases
  • Configurable IR pin and 5 V GPIO power
  • Protocols: NEC, NEC42, Samsung32, RC5/RC5X, RC6, SIRC 12/15/20, Kaseikyo, RCA, Pioneer

๐Ÿชช NFC

NFC (PN532 over I2C)

  • Read, save, emulate, write NFC cards/tags
  • Manual card generation (custom UID/ATQA/SAK)
  • Mifare Classic dictionary attack (system + user dictionaries)
  • Mifare Ultralight-C dictionary unlock
  • ISO15693 SLIX unlock with manual or stored DEF key
  • FeliCa system info, MIFARE DESFire app inspection, EMV transaction history
  • 14 supported protocols: ISO14443-3A/3B/4A/4B, ISO15693-3, FeliCa, MIFARE Classic/Ultralight/Plus/DESFire, SLIX, ST25TB, NTAG4xx, Type-4
  • 30+ supported card auto-parsers (Charlie Card, Clipper, EMV, Gallagher, HID, Opal, Skylanders, Troika, โ€ฆ)

Passy (FAP)

Biometric passport (MRTD) reader โ€” reads and displays data groups from ePassports over NFC. Shipped as a prebuilt FAP in sdcard.zip.

TagTinker (FAP)

Infrared ESL (Electronic Shelf Label) research toolkit. Transmits custom images/text to graphics tags via IR. RLE streaming, Android companion app for image editing, monochrome + accent-color support.

โŒจ๏ธ HID / USB

Bad USB

HID payload runner for Ducky-script (.txt) files from /ext/badusb/.

  • 16+ Ducky commands (DELAY, STRING, REPEAT, HOLD/RELEASE, MEDIA keys, mouse, ALT-CHAR/ALT-STRING, SYSRQ)
  • Layouts under /ext/badusb/assets/layouts/*.kl (~30 included)
  • Configurable USB VID/PID + device name
  • BLE bonding with custom MAC and PIN-verify pairing
  • Mouse movement, scroll, button emulation; per-character typing delay
  • Transport: USB OTG (TinyUSB) on T-Embed, BLE on Waveshare

๐Ÿ›  System / Tools

Lock Menu / System Toggles

The desktop lock menu doubles as the central system control panel (board-dependent, scrollable):

  • qFlipper โ€” enable the qFlipper desktop bridge (VID/PID spoof + CDC RPC) so the official qFlipper app can connect (USB-OTG boards)
  • USB Storage โ€” expose the SD card as a USB mass-storage device (USB-OTG boards)
  • Bluetooth โ€” toggle BLE on/off
  • WiFi โ€” toggle WiFi on/off (mutually exclusive with Bluetooth; reconnects to the last network automatically)
  • Web-Filesystem โ€” start the SD-card web file server (see WiFi above)
  • Mesh Clients โ€” buddy discovery & control (see Mesh / Buddy above)

Archive

SD-card file browser with tabs per media type: Favorites, Sub-GHz, NFC, LF-RFID, Infrared, iButton, Bad USB, U2F, Apps, Internal, Browser. Pin/unpin favorites; copy, paste, rename, delete, create folder.

JS Runner

mJS-based JavaScript runtime for user scripts in /ext/apps/Scripts/*.js.

  • Available modules: gui (loading/menu/dialogs/text+byte input/popup/file picker/widget), notification, math, storage, event_loop, subghz, infrared, badusb, blebeacon
  • Excluded on this port (need HAL porting): js_serial, js_gpio, js_i2c, js_spi

๐ŸŽต Media

Streaming

Unified music & video player (replaces the old separate MP3/Video apps). Browse .mp3 and .mp4 files from /ext/apps_data/medien.

  • Music โ€” play locally through the speaker, or stream to AirPlay speakers
  • Cast to your network โ€” Chromecast / Google Cast and DLNA devices, including TVs (music & video)

๐ŸŽฎ Games

Doom

Full DOOM port. Place doom1.wad at /ext/apps_data/doom/doom1.wad. Encoder turns; click fires (short) / walks forward (long). Side-button uses doors/switches (short) / opens menu (long).

Snake

Classic snake game.

โš™ Settings & General

Bluetooth, backlight, clock, dolphin/passport, expansion port, input, notification, power, storage, system info, factory reset. Animated dolphin desktop on idle. File-pack manifest at /ext/Manifest (qFlipper-style asset list โ€” its presence suppresses the "No DB" boot animation).

  • Update Firmware โ€” wireless OTA firmware + SD-card update (see Firmware Update above)
  • Interface โ€” customize the main menu and its layout
  • Spoofing โ€” change the device name and the shell/terminal color

SD Card Layout

PathUsed by
/ext/ManifestDesktop (presence check)
/ext/dolphin/ + manifest.txtIdle animations
/ext/apps_assets/nfc/plugins/NFC protocol plugins (.fal)
/ext/apps_data/nfc/plugins/NFC card-parser plugins (.fal)
/ext/apps_data/js_app/plugins/JS module bindings (.fal)
/ext/apps_data/doom/doom1.wadDoom
/ext/badusb/Bad USB scripts + assets/layouts/*.kl
/ext/infrared/assets/Universal remote DBs (tv.ir, ac.ir, audio.ir, projectors.ir, fans.ir, leds.ir)
/ext/lfrfid/assets/iso3166.lfrfidLF-RFID country code lookup
/ext/nfc/assets/MIFARE & EMV dictionaries
/ext/subghz/assets/SubGHz keystores + dangerous_settings
/ext/u2f/assets/U2F cert + key
/ext/wifi/<ssid>.txtSaved WiFi passwords
/ext/wifi/buddy_<name>_<ssid>.pcapMesh/Buddy handshake captures
/ext/wifi/evil_portal/login_template/Custom captive-portal templates (no verify)
/ext/wifi/evil_portal/router_template/Custom captive-portal templates (with WLAN verify)

A complete starter kit is in sdcard.zip โ€” extract it onto a FAT32 SD.

Building

Prerequisites

  • ESP-IDF v5.4.1 (exact version required)
  • ESP-IDF export script sourced (default: ~/esp/esp-idf/export.sh)

Build & Flash (Linux / macOS)

# T-Embed (auto-detects /dev/cu.usbmodem*)
./buildAndFlash_T-Embed.sh

# Build only
./buildAndFlash_T-Embed.sh --build-only

# Waveshare ESP32-C6
./buildAndFlash_Waveshare_c6_1.47.sh
./buildAndFlash_Waveshare_c6_1.9.sh

Build & Flash (Windows)

Use winbuild.py โ€” a single CLI that wraps build, flash and serial-monitor steps for cmd.exe / PowerShell. Requires Python 3 and ESP-IDF v5.4.1 installed at C:\Espressif\frameworks\esp-idf-v5.4.1 (or override via ESP_IDF_DIR).

:: One-time: install ESP-IDF python env
python winbuild.py setup

:: Verify the toolchain activates
python winbuild.py check

:: Build T-Embed CC1101 (default board)
python winbuild.py build

:: Build Waveshare ESP32-C6
python winbuild.py build --board waveshare_c6

:: Flash (port defaults to %ESPPORT% or COM14)
python winbuild.py flash --port COM14

:: Stream serial output for N seconds
python winbuild.py monitor --duration 30

:: Build + flash + monitor in one go
python winbuild.py all --port COM14

Boards: t_embed (default), esp32s3, waveshare_c6 (or waveshare_c6_1.9), waveshare_c6_1.47. Override defaults with ESP_IDF_DIR and ESPPORT env vars. monitor --reset only works on USB-UART bridges, not on the ESP32-S3 native USB-Serial/JTAG โ€” use flash or all to capture boot logs.

Build a FAP

# Firmware must be built first (Linux/macOS)
./buildFap.sh applications/main/my_app

Porting Approach

This port preserves the original Flipper Zero architecture as closely as possible:

  • Furi OS runs on FreeRTOS with the same thread/mutex/event/record API
  • Services (GUI, Input, Storage, Loader, Desktop, BT) use the same message-queue and record-system patterns
  • HAL maps STM32 peripherals to ESP-IDF drivers (SPI โ†’ esp_lcd, I2C โ†’ CST816S/PN532, RMT โ†’ IR, Bluedroid โ†’ BLE, TinyUSB โ†’ USB-HID)
  • Display renders the original 128ร—64 mono framebuffer, then 2ร— upscales to RGB565 for the color LCD
  • Applications compile with minimal changes (#include path adjustments, no-op stubs for missing hardware like 1-Wire)
  • malloc is redefined to calloc โ€” STM32 heap starts zeroed, ESP32 does not
  • Crypto is stubbed (no Flipper-Enclave key) โ€” affects encrypted SubGHz keystores; everything else uses real mbedtls

Contributors

Sor3nt

30 commits

AmsaOne

20 commits

rawnullbyte

15 commits

Languages

C

97.3%

C++

2.1%