minipro is the open-source command-line program that drives XGecu’s TL866-series chip programmers on Linux, macOS and BSD, and it is the only reason those programmers are usable without Windows. Compiled from current master and pointed at its own shipped database, it reports 29,774 devices for the TL866II+ — but the per-device flags inside that same database say only 18,966 of them are marked for the TL866II+, and XGecu’s own V13.16 device list for that programmer stops at 19,740.
The gap is not a rounding error. It is a switch statement with three cases and no default. This guide covers the install that works, the udev rule you need, and then the counting problem — because it is the difference between “the chip is in the list” and “the chip will program”.
Where to download minipro (official only)
There is one upstream: gitlab.com/DavidGriffith/minipro, maintained by David Griffith, GPL-3.0. There is no official binary — the releases page publishes source archives only. Anyone offering you a minipro.exe or a prebuilt “minipro installer” is not upstream.
| Channel | Version | Notes |
|---|---|---|
| GitLab release 0.7.4 | 0.7.4, released 2 Aug 2025 | Source only (zip/tar.gz/tar.bz2/tar) |
GitLab master |
48 commits ahead of 0.7.4 | Still self-reports “0.7.4”; only place with T76 support |
| Homebrew (macOS/Linux) | 0.7.4 | brew install minipro; 615 installs in the last 365 days |
| Arch AUR | package minipro |
7 votes, popularity 0.077, last touched 5 Aug 2025 |
| Guix | packaged | guix install minipro |
| Debian / Ubuntu | not packaged | No source package named minipro in any Ubuntu series from focal to stonking (Launchpad API) |
That last row is the one that costs people an evening. There is nothing to apt install; build it, which takes under a minute.

Build and install, step by step
Debian / Ubuntu / Mint:
sudo apt-get install build-essential pkg-config git libusb-1.0-0-dev zlib1g-dev
git clone https://gitlab.com/DavidGriffith/minipro.git
cd minipro
make
sudo make install
Fedora wants gcc make pkg-config git libusb1-devel zlib-ng-compat-devel; openSUSE gcc make git-core srecord rpmdevtools libusb-1_0-devel; CentOS 7 gcc make pkgconfig git libusbx-devel. The README asks for libusb 1.0.16 or newer. On macOS, brew install minipro is the whole procedure.
The udev rule is not optional if you want to run as a normal user:
sudo cp udev/*.rules /etc/udev/rules.d/
sudo udevadm trigger
sudo usermod -a -G plugdev $USER
Log out and back in — group membership does not apply to your current session. The shipped rule (60-minipro.rules) tags three USB IDs:
| Device | VID:PID | Permission |
|---|---|---|
| TL866A / TL866CS | 04d8:e11c |
TAG+=”uaccess”, MODE 660, GROUP plugdev |
| TL866II+, T48 and T56 (all three) | a466:0a53 |
same |
| T76 | a466:1a86 |
same |
Three programmers behind one USB ID is why lsusb cannot tell you which is plugged in; minipro asks the device over its own protocol.
The device count: what it prints versus what it means
minipro ships one XML database, infoic.xml, 19 MB, holding three tables: INFOIC for the TL866A/CS, INFOIC2PLUS shared by the TL866II+, T48 and T56, and INFOICT76 for the T76. Run the program with no programmer attached and it will count them for you.
Counting that XML by minipro’s own rule — every comma-separated name in every <ic> element, which is what get_chip_count() does — reproduces the printed numbers to the unit: 14,208 names in INFOIC, 32,659 in INFOIC2PLUS, 34,607 in INFOICT76. The counter reads the file correctly. The problem is the arithmetic afterwards.
Inside INFOIC2PLUS, each entry carries three exclusivity bits in the top nibble of its pin_map field: 0x20000000 TL866II+ only, 0x40000000 T48 only, 0x10000000 T56 only. print_chip_count() sorts entries with switch (pin_map & DEVICE_MASK) — three single-bit cases, no default — and then subtracts:
TL866II+ = infoic2 - t48_count - t56_count
T48 = infoic2 - t56_count - tl866ii_count
T56 = infoic2 - t48_count - tl866ii_count

But 3,027 entries in the file carry combined flags — 2,969 of them T48+T56, plus 54 T48+II+ and 4 T56+II+ — and a combined value matches none of the three cases. Those entries, 10,959 names, are counted into no bucket at all, so they are never subtracted from anything. The T48+T56 group alone is 10,855 names: eMMC, SPI NAND, the big modern SPI NOR parts. They stay inside the TL866II+ total.
| Flag group | Entries | Names | Counted by minipro? |
|---|---|---|---|
| No flag — all three programmers | 7,125 | 18,795 | yes (as the base) |
| T56 only | 1,293 | 2,806 | yes |
| TL866II+ only | 55 | 67 | yes |
| T48 only | 10 | 32 | yes |
| T48 + T56 | 2,969 | 10,855 | no |
| T48 + TL866II+ | 54 | 100 | no |
| T56 + TL866II+ | 4 | 4 | no |
Add the base to each programmer’s own flags and you get what each one can actually select: TL866II+ 18,966, T48 29,782, T56 32,460. The published figures are 29,774, 29,739 and 32,513. For the T48 and the T56 the faulty subtraction lands within a few dozen of the truth by luck. For the TL866II+ — the model most people own — it overstates by 10,808 names, 57 %.
The cross-check: XGecu’s own numbers
XGecu publishes a plain-text device list per programmer, each with a header stating the software version, the date and the device count. Those files are the arbiter.
| Programmer | XGecu official | minipro, reachable | Coverage |
|---|---|---|---|
| TL866A / CS | 14,037 (V6.50, list dated 2015) | 14,208 | 101 % |
| TL866II+ | 19,740 (V13.16, 17 Mar 2026) | 18,966 | 96.1 % |
| T48 | 37,103 (V13.16) | 29,782 | 80.3 % |
| T56 | 40,039 (V13.16) | 32,460 | 81.1 % |
| T76 | 42,945 (V13.25, 28 Sep 2026) | 34,607 | 80.6 % |
Read that table twice. minipro’s printed 29,774 for the TL866II+ is 151 % of what XGecu itself claims for that programmer under current software — the number cannot be right. Its real figure, 18,966, is 96.1 % of the official list, an excellent result for an independent reimplementation. The database is in far better shape than the counter describing it.
The 80 % rows are a different, honest story: minipro’s tables were distilled from XGpro V12.90 and XGPro_T76 V12.91, and XGecu has shipped seven releases since. Comparing part numbers between the official lists and the XML, minipro is short roughly 10 % on every model, concentrated in ISSI, GigaDevice, Micron, Winbond and Macronix — the vendors adding SPI NOR and NAND fastest.
The one command to run before you trust the list
minipro -l does not filter by programmer. Asking for the TL866II+ list and the T56 list on the same machine returns the identical 32,948 lines, because -q only selects which database to read, and all three share one. The exclusivity flags are used for printing, in main.c — nothing refuses an unsupported chip. So check per chip:
minipro -d "W25Q512JV@SOIC8" | grep "Available on"
| Chip | “Available on:” |
|---|---|
| W25Q128JV@SOIC8 | TL866II, T48, T56 |
| W25Q512JV@SOIC8 | T48, T56 |
| W25N01GV(x1+ISP)@WSON8 | T48, T56 |
| AT29C040A@PLCC32 | TL866II, T48, T56 |
A 128 Mbit W25Q128JV is fine on a TL866II+. The 512 Mbit W25Q512JV in the same SOIC-8 body is not, and neither is the W25N SPI NAND you will meet in routers — both appear in the list the TL866II+ prints. If you are still choosing a clip and a socket for these packages, our SOIC-8 test clip guide covers which body widths actually fit.
Firmware: “newer than expected” is normal
On connect, minipro compares the programmer’s firmware against a constant compiled into it and prints a warning either way. It is a warning, not a refusal. The expected versions live in the headers, together with a firmware-to-XGpro-release table that exists nowhere else in English: tl866iiplus.h carries 60 rows, from 4.1.1 (XGpro 7.03, 26 Feb 2018) to 4.2.132, with entries annotated “Lost?” and “CRC Error in archive”.
| Programmer | Expected firmware | Shipped with | Dated |
|---|---|---|---|
| TL866A / CS | 03.2.86 (0x0256) | Minipro 6.85 | 19 Oct 2018 |
| TL866II+ | 04.2.132 (0x284) | XGpro 12.20 | 21 Sep 2022 |
| T48 | 01.1.39 (0x127) | — | — |
| T56 | 01.1.73 (0x149) | — | — |
| T76 | 00.1.17 (0x111) | XGPro_T76 13.19 | — |
If you have ever updated firmware from XGpro 12.2x or later, “Warning: Firmware is newer than expected” is what you will see forever, and it is harmless. Worth knowing: the project’s own dump-alg-minipro.bash lists the T48 firmware as 01.1.35 while src/t48.h expects 01.1.39. They disagree; the header is what the binary checks.
Five problems that are not your cable
- Permission denied / “No programmer found” as a user, works under sudo. The udev rule is missing, or you are not in
plugdev, or you have not logged out since being added. All three, in that order. - The T56 does nothing useful out of the box. Its FPGA bitstreams are not stored in the programmer — the host uploads them. You need
sudo make install-algorithm, which downloads XGecu’s proprietary Windows package and distils analgorithm.xml. Note where it fetches from: a third-party GitHub mirror of the installer, pinned by SHA-256, because XGecu does not keep old releases online. - “Warning: T48 support is not yet complete” / “T56 support is experimental”. Those strings are in
minipro.c, printed on every connect.minipro -Qis blunter: T48 “(mostly complete)”, T56 and T76 “(experimental)”. - Your T76 is not supported by any release. T76 support was committed on 7 August 2025 — five days after 0.7.4 shipped. Thirteen months later there is still no newer release, so the T76 works only from
master. A refresh of the T76 table from XGpro V13.19, adding 2,028 chips, sits on an unmerged branch. - The chip is listed but the write or the ID check fails. Check
Available on:first. If the programmer does support it,-yskips the ID error and-xskips the ID read — but a mismatching ID on a part that should match is usually contact resistance, not the database. Our CH341A guide covers the same failure mode on cheaper hardware.
Limits of all this
Everything above comes from the source, the shipped database and XGecu’s own published files. No programmer was connected: the counts, the flags and the -d output come from minipro reading its own XML, which is why they are reproducible on your machine with the same commands. What is not tested here is whether a given algorithm works on silicon — a device can be flagged for your programmer and still fail on an unusual package. The coverage percentages compare name sets across two differently-written catalogues; parsing XGecu’s fixed-width columns reproduces its declared totals to within 2 %, so read them as ±2, not exact.
One thing the numbers do not say out loud: XGecu’s download page now labels the TL866II+ and the T56 “(STOP)”, the same marker the original TL866 carries. The line minipro exists to support is being retired at the vendor, which makes a source-available controller for it more valuable than it was, not less.
Sources
- minipro — official repository, GitLab (488 stars, 198 forks;
src/database.c,src/main.c,src/minipro.c,src/tl866iiplus.h,src/t48.h,udev/60-minipro.rules,dump-alg-minipro.bash,infoic.xml) - minipro releases — 0.7.4, 2 August 2025, source archives only
- XGecu downloads and version history — XGpro V13.16 (17 Mar 2026), XGPro_T76 V13.25 (28 Sep 2026)
- Official device lists: TL866II_List.txt · T48_List.txt · T56_List.txt · T76_List.txt
- Homebrew formula API — version and install analytics
- Launchpad published-sources API — no
miniprosource package in any Ubuntu series
FAQ
Does minipro work with a TL866II+ clone?
The TL866II+, T48 and T56 all enumerate as a466:0a53, so the udev rule matches anything presenting that ID. minipro then asks the device what it is and reports model, firmware, device code and serial. If that model is not one of the five it supports, it stops there.
Can I use minipro instead of XGpro for everything?
For the TL866A/CS and the TL866II+, its database covers 96–101 % of the official device list. For the T48, T56 and T76 you are at roughly 80 %, and the code itself calls two of those three experimental. If your work is SPI NOR, EEPROM, GALs and 8-bit MCUs, you will rarely notice. If it is the newest NAND and eMMC parts, check the part number first.
Why does it say “Firmware is newer than expected”?
Because the version it expects is a constant compiled into the binary — 04.2.132 for the TL866II+, which shipped with XGpro 12.20 in September 2022. Any later firmware trips the message. It is printed to stderr and execution continues.
Is there a Windows build?
The tree contains src/usb_win.c, so Windows is buildable, but upstream states plainly that the program exists because XGecu does not provide one for Unix. On Windows the vendor software is the path of least resistance — see our XGpro download guide and the TL866II+ guide.
Related on Tech Bench Lab
- TL866II+ guide — the hardware this article counts devices for
- XGecu T48 and XGecu T56 — the two models carrying the flags
- XGpro software download — the Windows side, and the source of these databases
- flashrom on Windows — the other open-source programmer tool, and its honest limits
- 24Cxx EEPROMs with a CH341A — when you do not need a universal programmer at all
