R
RABTA CANVAS

{{ loadingHistory ? 'Opening the canvas' : historyError ? 'The relay is quiet' : 'Make your first mark' }}

{{ hover ? ('x ' + pad(hover.x) + ' y ' + pad(hover.y)) : '0,0 → 1000,1000' }}
1000 × 1000
signing
R

Your local identity

Generated in this browser. Rabta never sees the private key.

Public key · ed25519

{{ identity.owner }}

Stored in localStorage · reused on your next visit

A new key means your future strokes have a new owner. Strokes already on the canvas stay under the old key.

{{ relayError }}

Collection
{{ collection }}
Retention
30 days
Owners
{{ stats.painters }}
01

Sign locally. Each stroke becomes a canonical JSON event, hashed with SHA-256 and signed with your Ed25519 key.

02

Relay, don't interpret. Rabta verifies the signature, stores opaque data in SQLite and expires it automatically.

03

Sync it. Every visitor polls for new strokes and catches up automatically after a reconnect.

Rabta protocol v1 {{ stats.strokes }} strokes · {{ stats.painters }} painters
!

This browser can't sign strokes

{{ fatal }}

{{ toast.message }}