Self-host Attesto
Attesto is open-source under MIT and runs anywhere you can run a Deno container with a Postgres connection. Self-hosting gives you full control of your data path and zero recurring cost — at the price of running the validation infrastructure yourself.
Most teams should use the managed service
The hosted Attesto at api.attesto.nossdev.com is run by Night Owl Software Studios — Apple key rotations, Google service-account management, monitoring, and upstream-API change tracking are all handled. If you'd rather ship features than operate validation infra, get integrated instead.
Self-hosting is the right path when you have ops capacity, need data residency you control, or want to fork the codebase.
What you'll need
- A Deno 2 runtime (or the published Docker image at
ghcr.io/nossdev/attesto) - PostgreSQL 16+
- Apple
.p8key for App Store Server API access (per app) - Google service-account JSON for Play Developer API (per app)
- A 32-byte symmetric encryption key (
openssl rand -base64 32) for the credential vault
Three paths from here
1. Try it locally
Quickstart walks through cloning the repo, running Postgres in Docker, and booting Attesto in watch mode. ~5 minutes.
2. Set up your first tenant
Once Attesto is running (locally or deployed), Onboarding a tenant is the operator runbook for enrolling a new app: mint the API key, install Apple/Google credentials, configure webhooks, hand off to the integrator.
3. Deploy to production
Deployment covers Fly.io (the reference deploy used by the managed service), Docker compose, and Kubernetes. Operations and Maintenance cover day-2 concerns once you're live.
Section map
Getting started
- Quickstart — local dev in 5 minutes
Tenant setup
- Onboarding a tenant — full operator runbook
- Apple setup — install
.p8keys per tenant - Google setup — install service-account JSONs per tenant
- Webhooks — register Apple S2S / Google Pub/Sub URLs and per-tenant callbacks
- Tenants — multi-app, multi-environment patterns
Operating it
- Deployment — Fly / Docker / Kubernetes
- Operations — what to monitor, how to scale
- Maintenance — key rotation, retention, upgrades
- Testing — running the test suite before release
- Load testing — capacity validation
- Troubleshooting — symptom-keyed problem-solving
Reference
- API reference — every endpoint, request/response shapes
- Error codes — every code, with caller actions
- Architecture — request flows, data model, threat model