Ave is an open-source identity platform built around passkeys, OAuth 2.0, and OpenID Connect.
It combines the hosted sign-in experience, the OAuth/OIDC API, a developer portal, a business organization console, public SDKs, and product docs in one repository. The codebase also includes higher-level features layered on top of auth itself: Quick Ave for zero-registration sign-in, delegated app-to-app access, identity-backed signing, organization identity containers, and per-app encryption key delivery.
Ave is split into a few separate packages instead of one root workspace:
| Path | Purpose | Stack |
|---|---|---|
ave-web |
Unified frontend Worker for aveid.net, devs.aveid.net, and business.aveid.net |
SvelteKit, Cloudflare Workers, Tailwind CSS v4 |
ave-server |
OAuth/OIDC API, auth flows, app management, signing, encryption, uploads | Hono, Cloudflare Workers, Durable Objects, D1, Drizzle |
ave-docs |
Product and SDK documentation | Mintlify content |
sdks/ave-sdk |
Typed JavaScript/TypeScript SDK for OAuth, OIDC, session, Convex, Expo, Svelte, and Next.js helpers | TypeScript |
sdks/ave-embed |
Lightweight browser embed for iframe, sheet, popup, connector, and signing flows | Plain JS |
- Passkey-first authentication and account recovery flows
- OAuth 2.0 + OpenID Connect provider support
- Quick Ave for zero-registration auth tied to the caller origin
- Developer portal for app registration, redirect URIs, scopes, secrets, resources, and organizations
- Business organizations for identity membership, roles, signed admin actions, org key grants, verified domains, and SSO setup
- Connector delegation for app-to-app access
- Identity-backed Ed25519 signing flows
- Per-app encryption key delivery for end-to-end encrypted integrations
- Public SDKs and first-party docs for browser, server, Expo, Svelte, Next.js, and Convex use cases
The repository is organized around the same split used in production:
ave-webserves the end-user product UI onaveid.netave-webserves the developer portal ondevs.aveid.netave-webserves the business organization console onbusiness.aveid.net, including standard org encryption, customer KMS references, and opt-in E2EE org-key grantsapi.aveid.netserves the OAuth/OIDC and product APIdocs.aveid.netserves the documentation
- Bun
- A Cloudflare account if you want to run or deploy the Worker-backed API against real infrastructure
There is currently no root package.json workspace. Install and run each package from its own directory.
The API is the center of the stack. ave-web talks to it for the product, developer, and business surfaces.
cd ave-server
bun installCreate local environment files from the examples:
- Copy
.env.exampleto.env - Copy
.dev.vars.exampleto.dev.vars
Apply the D1 migrations locally:
bun run db:migrate:localStart the Worker locally:
bun run devUseful API commands:
bun run check
bun run db:generate
bun run db:migrate:remoteThe API Worker also uses Durable Objects for realtime login approval fanout and sharded rate-limit counters, Cloudflare Queues for background audit and analytics writes, Workers Analytics Engine for request timing metrics, and Smart Placement. Create the background queues once per Cloudflare account before the first deploy that references them:
cd ave-server
bunx wrangler queues create ave-background-events
bunx wrangler queues create ave-background-events-dlq
bunx wrangler d1 migrations apply ave --remote
bunx wrangler deployWorkers Analytics Engine datasets are created on first write after the binding is deployed. D1 read replication should stay enabled; Ave clients send D1 bookmarks on follow-up requests so reads can remain fast without losing read-your-writes behavior.
The API defaults to http://localhost:3000 in local development.
cd ave-web
bun installSet local frontend env values if you want the app to talk to your local API instead of production:
VITE_API_URL="http://localhost:3000"
VITE_WS_URL="ws://localhost:3000/ws"
VITE_AVE_ORIGIN="http://localhost:5173"Run the app:
bun run devThe local frontend serves all surfaces from one SvelteKit app:
http://localhost:5173for the main Ave UIhttp://localhost:5173/devsfor the developer portal surfacehttp://localhost:5173/businessfor the business organization console
Useful frontend commands:
bun run check
bun run build
bun run previewsdks/ave-sdk ships the typed integration surface used throughout the docs and examples:
cd sdks/ave-sdk
bun install
bun run buildsdks/ave-embed ships the browser embed runtime:
cd sdks/ave-embed
bun run build:windowsSDK packages publish through .github/workflows/publish-npm.yml with npm trusted publishing. The workflow is manual, only accepts the SDK package folders, writes the requested version into the selected package, commits the bump back to the branch, and then publishes.
Before first use, configure each npm package's trusted publisher on npmjs.com for this repository and workflow file:
.github/workflows/publish-npm.ymlThen run the workflow with:
package: sdks/ave-sdk or sdks/ave-embed
version: the package version to write and publish
access: public or restrictedRun it from a branch, not a tag, so the release commit can be pushed. No npm token is required. The workflow uses GitHub OIDC, so the npm package trusted publisher must point at this repository and workflow file before the first publish. Each published package must also keep repository.url set to https://github.com/Lantharos/Ave, because npm validates that value against the GitHub provenance bundle.
The documentation source lives in ave-docs. It covers:
- Quick Ave
- Full OAuth authorization code flow
- PKCE and confidential clients
- Connector delegation
- Signing
- End-to-end encryption
- Framework integrations including Expo, Next.js, Convex, SQL/Postgres, and Better Auth
If you change behavior in the SDKs, auth flows, developer portal, or business organization console, the matching docs in ave-docs should usually move with it.
If you are new to the repo, these files are the quickest way to orient yourself:
ave-server/src/index.tsfor API composition, CORS, Durable Object entrypoints, and scheduled cleanupave-server/src/routes/oauth.tsfor OAuth/OIDC, Quick Ave, refresh rotation, and FedCMave-server/src/routes/apps.tsfor developer portal app and resource managementave-server/src/routes/organizations.tsfor multi-workspace developer portal supportave-server/src/routes/business.tsfor business organization identity containers, roles, org keys, and SSO setupave-web/src/hooks.tsfor host-based frontend routing across Ave domainsave-web/src/routes/webfor the main product UIave-web/src/routes/devsfor the developer portalave-web/src/routes/businessfor the business organization consoleave-docs/index.mdxandave-docs/quickstart.mdxfor the public product story and integration path
- The API uses Cloudflare D1 with Drizzle migrations stored in
ave-server/drizzle - The Worker binds a Durable Object named
API_APP - Uploads and public assets are wired through Cloudflare R2
- The scheduled Worker task triggers daily cleanup for stale devices and expired activity data
Ave is licensed under the GNU Affero General Public License v3.0. See LICENSE.
For contribution and disclosure guidelines, see CONTRIBUTING.md and SECURITY.md.