Offline-verified · Ed25519 tickets · Single Go binary

Your gate works with no internet.

Events and ticketing in a single Go binary. Organisers create events, attendees buy tickets and get a signed QR, staff scan at the gate.

Cackle ships as one Go binary with an embedded SQLite database and an embedded React frontend — no separate database server, no cloud account required. The thing that makes it different from every incumbent ticketing platform: the gate does not need the internet to admit people. A ticket is an Ed25519-signed capability that a scanner verifies entirely offline against a pinned public key. If the venue's Wi-Fi drops, or the server dies outright, gates that already downloaded the event's scan bundle keep admitting people.

Experimental — work in progress. Cackle is not production-ready. APIs and the ticket format are still moving, and payment adapters are unit-tested but not sandbox-verified — do not take real money through an unverified adapter yet. See the Payments doc.

0network calls at the gate
MIT/Apache-2.0open source
1 binaryGo + embedded SQLite
Cackle — event dashboard and offline gate scanner

Built for the gate, not just the office

Everything an organiser needs to sell tickets, and everything a door needs to admit people when the network can't be trusted.

Offline-verifiable tickets

Every ticket is an Ed25519-signed capability, cackle.<payload>.<sig>, verified with a pure function — no database, no network, no implicit clock.

Offline gate scanning

A scanner pulls one scan-bundle while online and can then run the whole event unplugged. Dedupe is local and append-only — first scan wins, duplicates are recorded.

Events & ticket types

Organisations own events; events own ticket types with pricing, quantity caps, sales windows, and per-order limits.

Pluggable payments

A small provider interface behind every charge. manual is the always-on, no-API-key default; 20+ optional adapters are off unless you enable them.

Org roles

owner / admin / scanner per organisation, checked server-side on every route.

One binary, one file database

Pure-Go SQLite plus the built React app embedded via embed.FS. docker run -p 8080:8080 vulos/cackle is the whole install.

What it looks like

The organiser dashboard, the gate scanner, the public event page, and the ticket itself.

Cackle organiser dashboard showing ticket sales and admission stats
Organiser dashboard — sales, revenue, and admissions for an event
Cackle gate scanner screen showing a QR scan result
Gate scanner — admits, dedupes, and works with no network
Cackle public event page with ticket types
Public event page — ticket types and availability
Cackle attendee ticket with QR code
Attendee ticket — the QR is the signed capability itself

Full gallery, including dark mode, in the docs.

Quick start

Docker for the real UI, or --demo for a fully seeded event with zero setup.

git clone https://github.com/vul-os/cackle.git
cd cackle

# build the real single binary and run a seeded demo
make build
./cackle --demo
# open http://localhost:8080

# or: Docker
docker build -t vulos/cackle .
docker run -d -p 8080:8080 \
  -v cackle-data:/srv/data vulos/cackle
  1. 1
    Buildmake build compiles the frontend and embeds it into the Go binary — one ./cackle file.
  2. 2
    Demo mode--demo seeds an organisation, a published event, ticket types, and a stub payment provider — buy and scan a ticket end to end.
  3. 3
    Scan it offlineSign in as a scanner, open the scanner view, present the ticket's QR — then turn off your Wi-Fi and try again. Same result.

Honest about what's built

Experimental and pre-production, on purpose said out loud rather than glossed over.

The core is solid

Ticket signing, offline verification, scan-bundle fetch, local dedupe and sync-back are built and tested — this is the part the whole product exists for.

Payments need sandbox testing

20+ adapters are unit-tested against fake HTTP servers, not a real or sandbox merchant account. Don't take real money through one until you've verified it yourself.

Multi-gate sync is a known gap

Two offline scanners at two entrances dedupe independently today — a venue mesh sync between devices is designed but not yet built.

Vulos logo

Part of VulOS

Vulos is a family of open, self-hostable apps. Cackle runs standalone, and also runs as an app hosted by the Vulos OS — the same binary, with the OS wiring identity and storage in front of it.

Explore Vulos →