From bd4e894f6f6f9ad75230e31a9618d9a6cf5d75ff Mon Sep 17 00:00:00 2001 From: ben Date: Tue, 30 Jun 2026 10:29:10 +0200 Subject: [PATCH 1/2] chore(react): pin @simplepdf/embed to an exact version (0.6.0) for controlled rollout --- .changeset/pin-embed-exact.md | 5 +++++ package-lock.json | 6 +++--- react/package.json | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 .changeset/pin-embed-exact.md diff --git a/.changeset/pin-embed-exact.md b/.changeset/pin-embed-exact.md new file mode 100644 index 0000000..8fd58f6 --- /dev/null +++ b/.changeset/pin-embed-exact.md @@ -0,0 +1,5 @@ +--- +"@simplepdf/react-embed-pdf": patch +--- + +Pin `@simplepdf/embed` to an exact version (`0.6.0`) instead of the `^0.6.0` caret. A published `@simplepdf/react-embed-pdf` now always installs the exact embed build it was tested against, giving us full control over the embed rollout: react ships a known embed version, and moving it is a deliberate release step rather than a caret range resolved at the consumer's install time. diff --git a/package-lock.json b/package-lock.json index 124b3b0..f028ec7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ }, "embed": { "name": "@simplepdf/embed", - "version": "0.5.0", + "version": "0.6.0", "license": "MIT", "devDependencies": { "@tanstack/ai": "^0.38.0", @@ -5698,10 +5698,10 @@ }, "react": { "name": "@simplepdf/react-embed-pdf", - "version": "1.11.0", + "version": "1.12.0", "license": "MIT", "dependencies": { - "@simplepdf/embed": "^0.5.0" + "@simplepdf/embed": "0.6.0" }, "devDependencies": { "@rollup/plugin-terser": "^0.4.4", diff --git a/react/package.json b/react/package.json index 02bff0e..5184097 100644 --- a/react/package.json +++ b/react/package.json @@ -49,7 +49,7 @@ "check:api": "node ../scripts/check-api.mjs ." }, "dependencies": { - "@simplepdf/embed": "^0.6.0" + "@simplepdf/embed": "0.6.0" }, "peerDependencies": { "@tanstack/ai": "^0.38.0", From 1beac12a9eb8020839eadfdee08ea142a229af68 Mon Sep 17 00:00:00 2001 From: ben Date: Tue, 30 Jun 2026 10:43:31 +0200 Subject: [PATCH 2/2] docs: Install before Quick start in the embed README (+ Subpaths anchor); reframe Copilot as a ready-to-fork demo of the editor's agentic capabilities in the root README --- README.md | 6 +++--- embed/README.md | 18 ++++++++++-------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index abd54f1..4cd4d11 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ https://github.com/SimplePDF/simplepdf-embed/assets/10613140/8924f018-6076-4e44- - ⚛️ [React component](./react/README.md) - `@simplepdf/react-embed-pdf` - 🧩 [Iframe bridge](./embed/README.md) - `@simplepdf/embed` (framework-free client to embed + programmatically drive the editor, with an AI SDK adapter) - 🚀 [Script tag](./web/README.md) - `@simplepdf/web-embed-pdf` -- 🤖 [SimplePDF Copilot](./copilot/README.md) - AI form-filling reference implementation +- 🤖 [SimplePDF Copilot](./copilot/README.md) - ready-to-fork demo of the editor's agentic capabilities # Features @@ -51,7 +51,7 @@ https://github.com/SimplePDF/simplepdf-embed/assets/10613140/8924f018-6076-4e44- - Page manipulation: add, remove, rotate, re-arrange - White-label and headless mode (Pro plan+) - Webhooks, API, bring-your-own-storage: S3, Azure Blob Storage, SharePoint -- AI [Copilot](./copilot/README.md) that fills forms step-by-step (opt-in) +- Agentic control: drive the editor from an LLM with client-side tool calling (Vercel AI SDK + TanStack AI) - Tiny footprint (~5KB gzipped) - the editor lazy-loads on user interaction # Built for healthcare and privacy-sensitive products @@ -62,7 +62,7 @@ PHI never leaves the browser unless you explicitly enable submissions. BAA avail # AI Copilot -AI that helps users fill PDF forms step by step, inside the SimplePDF editor. +A ready-to-fork demo that demonstrates the editor's agentic capabilities: an LLM drives the SimplePDF editor through client-side tool calling. Copilot is a turn-key, MIT-licensed reference implementation. Users answer in plain language; Copilot maps answers to the right fields, asks for what's missing, and the user reviews and signs. Fork it, wire up your AI provider, and ship it inside your product without writing the iframe bridge, tool plumbing, or streaming chat from scratch. diff --git a/embed/README.md b/embed/README.md index 44afa3c..1152855 100644 --- a/embed/README.md +++ b/embed/README.md @@ -4,6 +4,16 @@ Embed and programmatically drive the [SimplePDF](https://simplepdf.com) editor o > Using React? Use [`@simplepdf/react-embed-pdf`](../react): `` + `useEmbed` (+ the agentic `tools`), built on this core. +## Install + +```bash +npm install @simplepdf/embed +``` + +Zero runtime dependencies at the root. `zod` is an optional peer, needed by the `/schemas`, `/tools`, `/ai-sdk`, and `/tanstack-ai` subpaths. `/ai-sdk` produces values for the Vercel AI SDK without importing `ai` (bring your own); `/tanstack-ai` uses `@tanstack/ai`'s `toolDefinition` (also an optional peer, pulled only by that subpath). + +See [Subpaths](#subpaths) for more details. + ## Quick start `createEmbed` builds the editor iframe and appends it to a container you provide: @@ -62,14 +72,6 @@ import { createSimplePDFTools } from '@simplepdf/embed/tanstack-ai' useChat({ connection, tools: clientTools(...createSimplePDFTools({ embed })) }) ``` -## Install - -```bash -npm install @simplepdf/embed -``` - -Zero runtime dependencies at the root. `zod` is an optional peer, needed by the `/schemas`, `/tools`, `/ai-sdk`, and `/tanstack-ai` subpaths. `/ai-sdk` produces values for the Vercel AI SDK without importing `ai` (bring your own); `/tanstack-ai` uses `@tanstack/ai`'s `toolDefinition` (also an optional peer, pulled only by that subpath). - ## Subpaths | Import | Purpose | Peer |