One <script> tag turns your live page into a review surface. Highlight, draw, pin and comment — anchored to the real content, saved in the browser, shared as a single JSON file.
<script src="https://cdn.jsdelivr.net/npm/@reviewjs/annotate/annotate.js" defer></script>
↑ This page is live — select a sentence, press R to draw, P to pin, A for comments.
We open with a two-week teaser, then give early access to our waitlist of 12,000 subscribers before the public announcement.
Paid social runs alongside, with the hero video as the centerpiece across every channel.
Can we pull the waitlist email a week earlier? Momentum matters.
Screenshots go stale and chat threads lose context. Six tools keep every note attached to the exact pixel, paragraph or region it’s about — each carrying its own threaded comment.
Select any text to highlight and comment on the exact words — re-anchors even after edits.
Text-aware anchors. Stores the selected quote plus nearby context so feedback follows copy changes instead of becoming a dead screenshot.
Draw a box around any region — a misaligned button, a whole section, anything.
Region-level markup. Captures the exact page area for layout, spacing, alignment, and responsive QA notes.
Ring anything that needs a closer look. Each mark carries its own colored thread.
Visual callouts. Pulls attention to specific details such as icons, image crops, labels, badges, and small design misses.
Drop a precise point marker on a single pixel and attach a note to it.
Pixel-precise notes. Best for tiny targets: typos, broken links, awkward tap areas, and one-off UI defects.
Sketch directly over the design when words won’t do — ink it in.
Drawn direction. Adds rough paths, crop lines, arrows, and markup shapes without switching to a design tool.
Hover any paragraph or heading for a comment button in the margin.
Block comments. Attaches discussion to a heading, paragraph, or content block when the feedback is about the whole section.
It lives in the browser and exports JSON. Add a feedback endpoint to receive comments directly, or your own backend to collect every reviewer’s comments in one place.
No build step, no framework, no signup. Paste a line, reload, review.
Plain HTML, React, Vue, Svelte, WordPress, Webflow, Shopify, static sites.
Without a backend, comments stay on the reviewer’s device until they export or send feedback.
Reviewers export feedback as JSON and send it; you import it with one click.
Floating toolbar, Figma-style comments panel, auto light/dark, full shortcuts.
Vanilla JavaScript, zero runtime dependencies, every evergreen browser.
Mark comments Open, In progress, Resolved or Won’t fix, assign them, and see each one’s history.
Point it at a server you host and every reviewer’s comments land in one review. Invite links, no accounts.
Each text annotation stores the exact quote plus a short prefix and suffix. On load it re-finds that text, so highlights stay put even after you rewrite copy or the layout reflows. Delete the text entirely and the comment is kept, gracefully marked “orphaned.”
Every major visual-feedback tool is paid SaaS that asks your reviewers to log in, install an extension, and trust a vendor to host your feedback. annotate.js is the local-first, open-source alternative.
| annotate.js | BugHerd | Marker.io | Userback | Pastel | |
|---|---|---|---|---|---|
| Price | Free · MIT | from ~$39/mo | from ~$39/mo | from ~$79/mo | from ~$29/mo |
| Open source | Yes | No | No | No | No |
| Reviewer login required | None | Account | Account | Portal | Guest friction |
| Install | 1 script tag | Extension | Script + extension | SDK / widget | Proxy / link |
| Where feedback lives | Your browser or your server | Vendor cloud | Vendor cloud | Vendor cloud | Vendor cloud |
| Works offline / self-host | Yes | No | No | No | No |
| Visual tools (draw/pin/ink) | Full set | Pin + box | Pin + box | Pin + draw | Pin + box |
| Runtime dependencies | None | Hosted app | Hosted app | Hosted app | Hosted app |
Competitor pricing and capabilities are approximate, based on publicly listed 2026 plans, and change often. The honest trade-off: SaaS tools add hosted sync, real-time multiplayer and built-in Jira/Asana integrations. annotate.js can sync to a backend you host, and leaves the rest to your own workflow. annotate.js is for teams who’d rather own a tiny, private layer than rent a heavy one.
Anywhere people need to point at a page and say “this, right here.”
Box misalignments and circle off-brand color on the staging build before a release ships.
Let clients mark up the staging site directly — no Loom, no spreadsheet of bugs, no logins to chase.
Editors highlight sentences and leave revisions in context, on the live article, not in a separate doc.
Readers flag confusing steps right on the published page, where the confusion actually happens.
Pin the exact element, attach a note, and export the batch straight to your tracker.
Annotate student work and portfolios with threaded, resolvable comments — private to each machine.
It’s a plain browser script, so the recipe is the same for every stack. Copy, paste, ship.
No config files, no init code. Set a brand color, a project namespace, a default theme and a reviewer briefing — all on the script tag itself.
<!-- one tag, fully configured --> <script src="https://cdn.jsdelivr.net/npm/ @reviewjs/annotate/annotate.js" data-project="marketing-site" data-accent="#6d28d9" data-theme="auto" data-position="bottom-right" data-note="Focus on the hero copy & pricing — flag anything off-brand." defer ></script>
localStorage, namespaced by project and page. Reviewers can export JSON, or use Send feedback if you configure an endpoint. Sending happens only when they choose it. If you set data-api, comments sync to your own review backend instead.init(config) after mount and destroy() on unmount. Recipes for React, Next.js, Vue, Svelte, WordPress and plain HTML are in the README.data-api and data-review-id to the script tag, and every reviewer’s comments sync to it. Reviewers join through an invite link or your own auth. Each reviewer sees only their own comments and your replies; as the review owner you see everything, set statuses and assign work. The repository includes a dependency-free reference server to start from.localStorage is unavailable (private mode, sandboxed iframes).Copy one script tag, reload, and start marking up the live page. No build step, no framework, no signup.
Need a receiver? See the Node sample.
<script src="https://cdn.jsdelivr.net/npm/@reviewjs/annotate/annotate.js" defer></script>
Local by default · every evergreen browser · no account required