@byo-oss/supportv0.3.2

Support

A help desk that lives inside your app.

Tickets, contacts and agent replies in your own database. Contacts are your better-auth users, or an email address for people who don't have an account yet. Agents are whoever your permissions say they are.

npm i @byo-oss/support
Open · 3agent view
Can't reset my passworddana@example.com · better-auth user
dana@example.com · 9:41The reset link says it expired, but I requested it two minutes ago.
Agent · Lee · 9:48Sorry about that. I sent a fresh link. It is valid for an hour.

Illustration. Click a ticket to see its thread.

Relies on

peerDependencies · @byo-oss/support 0.3.2
better-authrequired
peer · ^1.7.7

Contacts, agents and sessions are your better-auth users.

@better-auth/corerequired
peer · ^1.7.7

The after-commit hooks behind events. Install it at the same version as better-auth.

zodrequired
peer · ^4.0.0

Validation uses your app's copy. An app still on zod 3 has to move to zod 4 first.

organizationrequired
better-auth plugin

The schema references it, and your staff are an organization's members.

@byo-oss/notificationsoptional
BYO package

Agent and requester alerts land in the same inbox as everything else.

@wraps.dev/emailoptional
peer · >=0.15.1

wrapsMailer sends replies through your own AWS SES account.

@aws-sdk/client-s3optional
peer · >=3

s3Storage for attachments, and wrapsInbound for inbound mail.

reactoptional
peer · >=18

The ./react hooks and components.

vitestoptional
peer · >=3

Only for ./testing, the suite for adapters you write.

[01] what it covers

The whole domain, at a young product's depth.

Built to the BYO conventions from day one: your identity, your permissions, your database.

01

Tickets and threads

Requests, replies and status, scoped to your organizations.

02

Contacts are your users

No separate customer table. People without an account are an email address, linked to their user once they verify it.

03

Agents by permission

Support exports permission statements for your access-control catalog. Your app decides which roles can reply.

04

Email in, email out

Customers write in by email and agents reply from your app. Sending goes through a provider adapter, with Wraps as the default.

05

Pluggable at the edges

Storage, inbound mail and outbound mail sit behind small adapter interfaces. Your tickets always stay in your database.

06

Headless first

Hooks own the state and the calls. Components on shadcn variables sit on top, every string overridable.

[02] part of byo

Better with the others.

Packages share one identity, one permission model and one notification path, so each one you add makes the others more useful.

  • @byo-oss/supportagent + requester alertsnotificationsshipped
  • @byo-oss/supportoutbound repliesshared mailershipped
  • @byo-oss/supportticket eventsonEvent · after commitshipped
  • @byo-oss/supportusers · orgs · permissionsbetter-authyour app
[03] outgrowing this

A way out, planned from the start.

When your support team outgrows a help desk inside the product, you move to a dedicated tool. Support ships with exportSupportData, a documented schema, a field mapping to Zendesk's ticket import and a clean uninstall. The README names each tool's import API.

Zendeskfield mapping in the README
Plainimport API in the README
Frontimport API in the README