sklar.app / dymobridge
A native Apple Silicon replacement for DYMO Web Services โ so browser apps keep printing to your LabelWriter 550 long after Rosetta is gone.
DYMO's background service (DYMO.WebApi.Mac.Host.app) is Intel-only, and its shared-certificate install breaks on macOS updates. DymoBridge answers the same local API from a single ~10 MB Swift binary. Your web app never notices the difference; your labels print exactly the same.
Signed & notarized .pkg ยท Apple Silicon ยท macOS 13+ ยท MIT license
Plenty of web apps โ EMRs like Kipu, shipping tools, label designers โ print DYMO labels through the vendor's JS framework, which talks to a little web service on 127.0.0.1:41951. That service is an Intel binary living on borrowed Rosetta time, and its TLS setup (a certificate shared by every install in the world) has a habit of breaking on macOS upgrades.
DymoBridge re-implements that service natively: the same four endpoints (StatusConnected, GetPrinters, PrintLabel, RenderLabel), a renderer calibrated pixel-for-pixel against the vendor engine's own output, and printing through DYMO's CUPS driver chain โ which ships arm64-native, so the 550's genuine-label handshake keeps working.
Web apps built on DYMO's JS framework work unchanged โ same port, same API, same rendered output.
Swift + SwiftNIO/NIOSSL and nothing else. No Electron, no runtime, no Rosetta.
A per-machine local CA with short-lived leaf certs, renewed silently. Deliberately zero keychain involvement.
Signed, notarized .pkg โ target Macs need no dev tools. Disables the vendor service reversibly; the uninstaller restores it.
Optional JSON rules tweak the labels your app sends โ move, resize, rescale, or drop fields โ without touching the app.
Every print/render request is captured (XML + rendered PNG) for replay, and a local health page shows live status.
https://127.0.0.1:41951/ โ the health page lists your printer. Print from your web app as usual.Prefer building from source?
git clone https://github.com/xwrvnggp9n-star/DymoBridge.git
cd DymoBridge
sudo ./scripts/install.sh # or ./scripts/build-pkg.sh to make your own installer
Because the app sends the label template with every request, site-local layout preferences have to live bridge-side. Describe them once in JSON โ this example drops an unused signature row and enlarges the patient block on a clinical specimen label:
{ "rules": [ {
"trigger": { "objectExists": "TEXT_SIGNATURE" },
"remove": ["TEXT_SIGNATURE"],
"objects": {
"labelFullName": { "y": 540, "h": 150 },
"TEXT_DOB": { "y": 770, "h": 150, "fontScale": 1.2 }
} } ] }
No rules file? Labels render exactly as sent.
DymoBridge is free and MIT-licensed. If it saved your office a headache, buy me a coffee โ