Self-Hosted
Your database, your data. No vendor lock-in, no monthly fees. Deploy anywhere you run Node.js.
✓Datasource "db": SQLite
✓ Schema synced — 3 models pushed
✓ Your data stays on your server
Stop chasing feedback across Slack, email, and Notion. Let your clients annotate your site directly — self-hosted, DOM-anchored, zero SaaS fees.
Free forever · MIT Licensed · Self-hosted · 3 min setup
The CTA button is too small on mobile
Sarah M.
Replaces Marker.io ($39/mo) · BugHerd ($42/mo) · Userback ($79/mo)
See the blue button in the corner? That's SitePing running on this page. Try it.
Everything you need, nothing you don't.
Your database, your data. No vendor lock-in, no monthly fees. Deploy anywhere you run Node.js.
✓Datasource "db": SQLite
✓ Schema synced — 3 models pushed
✓ Your data stays on your server
Annotations survive layout changes. Multi-selector anchoring with CSS, XPath, and text fallback.
CSS + XPath + text fallback
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
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.
English, French, German, Spanish, Italian, Portuguese, and Russian — in the widget and the inbox.
registerLocale(code, translations)Audited against WCAG 2.1 AA. Clients can annotate without a mouse — Tab to the element, press Enter. Ready for the European Accessibility Act.
Set an API key and admin routes require a Bearer token. Reads without one get reviewer emails blanked by default.
Authorization: Bearer •••Three lines of code. Works with Next.js, any framework, or vanilla JavaScript.
npm i @siteping/widgetFull transparency, full control. Contribute, fork, or customize.
Prisma schema and API route set up in seconds.
$ npx @siteping/cli initWidget CSS never leaks into your site. Your site CSS never breaks the widget.
Works with your stack
Install, scaffold, and ship. Your clients annotate directly on the live site.
$ npm install @siteping/widget @siteping/adapter-prismaAdd both packages to your project in one command.
$ npx @siteping/cli init
✓ Prisma schema updated
✓ API route generatedGenerates Prisma schema + API route automatically.
import { initSiteping } from '@siteping/widget'
initSiteping({
endpoint: '/api/siteping',
projectName: 'my-project',
})Your clients can now draw on the site.
The hero image is blurry on retina
Sarah M.
No login. No account. Just a floating button and pixel-perfect annotations.
No account required·No API key·No monthly bill
Why pay $39-79/mo for features you can self-host for free?
SitePingRecommended | Marker.io | BugHerd | Userback | |
|---|---|---|---|---|
| Self-hosted | ||||
| npm package | SDK only | |||
| Open source | MIT | |||
| Pricing | Free | $39/mo | $42/mo | $79/mo |
| DOM-anchored | Screenshot | Pin only | Screenshot | |
| Survives layout changes | Partial | |||
| Triage inbox | React component | SaaS only | SaaS only | SaaS only |
| Customizable | Full control | Limited | Limited | Limited |
Any database supported by Prisma — PostgreSQL, MySQL, SQLite, MongoDB, CockroachDB, and more. A Drizzle adapter is on the roadmap.
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.
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.
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.
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.
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.
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.
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.
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.
No. SitePing is an npm package you install and configure. No account, no API key, no signup. It runs entirely on your infrastructure.