Open sourceFree & Open Source

Client feedback,
pinned to the pixel.

Stop chasing feedback across Slack, email, and Notion. Let your clients annotate your site directly — self-hosted, DOM-anchored, zero SaaS fees.

npm i @siteping/widget
Try the Demo →Read the Docs

Free forever · MIT Licensed · Self-hosted · 3 min setup

Lock iconmon-client.fr
Annotate
Bug

The CTA button is too small on mobile

Sarah M.

Cursor

Replaces Marker.io ($39/mo) · BugHerd ($42/mo) · Userback ($79/mo)

TypeScript1,800+ tests~49 kB gz, panel lazyShadow DOM

See the blue button in the corner? That's SitePing running on this page. Try it.

Built different

Everything you need, nothing you don't.

Self-Hosted

Your database, your data. No vendor lock-in, no monthly fees. Deploy anywhere you run Node.js.

$prisma db push

Datasource "db": SQLite

Schema synced — 3 models pushed

Your data stays on your server

$_

DOM-Anchored

Annotations survive layout changes. Multi-selector anchoring with CSS, XPath, and text fallback.

<button>Submit</button>
Anchored

CSS + XPath + text fallback

Annotated screenshots

Each report can attach a capture of the exact area the client circled, plus the last console errors and failed requests — "it just doesn't work" arrives with evidence.

TypeError: cart is undefined

POST /api/checkout → 500

Attached to the feedback

Triage inbox

Drop <SitepingInbox /> into your admin page and work through reports with j/k— four statuses, the client's annotation re-drawn on the screenshot. Slack, Discord, and generic webhooks ping your team the moment feedback lands.

Inbox · 2 open
The hero image is blurry on retinaOpen
Swap the two hero buttonsIn progress
Footer links open in the same tabResolved
See it live in the demo inbox →

7 languages built in

English, French, German, Spanish, Italian, Portuguese, and Russian — in the widget and the inbox.

registerLocale(code, translations)

Keyboard-first accessibility

Audited against WCAG 2.1 AA. Clients can annotate without a mouse — Tab to the element, press Enter. Ready for the European Accessibility Act.

WCAG 2.1 AA

Auth & privacy

Set an API key and admin routes require a Bearer token. Reads without one get reviewer emails blanked by default.

Authorization: Bearer •••

npm Install & Go

Three lines of code. Works with Next.js, any framework, or vanilla JavaScript.

npm i @siteping/widget

Open Source

Full transparency, full control. Contribute, fork, or customize.

MIT Licensed

CLI Scaffold

Prisma schema and API route set up in seconds.

$ npx @siteping/cli init

Shadow DOM Isolated

Widget CSS never leaks into your site. Your site CSS never breaks the widget.

Your site CSS
Widget CSS

Works with your stack

Next.jsReactVueSvelteAstroNuxtRemixExpressHonoJavaScriptNext.jsReactVueSvelteAstroNuxtRemixExpressHonoJavaScriptNext.jsReactVueSvelteAstroNuxtRemixExpressHonoJavaScriptNext.jsReactVueSvelteAstroNuxtRemixExpressHonoJavaScript
JavaScriptHonoExpressRemixNuxtAstroSvelteVueReactNext.jsJavaScriptHonoExpressRemixNuxtAstroSvelteVueReactNext.jsJavaScriptHonoExpressRemixNuxtAstroSvelteVueReactNext.jsJavaScriptHonoExpressRemixNuxtAstroSvelteVueReactNext.js

From zero to client feedback in 3 commands

Install, scaffold, and ship. Your clients annotate directly on the live site.

1

Install

Terminal
$ npm install @siteping/widget @siteping/adapter-prisma

Add both packages to your project in one command.

2

Setup

Terminal
$ npx @siteping/cli init

 Prisma schema updated
 API route generated

Generates Prisma schema + API route automatically.

3

Annotate

app.ts
import { initSiteping } from '@siteping/widget'

initSiteping({
  endpoint: '/api/siteping',
  projectName: 'my-project',
})

Your clients can now draw on the site.

Result

Your clients see this

Lockmon-client.fr
Bug

The hero image is blurry on retina

Sarah M.

Annotate

No login. No account. Just a floating button and pixel-perfect annotations.

CheckNo account required·CheckNo API key·CheckNo monthly bill

SitePing vs. the alternatives

Why pay $39-79/mo for features you can self-host for free?

SitePingRecommended
Marker.ioBugHerdUserback
Self-hosted
npm packageSDK only
Open sourceMIT
PricingFree$39/mo$42/mo$79/mo
DOM-anchoredScreenshotPin onlyScreenshot
Survives layout changesPartial
Triage inboxReact componentSaaS onlySaaS onlySaaS only
CustomizableFull controlLimitedLimitedLimited

Frequently asked questions

What databases are supported?

Any database supported by Prisma — PostgreSQL, MySQL, SQLite, MongoDB, CockroachDB, and more. A Drizzle adapter is on the roadmap.

Does it work with frameworks other than Next.js?

The widget is framework-agnostic — it works with React, Vue, Svelte, Astro, or vanilla JavaScript. The CLI currently scaffolds Next.js API routes, but the adapter works with any server that handles standard Request/Response.

What happens when the page layout changes?

Annotations use multi-selector anchoring — CSS selectors, XPath, text snippets, and structural fingerprints. If one selector breaks, the system falls back to the next. Positions are stored as percentages relative to the anchor element, so they adapt to responsive layouts.

Is there a dashboard to view feedback?

Yes — install @siteping/dashboard and drop the <SitepingInbox />React component into your admin page. It is a Linear-style triage inbox with j/k keyboard shortcuts, four statuses, and the client's annotation re-drawn on the screenshot. See it working in the demo inbox.

How big is the widget bundle?

About 49 kB gzipped on the wire; the feedback panel, screenshot capture, and non-English locales load on demand on top of that. The widget loads asynchronously and never blocks your page rendering.

Is it GDPR compliant?

Fully. Since SitePing is self-hosted, all data stays on your infrastructure. No data is ever sent to third-party servers. You control storage, retention, and deletion.

Can I customize the widget appearance?

Yes — accent color, position (bottom-right or bottom-left), theme (light, dark, auto), and 7 built-in locales (English, French, German, Spanish, Italian, Portuguese, Russian) plus registerLocale for your own. Try every option live on the demo.

Is it accessible?

Yes — the widget and the inbox are audited against WCAG 2.1 AA. The full flow works from the keyboard, including drawing an annotation: Tab to the element, press Enter. Actions are announced to screen readers.

How is reviewers' data handled?

Feedback lives in your own database — SitePing is self-hosted. The API blanks reviewer emails on unauthenticated reads by default, and elements marked data-siteping-ignore="true" are masked out of screenshots.

Do I need to create an account?

No. SitePing is an npm package you install and configure. No account, no API key, no signup. It runs entirely on your infrastructure.

Ready to ditch screenshot emails?

Get started in minutes. Free forever.