Award points for actions, let users redeem them, track balances. For apps building engagement mechanics without a third-party loyalty platform.
Every operation in Pennant is available through a JSON REST API. No SDK required — use curl, fetch, or any HTTP client.
GET /api/members — list all members with optional search and filter query parametersPOST /api/members — create a new member recordGET /api/members/{id} — retrieve a single member by IDPUT /api/members/{id} — update an existing memberDELETE /api/members/{id} — remove a memberGET /api/stats — aggregated statisticsGET /api/health — health check endpoint for monitoringSelf-hosting used to mean spending a weekend configuring Docker, Postgres, Redis, and an Nginx reverse proxy. Pennant skips all of that. It compiles to a static binary with an embedded database, so there is nothing to install and nothing to maintain.
Start Pennant with a port and a data directory. It creates its SQLite database on first run and serves both the API and the dashboard on the same port. Create members through the web interface or POST JSON to the API. Filter by email, points, or search by keyword. Update records with PUT, delete with DELETE. The stats endpoint returns aggregate counts for monitoring.
A regulated company runs Pennant inside their air-gapped network. No data leaves the building. Compliance auditors can inspect the SQLite file directly. When the team needs a report, they query the API and format the output however the auditor expects.
GET /api/members — List all members. Supports ?q=keyword for searchPOST /api/members — Create a new member. Send JSON with at least nameGET /api/members/{id} — Fetch one member by IDPUT /api/members/{id} — Update fields on an existing memberDELETE /api/members/{id} — Remove a memberGET /api/stats — Returns total countGET /api/health — Returns {"status":"ok"} for uptime monitoringSelf-hosted loyalty and points system. Self-hosted on your infrastructure. Your data never leaves your server.
curl -fsSL https://stockyard.dev/install.sh | sh -s -- --tool pennant
PORT=10090 ./pennant
http://localhost:10090
Single binary. Embedded SQLite. No Docker. No database. No dependencies.
Your license key arrives by email within 5 minutes of checkout. Set it as an environment variable and restart the binary.
export PENNANT_LICENSE_KEY=stockyard_xxxxxxxxxxxxxxxxxxxx ./pennant
No cloud connectivity required. The binary validates the key offline with Ed25519 signatures.