Skip to content
/ XZG-MT Public

Web-based multi-tool for flashing and managing various chips via local or remote connection

License

Notifications You must be signed in to change notification settings

xyzroe/XZG-MT

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

XZG Multi-tool

XZG Multi-tool

GitHub version GitHub Actions Workflow Status GitHub download GHCR pulls GitHub Issues or Pull Requests License

πŸ“– About

The XZG Multi-Tool is a browser-based flashing solution that enables hobbyists and developers to program Texas Instruments, Silicon Labs, Espressif, Arduino and Telink devices. It provides a simple, polished web UI that enables users to flash adapters directly from the browser, eliminating the need for client software installation.

The web front end performs local flashing via the WebSerial and WebUSB APIs, offering automatic device detection and convenient firmware flashing features. The bridge component (WebSocket ↔ TCP) enables headless or remote hosts to expose local serial ports via TCP and connect them to the web UI. The bridge also supports connecting to remote TCP-based adapters, enabling access to networked adapters from any browser.

⭐ Features

  • πŸ”Œ Work with various devices locally via WebSerial/WebUSB or remotely via bridge.
  • πŸ“‚ Flash firmware from a local file or select from a provided list.
  • πŸ“ List of cloud firmware with descriptions
  • 🦾 Automatically detects chip model, flash size, IEEE, and firmware version
  • πŸ’Ύ Backup, restore, and erase NVRAM

πŸ’» Supported Chips

For a complete, up-to-date list of supported devices, features, and device-specific notes, see the devices table.

πŸ—οΈ Architecture

Block Diagram

πŸš€ Quick start

πŸ”Œ Local USB

🌐 Open: mt.xyzroe.cc
from Chrome or Edge

πŸ“‘ Remote (TCP or remote USB/serial)

Because browsers don't support TCP connections you need to use WebSocket ↔ TCP bridge that can forward WebSocket clients to TCP hosts and as option expose local serial ports over TCP.

You have some options:

🏠 Home Assistant Add-On

Home-Assistant add repository sticker

Just click on the button above or add this repository to your Home Assistant add-on store manually and then install the add-on to expose remote TCP / host serial devices to the web UI.

🐳 Docker images

Prebuilt multi-arch images are published to GHCR on each release.

Latest image: ghcr.io/xyzroe/XZG-MT:latest
Special version image: ghcr.io/xyzroe/XZG-MT:<tag> (e.g. v0.1.1)

Running instructions: - Run (basic):
docker run --rm -p 8765:8765 ghcr.io/xyzroe/XZG-MT:latest
  • Run with mDNS:
docker run --rm --network host ghcr.io/xyzroe/XZG-MT:latest
  • To expose a host serial device to the container add --device (Linux):
docker run --rm --network host \
  --device /dev/ttyUSB0:/dev/ttyUSB0 \
  ghcr.io/xyzroe/XZG-MT:latest
  • Customize port, advertised host, disable serial scan and enable debug logs:
docker run --rm \
  -e PORT=9000 \
  -e ADVERTISE_HOST=192.168.1.42 \
  -e DEBUG_MODE=true \
  -p 9000:9000 \
  ghcr.io/xyzroe/XZG-MT:latest

πŸ“¦ Prebuilt binaries

Download a ready-to-run binary from Releases, make it executable (Linux/macOS), and run.

⚑ How to run:
Windows:
  • Run: XZG-MT-windows-*.exe or double click
Linux:
Select the correct binary for your platform
  • linux/arm64 β€” aarch64_generic, aarch64, arm64
  • linux/arm β€” armhf, arm_cortex-a7_neon-vfpv4, arm_cortex-a9_neon
  • linux/amd64 β€” amd64
  • linux/386 β€” i386 / 32-bit x86
  • linux/mips β€” mips_24kc
  • linux/mipsle β€” mipsel_24kc
  • linux/mips64 β€” mips64
  • linux/mips64le β€” mips64le

Note: linux/arm targets ARMv7 (GOARM=7). MIPS and MIPSLE builds use GOMIPS=softfloat for compatibility with older devices (for example, MT7688).


  1. Make executable:
chmod +x ./XZG-MT-linux-*
  1. Run: ./XZG-MT-linux-* or double click
macOS:
  1. Make executable and remove quarantine:
chmod +x ./XZG-MT-darwin-*
xattr -d com.apple.quarantine ./XZG-MT-darwin-*
  1. Run: ./XZG-MT-darwin-* or double click

To run on custom port: ./XZG-MT-* 9999

πŸ“š Where to read more

For step-by-step guides and detailed documentation, explore the following:

πŸ‘₯ Community

Telegram Discord

πŸ’– Support

If you find this project useful and want to support further development, you can sponsor or donate to the author:

GitHub Sponsors Buy Me a Coffee PayPal NOWPayments

Thank you β€” every little contribution helps keep the project alive and maintained. πŸ™

🌟 Star History

If you find this project useful, please consider giving it a ⭐ on GitHub!

πŸ› οΈ Tech badges

Below are key technologies used across the projects (click the badges for quick context):

Node.js TypeScript esbuild
Web Serial API Web USB WebSocket
Go mDNS (zeroconf) Docker

πŸ“ Repository structure

  • web-page/ β€” The web frontend. Contains source TypeScript, build scripts, favicon and static assets.
  • bridge/ - The small Go app that bridges WebSocket ↔ TCP, supports mDNS discovery and exposing local serial ports as TCP servers.
  • xzg-multi-tool-addon/ β€” Home Assistant add-on wrapper for the bridge.
  • docs - Folder consisting the documentation about this project.
  • LICENSE β€” License for the whole repository (MIT).
  • repository.json β€” repository metadata.

πŸ“œ License

MIT β€” see LICENSE for details.

πŸ™ Acknowledgements

Built on the shoulders of giants:


Made with ❀️ from Berlin!

About

Web-based multi-tool for flashing and managing various chips via local or remote connection

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

  •  

Packages