Every auth primitive your users expect.
- Passkeys (WebAuthn Level 2)
- MFA (TOTP + backup codes)
- SSO — SAML 2.0 + OIDC
- Magic links
- Organizations + invitations
- RBAC
- Session management
- Magic links
Your team can already build the concierge that books flights, syncs calendars, charges Stripe. Shark makes sure it ships the right way: real OAuth identity per agent, DPoP-bound tokens, delegation chains with full audit, and one call to revoke when a customer churns. One binary. SQLite. Self-host in 60 seconds. All human auth primitives included — passkeys, MFA, SSO, RBAC, orgs.
$ curl https://get.sharkauth.dev | sh$ shark serve→ listening :8443 · ready in 180ms
Maria signs up. Concierge plans her trip — delegates to Flight Booker, Hotel Booker, Calendar Sync, Payment Processor. Every hop: DPoP proof. Every token: scoped down. Every action: one immutable audit row with the full chain. Maria churns? One call cascade-revokes the whole tree.
Your team can already build this. Shark makes it ship right.
RFC 9449
DPoP per hop
RFC 8693
Token Exchange
OAuth 2.1
PKCE for all
Cascade Revoke
One call, full tree
passkey · maria@acme.travel
binding
DPoP (RFC 9449)
factor
passkey
RFC 8693 · Token Exchange
subject = Maria, actor = Concierge
scope=travel:plan ttl=900s
agent · trip-planner.worker
binding
DPoP (RFC 9449)
parent
bound
RFC 8693 · Parent-bound
subject = Concierge, actor = Flight Booker
scope=flights:book parent=bound
agent · flights.api.call
binding
DPoP (RFC 9449)
parent
bound
RFC 8693 · Parent-bound
subject = Flight Booker, actor = Payment Processor
scope=payments:charge parent=bound
agent · stripe.charge.worker
binding
DPoP (RFC 9449)
parent
bound
Incumbents bolted agent support onto a 2014 user model. Shark was built from the start for both sides of the equation — the humans using your product and the agents acting on their behalf.
Shark Proxy is a programmable ingress that sits in front of your upstream services. Every request is authenticated, authorized, and annotated before it ever touches your code.
Upstream services receive immutable, signed headers. The caller is who they say they are or the request never arrives.
Fast dynamic rules that match paths and methods against roles, scopes, and agent attributes. Hot-reloaded from a single config file.
Gatekeep by tier. Trigger Free → Pro upgrade flows at the gateway. Free users never reach the feature; paying users never see a loading state.
One gateway for humans and machines. Built-in circuit breaking, session caching, and consistent enforcement for every caller.
Your users authorize the connection once. From then on, the vault issues short-lived, scoped tokens on demand. Refresh tokens stay sealed. Provider quirks handled for you.
Agents request a token for Alice's GitHub. The vault signs and returns one, scoped and short-lived. Raw refresh tokens never leave the vault, not even in logs.
Google's sliding window, Slack's rotating refresh, GitHub's PAT semantics, Notion's workspace scoping. Shark knows the weird bits and handles them silently.
Drop-in flows that bridge the human and the agents acting for them. Alice clicks Connect once; every agent she trusts inherits scoped, revocable access.
Pull a connection and every agent holding a token derived from it loses access inside a second. Audit log shows you the blast radius in plain English.
Shark adapts to your architecture, not the other way round. Deploy as a gateway for zero-code coverage, or wire it into your code for granular control.
Shark sits as an identity-aware ingress. It handles all authentication and path-level authorization at the edge, injecting verified identity headers into your upstream requests.
Ideal for rapid deployment and securing legacy systems. Zero lines of auth code in your backend.
Native TypeScript and Python SDKs for in-process control. You own the user experience and internal auth checks. Shark handles session lifecycle, token validation, and DPoP verification.
For teams that want granular product control without rebuilding the session, DPoP, and delegation layer themselves.
Shipped inside the same 40MB binary. Watch delegation chains form. Rotate an agent key without waking anyone. Pull a session from a row in a table.
01
Six primary metrics
Users, sessions, MFA adoption, failed logins, API keys, agents. Live sparklines, no refresh needed.
02
Auth method breakdown
Password, OAuth, passkey, magic link. Thirty-day rolling donut.
03
Recent activity stream
Every token exchange, policy match, session mutation. Server-sent, not polled.
04
System health panel
Version, uptime, DB size, JWT mode, SMTP tier, SSO connections.
DPoP binding, delegation chains, chain introspection, and cascade revoke. These are the four primitives that make agent auth safe. Here is what they look like in Python.
from shark_auth import Client, DPoPProverclient = Client(base_url="https://auth.example.com", token="sk_live_...")prover = DPoPProver.generate()token = client.oauth.get_token_with_dpop(grant_type="client_credentials", dpop_prover=prover,client_id="agent-123", client_secret="secret", scope="mcp:write",)# token.cnf_jkt = thumbprint binding. Token theft alone is useless.
Incumbent IAM bolted agents onto a 2014 user model. Shark started the other way round.
| Feature | SharkAuthSingle binary · free forever | Auth0 / WorkOS / Clerk / StytchIncumbent |
|---|---|---|
| Per-customer agent identity | First-class | Hack on top of M2M |
| DPoP (RFC 9449) | Native, per-hop | None |
| Token exchange w/ delegation (RFC 8693) | Native, audited | None |
| Cascade revoke (5 layers) | One call | Manual per token |
| Self-host | Free, single binary | Enterprise tier or unsupported |
| External deps | None (embedded SQLite) | Postgres + Redis usually |
| Per-MAU pricing | Free forever | Yes |
| Token vault for upstream APIs | Built-in, AES-256-GCM | Build it yourself |
Checked April 2026. Auth0 / WorkOS / Clerk / Stytch checked against public pricing and documentation.
One binary. Embedded SQLite. Embedded React admin. No Postgres. No Redis. No SaaS bill. Boot cold with shark serve.
~30 MB
Single binary
Backend, embedded migrations, and the embedded React admin compile to one static executable. No images, no sidecars, no service mesh.
SQLite
No external deps
Embedded SQLite. No Postgres. No Redis. No SaaS bill. The database lives in the binary. Cross-compile to every arch your team supports.
2 SDKs
TypeScript · Python
First-class SDKs for application code. Agent-friendly DPoP helpers, delegation utilities, and revoke calls built in.
ES256
Rotating signing keys
Zero-downtime key rotation. Two keys live at once, one signing and one verifying stragglers, so a rotate never breaks an in-flight token.
# Install the single binarycurl https://get.sharkauth.dev | sh# Start servingshark serve→ admin: http://localhost:8443/admin→ ready in 180ms · first agent token in <60s
Pick the pattern that fits your architecture. Self-hosted is free forever. Cloud is TBA — no per-MAU pricing, no feature paywalls.
SaaS shipping per-tenant agents. Every customer gets isolated agent identities, scoped tokens, and their own revoke tree.
OAuth 2.1 gating for Model Context Protocol servers. Shark exposes the discovery metadata MCP clients use to bootstrap auth.
Self-hosted, agent-native, drop-in. All human auth primitives included. No per-MAU pricing. No enterprise tier trapdoor.
One binary. Runs on a $5 VPS. MIT license, no phone-home, no “open core” trapdoor.
We run it. You integrate. No per-MAU pricing. Flat tiers. TBA.
No per-feature paywall. Passkeys, SSO, RBAC, audit logs, token vault, and cascade revoke ship on every tier, including the free self-hosted one.
Not a sledgehammer. Not a ticket to your auth vendor. Five surgical calls, each mapped to a real incident pattern.
| Layer | Action | When |
|---|---|---|
| 1 | Revoke a single token | Token leaked in a log |
| 2 | Kill one agent | One agent went rogue |
| 3 | Cascade-revoke a customer's whole fleet | Customer churned or compromised |
| 4 | Kill all instances of a buggy agent-type | Bad release pattern-wide |
| 5 | Disconnect a compromised vault credential | Upstream provider key rotated |