Repository navigation
Releases: u8array/ZPLab
Releases · u8array/ZPLab
Release list
v0.8.1
Features
- Renderer in the output dialog: Other printer and the PDF export show a Renderer select. It writes the same setting as Settings, App, Preview. With Built-in the PDF holds the current page only.
Changes
- The renderer option Off is now Built-in: ZPLab draws the label itself.
Fixes
- The output dialog no longer gets stuck when the Labelary privacy notice appears. Other printer and the PDF export work on the first try.
Full Changelog: v0.8.0...v0.8.1
v0.8.0
Features
- Output: File, Output is the one dialog for printing and for the PDF and PNG exports. Print lists the ways to the printer, among them Other printer for the operating system's print dialog. File writes a PDF or a PNG. The ZPL panel bar has an Output button too.
- One label per data row: the PDF export offers a Scope that writes one page per data row. It needs a mapped dataset and a working preview renderer.
- The printer in the ZPL panel: the desktop app shows the print target with a coloured dot for its state. Check now reports model, firmware, memory, state and warnings. Read configuration shows the printer's configuration. The output dialog has the same check under Check printer.
- Adopt settings: on the desktop, Adopt from printer lists the printer's own settings beside the app's values, with every difference ticked. Adopt selected writes them into the label settings and the printer profile. Eighteen settings are covered, from darkness and speed to media type and label size.
- Printer storage: the Fonts and Graphics tabs under Settings, Objects list every file with its origin. On the desktop, Read printer adds what the printer holds and shows how full each drive is. Show displays a stored graphic or a font sample the printer draws, Delete removes a file from the printer.
- Adding a font: Add font opens a dialog that proposes the printer filename and shows each face. The font list draws a sample per font, so the names stay readable.
- Fonts from this computer: the desktop app lists the installed fonts in that dialog. Fonts whose licence forbids embedding are greyed out.
- Command list and reference: the Command list sits left of the code and the ZPL reference right. Each folds to a rail.
- The source editor: an unmatched
^XAor^XZis underlined and offers the missing command as a repair. Apply on an emptied buffer asks whether to start a new design. - Reference blocks: 218 of the 225 commands show syntax, parameters and an example.
- Manage stored objects: the delivery select of a graphic or font links to its list under Settings, Objects.
- Deleting a cached file: an image or font can be deleted while an undo step still uses it. The confirmation says how many steps go with it.
Changes
- The File menu lost Send to Zebra Printer, Print as Image (browser), Export PDF and Export batch PDF. Output replaces all four.
- The Insert button of the reference is gone. A double-click or the right-click menu inserts a command. The arrow keys and
Enteract in the Command list, which is now a separate pane. - With a connected printer the desktop app covers 134 of the 225 ZPL commands, up from 127 in 0.7.1. The browser still covers 125.
- The AppImage shows up in Linux software centres with a description and screenshots, like the deb and rpm.
Fixes
- The desktop menu keeps working after a rebuild, for example after loading a CSV batch. Reported by @pglomski in #532.
- A dialog opened above the ZPL panel takes clicks again while the panel holds an edit it cannot apply.
- Minor and patch dependency updates, including Tauri 2.12.1.
Full Changelog: v0.7.1...v0.8.0
ZPLab v0.7.1
Features
- Profile graphics on the label: the Image source select lists the graphics your printer profile holds under "In the printer profile". Picking one puts that graphic on the label as a recall, so the job names it instead of carrying its bytes. The canvas draws it from the profile's copy at the graphic's own size.
- Delivery for every image: the Delivery select is there for every image, uploaded or picked. "Once in the setup script" gives the image a printer name and adds its bytes to the setup script in your printer profile. "Already on the printer" gives it the name only. An option you cannot pick shows the reason on hover.
Changes
- The Activate button under Printer storage is gone. The Delivery select replaces it.
- PRIVACY.md describes what leaves your device.
Fixes
- The Linux builds now run on older distributions as well, down to Ubuntu 22.04, Debian 12 and RHEL 9.
- An update check without an answer gives up after 30 seconds.
Full Changelog: v0.7.0...v0.7.1
v0.7.0
Features
- Export PDF: File, Export PDF writes one PDF page per label page, drawn by the renderer you picked for the preview. A batch PDF holds one page per data row.
- Preview off: Settings, Preview offers Off next to Labelary and the connected printer. With Off no label leaves the app for a preview. A PDF then holds the current page, drawn from the canvas.
- Print target: Settings, Printer holds how labels are sent and to which printer. Send to Zebra Printer opens with that method selected. An address and device from an earlier version carry over on the first start.
- Printer-native fonts:
~DT,~DU,~DSand~DBfont downloads and~DEencoding tables land in your printer profile on import. A font in the printer's own format replays from the profile as it was sent. - Stored formats: a page names the path
^DFstores its format under. A Template section shows that path, the page's slots and its dataset in one place. An imported^XFrecall block becomes a batch row of the template it recalls. - One delivery per resource: each font, graphic and stored format has its own delivery select. It ships with every job, uploads once in the setup script, or is already on the printer.
- GS1 Digital Link: QR Code and Data Matrix take the link as a content type.
- MECARD: a second contact type next to vCard. vCard takes a mobile number, a postal address, a note and a birthday. Both fill their fields from your browser profile until you insert the first variable.
- WiFi password: the field takes a variable and shows what you type.
- Export as
.prn: File, Export ZPL saves.zplor.prn. The desktop app and Chromium offer both in the save dialog. Other browsers download a.zplfile. - Docker: the web build ships as
ghcr.io/u8array/zplab, published with every release from this one on. - Insert from the reference: a right-click on a command offers the insert.
- The selection as an image: a right-click on the canvas copies or saves the selection as a PNG at printer resolution. The whole label saves at screen resolution.
- A taller ZPL panel: drag the panel up to the full height below the header.
Changes
- The content type "Contact" is now "vCard".
- Every empty
^FDor^FVslot in the ZPL panel is marked as a placeholder. - The deb and rpm show up in Linux software centres with a description and screenshots.
- MCP: an argument at the wrong level is refused by name, a design file handed over as a JSON string is read, a broken object is reported once per object, and an object without a rotation still opens.
Fixes
- Print a positioned
^FNwithout a font in the default font - Minor and patch dependency updates, including Tauri 2.12 and Konva 10.7
Full Changelog: v0.6.0...v0.7.0
ZPLab v0.6.0
Features
- Command reference beside the code: a panel explains the command your cursor is on, in your language. Search the catalogue or walk it with the arrow keys. Double-click a command to insert it. Every other use of that command is marked in the code.
- Stored graphics:
~DG,^IMand^ILnow import. Upload a graphic once through the printer setup script, the way fonts already work, so print jobs only recall it. Importing ZPL keeps the graphics it uploads in your printer profile, and the import summary links to them. - Objects in the printer settings: fonts and graphics for the printer now live in one place, together with the images this browser cached. Nothing still in use gets deleted, not even what an undo step or the clipboard holds.
- Agents edit in place over MCP:
edit_designchanges the label you have open, as one undo step you can take back. Only the change travels, not the whole design. ZPLab tells the agent to offer once and then keep editing, instead of asking before every change. - Undo what an agent replaced: when
open_in_appreplaces your label, a banner brings the previous one back, and you can switch between the two until you reload. - Linter: two more things the printer does silently are flagged. A field left open before the next
^FOis dropped, and one click inserts the missing^FS. A hex control byte cuts the rest of a text field.
Changes
- Design files are now written as schema version 6. ZPLab 0.5.0 cannot open them; older files still open here.
- A font keeps the printer drive it was imported with, and a bare font name is pinned to
E:..TTEfonts are accepted. - A font the browser cannot draw is still accepted for the printer, and the font manager says so.
- The image panel lost its cache-delete button. Deleting cached images moved to Settings, Objects. The Fonts tab is now "Font settings", and its upload list moved to Objects too.
- MCP: an
open_in_appreply says whether the replace can be undone,get_schemastates each numeric range, a prop of another object type is refused instead of ignored,raster_imagetakes a threshold from 1, and a call that fails validation names the field. Variables you send no longer need ids. - You can throw away a source edit straight from the review dialog.
Fixes
- Keep the default delimiter when
^FHstands on its own line - Drop raw line breaks from field data, as the printer does
- Stop a
^FNslot armed without data from printing a stray field - Return focus to the opener when a dialog closes
- Minor and patch dependency updates, including React 19.3, Konva 10.5, zod 4.6 and Vite 8.3, and rustls 0.23.45 for RUSTSEC-2026-0285
Full Changelog: v0.5.0...v0.6.0
ZPLab v0.5.0
Features
- Plain ZPL by default: exported, copied and printed ZPL no longer carries ZPLab's
^FXmetadata, so it can go straight to a printer or another tool, and the ZPL panel shows exactly what leaves the app. Enable "Keep ZPLab metadata in exports" for lossless re-import; the MCPexport_zpltool accepts ametadataflag. - Edit the ZPL without losing editor state: hidden objects, names, locks and groups survive applying an edit, even when you paste an older export of the same label back in. (inspired by @jogibear9988's idea in #375)
- Import warnings inline: findings with a source position are marked in the code panel, so you can see which line the editor could not model.
- Preflight warns about slot conflicts: before printing, you are told when two fields feed one
^FNslot with different encodings, which would print wrong data.
Changes
- The metadata sidecar is now written as
^FXZPLab:{"dpmm":8,"w":100,"h":60}^FS(values in mm); files from 0.4.x still import. - "New" keeps the media settings (size, density, media type) instead of resetting everything.
Fixes
- Park template slot declarations off the label instead of printing their default as a stray field at the origin (printer-measured)
- Keep mapped
^FNslots bare in batch stored formats and park recall-only slots off the label, so recall values no longer print on their own (reported by @ectoby, #407) - Repair duplicate or invalid
^FNslots when loading a saved design instead of sharing one slot in batch output - Limit the label shift and home inputs to the
^LSand^LHranges - Draw
^GBcorners at the printer's radius - Read the QR
^FDswitch prefix per spec and pin the^BYheight that shifts an^FOQR code - Emit the barcode
^BYinside the field, after the field opener - Re-import multi-page exports byte-exact by consuming every block's geometry sidecar instead of keeping it as a comment
- Report an
^FEembed with a character range (#n,a,x,y#) as a partial import instead of collapsing it silently - Render
^FRtext over a filled box solid instead of hollow on WebKit (reported by @ectoby, #399) - Dependency updates (minor and patch), including zod 4.5.4
Full Changelog: v0.4.0...v0.5.0
ZPLab v0.4.0
Features
- Editable ZPL source: the code panel below the canvas is a full editor, and applying an edit leaves every object you did not touch byte-exact. (suggested by @jogibear9988, #375)
- Calibrated device fonts: Font 0 and the resident fonts A-H match the printed glyphs across the full Latin-1 range, in every rotation.
- Printer-impact warnings: before sending, the output panel names the commands that reconfigure the printer (
^JU,^ST) or fire an action (~JA,~JC). - RFID transponder setup:
^RS,^RBand^RWround-trip as label configuration, with a settings tab and a canvas guide for the transponder position.
Fixes
- Load custom fonts in the desktop build, where the upload failed with "Could not load font file" (reported by @ectoby, #391)
- Match the Code 49 symbol height to the printed stack (printer-measured)
- Render the EAN/UPC guard zone independently of the interpretation line
- Attribute the
^FEprinter list to the spec instead of claiming exclusivity - Keep the settings reset button's height stable while it is armed
Full Changelog: v0.3.2...v0.4.0
ZPLab v0.3.2
Features
- Raw binary graphics import:
.zpl/.prnstreams with raw binary^GF/~DYpayloads now parse byte-exact; uncompressed bitmaps decode into editable images and re-export in a text-safe spec form. - Code 128 control characters: control bytes encode via subset invocations, imported invocation sequences become editable control chips, and the interpretation line matches the printed symbol.
Fixes
- Match the Aztec, MicroPDF417, MSI, Code 39, Interleaved 2-of-5 and TLC39 canvas symbols to the printed module layout (printer-measured)
- Derive GS1 field data once for canvas, preflight and print, so the preview can no longer drift from the wire
- Decode
^FNdefaults through the owning field's encoder on import - Keep images in headless MCP exports and probe barcode bounds with the app's measurement kernel instead of default boxes
- List every valid Aztec error-correction domain in the preflight detail
Full Changelog: v0.3.1...v0.3.2
ZPLab v0.3.1
Features
- Icon anchor control: the barcode value-anchor buttons use icons, so they no longer overflow in longer languages.
- Collapsible setup-script preview: the ZPL preview in the printer-settings dialog folds away to free space on small screens.
- Data placeholders: an empty variable default shows the connected data row's value as its placeholder.
Fixes
- Match the MaxiCode canvas symbol to the printed module layout and size
- Report a missing MaxiCode carrier message as a preflight finding instead of a red canvas error, parse
^BDwithout a mode to the spec default, and round-trip structured-append sets - Warn in preflight about Aztec error-correction values the preview cannot render, instead of erroring on the canvas
- Keep label width/height inputs editable while clearing them (no more freeze at 0)
- Keep a MaxiCode's position when rotating a group that contains it
Full Changelog: v0.3.0...v0.3.1
ZPLab v0.3.0
Features
^JMdensity mode: import, preview and export labels that use^JMBhalf density. Each page keeps its own mode through round-trips, and changing the mode or print density offers a proportional rescale of the whole layout.- Connect-data wizard: a guided flow that connects a CSV, Excel or SQLite source and maps its columns to fields in one place.
- Labelary through the app proxy: desktop previews fetch Labelary via the app itself under a tightened content-security policy, so no renderer talks to the network directly.
- Printer-setup commands: more setup commands are modeled on import (
^MC,^MP, media tracking and friends), completing the supported-commands audit behind the coverage table. - Certification marks: the UL and CSA symbols now sit behind power-user mode with a certification disclaimer.
- Localized import report: the ZPL import dialog and its findings report are translated into all 32 languages.
Fixes
- Keep the resize box in sync after switching a barcode's symbology
- Parse barcodes on pages after the first correctly (they could degrade to plain text)
- Grant the macOS MCP sidecar its JIT entitlement so the server starts
Full Changelog: v0.2.0...v0.3.0