The label printer is on the bench.
The driver is the problem.
Every other route to a thermal label goes through a PDF, a print dialog, a desktop agent or a monthly cloud service. Labely's browser talks to the printer directly — and the twenty minutes you actually spend with the tool are spent on a canvas, not in a form with a Line 1 and a Line 2.
- Free permanently — no licence, no account, no quota
- Makes no external requests at all, so it works offline
- Chrome or Edge on the desktop, over HTTPS
- capabilities built and tested
- 10capabilities built and tested
- unverified on hardware
- 5unverified on hardware
- Web Bluetooth transport, and the 76-model capability table it reads specifications from
- The 1-bit render path: supersampled, area-averaged and thresholded in our own code
- Canvas designer — snapping, alignment, distribution, fifty-step undo, autosave
- Permanently, with no licence
- FreePermanently, with no licence
- External requests, anywhere in the plugin
- 0External requests, anywhere in the plugin
- Printers physically verified, so far
- 0Printers physically verified, so far
- Free and open source
- GPLFree and open source
Why Labely
The hard part is not the label.
It is everything between you and the printer.
A thermal label is a small bitmap. What makes printing one from WooCommerce miserable is the driver, the PDF, the print dialog, the desktop agent, the subscription — and a design step that is a form.
The browser is the driver
Web Bluetooth talks to the printer from wp-admin. There is no driver to install, no PDF to open, no print dialog to fight and no cloud print service to pay for. Once the page has loaded, printing needs no network at all — which matters most at a packing bench, because a dropped connection is exactly when someone notices.
A canvas, not a form
Every competing plugin makes the design step a settings screen: line one, line two, a font dropdown, a preview that appears after you save. Labely gives you an artboard with millimetre rulers, snapping, alignment and fifty steps of undo — and every property is also a number you can type, so a layout can be exact.
Bound to your real data
A text element binds to a product's name, SKU, price, brand or any custom field, and the picker lists the value each field currently resolves to rather than a token name. You preview against real products from your own catalogue — including the longest name and the one with no SKU — before anything prints.
Deliberately narrow
Labels that go on the goods: product name, batch code, SKU, price, barcode. Not parcels. Carrier postage, rates, manifests and tracking are a carrier-integration product and are permanently out of scope.
What is built today
All of it, and none of it printed
Every capability below is implemented and covered by tests in the plugin as it stands. None of it has been run against a physical printer, which is stated plainly further down rather than left for you to discover.
Canvas designer with real undo
Drag text, boxes, lines, images and barcodes onto a millimetre artboard. Elements snap to the label's safe area and to each other, a multi-selection aligns and distributes, and fifty steps of undo cover bindings and multi-select too. It autosaves, so there is no save button.
Binding where the field appears
Type a slash in a text element and pick a field from a list showing what it currently resolves to. Bindings are chips inside the text, mixed with literal words — not rows on a separate mapping screen, which is how every incumbent does it and why they all feel like forms.
A preview that tells the truth
Thermal printing is one bit per dot, and a designer showing smooth anti-aliased type is lying about the result. Press P for the actual 1-bit output — produced by the same module that builds the bitmap sent to the printer, not a second renderer that will drift from it.
Barcodes quantised to whole dots
Code 128 and EAN-13, drawn at device resolution with module width rounded to a whole number of printer dots and no anti-aliasing. A barcode that will not fit is refused with the two measurements, never squeezed — bars straddling dot boundaries scan on the bench and fail in the field, which is worse than not scanning at all.
Print from an order, or from many
A metabox on the order screen, and a bulk action on the Orders list. Runs are a list of rows, and a row counts as printed only once the printer confirms the page finished — so a run that dies at row 7 of 12 resumes at row 8 rather than reprinting seven labels.
A record of what was printed
Labely stamps the values it printed onto the order item, so an order keeps a permanent note of which batch each unit was filled from. A shop's batch code lives on the product and changes with the bottle — so that record cannot be reconstructed later, and uninstalling Labely deliberately leaves it behind.
Reads the printer, does not ask you
On connecting, Labely reads the device's real specification — resolution, print direction, printhead width and density range — from the open-source niimbluelib model table rather than making you pick from a dropdown. A printer it does not recognise refuses to print and shows an id to report, instead of guessing at a resolution.
Printing is not an admin permission
The person printing labels is a packer, not an administrator. Printing needs the shop-order editing capability, product tags need the product one, and only the settings screen needs full administrator rights — so a warehouse can print without being handed the keys to the site.
How it works
Connect, design, print
Written in the present tense because this is how the code works. Whether it survives contact with a real printer is the open question, and it is the next thing that happens to this product.
- 01
Open Labely in Chrome or Edge, over HTTPS
This is not a preference. Talking to a Bluetooth device from a web page needs Web Bluetooth, which only Chromium-based browsers implement and which browsers expose only on a secure page. Labely detects both cases specifically and says which one is the problem.
- 02
Connect the printer and print a test label
Labely reads the model's real specification and prints a test label that checks four things at once: whether the stock is the size it thinks, whether it feeds straight, whether the printer can place a single dot, and whether the density is right. The label prints its own model, resolution and density onto itself — a test label that does not say what produced it is useless twenty minutes later.
- 03
Design against a real product
Lay the label out on the canvas, bind the fields you want, and cycle through real products from your catalogue with the bracket keys. Label design's hardest problem is surviving data you have not seen — a five-character name and a forty-character one share a template — and watching it reflow is the only way to find that before the stock is spent.
- 04
Print from the order that needs it
Print one label from an order, or select a day's orders and print the lot. What each label said is recorded against the order item, and a run that fails keeps its position so nothing already printed prints twice.
Build status
Written and tested is not the same as working
This section is not a roadmap teaser. It is the list you would want if you were deciding whether to depend on this — and the gap it describes is unusual enough to be worth reading twice.
Labely is not released — there is no download — and the honest gap is unusual for a pre-release plugin. It is not that features are missing: the transport, the designer, binding, barcodes, the print surfaces, the error taxonomy and the journal are all implemented, covered by 435 tests, clean against WordPress.org's Plugin Check, and verified installing and uninstalling on a clean WordPress 7.0. What has never happened is a physical print. Not one label, on any printer. Everything below is 'the code is written and its logic is tested', and that is a different sentence from 'it works'.
Built and covered by tests
- Web Bluetooth transport, and the 76-model capability table it reads specifications from
- The 1-bit render path: supersampled, area-averaged and thresholded in our own code
- Canvas designer — snapping, alignment, distribution, fifty-step undo, autosave
- On-canvas data binding, with a picker showing real resolved values
- Live sample records from your own catalogue, cycled with a keystroke
- Code 128 and EAN-13, quantised to whole printer dots and refused rather than squeezed
- Print from a single order, and in bulk from the Orders list
- 38 printer error codes in seven classes, with run recovery that never reprints a confirmed row
- A print journal, and a traceability stamp kept on the order item
- Fully translatable, including the designer, with a translation template
Not verified, or not built
- A single physical print. No printer has ever been connected to any of this. The “left” print direction, which 23 of the 76 models use, has never executed on a device
- Any verified printer model. Presence in the capability table is not a test, so the plugin lists nothing as verified
- A scan test. The barcodes are encoded to the published standards; no scanner has read one
- Third-party label stock, tested. Some models authenticate consumables over RFID and refuse non-vendor rolls
- A public release: no WordPress.org listing and no download
Why there is no price here
There is no pricing section on this page, and unlike the other pre-release plugins on this shelf that is not because the numbers are still being calibrated — it is because there are none. Labely is free permanently: no licence key, no plan, no quota, no account, and no server to call. The reasoning is structural rather than generous. Every other plugin here has a marginal cost per unit of work, because a translation or a generated description is a provider call we pay for. Printing a label costs us nothing — the work happens in your browser, against hardware you own — so there is nothing to meter, and a licence check would only add a way for the packing bench to break. Labely is the front door to the shelf, and the honest version of that is a tool that is simply free.
FAQ
Questions, answered
Labely is a WordPress plugin that prints product and order labels from wp-admin directly to a Bluetooth thermal label printer, with a canvas designer for laying the label out. The browser talks to the printer, so there is no driver, no PDF, no print dialog and no cloud print service. It is pre-release: everything described on this page is implemented and tested, and no physical printer has ever been connected to it.
Not yet. There is no download and no WordPress.org listing. The plugin is further along than that usually implies — the designer, the printing path, barcodes and the order surfaces are all built, and it passes WordPress.org's own Plugin Check with no errors — but it has never printed a label, and shipping it before that would be selling a claim rather than a tool.
Nothing, permanently. No licence key, no plan, no quota, no account. Every other plugin on this shelf meters something because a translation or a generated description is a provider call that costs money per unit of work. Printing a label costs nothing — it happens in your browser against hardware you own — so there is nothing to meter. A licence check would add no value and one more way for a packing bench to stop working.
That question cannot be answered honestly yet. Labely reads its printer specifications from the open-source niimbluelib project, which describes 76 NIIMBOT models — but being in that table is not the same as being tested, and no model has physically printed. The plugin marks a printer 'verified' only after a real device has produced a correct label, and lists everything else as 'should work — untested'. Nothing is verified in the current build.
Talking to a Bluetooth device from a web page uses the Web Bluetooth API, which only Chromium-based browsers implement. Firefox declined it in 2015 on privacy grounds and Safari has declined on security grounds, and neither position has moved in a decade. Browsers also expose Bluetooth only to a secure page, so the admin must be on HTTPS. Labely detects both cases specifically and says which one applies rather than failing when you press print.
No. Every browser on iOS uses Safari underneath, so none of them can reach a Bluetooth device from a web page. This is a platform restriction rather than something Labely can work around.
No, and it is not going to. Labely prints what goes on the goods — product name, batch or lot code, SKU, price, barcode. Carrier postage, rates, manifests and tracking are a carrier-integration product with a completely different shape, and they are permanently out of scope.
No. Labely makes no external requests at all — no cloud service, no licence check, no analytics, and no fonts loaded from a CDN. Everything, including the fonts, ships inside the plugin, and once the admin page has loaded printing works with the internet disconnected. That is enforced by a test rather than promised: no file in the plugin may reference an external host or an HTTP call.
It depends on the printer, and we would rather say so before you buy one. Some NIIMBOT models authenticate their label stock over RFID and refuse to print on non-vendor rolls. That is the manufacturer's own restriction on their own hardware — Labely reports it clearly and will not work around it or suggest anyone should.
WooCommerce, WordPress 6.5 or later, PHP 8.1 or later, and desktop Chrome or Edge served over HTTPS. WooCommerce is a hard dependency and the only one — every field Labely binds to is a product or an order — and Labely does not require or integrate with any other WP Shelf plugin.
Not released yet.
Labely is being built in the open on the same platform as Gloty, Metaly and Crawlune. It will be free permanently — no licence, no account, no quota — and it is not finished until a physical printer has put a correct label on real stock. Until that happens, this page says so.