Skip to content

Addons

A unit of product functionality that spans the stack — a Drizzle table, the guarded server actions that operate on it, and the UI that drives them. One install lands a working feature in a base app; the app then runs its own migration, because a registry copies files and cannot reach your database.

account
The whole account lifecycle in one install: password reset, email verification, and the settings screen, over one set of guarded server actions. Install the surfaces individually if you only want part of it.

Install

pnpm dlx shadcn@latest add @arrecho/account -y --overwrite
ItemShips
@arrecho/account-serverPassword reset, email verification and account settings as guarded server actions over Better Auth, plus the mailer composition that finally gives the email templates a caller.
@arrecho/account-recovery-uiThe three screens someone who cannot sign in needs: request a reset link, choose a new password, and confirm an email address. Every state is a view that renders from props, so the flows are browsable without a database.
@arrecho/account-settings-uiThe signed-in user's own account screen: profile, password, email address, active sessions, and account deletion. Changing a password requires the current one and revokes every other session.
@arrecho/accountThe whole account lifecycle in one install: password reset, email verification, and the settings screen, over one set of guarded server actions. Install the surfaces individually if you only want part of it.
admin crud
Sortable, filterable, paginated admin data table with create/edit form dialog and delete confirmation. Every row of data and every mutation arrives as a prop, so the block works against any table.

Install

pnpm dlx shadcn@latest add @arrecho/admin-crud-ui -y --overwrite
ItemShips
@arrecho/admin-crud-serverDrizzle schema fragment for a demo customers table plus the admin-guarded server actions that list, create, update, and delete its rows.
@arrecho/admin-crud-uiSortable, filterable, paginated admin data table with create/edit form dialog and delete confirmation. Every row of data and every mutation arrives as a prop, so the block works against any table.
ecommerce
The whole storefront in one install: catalog, cart, and checkout over a shared Drizzle schema and server actions. Pulls all three surfaces; install them individually if you only want part of it.

Install

pnpm dlx shadcn@latest add @arrecho/ecommerce -y --overwrite
ItemShips
@arrecho/ecommerce-serverThe addon's server half: Drizzle schema for products, carts and orders, plus guarded catalog reads, cart mutations and a checkout that writes a pending order. Ships the shared domain types every surface speaks.
@arrecho/ecommerce-cart-uiThe cart surface: line items with live re-pricing, free-shipping progress, order summary, and a recommendation shelf. Installs the route and the view it renders.
@arrecho/ecommerce-storefront-uiThe shopping surfaces: homepage, product listing with server-side filtering and paging, and a product detail page with variant selection. Installs three routes and the views they render.
@arrecho/ecommerce-checkout-uiCheckout and order confirmation. The form collects contact, address and delivery method, then places a pending order; the confirmation reads it back by token, so a guest can see their receipt without an account.
@arrecho/ecommerceThe whole storefront in one install: catalog, cart, and checkout over a shared Drizzle schema and server actions. Pulls all three surfaces; install them individually if you only want part of it.
email
Transactional email: a provider-agnostic mailer, one transport per provider, and React Email templates. Swapping Lettermint for Resend is an import line. Ships no schema — nothing is recorded, and a send is a function call that either happened or did not.

Install

pnpm dlx shadcn@latest add @arrecho/email-lettermint -y --overwrite
ItemShips
@arrecho/email-coreA provider-agnostic mailer: one validated message shape, a transport interface, and React Email rendering to html plus plain text. Install a transport alongside it — this half sends nothing on its own.
@arrecho/email-lettermintSends through Lettermint. Maps the SDK's fluent builder and minified error classes onto the mailer's transport interface, and constructs the builder per send because it is mutable and shared.
@arrecho/email-resendSends through Resend. Maps the SDK's { data, error } result and its error-code slugs onto the mailer's transport interface, passing rendered html and text rather than the react field.
@arrecho/email-templatesFive domain-neutral React Email templates — welcome, address verification, password reset, magic link, and a general-purpose notification — over one shared shell and palette. Table markup, inlined styles, and a real plain-text part.
payments
Embedded Stripe Elements checkout: the payment form, the amount summary, and the page a customer lands on when a redirect-based method sends them back. Takes the client secret as a prop, so it renders in the catalog with no key and no network.

Install

pnpm dlx shadcn@latest add @arrecho/payments-ui -y --overwrite
ItemShips
@arrecho/payments-coreA provider-agnostic payment seam over PaymentIntents: an amount built only from server-owned data, and the webhook route that verifies a signature, re-checks the money, and moves an order to paid exactly once. Install a driver alongside it — this half charges nothing on its own.
@arrecho/payments-stripeStripe driver over the PaymentIntents API, for an embedded Stripe Elements checkout. Never passes payment_method_types, so which methods you accept stays Dashboard configuration rather than code.
@arrecho/payments-uiEmbedded Stripe Elements checkout: the payment form, the amount summary, and the page a customer lands on when a redirect-based method sends them back. Takes the client secret as a prop, so it renders in the catalog with no key and no network.
rate limit
A Postgres-backed fixed-window limiter and a withRateLimit() wrapper for Server Actions. Better Auth's own limiter only runs inside its HTTP handler, so an action calling auth.api.* directly is unthrottled without this.

Install

pnpm dlx shadcn@latest add @arrecho/rate-limit -y --overwrite
ItemShips
@arrecho/rate-limitA Postgres-backed fixed-window limiter and a withRateLimit() wrapper for Server Actions. Better Auth's own limiter only runs inside its HTTP handler, so an action calling auth.api.* directly is unthrottled without this.
storage
Dropzone, per-file progress, file list and image picker. Every component takes the uploader as a prop, so the same components work against any driver and render in the catalog with no network.

Install

pnpm dlx shadcn@latest add @arrecho/storage-ui -y --overwrite
ItemShips
@arrecho/storage-coreA provider-agnostic file store: the driver seam, server-derived object keys, an uploads table with a pending/committed lifecycle, and the route that authorizes a client-direct upload. Install a driver alongside it — this half stores nothing on its own.
@arrecho/storage-vercel-blobVercel Blob driver plus its browser uploader. Client uploads go straight to the store under a server-scoped token, so the 4.5 MB function body limit never applies.
@arrecho/storage-s3S3-compatible driver plus its browser uploader, covering S3, Cloudflare R2, MinIO and Backblaze from one implementation. Uploads go direct to the bucket under a presigned PUT that pins both content type and length.
@arrecho/storage-uiDropzone, per-file progress, file list and image picker. Every component takes the uploader as a prop, so the same components work against any driver and render in the catalog with no network.