All work

Tetrat

Software for the Horus pen plotter that runs right in the browser. Nothing to install: the plotter connects over USB to Chrome, Edge or Yandex Browser.

Type
Our own product
Platform
Web, Web Serial
Our part
Product, design, development
Year
2026
Tetrat

The brief

Horus is an affordable plotter that writes with an ordinary pen. The software that ships with it is awkward, and after a video of the plotter went out, people started asking where to get something better. The job was a whole product: a website, accounts, a free trial, payments and a studio you can use without reading a manual.

The studio

On the left, text with simple markup: a heading, a date, a list item, a formula in $…$, a function graph. On the right, a squared sheet that shows how the handwriting will lie and how long printing will take. The Python handwriting engine runs in the browser through Pyodide in a separate thread, so the interface never freezes.

A plotter from the browser

The plotter connects through Web Serial. The GRBL driver streams G-code and makes sure the controller’s 128-byte buffer always has room, and polls its state every 110 ms. The studio finds the corner of the sheet against the stops, checks pen contact, draws a frame, pauses, stops and resumes from any word.

The service

A Node.js server with no third-party dependencies: sign-up, sessions, a three-day trial, monthly and yearly plans, payments through YooKassa. The server re-checks every payment itself and blocks repeated trials and disposable email addresses.

How the browser drives the plotter

A tape of G-code feeds a 128-byte hopper: the next line goes only when the controller has made room. A ratchet asks for the state every 110 ms while the pen writes the word stroke by stroke.

TETRAT
The pen tip and the fresh stroke: the part to watchThe column is the 128-byte buffer: a line lands on top, the pusher removes one from the bottom on acknowledgementThe ratchet clicks every 110 ms: a status poll, the Idle / Run flagTetrat is a browser studio and subscription service for the Horus handwriting pen plotter. Nothing is installed: the plotter is driven from the browser with Web Serial (Chrome, Edge, Yandex Browser), over a GRBL board connected by USB (CH340). The handwriting engine, written in Python, runs in the browser too: Pyodide 0.27.2 in a Web Worker. The GRBL driver streams G-code by counting bytes: the next line goes only when acknowledged bytes leave room in the controller's 128-byte receive buffer, and it polls status every 110 ms (a “?” request, an Idle or Run answer). The studio finds the sheet corner against the end stops, lowers and raises the pen, draws a frame, prints with pause, stop and emergency stop, and can resume from a given word. On the bench is a model: lines stack in the column as they are sent, the pusher removes them on the controller's acknowledgement, and the gauge level is the number of bytes in the buffer. The word and the pen speed are an illustration, not a recording from a live plotter.

Under the hood

  • Web Serial: the plotter works from Chrome, Edge and Yandex Browser with no drivers or apps.
  • Pyodide 0.27 in a Web Worker: the Python handwriting engine runs in the browser, not on a server.
  • A G-code stream that counts bytes against the GRBL buffer and polls state every 110 ms.
  • Firmware is checked with $I and $$, and speed limits are taken from the board’s own settings.
  • Node.js with no dependencies: http, node:sqlite and scrypt; YooKassa payments verified on the server.

React · TypeScript · Vite · Web Serial · Pyodide · Node.js · SQLite

Shall we talk about your project?

Discuss your project