---
name: bijection-kinde-sync
description: "Evaluate and integrate the Kinde Sync component with Bijection."
---

# Kinde Sync

A kinde sync component for Bijection.

- Package: @bijectionhq/kinde-sync
- Category: Authentication
- Status: Preview
- License: Apache-2.0
- Bijection source (repository access required): https://github.com/bijectionhq/kinde-sync/tree/55b4a880315f1e865b4088125364ec89282bdddc
- Upstream: https://github.com/sholajegede/kinde-sync/tree/cec055ea53273c3242f9b662a5a8b53673fa6837
- Documentation: https://docs.bijection.com/components/using
- Directory: https://bijection.com/components/kinde-sync

## Get the source

Bijection repository access is required. Request access at https://bijection.com/contact.

```sh
git clone https://github.com/bijectionhq/kinde-sync.git
cd kinde-sync
git checkout 55b4a880315f1e865b4088125364ec89282bdddc
```

## Before using this component

Read the package README at the recorded revision for setup, dependencies, and API examples. Upstream documentation describes the original package and may differ from the Bijection adaptation. This is a source candidate for evaluation. Catalog inclusion does not establish npm availability or runtime qualification. Check compatibility with your SDK and deployment before adoption. External providers run their own compute.

## Integration workflow

1. Read the source README and package manifest at the recorded revision.
2. Confirm the required SDK, dependency availability, and runtime compatibility.
3. Follow the component's documented setup and configuration. Never invent an npm install command from a catalog package name.
4. Keep credentials in the project's existing secret store.
5. Follow the project's execution rules for verification and report what was actually checked.

## Original upstream skill

The following guidance describes @sholajegede/kinde-sync. Its installation commands and APIs refer to the upstream package. Evaluate compatibility with the Bijection source separately.


> Agents: read this skill fully before writing code that uses Kinde Sync. Follow the installation and configuration steps exactly.

# Kinde Sync

## Instructions

Automatically syncs Kinde authentication events into your Convex database via webhook handlers. Eliminates the need to write custom JWT verification, event parsing, and user synchronization logic. When users are created, updated, or deleted in Kinde, your Convex tables update in real-time without polling or manual intervention.

### Installation

```bash
npm install @sholajegede/kinde-sync
```

Current npm version: `@sholajegede/kinde-sync@0.1.4`

## Use cases

- **Building user dashboards** that need to display real-time user data without fetching from Kinde's API on every request
- **Implementing user management features** where you need to query, filter, or aggregate user data using Convex's reactive queries
- **Creating admin interfaces** that show live user statistics, organization membership, or suspension status
- **Supporting offline-first applications** where user data needs to be locally available in your Convex database
- **Building user-triggered workflows** that need to react immediately when users are created or updated in Kinde

## How it works

The component provides a `KindeSync` class that wraps JWT verification and webhook processing. You mount the `webhookHandler` in your `convex/http.ts` file to create an endpoint that Kinde can POST to. When Kinde sends webhook events, the component automatically verifies the JWT signature against Kinde's JWKS endpoint and deduplicates events by webhook ID.

User data gets stored in a component-managed Convex table with fields like `kindeId`, `email`, `organizations`, and `isSuspended`. The component exposes reactive query functions like `getUser`, `getUserByEmail`, and `listUsers` that you can call from your own Convex functions using `ctx.runQuery(components.kindeSync.lib.getUser, args)`.

Setup requires configuring your Kinde webhook URL to point at your Convex deployment's `/webhooks/kinde` endpoint and setting environment variables for your Kinde issuer URL. The component handles `user.created`, `user.updated`, and `user.deleted` events automatically, keeping your local user data in sync without any polling or manual API calls.

## When NOT to use

- When a simpler built-in solution exists for your specific use case
- If you are not using Convex as your backend
- When the functionality provided by Kinde Sync is not needed

## Resources

- [npm package](https://www.npmjs.com/package/%40sholajegede%2Fkinde-sync)
- [GitHub repository](https://github.com/sholajegede/kinde-sync)
- [Live demo](https://kinde-sync-demo.vercel.app)
- [Convex Components Directory](https://www.convex.dev/components/sholajegede/kinde-sync)
- [Convex documentation](https://docs.convex.dev)