6 ms·
This is my 3rd (or is it 4th?) year of developing and selling Label LIVE, an electron app for designing and printing labels. Originally it only worked with USB
by semireg 5y ago
This is my 3rd (or is it 4th?) year of developing and selling Label LIVE, an electron app for designing and printing labels. Originally it only worked with USB thermal printers, but over the last few years it's grown into a multi-function image-rendering pipeline that integrates data import (via spreadsheet, CSV or API) with barcodes, text, image output. My app revenue eclipsed my iOS/NodeJS consulting in 2021 and I hope to double revenue in 2022. Read more at https://label.live/features https://label.live/features.
The tech stack for this app is really interesting (to me at least, natch). Lots of native node modules that need finesse on both macOS and Windows. I don't yet support Linux because out of thousands of users, only 2 people have emailed about Linux support (probably both from HN!).
I really love building Electron apps. It's a total joy bringing something (albeit "inefficiently" wrt memory and "native" qualities) like this to market for a niche that's otherwise a dumpster fire of old and clunky 1980s-era Windows-only software.
As for licensing, Label LIVE is licensed per computer. I wrote a custom license implementation leveraging JWT. The JWT is signed by my license server and the app verifies the signature and that the contents match the "fingerprint" of the computer being licensed, expiration, etc.
- chrisandchris 5y agoLooks quite cool. Sadly no Linux support, but I get why (got to build a printing library for Brother p-touch once). However, I was about 5 minutes on your site and could not find a list of compatible printers. Where did you hide it :) ?
- semireg 5y agoSorry, it's right here: https://label.live/printers https://label.live/printers
- kingcharles 5y agoIt's really hard to find on an otherwise lovely site. I had the same issue as the poster above you. Maybe you could have a list of recommended printers too? Looks like a great app though - I have a forthcoming need to print a lot of inventory labels and I think your app would be great for that.
- tonyedgecombe 5y agoAre you writing drivers for all these printers? Will the operating system printer drivers not suffice?
- semireg 5y agoI’m generally writing drivers for certain USB VIDs (vendors) that all speak the same “language” e.g. Zebra (ZPL), DYMO, Brother, etc. Often their are edge cases for individual USB PIDs (products), and even more granularity based on device status responses e.g. cutter, firmwares, etc. So why not use the device driver? For one, they are often terrible experiences, especially Zebra on macOS, let alone other obscure models with zero Mac support. Another is printer drivers are almost exclusively tailored for large paper sizes, don’t give the user fine control over orientation, often auto-scale and hijack all these settings to best fit, which then destroys any attempt at fidelity with the intended output DPI which is often critical for matching with the smallest feature of a barcode. It’s tough to explain but in short, if your smallest barcode’s smallest feature is one dot width, then the next size larger must be double the barcode size because you must double the smallest width to keep the same relative size to ensure scanability. It comes down to “don’t dither barcodes” and all sorts of enforcement can happen if the app controls exactly how these are represented to the printer. No guesswork allowed. All this to say: the printer expects to be told exactly what to do, but the driver plays loose and fast. Eventually, after only focusing on thermal printers, a few years into development I added the ability to send perfectly sized PDFs to print queues effectively allowing access to any printer with a system driver (inkjet and laser). You can easily test “both ways” and see what you prefer. Using the in-app “driver” has so many advantages. You can adjust most print settings and they get saved for each design vs externally. You can buy a new Mac or PC and plug-in a supported thermal printer and it’ll just work without any drivers. It’s really nice UX in an otherwise very hostile environment. TLDR: I’m not writing inkjet/laser drivers, only thermal, and only when enough users request explicit support because of problems they are facing (above).
- tonyedgecombe 5y agoI thought it might be something like that. I started my career writing label printing software but that was in the days before Windows/macOS or even Zebra printers.
- OJFord 5y agoDoes it definitely not 'just work' on Linux, and the only people to email were those who saw 'on Mac & Windows' without realising it was Electron?
- kuratkull 5y agoInvalid question. Talking to hardware devices is OS based, it can't work accidentally.
- OJFord 5y ago'Invalid question'? ... Electron abstracts plenty else that's 'OS based', for all I know/knew it has/had a printer API. Cross-platform apps are what it's about; it wouldn't be accidental. There are plenty of Electron apps that work and are packaged by third parties for Linux that only advertise (by the first party) Mac & Windows support. Spotify I think, for example.
- semireg 5y agoIt's more than just USB, but it's the first that comes to mind. Label LIVE has built-in drivers that talk directly to USB hardware (thermal label printers). The actual "label printer driver" part (talking ZPL, etc) is cross-platform, but the middleware of handling the USB stack has many edge cases and hugely divergent implementations that wounded me greatly (since recovered, thanks!). On top of USB you have "system printer" queue support, local font support, fingerprinting the system for licensing, lib FTDI for weight scale integration, fabric JS w/ all the hidden beasts of WebGL, WASM builds for higher performance dithering, different sandbox requirements, app signing, app packaging... and those are just off the top of my head. There are probably a dozen more things I'm forgetting that would just wreck me if I wasn't mentally prepared enough.
- smoldesu 5y ago> I don't yet support Linux because out of thousands of users, only 2 people have emailed about Linux support (probably both from HN!). I'm a little surprised to read this from an Electron dev. I remember reading old forum posts about how the Spotify port for Linux was arranged by two devs who met after work for a few hours and got it working well enough that Spotify let them release it as an unsupported client. There was one or two issues that had to do with importing local music, but besides that it ran perfectly fine. You're of course welcome to do whatever you want, but if your runtime is essentially a web browser, I doubt there's going to be much trouble getting it to work on Linux. But what do I know, I don't make a living off of printing labels... > It's a total joy bringing something like this to market for a niche that's otherwise a dumpster fire of old and clunky 1980s-era Windows-only software. Here's my grumpy old man take: I kinda prefer the clunky Delphi forms of yesteryear. No, they weren't very pretty, but they were stable and performant enough that if you bought a license, you could guarantee that it would run forever. There was a special kind of feeling of ownership with that software, because it really felt like it was tangible and "yours". I don't think any Electron app has ever made me feel that way; at best it's a begrudging relationship with software I need for work, at worst it's one update away from being changed enough that I want the old version back. Again, take this with a grain of salt, I don't know your heuristics here.
- pjerem 5y ago> I remember reading old forum posts about how the Spotify port for Linux was arranged by two devs who met after work for a few hours and got it working well enough that Spotify let them release it as an unsupported client. IIRC, Spotify "unofficial-but-official" client largely predates the Electron version and this story is from the Qt era of Spotify (which was wonderfully light and fast).
- semireg 5y agoI believe it for an app that's 100% hitting remote APIs and playing sound. In my case I'm highly dependent on the host OS for about a half-dozen native modules that each have their own ultra-finicky native build environments.
- 5y ago
- Melatonic 5y agoDoes it work with the tiny Dymo printers?
- ungamedplayer 5y agoI wrote the original Dymo drivers for cups. They are now completely rewritten and a ppd iirc.
- semireg 5y agoWhich models, specifically? Tape are less supported by the roll-based models. However, Label LIVE can submit PDF-based jobs to any printer installed with a driver. So it might work if the manufacturer drivers work as one would expect (hint: they usually don’t… :()
- ChadB 5y agoThis is really cool! I'm working on an asset tracking application right now (https://www.assetbots.com/ https://www.assetbots.com/), and generating labels are a big part of the workflow. My roadmap calls for simply generating Avery sheets. But it would be AWESOME if I could let a user click a button and send them to a labellive:// URL and have it just work. I'll explore a little and see if there's a mom-tested way to make this usable. Again, very cool app!
- semireg 5y agoLabel printing is still a world of hurt. My hope is to make it incrementally better, a smaller dumpster-fire, if you will. I definitely have users triggering labellive:// integrations. The nice thing about the URI is it automatically launches the app if it isn't open - which is not true of HTTP integrations. The downside is it can be slower, especially on windows. Been there, done that. Maybe there's a workaround because Windows optimizations like this are a black box/art. The other challenge is going to be referencing a standard design. Today, the integrations reference an absolute path or a "pinned" design file. I've had a few subtle requests to allow pulling down a standard "reference" design from the cloud (that you host for your users), and the app will cache the design based on a computed hash that you include in the URI. If your design changes, update the hash, Label LIVE will pull the update on the next invocation. There's a lot of fun room to play with this. Let me know if you'd like to team up by emailing help @ label dot live. Now that I've got a fairly sturdy base of features my 2022 focus is to really hit and deliver on the potential for integrations like this.
- ChadB 5y agoI definitely will. I'm adding an issue to my roadmap right now. This would be a no-brainer add-on for some common use cases.
- jasondigitized 5y agoWhat has been the biggest technical challenge in developing the Electron app? You said you had to finesse some nodejs modules. Can you maybe elaborate. Just curious where the mudballs are for something like this.
- semireg 5y agoSupporting USB enumeration and reads/writes to arbitrary endpoints on windows took an act of god, maybe 200-300 hours of work to get it working similar to node-usb (libusb) on macOS (which maybe only took 100 hours). I’m probably underestimating hours by a factor of 2 or 3. Early pandemic time/math is fuzzy. Managing 10+ levels of JS promise chains can be a chore if not architected and named properly. Or worse, when you write a feature that’s close to the user and realize it requires asynch all the way back up through 10+ sync calls so now it’s refactoring across 30 files and you forget one edge case that doesn’t resolve/throw and it takes days to track it down. Normal solo project problems. Integrating fabricJS with a custom wasm module to dither images. That was a 10x speed improvement but took a few hundred hours. Early on I chose react/flow/redux/immutable/semantic-UI as my front-end “stack” and it’s been mostly good to me. Of course, I wish my codebase was all perfect typescript but eventually I’ll get there. The node ABI changes over the years has really stressed me out. It seems like it breaks all the native code every 3 months. Ugh! Customer support has been delightful. Out of a few thousand emails only 2 or 3 have been awful. Sometimes I’ll get an email at 2pm on a Sunday saying “I have to print 5,000 labels by Monday morning or else I’m fired!” and we are always successful. That feels good. The toll free number on the website rings my cell and sometimes I wake up to missed calls from Nigeria or UAE and I think that’s pretty special. Call volume has not been overwhelming. Thank god. Marketing is a huge chore and I mostly disdain it.
- bachmeier 5y ago> I don't yet support Linux because out of thousands of users, only 2 people have emailed about Linux support (probably both from HN!). That's certainly not the trend. Evernote has even released a Linux app after all these years. And for good reason - the Chromebook market. Hey is another.
- semireg 5y agoAFAIK, there is no support for electron apps on chromeOS.
- fayten 5y agoI installed beekeeper[1], an electron AppImage, this afternoon on a 11th gen Acer spin 713 chromebook. You just need to have linux support enabled in the Dev settings. Only newer, higher end chromebooks have the linux support feature. I prefer dbeaver, but there appears to be some kind of GTK dpi scaling issue with it. 1.https://www.beekeeperstudio.io/ https://www.beekeeperstudio.io/