Lightweight character recognition in the browser.

A character recognizer for your own page — 13 KB at 96%, or 98.5% right on capital letters at 45 KB — plus reaction and rating widgets your visitors draw, and short codes people write by hand. Everything is read in the browser; the two small servers are yours to run.

Character recognition

draw a capital letter

Capital letters A–Z. Every option reads the same strokes.

optionaccuracyms/charzip sizetop 2time
accurate ↓98.5%0.24 ms45 KB
fast ↓97.8%0.10 ms53 KB
small ↓96.4%0.9 ms13 KB

How to embed · Build one for your own symbols

Games

Played entirely by hand on digitizer.fun, every letter read in the browser:

How each one uses millirec →

Handwritten autocomplete

One box: write each letter over the last, and the words your ink could be appear as you write — tap one to finish. One script tag, your own word list.

Try it → · In use: Border Quiz, Quizzes

Handwritten codes

Six-character codes people write by hand to open a page or join a room — from an alphabet with no lookalikes, so no O/0 or l/1 mix-ups.

The codes server → · In use: Emoji code for two, Free Dots online

Reactions

Visitors draw a heart, a check or a star instead of clicking it — counted once per visitor. Drawings on the wall are re-checked by your server, and can wait for your review.

Run your own → · In use: blog.triplelog.com

Ratings

One to five stars, drawn — side by side on a wide pad, or each on top of the last in a square one when space is tight — or tapped.

Run your own →

Embed them on your site

Reactions and ratings

From your own widgets server; the editor on its front page makes the snippet.

<script async src="https://YOUR-SERVER/embed/millirec-widget.js"></script>
<div data-millirec="reactions" data-widget="default"></div>
<div data-millirec="ratings" data-widget="default"></div>

Handwritten codes

From your own codes server: a box that opens a page when its code is written.

<script async src="https://YOUR-SERVER/embed/millirec-code.js"></script>
<div data-millirec-code></div>

Run the servers four ways

  • Standalone: npm install && npm start
  • Docker: docker compose up -d
  • Node library: app.use(server.listener)
  • Cloudflare Workers: npx wrangler deploy