# iCopy-X v1.1.6 Released

> Firmware v1.1.6 for the open-source iCopy-X adds Direct-to-Chameleon dump transfers, on-device dump renaming with an on-screen keyboard, makes Tag Info, Simulate, Write and Verify read values from the dump contents instead of the filename, fixes MIFARE Plus 2K writing, and ships two new plugins.

_2026-09-30_

Firmware **v1.1.6** is out for the open-source [iCopy-X](https://github.com/lab-401/icopy-x). Contributors [amec0e](https://github.com/amec0e) and [Vost02](https://github.com/Vost02) are behind this release: dumps can now be transferred directly to a ChameleonUltra/Tiny, renamed on the device or on a PC without breaking them, the card-size and UID handling behind Tag Info, Simulate, Write and Verify has been reworked to read from the dump files themselves, and two new plugins arrive alongside a text input field for the plugin UI. Grab it from the [v1.1.6 release page](https://github.com/lab-401/icopy-x/releases/tag/v1.1.6).

## Notable changes

### Quality of Life
- Added on-device dump renaming through a new `KeyboardInput` widget, reached from Dump Files then Tag Info by pressing DOWN (the button is not shown on the button bar).
- Added an uppercase keyboard set of A-Z, 0-9, `-` and `_`, with characters not allowed in filenames refused and DEL always present.
- Added `rename_dump_set()` so every file sharing a dump's name (`.bin`, `.json`, `.eml` and others) is renamed together, with duplicate names refused and already-renamed files restored if any rename fails.
- Changed Tag Info to read the values it needs from the dump contents when a dump no longer carries its device-generated name, keeping the previous filename-based behaviour when a file cannot supply a value.
- Added public dump readers to `appfiles` (`dump_uid`, `dump_mf1_size`, `dump_mf1_card`, `dump_mf1_block0`, `dump_mfu_uid`, `dump_t55xx_b0`, `dump_hf14a_uid`, `dump_json_card`) so plugins can reuse them.
- Fixed the Dump Files list shortening renamed files, for example `FRONT-DOOR_2` listed as `DOOR(2)`; device-created names keep their existing short labels.
- Renaming is not offered for ICODE, Legic and FeliCa dumps, whose Tag Info still depends on the filename, or for old single-line LF dumps.

### HF (High Frequency)
- Fixed MIFARE Plus 2K dumps being handled as 1K, so only 16 of 32 sectors were written; they are now type 26 and written in full.
- Changed the type 26 label in `template.py` from "M1 Mini 0.3K" to "M1 Plus 2K".
- Fixed renamed MIFARE Classic dumps taking their card size from the filename, which caused a renamed 4K dump to be treated as 1K; size now comes from the `.bin` length.
- Fixed the loss of UID, SAK and ATQA for MIFARE Classic dumps without a matching `.json`, now taken from block 0.
- Fixed Ultralight and NTAG dumps losing their UID, which made Verify report a failure even after a successful write.
- Fixed Tag Info showing a blank UID for HF14A dumps, now read from the saved `.txt`.

### LF (Low Frequency)
- Fixed Tag Info showing T55xx block 0 as `00000000`, now read from the 48-byte `.bin`.

### Localisation
- Added a `_keyboard` entry to `data/lang/<code>.json` so the keyboard layout comes from the language pack, falling back to English and then to the built-in layout.
- Added the new rename strings to the English, French and Chinese language packs, and `get_keyboard_layout()` to `resources.py`.
- Changed `tools/plugin_i18n.py` to extract the `hint` field.

### Plugins
- Added the `input_text` content type for plugin `ui.json`, a full-width word-wrapped editor with a reverse-video cursor, `length`, `placeholder`, `value` and `hint` options, wrapping by display width so full-width CJK text fits; `input:delete`, `input:charset` and `input:clear` now act in place, and `input_hex` is unchanged.
- Added `lib/card_notes.py`, a note store keyed by family and UID at `/mnt/upan/card_notes.json`, resolving a card's UID from the dump contents when the filename is no longer in device format.
- Fixed a plugin whose `entry_class` is a `BaseActivity` subclass without a `ui.json` rendering a blank screen, by detaching the `PluginActivity` wrapper instead of calling `finish()`.

Two new plugins ship with this release:
- `card_notes`: browses dumps under `/mnt/upan/dump/` and attaches or clears a note per card, showing list rows as `NAME (note)`, with English, French and Chinese language files.
- `chameleon_dump`: writes a dump into a slot on a Chameleon Ultra or Tiny and reads a slot back out as a dump over USB, auto-detecting the connected device and covering MIFARE Classic, NTAG213/215/216 and EM410x.
