Skip to the object
TACTILE UI

Receipt Printer

A small thermal receipt printer that prints any text, line by line. The paper feeds out from behind a serrated steel tear bar in the head's own rhythm, curls a little as it grows, and can be torn off: it rips along the teeth and falls away.

Everything you set here is what the Code and Prompt tabs give you.

Datasheet

Mechanism
Line by line head, Stepper paper feed, Hinged row curl, Serrated tear clip, Gravity strip drop, Uneven thermal ink, Room fixed sheen, Sleeping loop
Stack
Vanilla ES modules, Dom, CSS
Needs
Nothing — no dependencies
States
13 documented
Version
0.1.0
Licence
With a Pass

States

  1. IdleThe lamp is green; nothing moves; the paper stays where it is.
  2. PrintingThe lamp is amber. Each line steps out a pixel row at a time, its ink coming with it, then the head rests for the rest of the beat; a long line takes a little longer, a rule or a blank half a beat.
  3. CurlingThe paper bends toward you, more the further it hangs from the slot; the rows are hinged edge to edge and the curled end catches the lamp.
  4. TearingBy the Tear key, a call, or a drag down past the resistance: a tug, a rip along the teeth, and the strip falls turning; its top edge is the bar's zigzag and a fresh sheet is already in the slot.
  5. Auto cutPast the paper length the printer cuts the strip itself and printing goes on.
  6. Out of paperWhen the roll's lines are used up the lamp goes red and printing waits; set a new roll and it goes on.
  7. FeedingThe Feed key feeds two lines; held, it keeps feeding.
  8. Thermal and recycledWarm off-white stock with a faint fibre grain and the head's dot grid, or greyer flecked recycled stock.
  9. AluminiumA bead-blasted case, steel bar and lit legends.
  10. GraphiteA soft-touch black case and a blackened bar.
  11. SoundOptional: a soft whirr for each line, a tick for each key, a rip for the tear. Off by default and only after the page has been touched.
  12. Off screen or hiddenThe queue holds and nothing runs.
  13. Reduced motionText appears whole with no feeding; a tear removes the strip; no sound.

What it is for

Output that arrives as a physical process, for the places a product hands something over: an order confirmation, an AI answer printed line by line, a log, a checkout summary, a ticket. Everything printed is real text in the page, announced politely as it prints; Feed and Tear are buttons, and the paper can also be torn by dragging it down. A plain, small API (print, feed, tear, clear) with events for each line, for the end of a job and for the tear.

Original. The paper is DOM and CSS: each printed line is a row of real text in a plane hinged to the one above, so the curl is a bend of the whole strip in perspective and the text stays selectable and readable. The tear bar and the torn edge share one zigzag polygon computed from the width.