On this page
Time
About 25 minutes
20 of them are you using your own product once, while Peeve watches.

Install Peeve

Each tab shows the idiomatic install for that stack: @peeve/sdk wherever there is a build step, the script tag only on plain HTML. npx peeve init detects your framework, writes the right one, and creates peeve.config.json at the repo root so every setting is reviewable in a PR.

NextReactVueRailsDjangoPlain HTML
app/peeve-provider.tsxCopy
'use client'
import { useEffect } from 'react'
import { Peeve } from '@peeve/sdk'
export default function PeeveProvider({ user }) {
useEffect(() => {
Peeve.init({ workspaceKey: process.env.NEXT_PUBLIC_PEEVE_KEY })
Peeve.identify({ userId: user.id, token: user.peeveToken })
Peeve.setContext({ plan: user.plan, seats: user.seats })
}, [user])
return null
}
Render once in app/layout.tsx. It must be a client component; Peeve.init needs a browser. peeveToken is signed on your server, never derived in the client.
What does verify tell me?

It names what it found and what it can't reach, never a pass/fail. Two canvas regions flagged means Peeve will hand off inside those areas rather than guess at them.

$ npx peeve verify
48 routes reachable
good accessibility data on 44
4 routes have unlabelled controls, so Peeve uses position instead
2 canvas regions flagged, Peeve can't navigate inside these
nothing is live until you turn it on
Peeve stays read-only until you widen it, and the kill switch is a single command. Nothing your users see changes until you deliberately go live.

One snippet, config in your repo. 14 days free. No card. No call.