VeltNutrient

Comments and annotations, built for Nutrient

Add comments and shared annotations, plus live presence, to PDFs in your Nutrient viewer, for your users and your AI agents. Threads stay pinned to the page and region across versions, and every agent markup lands for your reviewer to approve, so the markup stays where it belongs.

Free tier. No credit card. First comment in 5 minutes.

NutrientShared with your team
live

7.2 The Provider shall indemnify and hold harmless the Client against all claims arising from the Services.

Brand Agentnow

Flagged a missing liability cap on the clause and suggested a redline.

indemnify and hold harmlessindemnify, subject to a liability cap
2 Replies
Reply in Nutrient…@

The problem

Build this into Nutrient yourself, and you rebuild it on every release.

Your users expect to comment and co-edit in Nutrient, and your AI agents need that same document with a human approving before they touch user work. Comments that survive Nutrient's version changes are a multi-quarter build, and the moment anchoring breaks, feedback lands on the wrong region. Co-editing is the harder half: rolled by hand it means overwrites, lost work, and merge conflicts, the "my changes disappeared" bug reports, plus a websocket fleet and offline merge to keep alive. And the harder question is your agents: a useful agent needs to change the work, but an agent with write access to user content is what your buyers' security review blocks, so without a consent step you choose between an agent that is useful and an agent that is safe. Every quarter spent on this is a quarter not spent on your own product.

Velt is the review and collaboration layer built for Nutrient: your users and your AI agents work the same document, with comment threads anchored to the page and region, and every agent suggestion is a change a human approves before it lands.

Features

Everything your team and your agents need on Nutrient

01agents
Review Agent2m

Clause 7 omits a liability cap. Suggested fix attached.

1 Reply
// agents.tsx
// An agent posts a suggestion as a first-class user.
await velt.comments().add({ author: agent, suggestion });
// On approve, the change fires through your webhook.

Agents as first-class users

Your AI agent comments and suggests on the document as a first-class user; a human approves or rejects, and on approve the change fires through your webhook with a permanent record.

02comments
Assigned toKim
Rogers2m

@Maya pulled into the thread

2 Replies
// comments.tsx
import { VeltComments } from "@veltdev/react";

<VeltComments textMode />

Comments

Anchored to page regions, with replies, @mentions, and attachments.

03annotations
Brand Agent2m

This pricing claim conflicts with the rate table on slide 4.

2 Replies
// annotations.tsx
// Anchor shared markup to any region.
<VeltCommentTool />

Annotations

Shared, live-synced markup on the page region.

04presence
On this document6 here
5 people · 1 agentmaxUsers collapses the rest
Mayaediting slide 4
Devviewing
Sarahviewing
Review Agentreviewing clause 7
Chrisidle 5m
Youediting
// presence.tsx
import { VeltPresence, VeltCursor } from "@veltdev/react";

<VeltPresence />
<VeltCursor />

Presence and cursors

Live presence on the document.

05suggestions
Brand Agentnow

Suggested a tighter figure on the rate line.

12.010.5
1 Reply
// suggestions.tsx
// Propose changes reviewed like a diff.
<VeltComments suggestionMode />

Suggestions

Propose redlines as accept-or-reject suggestions.

06notifications
NotificationsFor You
For YouDocumentAll
Now

Maya mentioned you on Q3 forecastmention

“@you can you review before Friday?”

2m

Sarah replied on the Q3 threadreply

forecast.xlsx · cell B12

9m

Ethan requested your sign-offsign-off

contract.pdf · due today

1h
// notifications.tsx
import { VeltNotificationsTool } from "@veltdev/react";

<VeltNotificationsTool />

Notifications

In-app, email, and Slack alerts on every comment and @mention.

07recording
Recorder Notesanchored
forecast.xlsx · pinned to C18
0:42

voice note · pinned to this cell

“The variance comes from the vendor rate change, see row 18.”

on the worklands on the cell, the field, the frame: not a separate library
// recording.tsx
import { VeltRecorderControlPanel } from "@veltdev/react";

<VeltRecorderControlPanel />

Recording

Pin a quick voice, screen, or video clip in context on the page.

08version-history
Version checkpointsnamed snapshots
Live draftediting now · 3 collaboratorscurrent
Before pricing rewritesaved 09:14
Outline approvedsaved Mon 16:40
broadcastRestore via API reaches every connected client
// version-history.tsx
await velt.versions().save({ name: "Draft v3" });
await velt.versions().restore({ id });

Version history

Named checkpoints on the document, saved and restored by API.

09audit-trail
Activity logauto-captured
comment.addedSales deck · slide 4recorded
edit.mergedcontract.md · clause 7recorded
recording.sharedwalkthrough · 1:24recorded
approval.changedfiling-q3 · approvedrecorded
// audit-trail.tsx
const log = await velt.activities().get({ documentId });

Audit trail

Every markup and approval on the matter, exportable.

Agent

A clause-review agent flags a missing term on the page region and suggests the redline as a first-class user; your reviewer approves or rejects, and on approve the change fires through your webhook with a permanent record of who allowed what.

Setup

Production-ready in minutes

01INSTALL
terminal
npm install @veltdev/react @veltdev/nutrient-react
02PROVIDER
App.tsx
import { VeltProvider } from "@veltdev/react";

<VeltProvider apiKey={API_KEY}>
  <App />
</VeltProvider>
03MOUNT
Nutrient.tsx
// Mount Velt on Nutrient
<VeltComments />
// + the CRDT adapter for co-editing

Why Velt

The consent step Liveblocks does not have

Liveblocks syncs people and agents into your app's state; Velt adds the step Liveblocks does not, every agent change on Nutrient is a suggestion your user approves or rejects, on the record.

Enterprise

Enterprise-grade security and data control

The controls your buyers' security reviews ask for, in writing.

Adding Velt to Nutrient does not move that surface's content off your stack. Per-feature data providers keep comment content, attachments, and user PII on your own infrastructure; Velt stores only minimal identifiers.

FAQ

Frequently asked questions

Comments and annotations, or co-editing?

Annotations on a read surface; comments and shared annotations both work on PDFs in Nutrient.

Do comments interop with Nutrient annotations?

Yes. The Velt adapter maps to Nutrient's annotation layer so the two coexist on the same document without conflict.

Do they work on mobile?

Yes. Velt's primitives follow Nutrient's mobile rendering, so threads anchor correctly on phone and tablet viewports.

Can an agent flag a region, for a human to approve?

Yes. An agent posts a comment or suggestion on the region as a first-class user, and a human approves or rejects before anything changes.

Is there an exportable record?

Yes. The audit trail captures every markup and approval and is exportable via API.

How is Velt priced?

On usage, not seats or integrations: you pay for documents with review activity in a month, with a free tier for development and early production.

Related

Explore other integrations

See all libraries

Comments and annotations, built for Nutrient

Free tier. No credit card.

First comment in 5 minutes.