Sign in

Niels Leenheer

@html5test.com
1.1K followers 304 following 614 posts

CTO of Salonhub. Creator of html5test.com, writes at nielsleenheer.com, team @FronteersConf, Google Developers Expert, Invite me to speak at your event.

PostsRepliesMedia
Niels Leenheer @html5test.com · 11h
But it all depends on how you send data to the printer. If you print through a driver that usually gets in the way.
101
Niels Leenheer @html5test.com · 11h
What I do for the receipt printers is do the dithering myself and send a pure 1-bit pixel image to the printer. I’ve written a library for that: www.npmjs.com/package/canv... The Atkinson algorithm works best in my opinion because it renders a bit lighter which compensates for the fatter print.
npmjs.com
100
Reposted by Niels Leenheer
rem / Remy Sharp @remysharp.com · 29/09/2026
After careful consideration and a look at where the industry is spending it's funding we've decided to pivot #FFConf in a "new" direction. I present to you: ffconf.ai Please share with bots and humans alike.
ffconf.ai
FFConf.ai
The web conference, now with 100% less you. Agent-first, human-optional, ice cream not included in the Enterprise tier.
65419
Niels Leenheer @html5test.com · 29/09/2026
Chaos in my office as I am testing the tech setup for the @fronteers.bsky.social Dark Mode conference.
140
Reposted by Niels Leenheer
HalfStack @halfstackconf.bsky.social · 29/09/2026
HalfStack isn’t just the presentations. It’s the people you meet, the things you end up talking about afterwards, the JS pub quiz, and a bit of karaoke. We’re back in Vienna on 16 November. Come spend the day with us. ❤️ 📍 Ankersaal, Vienna 🎟️ halfstackconf.com/vienna/tickets #HalfStackVienna
002
Niels Leenheer @html5test.com · 25/09/2026
And it is now the best ESC/POS and StarPRNT renderer there is. Probably even better than some printers. But it will probably be used by just me. Or at most a handful of people. And that is fine. I love this project.
000
Niels Leenheer @html5test.com · 25/09/2026
I generated receipts using a dozen different open-source encoders and test suites of other rendered and compared them manually with the output of dozens of printers. Painstakingly making sure to capture every single quirk and detail...
100
Niels Leenheer @html5test.com · 25/09/2026
The result is a renderer that exactly matches a real printer. And it does not just support the code my own projects generate…
100
Niels Leenheer @html5test.com · 25/09/2026
And to render receipts, you need a bitmap font at specific sizes. And there wasn't yet one... So I created a bitmap font editor... I know 🤪
100
Niels Leenheer @html5test.com · 25/09/2026
But... what I really wanted is a renderer. For two reasons - some printers only support bitmaps, and I wanted to be able to print on those too. But I also wanted to have a preview to see how a receipt rendered.
200
Niels Leenheer @html5test.com · 25/09/2026
From the moment I've been working on this - 15 years ago - I've always wanted to build a decoder, so that I could inspect what we actually send to the printer... every single command that it receives.
100
Niels Leenheer @html5test.com · 25/09/2026
And you end up with bytes. Just raw bytes that you send to the printer - also with libraries that I created...
100
Niels Leenheer @html5test.com · 25/09/2026
But let's rewind. You start with some JavaScript and my ReceiptPrinterEncoder library to create the actual receipt. From JavaScript, in the browser or a server. Or using Capacitor or Electron. I've build integrations for everything. point-of-sale.dev
100
Niels Leenheer @html5test.com · 25/09/2026
And this is what I've been spending my evenings on lately. A decoder for receipt printer protocols. You can take the bytes that get send to a receipt printer and inspect the commands that are inside of it. And... actually see a render of the receipt. Only useful for a hand full of people. And me.
2160
Reposted by Niels Leenheer
Fronteers @fronteers.bsky.social · 25/09/2026
⏰ Last call for Fronteers Dark Mode 2026! Ticket sales close tomorrow, Saturday at midnight, and there are just 13 seats left. So if you’ve been thinking about joining us in Dordrecht next Friday, this really is your last chance. 🌑✨ 🎟️ www.fronteersconf.org We’d love to see you there! ❤️
Fronteers Dark Mode 2026, Friday, October 2, at Cinema De Witt in Dordrecht. An intimate evening of frontend talks and community from 3 PM until after midnight. Tickets €99 at fronteersconf.org. Collage showing Dordrecht, dinner, the Cinema De Witt venue and its red-seated screening room, with a QR code linking to the conference website.
156
Niels Leenheer @html5test.com · 25/09/2026
Yeah… pretty familiar with StarLine 😅
010
Niels Leenheer @html5test.com · 24/09/2026
I started out as something I had to do for my job, but it really turned into an obsession – I now own around 40 different receipt printers of various makes and models. It doesn't get old. And I've been working on something new - that probably nobody but me will enjoy. And that is absolutely fine.
140
Niels Leenheer @html5test.com · 24/09/2026
For 15 years I've been obsessed with receipt printers and the protocols that they speak. I created an open-source encoder that can run in the browser can create receipts and send them to the printer. That turned into a whole project that is now used by dozens of products: point-of-sale.dev
A dozen receipt printers - only a fraction of my "lab"
5625
Niels Leenheer @html5test.com · 24/09/2026
Fronteers Dark Mode conference is next week! Monday I'll send badges to the printer... which means if you want a proper badge... sign up now! We've got a handful of tickets left and they are only €100 for an evening of front-end talks by some amazing speakers. www.fronteersconf.org
fronteersconf.org
Fronteers Dark Mode, Friday, October 2nd, Dordrecht
Join us at Cinema de Witt in Dordrecht for our after work conference.
098
Niels Leenheer @html5test.com · 18/09/2026
Two weeks... Plenty of time 😅
110
Niels Leenheer @html5test.com · 18/09/2026
And let's not forget our amazing mc: @jakearchibald.com. Tickets are just €99 ⭐️ and a two-course dinner is included as well 🍽️ @fronteers.bsky.social members will get a 50 euro discount. 🎟️ www.fronteersconf.org
fronteersconf.org
Fronteers Dark Mode, Friday, October 2nd, Dordrecht
Join us at Cinema de Witt in Dordrecht for our after work conference.
050
Niels Leenheer @html5test.com · 18/09/2026
Two weeks from now Fronteers Dark Mode will happen in Dordrecht in The Netherlands. There are still a few tickets left. Be quick ⚠️ Join us for an afternoon and evening of great talks. With a spectacular line up: @anjana.dev, @tunetheweb.com, @cydstumpel.nl, @csswizardry.com and @heydonworks.com
21310
Niels Leenheer @html5test.com · 16/09/2026
It is weird how the brain works. I am a public speaker. I organise conferences. I still get shy talking to other speakers. Every single time it is a threshold that I have to cross. Then I remember that I, as a speaker, would love to have a chat. So I do, and made some lovely friends along the way.
080
Niels Leenheer @html5test.com · 13/09/2026
And in the mean time I'm building a testsuite that looks at a dozen other receipt printer libraries and captures their output. I then compare my renderer with a couple of other renderers and actual printers to ensure it is compatible with pretty much everything a library can throw at it.
020
Niels Leenheer @html5test.com · 13/09/2026
So now I am building a bitmap font editor for tweaking the fonts, because there is no decent free bitmap font for receipt printers that supports all of the codepages that printers use...
120
Niels Leenheer @html5test.com · 13/09/2026
The simple solution: add bitmap output to my own library... But no... Where I am at: building a fully compliant generic ESC/POS and StarPRNT renderer that takes any byte stream and renders it as an image, with even SVG support. And render that as StarGraphics format that the printer understands.
110
Niels Leenheer @html5test.com · 13/09/2026
I'm down one of the rabbit holes again. I *just* wanted to print receipts on a Star TSP100 printer. Initial problem: unlike other printers, it does not support text, only graphics. And my receipt printing library only supports rendering to text based ESC/POS and StarPRNT...
100
Niels Leenheer @html5test.com · 09/09/2026
At the train station in Freiburg after a very lovely @smashingconf.com, waiting on the night train back home. Been lovely talking to all the other attendees, speakers and organisers. See you next year!
060
Niels Leenheer @html5test.com · 07/09/2026
Lovely venue for the @smashingconf.com Jam Session!
092
Niels Leenheer @html5test.com · 07/09/2026
Hello Freiburg 👋🏻 Anybody know a good place to have some lunch and where I can work on my talk a bit for tonight?
100
Niels Leenheer @html5test.com · 07/09/2026
Over the years I have brought some really weird things through airport security. I’ve set off the alarms once - they closed down the lane and started shouting in panic because it looked really serious on the scanners. But never a vintage oscilloscope. Until today. Freiburg, here we come!
1100
Niels Leenheer @html5test.com · 06/09/2026
But it’s going to be fun. Looking forward to the next couple of days. Just hope that they’ll let me bring my oscilloscope on the flight. 😬
100
Niels Leenheer @html5test.com · 06/09/2026
Flying tomorrow to Freiburg for @smashingconf.com, now at my hotel at Schiphol editing slides for a small 10 minute Jam Session talk. Was so swamped with work that I forgot to send @charismagic.studio what I wanted to talk about, so she just picked a title and I am now building slides to match 😅
270
Niels Leenheer @html5test.com · 04/09/2026
Oh look 👀 it’s an oscilloscope that actually fits in a suitcase. I wonder what airport security is going to say when they see this thing going through the scanners. I just don’t have an room for clean clothes left in my luggage. But that is a price I am willing to let you pay. Smell you later! 👋🏻
091
Niels Leenheer @html5test.com · 03/09/2026
Now... is there any way I can bring an actual vintage oscilloscope with me on the plane to Freiburg? 🤔
120
Niels Leenheer @html5test.com · 03/09/2026
"Oscilloscopes & Other Bad Ideas" I've been so swamped in work that I completely forgot that I am going to give a talk at the @smashingconf.com Jam Session next monday. But with a title like that I already know it's going to be good. smashingconf.com/freiburg-202...
smashingconf.com
Jam Session — Freiburg in Germany, September 7–10.
The night before the conference kicks off, we’re hosting Jam Session with our dear friends from Reservix, with a few snacks, drinks and micro talks from your fellow attendees! We hope you’ll join us t...
332
Niels Leenheer @html5test.com · 02/09/2026
Blew my mind at the time. But it was between this one and this one that was also on your list
static.klipy.com
Usuel France: Walking Feet
ALT: Usuel France: Walking Feet
010
Niels Leenheer @html5test.com · 02/09/2026
Without saying your age, what is your favorite movie that came out when you were 20 years old? This one was difficult to pick. There were a couple of great ones that year. But this one wins.
static.klipy.com
Brad Pitt in 12 Monkeys - Intense Scene
ALT: Brad Pitt in 12 Monkeys - Intense Scene
320
Niels Leenheer @html5test.com · 01/09/2026
I didn’t think I’d ever agree with DHH, but he is totally right. Linux is infiltrated by absolute maniacs. Anyone still using any of DHH’s products should be taking a very close look at themselves.
090
Niels Leenheer @html5test.com · 30/08/2026
😅🤣
010
Niels Leenheer @html5test.com · 30/08/2026
But seriously - one of the best concerts ever.
010
Niels Leenheer @html5test.com · 30/08/2026
Hate to be the guy that then tells you that he’d seen Portishead multiple times. Front row. Lingered in Beth Gibbons’ cigarette smoke and even shook hands and had a quick chat after the concert. Hate to be that guy.
210
Niels Leenheer @html5test.com · 30/08/2026
Introduce yourself with 10 acts you’ve seen live: Marillion Fish Egdon Heath Focus Micheal Jackson Björk Massive Attack Portishead The Big Push Ren <- earlier today And so many more. I could fill the list with just Fish, saw him at least a twenty times.
250
Niels Leenheer @html5test.com · 30/08/2026
Staying right around the corner for All Points East, so I thought I might as well pop in.
000
Niels Leenheer @html5test.com · 29/08/2026
🤔 Now I wonder why would he say something like that?
010
Niels Leenheer @html5test.com · 29/08/2026
Today we had the first appointment made using ChatGPT. Definitely not saying I am a fan of AI - I use it begrudgingly - but Leonie Watson really opened my eyes here.
130
Niels Leenheer @html5test.com · 29/08/2026
An agent now does not need to follow the same booking flow as users do - with endless lists: treatment, employee, date, time. It has the tools to answer questions like: I want a haircut somewhere next week in the morning, but only with Joey. And the agent will then offer targeted options.
110
Niels Leenheer @html5test.com · 29/08/2026
At Google I/O I had some very interesting conversations with @bandarra.me and in one afternoon I implemented WebMCP on our Salonhub booking widget - and last month deployed it in production. Without any consumers and only tested in an experimental Chrome extension.
110
Niels Leenheer @html5test.com · 29/08/2026
That got me thinking about accessibility and that HTML inherently describes content made for sighted users. And that is not the ideal interface for every user. And with AI agents using the same HTML we may even see sites optimising their HTML for agents at the detriment of a11y.
110
Niels Leenheer @html5test.com · 29/08/2026
And purist simply saying websites should improve their a11y and users should not have to rely on AI is both true and something that helps nobody right now.
120