patchly
v0.2.2
Published
AI-powered error tracking SDK for browser and Node.js
Maintainers
Readme
Patchly SDK
Capture browser and Node.js runtime errors and send them to Patchly.
Install
npm install patchlyQuick Start
import { init } from "patchly";
const patchly = init({
dsn: process.env.NEXT_PUBLIC_PATCHLY_DSN,
release: process.env.VERCEL_GIT_COMMIT_SHA,
});init() is safe to call during builds. If dsn is missing, the SDK logs a warning and no-ops.
Manual Capture
import { captureError, flush } from "patchly";
try {
await runJob();
} catch (error) {
captureError(error instanceof Error ? error : new Error(String(error)));
await flush();
throw error;
}Use flush() in serverless request hooks, route handlers, or jobs that may finish before the normal batch interval.
Next.js App Router
Use Next.js onRequestError to capture errors that Next catches and turns into 500 responses.
import type { Instrumentation } from "next";
let patchly: ReturnType<typeof import("patchly").init> | null = null;
async function getPatchly() {
if (process.env.NEXT_RUNTIME !== "nodejs" || !process.env.PATCHLY_DSN) return null;
if (patchly) return patchly;
const { init } = await import("patchly");
patchly = init({
dsn: process.env.PATCHLY_DSN,
release: process.env.VERCEL_GIT_COMMIT_SHA,
});
return patchly;
}
export async function register() {
await getPatchly();
}
export const onRequestError: Instrumentation.onRequestError = async (error) => {
const client = await getPatchly();
if (!client) return;
client.capture(error);
await client.flush();
};Breadcrumbs
import { addBreadcrumb } from "patchly";
addBreadcrumb({
category: "checkout",
message: "User submitted payment form",
level: "info",
data: { plan: "pro" },
});React Error Boundary
import { PatchlyErrorBoundary } from "patchly/react";
export function App() {
return (
<PatchlyErrorBoundary fallback={<p>Something went wrong.</p>}>
<Routes />
</PatchlyErrorBoundary>
);
}Configuration
init({
dsn: process.env.NEXT_PUBLIC_PATCHLY_DSN,
release: "[email protected]",
userId: "user_123",
autoCapture: true,
captureConsoleErrors: true,
captureNetworkErrors: true,
enableBreadcrumbs: true,
maxBreadcrumbs: 20,
});The SDK automatically captures unhandled errors, unhandled promise rejections, console.error calls, failed fetch/XHR requests, and breadcrumbs. Requests to Patchly ingest endpoints are excluded to avoid feedback loops. Sensitive URL query values such as token, code, password, secret, and api_key are redacted before network events are sent.
Links
- Docs: https://patchly.cc/docs
- Dashboard: https://patchly.cc
- Issues: https://github.com/tooyipjee/patchly/issues
