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.

Where minipro comes from, checked 29 September 2026
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.

minipro releases page on GitLab showing release 0.7.4 dated 2 August 2025 with four source-code assets
The official release page, 29 September 2026: 0.7.4 from 2 August 2025, and every asset is source code. Screenshot: gitlab.com/DavidGriffith/minipro.

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:

USB IDs in minipro’s udev rule
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
Terminal output of minipro built from master: device counts per programmer, and per-chip Available on lines showing W25Q512JV as T48 and T56 only
The same binary, the same database, two answers. Output from minipro compiled at commit 3e2f491 with no programmer attached; reproduce it with the two commands shown.

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.

INFOIC2PLUS broken down by exclusivity flag (names, minipro’s counting unit)
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.

Official XGecu device counts against minipro’s shipped database
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"
Real output from minipro -q TL866II -d, same binary, same database
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”.

What minipro expects to find, from the source headers
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

  1. 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.
  2. 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 an algorithm.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.
  3. “Warning: T48 support is not yet complete” / “T56 support is experimental”. Those strings are in minipro.c, printed on every connect. minipro -Q is blunter: T48 “(mostly complete)”, T56 and T76 “(experimental)”.
  4. 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.
  5. The chip is listed but the write or the ID check fails. Check Available on: first. If the programmer does support it, -y skips the ID error and -x skips 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

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