- Python 97.8%
- Shell 1.9%
- HTML 0.2%
| .forgejo | ||
| .github | ||
| build-aux/flatpak | ||
| data | ||
| docs | ||
| etiketto | ||
| po | ||
| site | ||
| tests | ||
| tools | ||
| .gitignore | ||
| CONTRIBUTING.md | ||
| install.sh | ||
| LICENSE | ||
| pyproject.toml | ||
| README.md | ||
Etiketto
Label designer for the Brother VC-500W colour label printer (ZINK paper), for the Linux desktop. GTK 4 and libadwaita, in English and 23 more languages: German, French, Italian, Spanish, Portuguese (Portugal and Brazil), Dutch, Swedish, Finnish, Estonian, Polish, Hungarian, Russian, Ukrainian, Turkish, Arabic, Hindi, Thai, Vietnamese, Indonesian, Malay, Korean, Japanese and Chinese (Traditional for Taiwan and Hong Kong, Simplified).
Brother only ships the Color Label Editor for Windows, macOS and phones. Etiketto brings the same workflow to Linux: the inserted cassette is detected, the label grows with its content, and it prints over the network in the printer's own protocol, including the vivid colour mode and the cut modes that AirPrint does not offer.
User documentation (English, German): https://etiketto.joshuahirsig.xyz
Screenshots

![]() |
![]() |
| Full colour: background image printed edge to edge | Sticker: fixed 50 × 50 mm, image and border |
![]() |
![]() |
| Text with any font, colour and size | Copies, cut mode, vivid or normal colours |
![]() |
|
| German interface (24 languages in total), 12 mm cable label |
Screenshots use the default GNOME style; Etiketto follows your desktop's light or dark mode and accent colour.
The labels shown are in docs/examples; open them with Etiketto.
Features
- Cassette detection (9, 12, 19, 25, 50 mm) and remaining tape
- Automatic length (as long as the content) or a fixed length in mm
- Text with any installed font, bold/italic, colour, multiple lines, size fitted to the tape or fixed in pt; emoji and font fallback via Pango
- Images and photos, background colour, background image, border
- QR codes, Code 128 and EAN-13 barcodes
- Live preview at print resolution: what you see is what is printed
- Print with vivid or normal colours, full cut, half cut or no cut, copies
- Save labels as
.etikettofiles (images embedded) and reuse them as templates - Drag and drop images or
.etikettofiles onto the window - Export as PNG
Install
Requirements from your distribution: Python 3.11+, PyGObject with GTK 4 and libadwaita, pycairo, gettext. Everything else goes into a private virtual environment.
git clone https://git.joshuahirsig.xyz/joshii/etiketto.git
cd etiketto
./install.sh # per user, no root; ./install.sh --uninstall
| Distribution | system packages |
|---|---|
| Debian / Ubuntu | python3-gi gir1.2-gtk-4.0 gir1.2-adw-1 python3-gi-cairo python3-venv gettext |
| Fedora | python3-gobject gtk4 libadwaita python3-cairo gettext |
| Arch | python-gobject gtk4 libadwaita python-cairo gettext |
| Gentoo | dev-python/pygobject gui-libs/gtk:4 gui-libs/libadwaita dev-python/pycairo sys-devel/gettext |
Then start Etiketto from the app menu. On first start enter the
printer's host name, e.g. VC-500W1234.local (needs mDNS / nss-mdns) or its
IP address. Outside Flatpak the host is also read from
~/.config/labelprinter/config.json if you use the labelprinter CLI.
In Flatpak, .local names are resolved through the system's Avahi daemon.
Flatpak (build locally)
flatpak install --user flathub org.gnome.Sdk//51 org.gnome.Platform//51
flatpak-builder --user --install --force-clean build-dir \
build-aux/flatpak/xyz.joshuahirsig.Etiketto.yml
flatpak run xyz.joshuahirsig.Etiketto
Check it like Flathub does:
flatpak install --user flathub org.flatpak.Builder
flatpak run --command=flatpak-builder-lint org.flatpak.Builder \
manifest build-aux/flatpak/xyz.joshuahirsig.Etiketto.yml
How labels are laid out
Elements (text, image, code) are placed one after another along the tape, each filling the tape height unless a text has a fixed size. With Automatic length the label is exactly as long as its content plus the spacing; with a fixed length the content is aligned and, if needed, scaled down. The printer adds a few millimetres of unprintable margin at the ends for the cutter.
Printers
Made for the Brother VC-500W, which is currently the only printer using this protocol. Printing goes through labelprinter (native protocol on TCP port 9100).
Development
uv venv --system-site-packages .venv
uv pip install --python .venv/bin/python -e . pytest ruff
.venv/bin/python -m pytest
.venv/bin/ruff check . && .venv/bin/ruff format --check .
LANGUAGE=de .venv/bin/python -m etiketto.app
Translations: xgettext → po/etiketto.pot, strings in
tools/strings_<lang>.py, python3 tools/fill_po.py writes the
.po files; install.sh compiles them.
Contributing
Contributions are welcome, see CONTRIBUTING.md. Pull requests go to the Forgejo repository; GitHub is a mirror.
Credits
The VC-500W protocol was reverse engineered by m7i.org; Etiketto prints through its descendant labelprinter (m7i.org → lenchan139 → sgrimee).
License
AGPL-3.0-or-later, like labelprinter which it builds on. Not affiliated with Brother Industries; "Brother" and "VC-500W" are trademarks of their owners.




