50 lines of code.
Beautiful receipts.

A single REST API call turns your transaction data into printer-ready ESC/POS bytes or responsive HTML. No receipt formatting logic in your POS code.

render.ts
const response = await fetch('http://edge:8081/api/v1/render', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    transactionType: 'SALE',
    renderTargets: ['THERMAL', 'DIGITAL'],
    transactionPayload: saleData,
  }),
});

const { renders } = await response.json();
// renders[0].payload = base64 ESC/POS bytes
// renders[1].payload = base64 HTML string
sendToPrinter(atob(renders[0].payload));

REST API

Single endpoint. Send transaction JSON, get back rendered output in your requested formats.

POS Mapper Plugins

Built-in mappers for Flooid, Oracle Retail, NCR. Or send data in RFDM format directly.

< 20MB Binary

The edge runtime is a single Go binary. No JVM, no Node.js, no containers required.

SQLite + In-Memory

Templates cached locally. Zero network dependency at render time. Works offline.

Open AST Format

RML templates compile to JSON AST. Build your own emitters, validators, or tools.

Expression Engine

40+ functions. CONCAT, FORMAT_CURRENCY, IF, COALESCE, FILTER, SORT. Sandboxed evaluation.

Try the API Sandbox

Get an API key and start rendering receipts in minutes. Full documentation, sample transactions, and Postman collection included.