Introducing Label LIVE for Mac and Windows
My name is Caylan, and I operate a software development company named Semireg Industries. Our main business is writing software for industrial clients to interface with hardware. Often it's mobile app development using Bluetooth Low Energy. Other times its Linux consulting with USB and serial devices.
This is a technical article describing the technology powering Label LIVE, a cross-platform desktop application that prints labels to USB-connected thermal label printers.
Label LIVE Features
Design labels using an intuitive interface.
Import spreadsheet data to bulk print labels.
Fine-tune images and add barcodes of any type.
Print to Zebra, Brother, DYMO, ROLLO and BIXOLON thermal printers.
Save and open label design documents.
Similar experience on Mac or Windows.
No need for drivers on the Mac.
Fix all the bugs
Greatly expand the diversity of barcodes
Wireless printer support
Back in 2013, Semireg wrote a small Mac app named LabelScope. You can watch a short video on how it works. A virtual label "window" floats on the screen and whatever is behind it gets converted (rasterized) to a label. It is compatible with many different thermal label printers. I published version 1.0 and it worked well enough (and had a small enough audience) that I didn't get any bug reports or feature requests.
Fast-forward 5 years and the label printing software landscape hasn't changed much. There is still ZebraDesigner, and DYMO Label and Brother P-Touch and a dozen other solutions that are almost all Windows' exclusives.
Modern JS Development
What's changed, though, is the software development landscape. I fully understand that among tech nerds cross-platform solutions are the cause of, and solution to, many of life's problems. I've been hesitant to jump on the React Native bandwagon (mobile) for many of the same reasons. But we're talking desktop apps in this post, label printers specifically, and it's about to get interesting.
What made the difference was Electron React Boilerplate. This pre-built project allowed me to quickly learn the basics of React, Electron, Webpack, Flow, Babel, and every turtle all the way down. It afforded me the confidence to learn Redux, Immutable, among other countless libraries. Without this stack and pre-made tooling, the job of creating Label LIVE would have been nearly impossible for a solo developer. In fact, many times I told myself that if I failed, the cost of the React/JS education was absolutely worth the time investment. I've learned so much in the process and have come to respect the trajectory of modern JS development. If you're not using Flow (or TypeScript) you're doing it wrong.
Label LIVE is Born
Earlier this year I tried to find some decent label printing software (first on Windows, then on Mac) and came up short. Everything I found was overpriced, abandoned or too difficult to use. I thought about LabelScope's 5-year-old codebase and how much of the label printer support was still relevant because hardware tends to stick around. With Electron making waves, and me being generally happy with Slack and VSCode (both Electron apps) the challenge became too exciting to ignore.
I began my journey investigating how I could draw and manipulate objects on a canvas. It quickly became apparent that FabricJS had solved most of that problem. I wrote a quick proof of concept (POC), ported over LabelScope's dithering algorithm and ZPL raster code ... and I printed my first label using an Electron-powered app.
The first label printed with Label LIVE.
From here, I wrote a very ambitious feature list and knocked them out one-by-one. I tried to group the features into a minimal viable product (MVP), but it quickly became apparent that label printing apps had base features that were table stakes. For example:
Full system font support
Keyboard shortcuts when possible
Spreadsheet and variables
Auto-updates, beta channels, etc.
These features were all difficult and warrant a post on their own. Some are still unpolished. For example, Label LIVE doesn't yet support multiple sheets in an Excel spreadsheet. The UI needs to be built. The keyboard shortcuts via the menu don't dim when they're not available. Zoom is a bit finicky. Undo/redo is limited to 10 events (to conserve memory). The barcode library has many more kinds and features that aren't yet exposed in the UI. Each window should show the document name. Is the basic serialization of immutable redux objects "good enough" for save and open? Should it be compressed? You can't yet turn off or monitor auto-update status... the list goes on and on and on. That's the reality of software.
Proving the Concept
This is just the beginning. I have a lot of work to do. I know how frustrating label printers can be. And to be perfectly honest, I'm terrified of supporting thousands of perfectly unhappy customers. There's an unmet need for sure, but what customer wants to spend more money to bring a little bit of joy to something that's been so painful to use? How much is that usability worth? What if Label LIVE fails at that job? This is why I need to prove the concept in the open with a beta. There are no guarantees with beta software – but hopefully the feedback I receive (email@example.com) pushes Label LIVE in the right direction.
I come from a place where software integration reigns supreme. That means that Label LIVE needs to be exposed to, and play a part in integrating into larger workflows.
Today, the iOS app ratings for DYMO, Brother and Zebra solutions are all less than 3-⭐️ (interestingly, Brother gets high marks on Android). Semireg has deep experience in developing complex, hardware-enabled iOS and Android apps that receive greater than 4-⭐️ reviews. Having learned the details of Electron+React, we are well positioned to build a version of Label LIVE using React Native.
The possibilities are endless and we are excited.
A sincere thank you to the open source developers that have contributed to the projects that made Label LIVE possible. They allowed me to create an app that didn't exist, and surely wouldn't exist on Windows... oh, Windows. That's another post for another day.
If you are disappointed in the available software for label printers - give this a try.