The SVG viewBox is in millimeters, so dragging, nudging, the inspector numbers, and the printed sheet are all the same units — no pixel-to-DPI guesswork on the way out, which is how browser label tools end up 4% off and miss the die-cut. QR codes are genuinely scannable and barcodes are real Code 128-B with a checksum. Runs entirely client-side: nothing is uploaded, nothing is stored, and you leave with a PNG or a print at true size.
Start from a stock size
Add artwork
Uploads never leave your browser. Generated artwork is produced server-side and returned inline — both are embedded in the label, so both survive the PNG export. Generation is limited to 5 per hour per visitor.
Label
100×60mm · 3.94×2.36in
Select an element, or add one from the toolbar.
Drag to move, corner handle to resize, arrow keys nudge 1mm, Shift+arrow 5mm, Cmd/Ctrl+Z undoes. Elements snap to the label edges and centre within 1mm, and rotate about their own centre — the resize handle follows the rotation, so it always grows the edge you're pulling. Your design isn't stored anywhere.
This runs entirely client-side and deliberately has no database behind it. A public page that writes rows is a public page anyone can fill, so the design lives in React state and you leave with a PNG or a print. The millimeter accuracy is the part that actually matters: most browser label tools work in pixels and then guess at a DPI on the way out, which is how you get artwork that's 4% too wide and a die-cut that misses. Working in mm from the viewBox up means the number in the inspector is the number the printer gets.