A home for your comments.

Keep your comments and conversations together, separate from your site’s code. Choose where they live.

Hosted pinthread

Hosted pinthread is in early access. We run the comments API for you, so there is no database or server to configure. We will publish plans, limits, and prices at launch.

Join early access

A Google-authenticated owner creates and manages each project. Guests can take part in reviews, but cannot own a workspace.

Self-hosted

npx pinthread init --self-host \
  --google-client-id YOUR_GOOGLE_CLIENT_ID

The CLI signs into Cloudflare, creates a D1 database, runs migrations, and deploys a Worker. It prompts for your Google client secret through Wrangler.

Add the printed callback URL in Google Console, then open the owner-claim link and sign in. Keep the local owner key private.

npx pinthread deploy

Update the npm package first, then use this to resume or redeploy an existing setup. The command copies new migrations and applies them before deploying. Your infrastructure follows your Cloudflare account’s limits and billing. Hosted pinthread limits do not apply.

Node container + PostgreSQL

Run the same comments API on your own container platform, including Cloud Run. Provide PostgreSQL, an API URL, and approved preview origins. The widget and agent CLI keep the same protocol; existing Cloudflare installations do not change.

npx pinthread init --node \
  --endpoint https://comments.example.com \
  --preview-origin "https://pr-*.preview.example.com" \
  --google-client-id YOUR_CLIENT_ID

The container applies its database schema at startup. Configure Google sign-in for private reviews, or allow guest reviews on approved sites. The NODE.md guide in the npm package covers setup and bot commands.

What a shared link means

Projects start with link access. Owners can switch to invited Google accounts in Account → Project settings. Invitation links are tied to an email address, expire after seven days, and work once. Approved sites control embedding; membership controls access to private feedback.

Site approval lets pinthread load; signing in identifies the reviewer. For the same pinthread project, previews in one Cloudflare Workers account or Pages project share sign-in. Unrelated domains require their own sign-in unless you configure a trusted parent with sessionDomain.

Move your feedback

Export from your current project, create a self-hosted project in a separate directory, then import there after signing in as its owner.

npx pinthread project export --out comments.json
# From your destination project:
npx pinthread login
npx pinthread project import --file /path/to/comments.json

Comments, replies, reactions, positions, and resolved states carry over. Imported authors are historical, unverified identities; credentials and memberships never move. Keep the same file to safely retry an interrupted import. Your source stays unchanged until you choose to delete it.

When a project fills up

Existing feedback stays readable. In Account → Project settings, download your comments, then clear resolved threads to reclaim space. In the sidebar’s Resolved view, the trash button deletes only the currently filtered threads and their replies after confirmation. Export first: clearing threads is permanent. Owners can also delete a project they no longer need.